#608 Add support to cached flags

This commit is contained in:
Carmelo Messina
2023-12-19 10:46:48 +01:00
parent a02c9037d4
commit f95e6ee479
4 changed files with 264 additions and 49 deletions
+142 -5
View File
@@ -25,9 +25,13 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
.../browser/settings/SettingsActivity.java | 36 +++++
chrome/browser/about_flags.cc | 7 +
chrome/browser/browser_features.cc | 1 +
chrome/browser/flags/BUILD.gn | 12 ++
.../flags/android/chrome_feature_list.cc | 1 +
.../flags/android/chrome_feature_list.h | 1 +
.../chrome/browser/flags/CachedFlag.java | 6 +
.../browser/flags/ChromeFeatureList.java | 13 +-
.../flags/cromite/include_all_directory.java | 1 +
.../java_template/CromiteCachedFlag.java.tmpl | 47 ++++++
chrome/browser/settings/BUILD.gn | 1 +
.../settings/ChromeBaseSettingsFragment.java | 47 ++++++
.../strings/android_chrome_strings.grd | 1 +
@@ -81,7 +85,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
services/network/public/cpp/features.h | 1 +
third_party/blink/common/features.cc | 1 +
third_party/blink/public/common/features.h | 1 +
67 files changed, 659 insertions(+), 17 deletions(-)
71 files changed, 731 insertions(+), 18 deletions(-)
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/placeholder.txt
create mode 100755 cromite_flags/BUILD.gn
create mode 100755 cromite_flags/chrome/browser/about_flags_cc/placeholder.txt
@@ -523,6 +529,42 @@ diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_feature
+#include "cromite_flags/chrome_browser_browser_features_cc.inc"
} // namespace features
diff --git a/chrome/browser/flags/BUILD.gn b/chrome/browser/flags/BUILD.gn
--- a/chrome/browser/flags/BUILD.gn
+++ b/chrome/browser/flags/BUILD.gn
@@ -26,7 +26,11 @@ android_library("java") {
"android/java/src/org/chromium/chrome/browser/flags/ValuesReturned.java",
"android/java/src/org/chromium/chrome/browser/flags/AdBlockNativeGateway.java",
]
+ sources += [
+ "android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java",
+ ]
deps = [
+ ":java_cromite_cached_flags",
"//base:base_java",
"//build:chromeos_buildflags",
"//build/android:build_java",
@@ -37,12 +41,20 @@ android_library("java") {
"//third_party/jni_zero:jni_zero_java",
]
srcjar_deps = [
+ ":java_cromite_cached_flags",
":chrome_android_java_switches_srcjar",
":chrome_browser_flags_enums_srcjar",
":jni_headers",
]
}
+java_bromite_impl("java_cromite_cached_flags") {
+ inputs = [ "android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java" ]
+ namespace = "org.chromium.chrome.browser.flags.cromite"
+ template = "android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl"
+ static_classes = true
+}
+
generate_jni("jni_headers") {
sources = [ "android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java" ]
sources += [
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
@@ -560,6 +602,101 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
/**
* Create a Map of feature names -> {@link CachedFlag} from multiple lists of CachedFlags.
*/
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
@@ -7,6 +7,10 @@ package org.chromium.chrome.browser.flags;
import org.chromium.base.FeatureMap;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
+import org.chromium.chrome.browser.flags.cromite.CromiteCachedFlagImplBase;
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
import java.util.List;
import java.util.Map;
@@ -673,7 +677,7 @@ public abstract class ChromeFeatureList {
public static final CachedFlag sUseLibunwindstackNativeUnwinderAndroid =
new CachedFlag(USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID, true);
- public static final List<CachedFlag> sFlagsCachedFullBrowser =
+ public static final List<CachedFlag> sFlagsCachedFullBrowserChromium =
List.of(
sAllowUserCertificates,
sAndroidAppIntegration,
@@ -757,6 +761,13 @@ public abstract class ChromeFeatureList {
sShowAlwaysContextMenuOnLinks,
sUseLibunwindstackNativeUnwinderAndroid);
+ private static <T> List<T> concatenateLists(List<T>... collections) {
+ return Arrays.stream(collections).flatMap(x -> x.stream()).collect(Collectors.toList());
+ }
+
+ public static final List<CachedFlag> sFlagsCachedFullBrowser =
+ concatenateLists(CromiteCachedFlagImplBase.getList(), sFlagsCachedFullBrowserChromium);
+
public static final List<CachedFlag> sFlagsCachedInMinimalBrowser =
List.of(sExperimentsForAgsa);
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java
new file mode 100644
--- /dev/null
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/include_all_directory.java
@@ -0,0 +1 @@
+this file is intentionally empty
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl
new file mode 100644
--- /dev/null
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/java_template/CromiteCachedFlag.java.tmpl
@@ -0,0 +1,47 @@
+/*
+ This file is part of Cromite.
+
+ Cromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Cromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Cromite. If not, see <https://www.gnu.org/licenses/>.
+
+*/
+
+{DESCRIPTION}
+
+package org.chromium.chrome.browser.flags.cromite;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.chromium.chrome.browser.flags.CachedFlag;
+
+{IMPORT_CLAUSE}
+
+public class CromiteCachedFlagImplBase {{
+
+ static protected final ArrayList<CachedFlag> mItemList;
+
+ private static void add(CachedFlag flag) {{
+ mItemList.add(flag);
+ }}
+
+ public static List<CachedFlag> getList() {{
+ return mItemList;
+ }}
+
+ static {{
+ mItemList = new ArrayList<CachedFlag>();
+{ADD_CLAUSE}
+ }}
+
+}}
diff --git a/chrome/browser/settings/BUILD.gn b/chrome/browser/settings/BUILD.gn
--- a/chrome/browser/settings/BUILD.gn
+++ b/chrome/browser/settings/BUILD.gn
@@ -615,7 +752,7 @@ diff --git a/chrome/browser/settings/android/java/src/org/chromium/chrome/browse
+ Preference pref = prefScreen.getPreference(i);
+ if (pref instanceof ChromeSwitchPreference) {
+ ChromeSwitchPreference switchPref = (ChromeSwitchPreference)pref;
+ String featureName = switchPref.GetFeatureName();
+ String featureName = switchPref.getFeatureName();
+ if (featureName == null)
+ continue;
+
@@ -624,7 +761,7 @@ diff --git a/chrome/browser/settings/android/java/src/org/chromium/chrome/browse
+
+ switchPref.setOnPreferenceChangeListener((preference, newValue) -> {
+ CromiteNativeUtils.setFlagEnabled(featureName, (boolean)newValue);
+ if (switchPref.NeedRestart())
+ if (switchPref.needRestart())
+ mRequireRestartDelegate.RequireRestart();
+ return true;
+ });
@@ -719,11 +856,11 @@ diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium
+ a.recycle();
+ }
+
+ public String GetFeatureName() {
+ public String getFeatureName() {
+ return mFeatureName;
+ }
+
+ public boolean NeedRestart() {
+ public boolean needRestart() {
+ return mNeedRestart;
}
@@ -7,23 +7,34 @@ Added a setting for the option
need: Add-cromite-flags-support.patch
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../tasks/tab_management/TabUiFeatureUtilities.java | 2 +-
chrome/android/java/res/xml/privacy_preferences.xml | 7 +++++++
.../Use-list-mode-for-tab-switcher.grdp | 9 +++++++++
.../chrome_feature_list_cc/tab-switcher-list-mode.inc | 3 +++
4 files changed, 20 insertions(+), 1 deletion(-)
.../tab_management/TabUiFeatureUtilities.java | 4 +--
.../java/res/xml/privacy_preferences.xml | 7 +++++
.../flags/cromite/sTabSwitcherListMode.java | 31 +++++++++++++++++++
.../Use-list-mode-for-tab-switcher.grdp | 9 ++++++
.../tab-switcher-list-mode.inc | 3 ++
5 files changed, 52 insertions(+), 2 deletions(-)
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sTabSwitcherListMode.java
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Use-list-mode-for-tab-switcher.grdp
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/tab-switcher-list-mode.inc
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiFeatureUtilities.java
@@ -116,7 +116,7 @@ public class TabUiFeatureUtilities {
@@ -15,6 +15,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.IntCachedFieldTrialParameter;
import org.chromium.chrome.browser.flags.MutableFlagWithSafeDefault;
import org.chromium.ui.base.DeviceFormFactor;
+import org.chromium.chrome.browser.flags.cromite.sTabSwitcherListMode;
/**
* A class to handle the state of flags for tab_management.
@@ -115,8 +116,7 @@ public class TabUiFeatureUtilities {
* @param context The activity context.
*/
public static boolean shouldUseListMode(Context context) {
// Low-end forces list mode.
- // Low-end forces list mode.
- return SysUtils.isLowEndDevice();
+ return ChromeFeatureList.isEnabled("TabSwitcherListMode");
+ return sTabSwitcherListMode.getInstance().isEnabled();
}
/**
@@ -44,6 +55,42 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
<PreferenceCategory
android:key="security_section"
android:title="@string/security_section_title" />
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sTabSwitcherListMode.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sTabSwitcherListMode.java
new file mode 100644
--- /dev/null
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sTabSwitcherListMode.java
@@ -0,0 +1,31 @@
+/*
+ This file is part of Cromite.
+
+ Cromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Cromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Cromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.chrome.browser.flags.cromite;
+
+import org.chromium.chrome.browser.flags.CachedFlag;
+
+public class sTabSwitcherListMode {
+ private static final CachedFlag sInstance =
+ new CachedFlag("TabSwitcherListMode", false);
+
+ private sTabSwitcherListMode() {}
+
+ public static CachedFlag getInstance() {
+ return sInstance;
+ }
+}
diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Use-list-mode-for-tab-switcher.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Use-list-mode-for-tab-switcher.grdp
new file mode 100644
--- /dev/null
@@ -25,7 +25,7 @@ Require: bromite-build-utils.patch
.../views/page_info/page_info_view_factory.cc | 13 +
.../settings_localized_strings_provider.cc | 39 +++
.../ui/webui/settings/site_settings_helper.cc | 34 +-
.../browser_ui/site_settings/android/BUILD.gn | 16 +
.../browser_ui/site_settings/android/BUILD.gn | 18 +
.../site_settings/AllSiteSettings.java | 5 +-
.../BromiteCustomContentSetting.java | 139 ++++++++
.../BromiteCustomContentSettingImpl.java | 307 ++++++++++++++++++
@@ -72,7 +72,7 @@ Require: bromite-build-utils.patch
.../platform/web_content_settings_client.h | 5 +
.../execution_context/execution_context.cc | 16 +
.../execution_context/execution_context.h | 5 +
61 files changed, 1193 insertions(+), 44 deletions(-)
61 files changed, 1195 insertions(+), 44 deletions(-)
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java
create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomTriStateSiteSettingsPreferenceImpl.java
@@ -587,7 +587,7 @@ diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/b
diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn
--- a/components/browser_ui/site_settings/android/BUILD.gn
+++ b/components/browser_ui/site_settings/android/BUILD.gn
@@ -148,6 +148,21 @@ android_library("java") {
@@ -148,6 +148,23 @@ android_library("java") {
":site_settings_jni_headers",
"//components/content_settings/android:java_pref_names_srcjar",
]
@@ -605,11 +605,13 @@ diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/b
+
+java_bromite_impl("java_bromite_content_settings") {
+ inputs = [ "java/src/org/chromium/components/browser_ui/site_settings/impl/include_all_directory.java" ]
+ namespace = "org.chromium.components.browser_ui.site_settings.impl"
+ template = "java/src/org/chromium/components/browser_ui/site_settings/impl/java_template/BromiteCustomContentSettingImplBase.java.tmpl"
+ static_classes = false
}
android_library("javatests") {
@@ -193,6 +208,7 @@ robolectric_library("junit") {
@@ -193,6 +210,7 @@ robolectric_library("junit") {
}
android_resources("java_resources") {
+61 -32
View File
@@ -3,23 +3,23 @@ Date: Fri, 9 Jun 2023 15:11:46 +0000
Subject: bromite build utils
---
build/android/gyp/java_cpp_enum.py | 36 +++++--
build/android/gyp/util/build_utils.py | 25 ++++-
build/bromite/bromite_utils.gni | 69 ++++++++++++++
build/bromite/gyp/cpp_bromite_include.py | 35 +++++++
build/bromite/gyp/cpp_bromite_include.pydeps | 9 ++
build/bromite/gyp/java_bromite_impl.py | 94 +++++++++++++++++++
build/bromite/gyp/java_bromite_impl.pydeps | 9 ++
build/config/BUILDCONFIG.gn | 1 +
build/config/android/rules.gni | 6 +-
.../ChromeAccessibilitySettingsDelegate.java | 5 +
chrome/browser/flags/BUILD.gn | 10 +-
.../flags/android/cromite_native_utils.cc | 41 ++++++++
.../flags/android/cromite_native_utils.h | 14 +++
.../browser/flags/CromiteNativeUtils.java | 41 ++++++++
tools/grit/grit/grd_reader.py | 27 +++++-
tools/grit/preprocess_if_expr.py | 32 ++++++-
16 files changed, 438 insertions(+), 16 deletions(-)
build/android/gyp/java_cpp_enum.py | 36 +++++-
build/android/gyp/util/build_utils.py | 25 +++-
build/bromite/bromite_utils.gni | 79 +++++++++++++
build/bromite/gyp/cpp_bromite_include.py | 35 ++++++
build/bromite/gyp/cpp_bromite_include.pydeps | 9 ++
build/bromite/gyp/java_bromite_impl.py | 108 ++++++++++++++++++
build/bromite/gyp/java_bromite_impl.pydeps | 9 ++
build/config/BUILDCONFIG.gn | 1 +
build/config/android/rules.gni | 6 +-
.../ChromeAccessibilitySettingsDelegate.java | 5 +
chrome/browser/flags/BUILD.gn | 10 +-
.../flags/android/cromite_native_utils.cc | 41 +++++++
.../flags/android/cromite_native_utils.h | 14 +++
.../browser/flags/CromiteNativeUtils.java | 46 ++++++++
tools/grit/grit/grd_reader.py | 27 ++++-
tools/grit/preprocess_if_expr.py | 32 +++++-
16 files changed, 467 insertions(+), 16 deletions(-)
create mode 100644 build/bromite/bromite_utils.gni
create mode 100644 build/bromite/gyp/cpp_bromite_include.py
create mode 100644 build/bromite/gyp/cpp_bromite_include.pydeps
@@ -162,7 +162,7 @@ diff --git a/build/bromite/bromite_utils.gni b/build/bromite/bromite_utils.gni
new file mode 100644
--- /dev/null
+++ b/build/bromite/bromite_utils.gni
@@ -0,0 +1,69 @@
@@ -0,0 +1,79 @@
+import("//build/config/python.gni")
+
+# generates the file specified in ouput_file containing
@@ -215,18 +215,28 @@ new file mode 100644
+ TESTONLY_AND_VISIBILITY + [
+ "deps",
+ "inputs",
+ "namespace",
+ "static_classes",
+ ])
+ script = "//build/bromite/gyp/java_bromite_impl.py"
+ namespace = ""
+ static_classes = false
+
+ _srcjar_path = "${target_gen_dir}/${target_name}.srcjar"
+ _rebased_srcjar_path = rebase_path(_srcjar_path, root_build_dir)
+ _rebased_directories = rebase_path(invoker.inputs, root_build_dir)
+ _rebased_template = rebase_path(invoker.template, root_build_dir)
+ _namespace = invoker.namespace
+ _static_classes = invoker.static_classes
+
+ args = [
+ "--srcjar=$_rebased_srcjar_path",
+ "--template=$_rebased_template",
+ "--namespace=$_namespace",
+ ]
+ if (_static_classes) {
+ args += [ "--static_classes", ]
+ }
+ args += _rebased_directories
+
+ outputs = [ _srcjar_path ]
@@ -290,7 +300,7 @@ diff --git a/build/bromite/gyp/java_bromite_impl.py b/build/bromite/gyp/java_bro
new file mode 100644
--- /dev/null
+++ b/build/bromite/gyp/java_bromite_impl.py
@@ -0,0 +1,94 @@
@@ -0,0 +1,108 @@
+#!/usr/bin/env python3
+
+import argparse
@@ -307,7 +317,8 @@ new file mode 100644
+import action_helpers # build_utils adds //build to sys.path.
+import zip_helpers
+
+def _GenerateOutput(template, source_paths, template_path, strings):
+def _GenerateOutput(template, source_paths, template_path, strings,
+ namespace, static_classes):
+ description_template = """
+// This following string constants were inserted by
+// {SCRIPT_NAME}
@@ -325,8 +336,13 @@ new file mode 100644
+ description = description_template.format(**values)
+
+ import_clause = '\n'.join(
+ ['import org.chromium.components.browser_ui.site_settings.impl.' + f + ';' for f in strings])
+ add_clause = '\n\t'.join(['\tadd(new ' + f + '());' for f in strings])
+ ['import ' + namespace + '.' + f + ';' for f in strings])
+ print(namespace)
+ print(static_classes)
+ if static_classes:
+ add_clause = '\n\t'.join(['\tadd(' + f + '.getInstance());' for f in strings])
+ else:
+ add_clause = '\n\t'.join(['\tadd(new ' + f + '());' for f in strings])
+
+ values = {
+ 'DESCRIPTION': description,
@@ -336,7 +352,7 @@ new file mode 100644
+ return template.format(**values)
+
+
+def _Generate(source_paths, template_path):
+def _Generate(source_paths, template_path, namespace, static_classes):
+ with open(template_path) as f:
+ lines = f.readlines()
+
@@ -356,7 +372,8 @@ new file mode 100644
+ if not f.endswith('include_all_directory.java') and
+ not f.endswith('.java.tmpl') ]
+
+ output = _GenerateOutput(template, source_paths, template_path, strings)
+ output = _GenerateOutput(template, source_paths, template_path, strings,
+ namespace, static_classes)
+
+ return output, output_path
+
@@ -374,12 +391,19 @@ new file mode 100644
+ 'class.')
+
+ parser.add_argument(
+ '--namespace', required=True, help='Output namespace')
+ parser.add_argument(
+ '--static_classes', action="store_true",
+ default=False,
+ help='True to use getInstance() method')
+ parser.add_argument(
+ 'inputs', nargs='+', help='Input folder(s)', metavar='INPUTFILE')
+ args = parser.parse_args(argv)
+
+ with action_helpers.atomic_output(args.srcjar) as f:
+ with zipfile.ZipFile(f, 'w', zipfile.ZIP_STORED) as srcjar:
+ data, path = _Generate(args.inputs, args.template)
+ data, path = _Generate(args.inputs, args.template,
+ args.namespace, args.static_classes)
+ zip_helpers.add_to_zip_hermetic(srcjar, path, data=data)
+
+
@@ -551,7 +575,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
new file mode 100755
--- /dev/null
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CromiteNativeUtils.java
@@ -0,0 +1,41 @@
@@ -0,0 +1,46 @@
+package org.chromium.chrome.browser.flags;
+
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -570,17 +594,22 @@ new file mode 100755
+ * @param flagName the flag name name from about_flags.cc.
+ */
+ public static void setFlagEnabled(String flagName, Boolean newValue) {
+ CromiteNativeUtilsJni.get().setEnabled(flagName, newValue);
+ CachedFlag cachedFlag = ChromeFeatureList.sAllCachedFlags.get(flagName);
+ setFlagEnabled(cachedFlag == null
+ ? ""
+ : cachedFlag.getFeatureName(), flagName, newValue);
+ }
+
+ public static void setFlagEnabled(String featureName, String flagName, Boolean newValue) {
+ setFlagEnabled(flagName, newValue);
+ CromiteNativeUtilsJni.get().setEnabled(flagName, newValue);
+
+ CachedFlag cachedFlag = ChromeFeatureList.sAllCachedFlags.get(featureName);
+ String preferenceName = cachedFlag.getSharedPreferenceKey();
+ if (!featureName.isEmpty()) {
+ CachedFlag cachedFlag = ChromeFeatureList.sAllCachedFlags.get(featureName);
+ String preferenceName = cachedFlag.getSharedPreferenceKey();
+
+ ChromeSharedPreferences.getInstance().writeBoolean(preferenceName, newValue);
+ cachedFlag.setValueReturnedOverride(newValue);
+ ChromeSharedPreferences.getInstance().writeBoolean(preferenceName, newValue);
+ cachedFlag.setValueReturnedOverride(newValue);
+ }
+ }
+
+ public static boolean isFlagEnabled(String featureName) {