From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 24 Jan 2020 19:17:22 +0100 Subject: Disable smart selection by default Allow web search in incognito mode (reverts commit 48d4ae54f7565c429bf29cd63806aee5d7e93e69) Partial revert of da1d809c003749846cb4ade8c11b6d038e44416b to restore the ChromeSmartSelection feature flag. Notice that re-enabling smart selection would make incognito mode potentially leak information through the TextClassifier set by OEM, if any --- .../contextualsearch/SelectionClientManager.java | 4 +++- .../browser/flags/android/chrome_feature_list.cc | 4 ++++ .../browser/flags/android/chrome_feature_list.h | 1 + .../chrome/browser/flags/ChromeFeatureList.java | 1 + .../selection/SelectionPopupControllerImpl.java | 2 +- testing/variations/fieldtrial_testing_config.json | 15 +++++++++++++++ 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/SelectionClientManager.java @@ -10,6 +10,7 @@ import android.view.textclassifier.TextClassifier; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.content_public.browser.SelectionClient; import org.chromium.content_public.browser.SelectionEventProcessor; import org.chromium.content_public.browser.SelectionPopupController; @@ -44,7 +45,8 @@ public class SelectionClientManager { * @param webContents The {@link WebContents} that will show popups for this client. */ SelectionClientManager(WebContents webContents) { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { + if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SMART_SELECTION) + && Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { assert webContents != null; mOptionalSelectionClient = SelectionClient.createSmartSelectionClient(webContents); SelectionPopupController controller = diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc @@ -172,6 +172,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kCCTClientDataHeader, &kCCTExternalLinkHandling, &kCCTIncognito, + &kChromeSmartSelection, &kCCTIncognitoAvailableToThirdParty, &kCCTPostMessageAPI, &kCCTRedirectPreconnect, @@ -492,6 +493,9 @@ const base::Feature kChromeSharingHub{"ChromeSharingHub", const base::Feature kChromeSurveyNextAndroid{"ChromeSurveyNextAndroid", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kChromeSmartSelection{"ChromeSmartSelection", + base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kCommandLineOnNonRooted{"CommandLineOnNonRooted", base::FEATURE_DISABLED_BY_DEFAULT}; diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h @@ -52,6 +52,7 @@ extern const base::Feature kChromeShareHighlightsAndroid; extern const base::Feature kChromeShareLongScreenshot; extern const base::Feature kChromeShareScreenshot; extern const base::Feature kChromeSharingHub; +extern const base::Feature kChromeSmartSelection; extern const base::Feature kChromeSurveyNextAndroid; extern const base::Feature kCommandLineOnNonRooted; extern const base::Feature kConditionalTabStripAndroid; diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java @@ -277,6 +277,7 @@ public abstract class ChromeFeatureList { public static final String CCT_EXTERNAL_LINK_HANDLING = "CCTExternalLinkHandling"; public static final String CCT_POST_MESSAGE_API = "CCTPostMessageAPI"; public static final String CCT_REDIRECT_PRECONNECT = "CCTRedirectPreconnect"; + public static final String CHROME_SMART_SELECTION = "ChromeSmartSelection"; public static final String CCT_REMOVE_REMOTE_VIEW_IDS = "CCTRemoveRemoteViewIds"; public static final String CCT_RESIZABLE_FOR_FIRST_PARTIES = "CCTResizableForFirstParties"; public static final String CCT_RESIZABLE_FOR_THIRD_PARTIES = "CCTResizableForThirdParties"; diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java @@ -839,7 +839,7 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper menu.removeItem(R.id.select_action_menu_share); } - if (isFocusedNodeEditable() || isIncognito() + if (isFocusedNodeEditable() || !isSelectActionModeAllowed(MENU_ITEM_WEB_SEARCH)) { menu.removeItem(R.id.select_action_menu_web_search); } diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json @@ -1951,6 +1951,21 @@ ] } ], + "ChromeSmartSelection": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_Launch", + "enable_features": [ + "ChromeSmartSelection" + ] + } + ] + } + ], "ChromeStart": [ { "platforms": [ -- 2.17.1