Commit 88f00e9c authored by Eric Willigers's avatar Eric Willigers Committed by Commit Bot

Generalize Java's isPaymentFeaturePolicyEnabled to isFeatureEnabled

On Android, the Share Service now checks that the Web Share API
is enabled by feature policy.

Remaining work: crbug.com/1108163
Generate FeaturePolicyFeature enum from mojom


TBR=rouslan@chromium.org

Bug: 1079104
Change-Id: I9e9061e06f4cd39ebbc3ab33a8a1fc44e2ae366d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2306124Reviewed-by: default avatarEric Willigers <ericwilligers@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Auto-Submit: Eric Willigers <ericwilligers@chromium.org>
Commit-Queue: Bo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790830}
parent 2620354b
...@@ -17,6 +17,7 @@ import org.chromium.components.payments.OriginSecurityChecker; ...@@ -17,6 +17,7 @@ import org.chromium.components.payments.OriginSecurityChecker;
import org.chromium.components.payments.PaymentFeatureList; import org.chromium.components.payments.PaymentFeatureList;
import org.chromium.components.payments.SslValidityChecker; import org.chromium.components.payments.SslValidityChecker;
import org.chromium.components.user_prefs.UserPrefs; import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.content_public.browser.FeaturePolicyFeature;
import org.chromium.content_public.browser.RenderFrameHost; import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.WebContentsStatics; import org.chromium.content_public.browser.WebContentsStatics;
...@@ -168,7 +169,7 @@ public class PaymentRequestFactory implements InterfaceFactory<PaymentRequest> { ...@@ -168,7 +169,7 @@ public class PaymentRequestFactory implements InterfaceFactory<PaymentRequest> {
@Override @Override
public PaymentRequest createImpl() { public PaymentRequest createImpl() {
if (!mRenderFrameHost.isPaymentFeaturePolicyEnabled()) { if (!mRenderFrameHost.isFeatureEnabled(FeaturePolicyFeature.PAYMENT)) {
mRenderFrameHost.getRemoteInterfaces().onConnectionError( mRenderFrameHost.getRemoteInterfaces().onConnectionError(
new MojoException(MojoResult.PERMISSION_DENIED)); new MojoException(MojoResult.PERMISSION_DENIED));
return null; return null;
......
...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.ChromeActivity; ...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.share.ChromeShareExtras; import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.components.browser_ui.share.ShareParams; import org.chromium.components.browser_ui.share.ShareParams;
import org.chromium.components.browser_ui.webshare.ShareServiceImpl; import org.chromium.components.browser_ui.webshare.ShareServiceImpl;
import org.chromium.content_public.browser.FeaturePolicyFeature;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.services.service_manager.InterfaceFactory; import org.chromium.services.service_manager.InterfaceFactory;
import org.chromium.webshare.mojom.ShareService; import org.chromium.webshare.mojom.ShareService;
...@@ -27,7 +28,9 @@ public class ShareServiceImplementationFactory implements InterfaceFactory<Share ...@@ -27,7 +28,9 @@ public class ShareServiceImplementationFactory implements InterfaceFactory<Share
ShareServiceImpl.WebShareDelegate delegate = new ShareServiceImpl.WebShareDelegate() { ShareServiceImpl.WebShareDelegate delegate = new ShareServiceImpl.WebShareDelegate() {
@Override @Override
public boolean canShare() { public boolean canShare() {
return mWebContents.getTopLevelNativeWindow().getActivity() != null; return mWebContents.getTopLevelNativeWindow().getActivity() != null
&& mWebContents.getMainFrame().isFeatureEnabled(
FeaturePolicyFeature.WEB_SHARE);
} }
@Override @Override
......
...@@ -113,11 +113,12 @@ void RenderFrameHostAndroid::GetCanonicalUrlForSharing( ...@@ -113,11 +113,12 @@ void RenderFrameHostAndroid::GetCanonicalUrlForSharing(
base::android::ScopedJavaGlobalRef<jobject>(env, jcallback))); base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
} }
bool RenderFrameHostAndroid::IsPaymentFeaturePolicyEnabled( bool RenderFrameHostAndroid::IsFeatureEnabled(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>&) const { const base::android::JavaParamRef<jobject>&,
jint feature) const {
return render_frame_host_->IsFeatureEnabled( return render_frame_host_->IsFeatureEnabled(
blink::mojom::FeaturePolicyFeature::kPayment); static_cast<blink::mojom::FeaturePolicyFeature>(feature));
} }
ScopedJavaLocalRef<jobject> ScopedJavaLocalRef<jobject>
......
...@@ -50,9 +50,9 @@ class RenderFrameHostAndroid : public base::SupportsUserData::Data { ...@@ -50,9 +50,9 @@ class RenderFrameHostAndroid : public base::SupportsUserData::Data {
const base::android::JavaParamRef<jobject>&, const base::android::JavaParamRef<jobject>&,
const base::android::JavaParamRef<jobject>& jcallback) const; const base::android::JavaParamRef<jobject>& jcallback) const;
bool IsPaymentFeaturePolicyEnabled( bool IsFeatureEnabled(JNIEnv* env,
JNIEnv* env, const base::android::JavaParamRef<jobject>&,
const base::android::JavaParamRef<jobject>&) const; jint feature) const;
// Returns UnguessableToken. // Returns UnguessableToken.
base::android::ScopedJavaLocalRef<jobject> GetAndroidOverlayRoutingToken( base::android::ScopedJavaLocalRef<jobject> GetAndroidOverlayRoutingToken(
......
...@@ -274,6 +274,7 @@ android_library("content_java") { ...@@ -274,6 +274,7 @@ android_library("content_java") {
"java/src/org/chromium/content_public/browser/ContentFeatureList.java", "java/src/org/chromium/content_public/browser/ContentFeatureList.java",
"java/src/org/chromium/content_public/browser/ContentViewStatics.java", "java/src/org/chromium/content_public/browser/ContentViewStatics.java",
"java/src/org/chromium/content_public/browser/DeviceUtils.java", "java/src/org/chromium/content_public/browser/DeviceUtils.java",
"java/src/org/chromium/content_public/browser/FeaturePolicyFeature.java",
"java/src/org/chromium/content_public/browser/GestureListenerManager.java", "java/src/org/chromium/content_public/browser/GestureListenerManager.java",
"java/src/org/chromium/content_public/browser/GestureStateListener.java", "java/src/org/chromium/content_public/browser/GestureStateListener.java",
"java/src/org/chromium/content_public/browser/GestureStateListenerWithScroll.java", "java/src/org/chromium/content_public/browser/GestureStateListenerWithScroll.java",
......
...@@ -10,6 +10,7 @@ import org.chromium.base.annotations.CalledByNative; ...@@ -10,6 +10,7 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.blink.mojom.AuthenticatorStatus; import org.chromium.blink.mojom.AuthenticatorStatus;
import org.chromium.content_public.browser.FeaturePolicyFeature;
import org.chromium.content_public.browser.RenderFrameHost; import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.mojo.system.impl.CoreImpl; import org.chromium.mojo.system.impl.CoreImpl;
import org.chromium.services.service_manager.InterfaceProvider; import org.chromium.services.service_manager.InterfaceProvider;
...@@ -97,10 +98,10 @@ public class RenderFrameHostImpl implements RenderFrameHost { ...@@ -97,10 +98,10 @@ public class RenderFrameHostImpl implements RenderFrameHost {
} }
@Override @Override
public boolean isPaymentFeaturePolicyEnabled() { public boolean isFeatureEnabled(@FeaturePolicyFeature int feature) {
return mNativeRenderFrameHostAndroid != 0 return mNativeRenderFrameHostAndroid != 0
&& RenderFrameHostImplJni.get().isPaymentFeaturePolicyEnabled( && RenderFrameHostImplJni.get().isFeatureEnabled(
mNativeRenderFrameHostAndroid, RenderFrameHostImpl.this); mNativeRenderFrameHostAndroid, RenderFrameHostImpl.this, feature);
} }
@Override @Override
...@@ -171,8 +172,8 @@ public class RenderFrameHostImpl implements RenderFrameHost { ...@@ -171,8 +172,8 @@ public class RenderFrameHostImpl implements RenderFrameHost {
long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller); long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
void getCanonicalUrlForSharing(long nativeRenderFrameHostAndroid, void getCanonicalUrlForSharing(long nativeRenderFrameHostAndroid,
RenderFrameHostImpl caller, Callback<String> callback); RenderFrameHostImpl caller, Callback<String> callback);
boolean isPaymentFeaturePolicyEnabled( boolean isFeatureEnabled(long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller,
long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller); @FeaturePolicyFeature int feature);
UnguessableToken getAndroidOverlayRoutingToken( UnguessableToken getAndroidOverlayRoutingToken(
long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller); long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
void notifyUserActivation(long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller); void notifyUserActivation(long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content_public.browser;
import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
// TODO(crbug.com/1108163): This file should be generated with all feature policy enum values.
@IntDef({FeaturePolicyFeature.PAYMENT, FeaturePolicyFeature.WEB_SHARE})
@Retention(RetentionPolicy.SOURCE)
public @interface FeaturePolicyFeature {
int PAYMENT = org.chromium.blink.mojom.FeaturePolicyFeature.PAYMENT;
int WEB_SHARE = org.chromium.blink.mojom.FeaturePolicyFeature.WEB_SHARE;
}
...@@ -36,14 +36,13 @@ public interface RenderFrameHost { ...@@ -36,14 +36,13 @@ public interface RenderFrameHost {
void getCanonicalUrlForSharing(Callback<String> callback); void getCanonicalUrlForSharing(Callback<String> callback);
/** /**
* Returns whether the feature policy allows the "payment" feature in this frame. * Returns whether the feature policy allows the feature in this frame.
* *
* TODO(rouslan): Expose the full set of feature policy enum values to Java. See: * @param feature A feature controlled by feature policy.
* https://crbug.com/1027176
* *
* @return Whether the feature policy allows the "payment" feature in this frame. * @return Whether the feature policy allows the feature in this frame.
*/ */
boolean isPaymentFeaturePolicyEnabled(); boolean isFeatureEnabled(@FeaturePolicyFeature int feature);
/** /**
* Returns an InterfaceProvider that provides access to interface implementations provided by * Returns an InterfaceProvider that provides access to interface implementations provided by
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.content_public.browser.test.mock; package org.chromium.content_public.browser.test.mock;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.content_public.browser.FeaturePolicyFeature;
import org.chromium.content_public.browser.RenderFrameHost; import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.services.service_manager.InterfaceProvider; import org.chromium.services.service_manager.InterfaceProvider;
import org.chromium.url.Origin; import org.chromium.url.Origin;
...@@ -27,7 +28,7 @@ public class MockRenderFrameHost implements RenderFrameHost { ...@@ -27,7 +28,7 @@ public class MockRenderFrameHost implements RenderFrameHost {
public void getCanonicalUrlForSharing(Callback<String> callback) {} public void getCanonicalUrlForSharing(Callback<String> callback) {}
@Override @Override
public boolean isPaymentFeaturePolicyEnabled() { public boolean isFeatureEnabled(@FeaturePolicyFeature int feature) {
return false; return false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment