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;
import org.chromium.components.payments.PaymentFeatureList;
import org.chromium.components.payments.SslValidityChecker;
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.WebContents;
import org.chromium.content_public.browser.WebContentsStatics;
......@@ -168,7 +169,7 @@ public class PaymentRequestFactory implements InterfaceFactory<PaymentRequest> {
@Override
public PaymentRequest createImpl() {
if (!mRenderFrameHost.isPaymentFeaturePolicyEnabled()) {
if (!mRenderFrameHost.isFeatureEnabled(FeaturePolicyFeature.PAYMENT)) {
mRenderFrameHost.getRemoteInterfaces().onConnectionError(
new MojoException(MojoResult.PERMISSION_DENIED));
return null;
......
......@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.components.browser_ui.share.ShareParams;
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.services.service_manager.InterfaceFactory;
import org.chromium.webshare.mojom.ShareService;
......@@ -27,7 +28,9 @@ public class ShareServiceImplementationFactory implements InterfaceFactory<Share
ShareServiceImpl.WebShareDelegate delegate = new ShareServiceImpl.WebShareDelegate() {
@Override
public boolean canShare() {
return mWebContents.getTopLevelNativeWindow().getActivity() != null;
return mWebContents.getTopLevelNativeWindow().getActivity() != null
&& mWebContents.getMainFrame().isFeatureEnabled(
FeaturePolicyFeature.WEB_SHARE);
}
@Override
......
......@@ -113,11 +113,12 @@ void RenderFrameHostAndroid::GetCanonicalUrlForSharing(
base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
}
bool RenderFrameHostAndroid::IsPaymentFeaturePolicyEnabled(
bool RenderFrameHostAndroid::IsFeatureEnabled(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&) const {
const base::android::JavaParamRef<jobject>&,
jint feature) const {
return render_frame_host_->IsFeatureEnabled(
blink::mojom::FeaturePolicyFeature::kPayment);
static_cast<blink::mojom::FeaturePolicyFeature>(feature));
}
ScopedJavaLocalRef<jobject>
......
......@@ -50,9 +50,9 @@ class RenderFrameHostAndroid : public base::SupportsUserData::Data {
const base::android::JavaParamRef<jobject>&,
const base::android::JavaParamRef<jobject>& jcallback) const;
bool IsPaymentFeaturePolicyEnabled(
JNIEnv* env,
const base::android::JavaParamRef<jobject>&) const;
bool IsFeatureEnabled(JNIEnv* env,
const base::android::JavaParamRef<jobject>&,
jint feature) const;
// Returns UnguessableToken.
base::android::ScopedJavaLocalRef<jobject> GetAndroidOverlayRoutingToken(
......
......@@ -274,6 +274,7 @@ android_library("content_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/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/GestureStateListener.java",
"java/src/org/chromium/content_public/browser/GestureStateListenerWithScroll.java",
......
......@@ -10,6 +10,7 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.blink.mojom.AuthenticatorStatus;
import org.chromium.content_public.browser.FeaturePolicyFeature;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.mojo.system.impl.CoreImpl;
import org.chromium.services.service_manager.InterfaceProvider;
......@@ -97,10 +98,10 @@ public class RenderFrameHostImpl implements RenderFrameHost {
}
@Override
public boolean isPaymentFeaturePolicyEnabled() {
public boolean isFeatureEnabled(@FeaturePolicyFeature int feature) {
return mNativeRenderFrameHostAndroid != 0
&& RenderFrameHostImplJni.get().isPaymentFeaturePolicyEnabled(
mNativeRenderFrameHostAndroid, RenderFrameHostImpl.this);
&& RenderFrameHostImplJni.get().isFeatureEnabled(
mNativeRenderFrameHostAndroid, RenderFrameHostImpl.this, feature);
}
@Override
......@@ -171,8 +172,8 @@ public class RenderFrameHostImpl implements RenderFrameHost {
long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
void getCanonicalUrlForSharing(long nativeRenderFrameHostAndroid,
RenderFrameHostImpl caller, Callback<String> callback);
boolean isPaymentFeaturePolicyEnabled(
long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
boolean isFeatureEnabled(long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller,
@FeaturePolicyFeature int feature);
UnguessableToken getAndroidOverlayRoutingToken(
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 {
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:
* https://crbug.com/1027176
* @param feature A feature controlled by feature policy.
*
* @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
......
......@@ -5,6 +5,7 @@
package org.chromium.content_public.browser.test.mock;
import org.chromium.base.Callback;
import org.chromium.content_public.browser.FeaturePolicyFeature;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.services.service_manager.InterfaceProvider;
import org.chromium.url.Origin;
......@@ -27,7 +28,7 @@ public class MockRenderFrameHost implements RenderFrameHost {
public void getCanonicalUrlForSharing(Callback<String> callback) {}
@Override
public boolean isPaymentFeaturePolicyEnabled() {
public boolean isFeatureEnabled(@FeaturePolicyFeature int feature) {
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