Skip to content

Commit

Permalink
binder: Promote out of experimental status (#9669)
Browse files Browse the repository at this point in the history
  • Loading branch information
cbianchi-7 authored Nov 30, 2022
1 parent a5f458a commit d6aa0ea
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import io.grpc.ExperimentalApi;
import java.net.SocketAddress;

/**
Expand All @@ -41,8 +40,7 @@
* fields, namely, an action of {@link ApiConstants#ACTION_BIND}, an empty category set and null
* type and data URI.
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public class AndroidComponentAddress extends SocketAddress { // NOTE: Only temporarily non-final.
public final class AndroidComponentAddress extends SocketAddress {
private static final long serialVersionUID = 0L;

private final Intent bindIntent; // An "explicit" Intent. In other words, getComponent() != null.
Expand Down Expand Up @@ -103,6 +101,10 @@ public static AndroidComponentAddress forComponent(ComponentName component) {
new Intent(ApiConstants.ACTION_BIND).setComponent(component));
}

/**
* Returns the Authority which is the package name of the target app.
* See {@link android.content.ComponentName}.
*/
public String getAuthority() {
return getComponent().getPackageName();
}
Expand Down
34 changes: 34 additions & 0 deletions binder/src/main/java/io/grpc/binder/BinderInternal.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright 2022 The gRPC Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.grpc.binder;

import android.os.IBinder;
import io.grpc.Internal;

/**
* Helper class to expose IBinderReceiver methods for legacy internal builders.
*/
@Internal
public class BinderInternal {

/**
* Set the receiver's {@link IBinder} using {@link IBinderReceiver#set(IBinder)}.
*/
static void setIBinder(IBinderReceiver receiver, IBinder binder) {
receiver.set(binder);
}
}
16 changes: 7 additions & 9 deletions binder/src/main/java/io/grpc/binder/BinderServerBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
import android.os.IBinder;
import com.google.common.base.Supplier;
import com.google.errorprone.annotations.DoNotCall;
import io.grpc.CompressorRegistry;
import io.grpc.DecompressorRegistry;
import io.grpc.ExperimentalApi;
import io.grpc.Server;
import io.grpc.ServerBuilder;
Expand All @@ -48,7 +46,6 @@
/**
* Builder for a server that services requests from an Android Service.
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public final class BinderServerBuilder
extends ForwardingServerBuilder<BinderServerBuilder> {

Expand Down Expand Up @@ -96,15 +93,10 @@ private BinderServerBuilder(
streamTracerFactories,
securityPolicy,
inboundParcelablePolicy);
binderReceiver.set(server.getHostBinder());
BinderInternal.setIBinder(binderReceiver, server.getHostBinder());
return server;
});

// Disable compression by default, since there's little benefit when all communication is
// on-device, and it means sending supported-encoding headers with every call.
decompressorRegistry(DecompressorRegistry.emptyInstance());
compressorRegistry(CompressorRegistry.newEmptyInstance());

// Disable stats and tracing by default.
serverImplBuilder.setStatsEnabled(false);
serverImplBuilder.setTracingEnabled(false);
Expand All @@ -116,12 +108,14 @@ protected ServerBuilder<?> delegate() {
}

/** Enable stats collection using census. */
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public BinderServerBuilder enableStats() {
serverImplBuilder.setStatsEnabled(true);
return this;
}

/** Enable tracing using census. */
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public BinderServerBuilder enableTracing() {
serverImplBuilder.setTracingEnabled(true);
return this;
Expand Down Expand Up @@ -156,12 +150,16 @@ public BinderServerBuilder securityPolicy(ServerSecurityPolicy securityPolicy) {
}

/** Sets the policy for inbound parcelable objects. */
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public BinderServerBuilder inboundParcelablePolicy(
InboundParcelablePolicy inboundParcelablePolicy) {
this.inboundParcelablePolicy = checkNotNull(inboundParcelablePolicy, "inboundParcelablePolicy");
return this;
}

/**
* Always fails. TLS is not supported in BinderServer.
*/
@Override
public BinderServerBuilder useTransportSecurity(File certChain, File privateKey) {
throw new UnsupportedOperationException("TLS not supported in BinderServer");
Expand Down
8 changes: 3 additions & 5 deletions binder/src/main/java/io/grpc/binder/IBinderReceiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,22 @@
package io.grpc.binder;

import android.os.IBinder;
import io.grpc.ExperimentalApi;
import javax.annotation.Nullable;

/** A container for at most one instance of {@link IBinder}, useful as an "out parameter". */
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public final class IBinderReceiver {
@Nullable private IBinder value;
@Nullable private volatile IBinder value;

/** Constructs a new, initially empty, container. */
public IBinderReceiver() {}

/** Returns the contents of this container or null if it is empty. */
@Nullable
public synchronized IBinder get() {
public IBinder get() {
return value;
}

public synchronized void set(IBinder value) {
protected void set(IBinder value) {
this.value = value;
}
}
2 changes: 0 additions & 2 deletions binder/src/main/java/io/grpc/binder/ParcelableUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package io.grpc.binder;

import android.os.Parcelable;
import io.grpc.ExperimentalApi;
import io.grpc.Metadata;
import io.grpc.binder.internal.MetadataHelper;

Expand All @@ -26,7 +25,6 @@
*
* <p>This class models the same pattern as the {@code ProtoLiteUtils} class.
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public final class ParcelableUtils {

private ParcelableUtils() {}
Expand Down
9 changes: 8 additions & 1 deletion binder/src/main/java/io/grpc/binder/SecurityPolicies.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,21 @@

/** Static factory methods for creating standard security policies. */
@CheckReturnValue
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public final class SecurityPolicies {

private static final int MY_UID = Process.myUid();
private static final int SHA_256_BYTES_LENGTH = 32;

private SecurityPolicies() {}

@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public static ServerSecurityPolicy serverInternalOnly() {
return new ServerSecurityPolicy();
}

/**
* Creates a default {@link SecurityPolicy} that checks authorization based on UID.
*/
public static SecurityPolicy internalOnly() {
return new SecurityPolicy() {
@Override
Expand All @@ -66,6 +69,7 @@ public Status checkAuthorization(int uid) {
};
}

@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public static SecurityPolicy permissionDenied(String description) {
Status denied = Status.PERMISSION_DENIED.withDescription(description);
return new SecurityPolicy() {
Expand All @@ -84,6 +88,7 @@ public Status checkAuthorization(int uid) {
* @param requiredSignature the allowed signature of the allowed package.
* @throws NullPointerException if any of the inputs are {@code null}.
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public static SecurityPolicy hasSignature(
PackageManager packageManager, String packageName, Signature requiredSignature) {
return oneOfSignatures(
Expand All @@ -99,6 +104,7 @@ public static SecurityPolicy hasSignature(
* @throws NullPointerException if any of the inputs are {@code null}.
* @throws IllegalArgumentException if {@code requiredSignatureSha256Hash} is not of length 32.
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public static SecurityPolicy hasSignatureSha256Hash(
PackageManager packageManager, String packageName, byte[] requiredSignatureSha256Hash) {
return oneOfSignatureSha256Hash(
Expand All @@ -114,6 +120,7 @@ public static SecurityPolicy hasSignatureSha256Hash(
* @throws NullPointerException if any of the inputs are {@code null}.
* @throws IllegalArgumentException if {@code requiredSignatures} is empty.
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public static SecurityPolicy oneOfSignatures(
PackageManager packageManager,
String packageName,
Expand Down
2 changes: 0 additions & 2 deletions binder/src/main/java/io/grpc/binder/SecurityPolicy.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package io.grpc.binder;

import io.grpc.ExperimentalApi;
import io.grpc.Status;
import javax.annotation.CheckReturnValue;

Expand All @@ -37,7 +36,6 @@
* re-installation of the applications involved.
*/
@CheckReturnValue
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public abstract class SecurityPolicy {

protected SecurityPolicy() {}
Expand Down
2 changes: 0 additions & 2 deletions binder/src/main/java/io/grpc/binder/ServerSecurityPolicy.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package io.grpc.binder;

import com.google.common.collect.ImmutableMap;
import io.grpc.ExperimentalApi;
import io.grpc.Status;
import java.util.HashMap;
import java.util.Map;
Expand All @@ -28,7 +27,6 @@
*
* Contains a default policy, and optional policies for each server.
*/
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/8022")
public final class ServerSecurityPolicy {

private final SecurityPolicy defaultPolicy;
Expand Down

0 comments on commit d6aa0ea

Please sign in to comment.