Commit 19190cbf authored by Nate Fischer's avatar Nate Fischer Committed by Commit Bot

AW: move Safe Browsing java code into subfolder

No change to logic. This moves WebView's Safe Browsing java code into a
subfolder, and links the OWNERS file against
//aw/browser/safe_browsing/OWNERS (which has the same ownership as the
Java files do currently).

This adds a temporary adapter version of AwSafeBrowsingConfigHelper,
in order to keep the downstream targets building.

Bug: 934597
Test: ninja -C out/Default system_webview_google_apk
Change-Id: I81c1ca498a7d6c2d76256b46e734f2cbf8d95b25
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1845882Reviewed-by: default avatarChangwan Ryu <changwan@chromium.org>
Commit-Queue: Nate Fischer <ntfschr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703809}
parent c63254f6
......@@ -545,8 +545,6 @@ android_library("browser_java") {
"java/src/org/chromium/android_webview/AwRenderProcess.java",
"java/src/org/chromium/android_webview/AwRenderProcessGoneDetail.java",
"java/src/org/chromium/android_webview/AwSafeBrowsingConfigHelper.java",
"java/src/org/chromium/android_webview/AwSafeBrowsingConversionHelper.java",
"java/src/org/chromium/android_webview/AwSafeBrowsingResponse.java",
"java/src/org/chromium/android_webview/AwScrollOffsetManager.java",
"java/src/org/chromium/android_webview/AwServiceWorkerClient.java",
"java/src/org/chromium/android_webview/AwServiceWorkerController.java",
......@@ -594,6 +592,9 @@ android_library("browser_java") {
"java/src/org/chromium/android_webview/gfx/JavaBrowserViewRendererHelper.java",
"java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java",
"java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java",
"java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConfigHelper.java",
"java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConversionHelper.java",
"java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingResponse.java",
"java/src/org/chromium/android_webview/permission/AwGeolocationCallback.java",
"java/src/org/chromium/android_webview/permission/AwPermissionRequest.java",
"java/src/org/chromium/android_webview/policy/AwPolicyProvider.java",
......
......@@ -10,7 +10,7 @@ import android.webkit.WebView;
import android.webkit.WebViewClient;
import org.chromium.android_webview.AwContentsClient.AwWebResourceRequest;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.base.annotations.VerifiesOnOMR1;
......
......@@ -9,8 +9,8 @@ import android.annotation.TargetApi;
import android.os.Build;
import android.webkit.SafeBrowsingResponse;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.SafeBrowsingAction;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
/**
......
......@@ -17,9 +17,9 @@ import com.android.webview.chromium.WebViewDelegateFactory.WebViewDelegate;
import org.chromium.android_webview.AwContentsClient;
import org.chromium.android_webview.AwHistogramRecorder;
import org.chromium.android_webview.AwRenderProcess;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.AwWebResourceResponse;
import org.chromium.android_webview.SafeBrowsingAction;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.base.TraceEvent;
......
......@@ -14,9 +14,9 @@ import android.webkit.WebView;
import org.chromium.android_webview.AwContentsClient.AwWebResourceError;
import org.chromium.android_webview.AwContentsClient.AwWebResourceRequest;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.AwServiceWorkerSettings;
import org.chromium.android_webview.AwSettings;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.content_public.browser.MessagePort;
......
......@@ -19,6 +19,7 @@ import org.chromium.android_webview.common.PlatformServiceBridge;
import org.chromium.android_webview.common.ServiceNames;
import org.chromium.android_webview.metrics.AwMetricsServiceClient;
import org.chromium.android_webview.policy.AwPolicyProvider;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
import org.chromium.android_webview.services.ICrashReceiverService;
import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils;
......
......@@ -23,6 +23,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.chromium.android_webview.permission.AwPermissionRequest;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.base.metrics.RecordHistogram;
......
......@@ -10,6 +10,8 @@ import android.net.http.SslError;
import android.os.Handler;
import android.util.Log;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConversionHelper;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.CalledByNativeUnchecked;
......
......@@ -10,6 +10,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.base.VisibleForTesting;
......
// Copyright 2017 The Chromium Authors. All rights reserved.
// Copyright 2019 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.android_webview;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import org.chromium.android_webview.common.PlatformServiceBridge;
import org.chromium.base.Callback;
import org.chromium.base.CommandLine;
import org.chromium.base.Log;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.ScopedSysTraceEvent;
/**
* Helper class for getting the configuration settings related to safebrowsing in WebView.
* Temporary adapter while downstream depends on this package name.
*/
@JNINamespace("android_webview")
public class AwSafeBrowsingConfigHelper {
private static final String TAG = "AwSafeBrowsingConfi-";
private static final String OPT_IN_META_DATA_STR = "android.webkit.WebView.EnableSafeBrowsing";
private static final boolean DEFAULT_USER_OPT_IN = false;
private static volatile Boolean sSafeBrowsingUserOptIn;
private static volatile boolean sEnabledByManifest;
// Used to record the UMA histogram SafeBrowsing.WebView.AppOptIn. Since these values are
// persisted to logs, they should never be renumbered nor reused.
@IntDef({AppOptIn.NO_PREFERENCE, AppOptIn.OPT_IN, AppOptIn.OPT_OUT})
@interface AppOptIn {
int NO_PREFERENCE = 0;
int OPT_IN = 1;
int OPT_OUT = 2;
int COUNT = 3;
}
// Used to record the UMA histogram SafeBrowsing.WebView.UserOptIn. Since these values are
// persisted to logs, they should never be renumbered nor reused.
@IntDef({UserOptIn.UNABLE_TO_DETERMINE, UserOptIn.OPT_IN, UserOptIn.OPT_OUT})
@interface UserOptIn {
int OPT_OUT = 0;
int OPT_IN = 1;
int UNABLE_TO_DETERMINE = 2;
int COUNT = 3;
}
private static void recordAppOptIn(@AppOptIn int value) {
RecordHistogram.recordEnumeratedHistogram(
"SafeBrowsing.WebView.AppOptIn", value, AppOptIn.COUNT);
}
private static void recordUserOptIn(@UserOptIn int value) {
RecordHistogram.recordEnumeratedHistogram(
"SafeBrowsing.WebView.UserOptIn", value, UserOptIn.COUNT);
}
public static void setSafeBrowsingEnabledByManifest(boolean enabled) {
sEnabledByManifest = enabled;
}
public static boolean getSafeBrowsingEnabledByManifest() {
return sEnabledByManifest;
}
// Should only be called once during startup. Calling this multiple times will skew UMA metrics.
public static void maybeEnableSafeBrowsingFromManifest(final Context appContext) {
try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
"AwSafeBrowsingConfigHelper.maybeEnableSafeBrowsingFromManifest")) {
Boolean appOptIn = getAppOptInPreference(appContext);
if (appOptIn == null) {
recordAppOptIn(AppOptIn.NO_PREFERENCE);
} else if (appOptIn) {
recordAppOptIn(AppOptIn.OPT_IN);
} else {
recordAppOptIn(AppOptIn.OPT_OUT);
}
// If the app specifies something, fallback to the app's preference, otherwise check for
// the existence of the CLI switch.
setSafeBrowsingEnabledByManifest(
appOptIn == null ? !isDisabledByCommandLine() : appOptIn);
Callback<Boolean> cb = verifyAppsValue -> {
setSafeBrowsingUserOptIn(
verifyAppsValue == null ? DEFAULT_USER_OPT_IN : verifyAppsValue);
if (verifyAppsValue == null) {
recordUserOptIn(UserOptIn.UNABLE_TO_DETERMINE);
} else if (verifyAppsValue) {
recordUserOptIn(UserOptIn.OPT_IN);
} else {
recordUserOptIn(UserOptIn.OPT_OUT);
}
};
PlatformServiceBridge.getInstance().querySafeBrowsingUserConsent(cb);
}
}
private static boolean isDisabledByCommandLine() {
try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
"AwSafeBrowsingConfigHelper.isDisabledByCommandLine")) {
CommandLine cli = CommandLine.getInstance();
// Disable flag has higher precedence than the default
return cli.hasSwitch(AwSwitches.WEBVIEW_DISABLE_SAFEBROWSING_SUPPORT);
}
}
/**
* Checks the application manifest for Safe Browsing opt-in preference.
*
* @param appContext application context.
* @return true if app has opted in, false if opted out, and null if no preference specified.
*/
@Nullable
private static Boolean getAppOptInPreference(Context appContext) {
try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
"AwSafeBrowsingConfigHelper.getAppOptInPreference")) {
ApplicationInfo info = appContext.getPackageManager().getApplicationInfo(
appContext.getPackageName(), PackageManager.GET_META_DATA);
if (info.metaData == null) {
// No <meta-data> tag was found.
return null;
}
return info.metaData.containsKey(OPT_IN_META_DATA_STR)
? info.metaData.getBoolean(OPT_IN_META_DATA_STR)
: null;
} catch (PackageManager.NameNotFoundException e) {
// This should never happen.
Log.e(TAG, "App could not find itself by package name!");
return false;
}
}
// Can be called from any thread. This returns true or false, depending on user opt-in
// preference. This returns null if we don't know yet what the user's preference is.
// Deprecated: remove this once downstream no longer depends on AwSafeBrowsingConfigHelper in
// this package name.
public static Boolean getSafeBrowsingUserOptIn() {
return sSafeBrowsingUserOptIn;
}
public static void setSafeBrowsingUserOptIn(boolean optin) {
sSafeBrowsingUserOptIn = optin;
return org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper
.getSafeBrowsingUserOptIn();
}
// Not meant to be instantiated.
......
......@@ -6,6 +6,8 @@ package org.chromium.android_webview;
import android.content.Context;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
/**
* Manages clients and settings for Service Workers.
*/
......
......@@ -17,6 +17,7 @@ import android.webkit.WebSettings;
import androidx.annotation.IntDef;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
import org.chromium.android_webview.settings.ForceDarkBehavior;
import org.chromium.android_webview.settings.ForceDarkMode;
import org.chromium.base.ContextUtils;
......
per-file AwSafeBrowsing*.java=ntfschr@chromium.org
// Copyright 2017 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.android_webview.safe_browsing;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
import org.chromium.android_webview.AwSwitches;
import org.chromium.android_webview.common.PlatformServiceBridge;
import org.chromium.base.Callback;
import org.chromium.base.CommandLine;
import org.chromium.base.Log;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.ScopedSysTraceEvent;
/**
* Helper class for getting the configuration settings related to safebrowsing in WebView.
*/
@JNINamespace("android_webview")
public class AwSafeBrowsingConfigHelper {
private static final String TAG = "AwSafeBrowsingConfi-";
private static final String OPT_IN_META_DATA_STR = "android.webkit.WebView.EnableSafeBrowsing";
private static final boolean DEFAULT_USER_OPT_IN = false;
private static volatile Boolean sSafeBrowsingUserOptIn;
private static volatile boolean sEnabledByManifest;
// Used to record the UMA histogram SafeBrowsing.WebView.AppOptIn. Since these values are
// persisted to logs, they should never be renumbered nor reused.
@IntDef({AppOptIn.NO_PREFERENCE, AppOptIn.OPT_IN, AppOptIn.OPT_OUT})
@interface AppOptIn {
int NO_PREFERENCE = 0;
int OPT_IN = 1;
int OPT_OUT = 2;
int COUNT = 3;
}
// Used to record the UMA histogram SafeBrowsing.WebView.UserOptIn. Since these values are
// persisted to logs, they should never be renumbered nor reused.
@IntDef({UserOptIn.UNABLE_TO_DETERMINE, UserOptIn.OPT_IN, UserOptIn.OPT_OUT})
@interface UserOptIn {
int OPT_OUT = 0;
int OPT_IN = 1;
int UNABLE_TO_DETERMINE = 2;
int COUNT = 3;
}
private static void recordAppOptIn(@AppOptIn int value) {
RecordHistogram.recordEnumeratedHistogram(
"SafeBrowsing.WebView.AppOptIn", value, AppOptIn.COUNT);
}
private static void recordUserOptIn(@UserOptIn int value) {
RecordHistogram.recordEnumeratedHistogram(
"SafeBrowsing.WebView.UserOptIn", value, UserOptIn.COUNT);
}
public static void setSafeBrowsingEnabledByManifest(boolean enabled) {
sEnabledByManifest = enabled;
}
public static boolean getSafeBrowsingEnabledByManifest() {
return sEnabledByManifest;
}
// Should only be called once during startup. Calling this multiple times will skew UMA metrics.
public static void maybeEnableSafeBrowsingFromManifest(final Context appContext) {
try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
"AwSafeBrowsingConfigHelper.maybeEnableSafeBrowsingFromManifest")) {
Boolean appOptIn = getAppOptInPreference(appContext);
if (appOptIn == null) {
recordAppOptIn(AppOptIn.NO_PREFERENCE);
} else if (appOptIn) {
recordAppOptIn(AppOptIn.OPT_IN);
} else {
recordAppOptIn(AppOptIn.OPT_OUT);
}
// If the app specifies something, fallback to the app's preference, otherwise check for
// the existence of the CLI switch.
setSafeBrowsingEnabledByManifest(
appOptIn == null ? !isDisabledByCommandLine() : appOptIn);
Callback<Boolean> cb = verifyAppsValue -> {
setSafeBrowsingUserOptIn(
verifyAppsValue == null ? DEFAULT_USER_OPT_IN : verifyAppsValue);
if (verifyAppsValue == null) {
recordUserOptIn(UserOptIn.UNABLE_TO_DETERMINE);
} else if (verifyAppsValue) {
recordUserOptIn(UserOptIn.OPT_IN);
} else {
recordUserOptIn(UserOptIn.OPT_OUT);
}
};
PlatformServiceBridge.getInstance().querySafeBrowsingUserConsent(cb);
}
}
private static boolean isDisabledByCommandLine() {
try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
"AwSafeBrowsingConfigHelper.isDisabledByCommandLine")) {
CommandLine cli = CommandLine.getInstance();
// Disable flag has higher precedence than the default
return cli.hasSwitch(AwSwitches.WEBVIEW_DISABLE_SAFEBROWSING_SUPPORT);
}
}
/**
* Checks the application manifest for Safe Browsing opt-in preference.
*
* @param appContext application context.
* @return true if app has opted in, false if opted out, and null if no preference specified.
*/
@Nullable
private static Boolean getAppOptInPreference(Context appContext) {
try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
"AwSafeBrowsingConfigHelper.getAppOptInPreference")) {
ApplicationInfo info = appContext.getPackageManager().getApplicationInfo(
appContext.getPackageName(), PackageManager.GET_META_DATA);
if (info.metaData == null) {
// No <meta-data> tag was found.
return null;
}
return info.metaData.containsKey(OPT_IN_META_DATA_STR)
? info.metaData.getBoolean(OPT_IN_META_DATA_STR)
: null;
} catch (PackageManager.NameNotFoundException e) {
// This should never happen.
Log.e(TAG, "App could not find itself by package name!");
return false;
}
}
// Can be called from any thread. This returns true or false, depending on user opt-in
// preference. This returns null if we don't know yet what the user's preference is.
public static Boolean getSafeBrowsingUserOptIn() {
return sSafeBrowsingUserOptIn;
}
public static void setSafeBrowsingUserOptIn(boolean optin) {
sSafeBrowsingUserOptIn = optin;
}
// Not meant to be instantiated.
private AwSafeBrowsingConfigHelper() {}
}
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.android_webview;
package org.chromium.android_webview.safe_browsing;
import android.webkit.WebViewClient;
......
......@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.android_webview;
package org.chromium.android_webview.safe_browsing;
/**
* Container to hold the application's response to WebViewClient#onSafeBrowsingHit().
......
file://android_webview/browser/safe_browsing/OWNERS
......@@ -30,14 +30,14 @@ import org.chromium.android_webview.AwContents.InternalAccessDelegate;
import org.chromium.android_webview.AwContents.NativeDrawFunctorFactory;
import org.chromium.android_webview.AwContentsClient;
import org.chromium.android_webview.AwContentsStatics;
import org.chromium.android_webview.AwSafeBrowsingConfigHelper;
import org.chromium.android_webview.AwSafeBrowsingConversionHelper;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.AwSettings;
import org.chromium.android_webview.AwSwitches;
import org.chromium.android_webview.AwWebContentsObserver;
import org.chromium.android_webview.ErrorCodeConversionHelper;
import org.chromium.android_webview.SafeBrowsingAction;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConversionHelper;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.android_webview.test.TestAwContentsClient.OnReceivedError2Helper;
import org.chromium.android_webview.test.util.GraphicsTestUtils;
import org.chromium.base.BuildInfo;
......
......@@ -4,8 +4,8 @@
package org.chromium.support_lib_callback_glue;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.SafeBrowsingAction;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.support_lib_boundary.SafeBrowsingResponseBoundaryInterface;
......
......@@ -12,7 +12,7 @@ import android.webkit.WebViewClient;
import androidx.annotation.Nullable;
import org.chromium.android_webview.AwContentsClient.AwWebResourceError;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.ScopedSysTraceEvent;
......
......@@ -20,12 +20,12 @@ import org.chromium.android_webview.AwGeolocationPermissions;
import org.chromium.android_webview.AwHttpAuthHandler;
import org.chromium.android_webview.AwRenderProcess;
import org.chromium.android_webview.AwRenderProcessGoneDetail;
import org.chromium.android_webview.AwSafeBrowsingResponse;
import org.chromium.android_webview.AwWebResourceResponse;
import org.chromium.android_webview.JsPromptResultReceiver;
import org.chromium.android_webview.JsResultReceiver;
import org.chromium.android_webview.SafeBrowsingAction;
import org.chromium.android_webview.permission.AwPermissionRequest;
import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
import org.chromium.base.Callback;
import org.chromium.base.ThreadUtils;
......
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