Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 813bec30 authored by Carmelo Messina's avatar Carmelo Messina
Browse files

Patches for v146

parent 21fe5881
Loading
Loading
Loading
Loading
+19 −19
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/pr
-  return std::make_unique<PrefProxyConfigTrackerImpl>(profile_prefs, nullptr);
+  // Migrate from profile_prefs to local_state_prefs
+  if (local_state_prefs->GetBoolean("proxy_migrated") == false) {
+    const base::Value::Dict& dict =
+    const base::DictValue& dict =
+        profile_prefs->GetDict(proxy_config::prefs::kProxy);
+
+    LOG(INFO) << "CreatePrefProxyConfigTrackerOfProfile: Migration from profile to local state";
@@ -774,9 +774,9 @@ new file mode 100644
+  void RegisterMessages() override;
+
+  // Messages
+  void OnEnableNotifyUIWithState(const base::Value::List& args);
+  void OnApply(const base::Value::List& args);
+  void OnClear(const base::Value::List& args);
+  void OnEnableNotifyUIWithState(const base::ListValue& args);
+  void OnApply(const base::ListValue& args);
+  void OnClear(const base::ListValue& args);
+
+  // net::ProxyConfigService::Observer implementation:
+  // Calls ProxyConfigView.onProxyConfigChanged JavaScript function in the
@@ -793,7 +793,7 @@ new file mode 100644
+  std::unique_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
+  bool is_observing_;
+
+  void encodeConfig(const net::ProxyConfig& config, base::Value::Dict& state);
+  void encodeConfig(const net::ProxyConfig& config, base::DictValue& state);
+
+  void apply(const net::ProxyConfig& config);
+
@@ -833,7 +833,7 @@ new file mode 100644
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
+         !BrowserThread::IsThreadInitialized(BrowserThread::UI));
+
+  base::Value::Dict state;
+  base::DictValue state;
+  bool pending = false;
+  switch (availability) {
+    case net::ProxyConfigService::CONFIG_VALID:
@@ -861,7 +861,7 @@ new file mode 100644
+  return pacString;
+}
+
+void ProxyConfigMessageHandler::encodeConfig(const net::ProxyConfig& config, base::Value::Dict& state) {
+void ProxyConfigMessageHandler::encodeConfig(const net::ProxyConfig& config, base::DictValue& state) {
+  // when automatic settings are enabled they take precedence over manual settings
+  // automatic settings are either the "auto-detect" flag or the existance of a PAC URL
+
@@ -932,7 +932,7 @@ new file mode 100644
+// The proxy configuration UI is not notified of state changes until this function runs.
+// After this function, OnProxyConfigChanged() will be called on all proxy state changes.
+void ProxyConfigMessageHandler::OnEnableNotifyUIWithState(
+    const base::Value::List& list) {
+    const base::ListValue& list) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  if (!is_observing_) {
@@ -954,23 +954,23 @@ new file mode 100644
+  OnProxyConfigChanged(config, availability);
+}
+
+void ProxyConfigMessageHandler::OnClear(const base::Value::List& list) {
+void ProxyConfigMessageHandler::OnClear(const base::ListValue& list) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  const base::Value::Dict cfg = ProxyConfigDictionary::CreateSystem();
+  const base::DictValue cfg = ProxyConfigDictionary::CreateSystem();
+  pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+  pref_service_->CommitPendingWrite();
+  OnEnableNotifyUIWithState(list);
+}
+
+void ProxyConfigMessageHandler::OnApply(const base::Value::List& list) {
+void ProxyConfigMessageHandler::OnApply(const base::ListValue& list) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+  if ((list.size() != 1) || !list[0].is_dict()) {
+    return;
+  }
+
+  const base::Value::Dict& config = list[0].GetDict();
+  const base::DictValue& config = list[0].GetDict();
+
+  if (config.FindBool("auto_detect").value_or(false)) {
+    apply(net::ProxyConfig::CreateAutoDetect());
@@ -986,7 +986,7 @@ new file mode 100644
+    return;
+  }
+
+  const base::Value::Dict* rules = config.FindDict("rules");
+  const base::DictValue* rules = config.FindDict("rules");
+  if (rules == nullptr)
+    return;
+
@@ -1023,7 +1023,7 @@ new file mode 100644
+  } else if (*type == "direct") {
+      proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::EMPTY;
+  } else if (*type == "none") {
+      base::Value::List empty;
+      base::ListValue empty;
+      OnClear(empty);
+      return;
+  } else {
@@ -1049,26 +1049,26 @@ new file mode 100644
+
+void ProxyConfigMessageHandler::apply(const net::ProxyConfig& proxyConfig) {
+  if (proxyConfig.auto_detect()) {
+    const base::Value::Dict cfg = ProxyConfigDictionary::CreateAutoDetect();
+    const base::DictValue cfg = ProxyConfigDictionary::CreateAutoDetect();
+    pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+  } else if (proxyConfig.has_pac_url()) {
+    const base::Value::Dict cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory());
+    const base::DictValue cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory());
+    pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+  } else if (proxyConfig.proxy_rules().type == net::ProxyConfig::ProxyRules::Type::EMPTY) {
+    const base::Value::Dict cfg = ProxyConfigDictionary::CreateDirect();
+    const base::DictValue cfg = ProxyConfigDictionary::CreateDirect();
+    pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+  } else {
+    auto proxyRulesAsString = proxyConfig.proxy_rules().ToString();
+    auto bypassRulesAsString = proxyConfig.proxy_rules().bypass_rules.ToString();
+
+    // fixed servers
+    const base::Value::Dict cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString,
+    const base::DictValue cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString,
+                            bypassRulesAsString, proxyConfig.proxy_rules().reverse_bypass);
+    pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone());
+  }
+  pref_service_->CommitPendingWrite();
+
+  base::Value::List empty;
+  base::ListValue empty;
+  OnEnableNotifyUIWithState(empty);
+}
+
+60 −10
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 .../chrome/browser/app/ChromeActivity.java    |   4 +
 .../AppMenuPropertiesDelegateImpl.java        |   7 +-
 .../ChromeContextMenuPopulator.java           |   6 +-
 .../CustomTabActivityLifecycleUmaTracker.java |  31 ----
 .../CustomTabActivityLifecycleUmaTracker.java |  31 ---
 .../CustomTabAppMenuPropertiesDelegate.java   |   5 +
 .../CustomTabIntentDataProvider.java          |  10 +
 .../browser/download/DownloadUtils.java       |  13 +-
@@ -37,7 +37,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 .../chrome/browser/history/HistoryPage.java   |  16 ++
 .../native_page/NativePageFactory.java        |   4 +-
 .../chrome/browser/ntp/RecentTabsManager.java |  29 ++-
 .../privacy/settings/IncognitoSettings.java   | 175 ++++++++++++++++++
 .../privacy/settings/IncognitoSettings.java   | 177 ++++++++++++++++++
 .../settings/FragmentDependencyProvider.java  |   4 +
 .../HistoricalTabModelObserver.java           |   5 +-
 .../tab/tab_restore/HistoricalTabSaver.java   |   2 +-
@@ -62,13 +62,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 .../android/offline_page_model_factory.cc     |  20 +-
 .../android/request_coordinator_factory.cc    |  33 +++-
 .../offline_page_model_factory.h              |   1 +
 .../offline_pages/recent_tab_helper.cc        |  31 +++-
 .../offline_pages/recent_tab_helper.cc        |  31 ++-
 .../browser/offline_pages/recent_tab_helper.h |   5 +
 .../request_coordinator_factory.h             |   4 +-
 chrome/browser/prefs/browser_prefs.cc         |   5 +
 chrome/browser/profiles/profile_selections.cc |  10 +
 chrome/browser/profiles/profile_selections.h  |   7 +-
 .../signin/services/ProfileDataCache.java     |   5 +-
 .../signin/services/ProfileDataCache.java     |  18 +-
 .../browser/ui/android/native_page/BUILD.gn   |   2 +
 .../browser/ui/native_page/NativePage.java    |  17 +-
 .../browser/omnibox/LocationBarMediator.java  |   8 +
@@ -89,7 +89,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 .../add-an-always-incognito-mode.inc          |   1 +
 .../add-an-always-incognito-mode.inc          |   3 +
 .../add-an-always-incognito-mode.inc          |   1 +
 70 files changed, 808 insertions(+), 108 deletions(-)
 70 files changed, 812 insertions(+), 119 deletions(-)
 create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml
 create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
 create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java
@@ -699,7 +699,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java
@@ -0,0 +1,175 @@
@@ -0,0 +1,177 @@
+/*
+    This file is part of Bromite.
+
@@ -732,8 +732,9 @@ new file mode 100644
+import androidx.preference.PreferenceFragmentCompat;
+import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
+
+import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.base.supplier.MonotonicObservableSupplier;
+import org.chromium.base.supplier.ObservableSuppliers;
+import org.chromium.base.supplier.SettableMonotonicObservableSupplier;
+import java.util.function.Supplier;
+
+import org.chromium.chrome.R;
@@ -767,10 +768,11 @@ new file mode 100644
+    private static final String PREF_INCOGNITO_SAVE_SITE_SETTING = "incognito_save_site_setting";
+
+    private final PrefService prefService = UserPrefs.get(ProfileManager.getLastUsedRegularProfile());
+    private final ObservableSupplierImpl<String> mPageTitle = new ObservableSupplierImpl<>();
+    private final SettableMonotonicObservableSupplier<String> mPageTitle =
+        ObservableSuppliers.createMonotonic();
+
+    @Override
+    public ObservableSupplier<String> getPageTitle() {
+    public MonotonicObservableSupplier<String> getPageTitle() {
+        return mPageTitle;
+    }
+
@@ -1912,6 +1914,54 @@ diff --git a/chrome/browser/signin/services/android/java/src/org/chromium/chrome
         mImageSize = imageSize;
         mDefaultBadgeConfig = badgeConfig;
         mPlaceholderImage = getScaledPlaceholderImage(context, imageSize);
@@ -338,7 +335,6 @@ public class ProfileDataCache implements IdentityManager.Observer, AccountsChang
         ThreadUtils.assertOnUiThread();
         if (mObservers.isEmpty()) {
             mAccountManagerFacade.addObserver(this);
-            mIdentityManager.addObserver(this);
         }
         mObservers.addObserver(observer);
     }
@@ -351,7 +347,6 @@ public class ProfileDataCache implements IdentityManager.Observer, AccountsChang
         mObservers.removeObserver(observer);
         if (mObservers.isEmpty()) {
             mAccountManagerFacade.removeObserver(this);
-            mIdentityManager.removeObserver(this);
         }
     }
 
@@ -382,6 +377,7 @@ public class ProfileDataCache implements IdentityManager.Observer, AccountsChang
     }
 
     private void updateCache() {
+        if ((true)) return;
         var accounts = mAccountManagerFacade.getAccounts();
         if (!accounts.isFulfilled()) {
             // When the list of accounts is ready - onCoreAccountInfosChanged will call
@@ -391,13 +387,7 @@ public class ProfileDataCache implements IdentityManager.Observer, AccountsChang
 
         List<DisplayableProfileData> displayableAccounts = new ArrayList<>();
         for (CoreAccountInfo account : accounts.getResult()) {
-            var accountInfo = mIdentityManager.findExtendedAccountInfoByAccountId(account.getId());
-            if (accountInfo != null
-                    && (accountInfo.hasDisplayableInfo()
-                            || getBadgeConfigForAccount(accountInfo.getEmail()) != null)) {
-                displayableAccounts.add(toDisplayableProfileData(accountInfo));
-            }
-        }
+         }
         mAccountsCache.setAccounts(displayableAccounts);
 
         mAccountsCache
@@ -413,8 +403,6 @@ public class ProfileDataCache implements IdentityManager.Observer, AccountsChang
     /** TODO(crbug.com/476990153): Replace with email parameter with {@link #CoreAccountId}. */
     @Deprecated
     private void populateCacheForAccount(String accountEmail) {
-        var accountInfo = mIdentityManager.findExtendedAccountInfoByEmailAddress(accountEmail);
-        onExtendedAccountInfoUpdated(accountInfo);
     }
 
     private DisplayableProfileData toDisplayableProfileData(AccountInfo accountInfo) {
diff --git a/chrome/browser/ui/android/native_page/BUILD.gn b/chrome/browser/ui/android/native_page/BUILD.gn
--- a/chrome/browser/ui/android/native_page/BUILD.gn
+++ b/chrome/browser/ui/android/native_page/BUILD.gn
+17 −52
Original line number Diff line number Diff line
@@ -14,8 +14,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 chrome/android/java/AndroidManifest.xml       |   1 -
 .../menu/bookmark_toolbar_menu_improved.xml   |  14 +
 .../browser/TabbedModeTabDelegateFactory.java |   5 +-
 .../app/bookmarks/BookmarkActivity.java       |  32 ++
 .../native_page/NativePageFactory.java        |   9 +-
 .../app/bookmarks/BookmarkActivity.java       |  21 ++
 .../native_page/NativePageFactory.java        |   7 +-
 chrome/browser/BUILD.gn                       |  11 +-
 .../bookmarks/android/bookmark_bridge.cc      | 193 ++++++++++++
 .../bookmarks/android/bookmark_bridge.h       |  30 +-
@@ -23,7 +23,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 .../browser/bookmarks/BookmarkDelegate.java   |  10 +
 .../bookmarks/BookmarkManagerCoordinator.java |   9 +
 .../bookmarks/BookmarkManagerMediator.java    | 283 ++++++++++++++++++
 .../browser/bookmarks/BookmarkPage.java       |   9 +-
 .../browser/bookmarks/BookmarkPage.java       |   8 +-
 .../browser/bookmarks/BookmarkToolbar.java    |  27 ++
 .../bookmarks/BookmarkToolbarMediator.java    |   4 +
 .../bookmarks/BookmarkToolbarProperties.java  |   8 +-
@@ -51,7 +51,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
 ui/shell_dialogs/select_file_dialog_linux.cc  |   4 +
 ui/shell_dialogs/select_file_dialog_linux.h   |   2 +
 ui/shell_dialogs/select_file_dialog_win.cc    |   5 +
 40 files changed, 806 insertions(+), 24 deletions(-)
 40 files changed, 793 insertions(+), 23 deletions(-)
 create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc
 create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-bookmark-import-export-actions.inc
 create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/add-bookmark-import-export-actions.inc
@@ -132,42 +132,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B
 import android.content.ComponentName;
 import android.content.Intent;
 import android.text.TextUtils;
@@ -51,6 +53,9 @@ import org.chromium.ui.modaldialog.ModalDialogManager;
 import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType;
 import org.chromium.ui.util.ColorUtils;
 
+import org.chromium.ui.base.ActivityWindowAndroid;
+import org.chromium.ui.base.IntentRequestTracker;
+
 /**
  * The activity that displays the bookmark UI on the phone. It keeps a {@link
  * BookmarkManagerCoordinator} inside of it and creates a snackbar manager. This activity should
@@ -67,6 +72,9 @@ public class BookmarkActivity extends SnackbarActivity {
     private @Nullable OnKeyDownHandler mOnKeyDownHandler;
     private @Nullable ActivityWindowAndroid mWindowAndroid;
 
+    private ActivityWindowAndroid mWindowAndroid;
+    private IntentRequestTracker mIntentRequestTracker;
+
     @Override
     protected void onProfileAvailable(Profile profile) {
         super.onProfileAvailable(profile);
@@ -131,6 +139,14 @@ public class BookmarkActivity extends SnackbarActivity {
@@ -131,6 +133,9 @@ public class BookmarkActivity extends SnackbarActivity {
         mOnKeyDownHandler =
                 BackPressHelper.create(
                         this, getOnBackPressedDispatcher(), mBookmarkManagerCoordinator);
+
+        final boolean listenToActivityState = true;
+        mIntentRequestTracker = IntentRequestTracker.createFromActivity(this);
+        mWindowAndroid = new ActivityWindowAndroid(this, listenToActivityState,
+                                                   mIntentRequestTracker, /*InsetObserver*/ null,
+                                                   /* trackOcclusion= */ true);
+        mBookmarkManagerCoordinator.setWindow(mWindowAndroid,
+            getModalDialogManagerSupplier().get());
     }
 
     @Override
@@ -163,6 +179,7 @@ public class BookmarkActivity extends SnackbarActivity {
@@ -163,6 +168,7 @@ public class BookmarkActivity extends SnackbarActivity {
     @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
@@ -175,7 +150,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B
         if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) {
             assumeNonNull(data);
             BookmarkId bookmarkId =
@@ -172,6 +189,21 @@ public class BookmarkActivity extends SnackbarActivity {
@@ -172,6 +178,21 @@ public class BookmarkActivity extends SnackbarActivity {
         }
     }
 
@@ -235,15 +210,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/Nat
         private final BottomSheetController mBottomSheetController;
         private final Supplier<NewTabPageCreationTracker> mNewTabPageCreationTracker;
         private final BrowserControlsManager mBrowserControlsManager;
@@ -331,7 +332,7 @@ public class NativePageFactory {
                             mTabModelSelector,
                             mEdgeToEdgeControllerSupplier),
                     mActivity.getComponentName(),
-                    mBackPressManager);
+                    mBackPressManager, mActivity);
         }
 
         protected NativePage buildDownloadsPage(Tab tab) {
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1035,17 +1001,16 @@ diff --git a/chrome/browser/bookmarks/android/java/src/org/chromium/chrome/brows
 
 /** A native page holding a {@link BookmarkManagerCoordinator} on _tablet_. */
 @NullMarked
@@ -52,7 +55,8 @@ public class BookmarkPage extends BasicNativePage {
             Profile profile,
             NativePageHost host,
             @Nullable ComponentName componentName,
-            BackPressManager backPressManager) {
+            BackPressManager backPressManager,
+            ChromeActivity activity) {
         super(host);
 
         mTitle = host.getContext().getString(R.string.bookmarks);
@@ -83,6 +87,9 @@ public class BookmarkPage extends BasicNativePage {
@@ -45,7 +48,7 @@ public class BookmarkPage extends BasicNativePage {
      */
     public BookmarkPage(
             WindowAndroid windowAndroid,
-            Activity activity,
+            ChromeActivity activity,
             SnackbarManager snackbarManager,
             Supplier<BottomSheetController> bottomSheetControllerSupplier,
             ActivityResultTracker activityResultTracker,
@@ -83,6 +86,9 @@ public class BookmarkPage extends BasicNativePage {
                         backPressManager);
 
         mBookmarkManagerCoordinator.setBasicNativePage(this);
+68 −4
Original line number Diff line number Diff line
@@ -13,8 +13,10 @@ in the setting ui.
Need: bromite-build-utils.patch
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
 base/BUILD.gn                                 |   4 +-
 base/BUILD.gn                                 |   5 +-
 base/android/feature_map.cc                   |   5 +
 .../src/org/chromium/base/FeatureMap.java     |   5 +
 .../base/ImmutableFlagWithDefault.java        |  25 +++
 .../base/cached_flags/ValuesReturned.java     |   2 +-
 base/feature_list.cc                          |  76 ++++++++
 base/feature_list.h                           |  98 +++++++++-
@@ -58,7 +60,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
 ...nthetic_trials_active_group_id_provider.cc |   4 +-
 ...ynthetic_trials_active_group_id_provider.h |   4 +-
 components/webui/flags/flags_state.cc         |  59 ++++++
 components/webui/flags/resources/app.css      |  24 +++
 components/webui/flags/resources/app.css      |  32 ++++
 components/webui/flags/resources/app.html.ts  |  28 +++
 components/webui/flags/resources/app.ts       |  24 +++
 .../webui/flags/resources/experiment.css      |   9 +-
@@ -106,7 +108,8 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
 third_party/blink/public/common/features.h    |   1 +
 ui/base/ui_base_features.cc                   |   1 +
 ui/base/ui_base_features.h                    |   1 +
 93 files changed, 846 insertions(+), 32 deletions(-)
 95 files changed, 885 insertions(+), 32 deletions(-)
 create mode 100644 base/android/java/src/org/chromium/base/ImmutableFlagWithDefault.java
 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/Add-cromite-flags-support.grdp
@@ -161,6 +164,14 @@ diff --git a/base/BUILD.gn b/base/BUILD.gn
     ":check_version_internal",
     ":simdutf_shim",
     "//base/allocator:buildflags",
@@ -4941,6 +4943,7 @@ if (is_android) {
       "android/java/src/org/chromium/base/Flag.java",
       "android/java/src/org/chromium/base/MutableBooleanParamWithSafeDefault.java",
       "android/java/src/org/chromium/base/MutableFlagWithSafeDefault.java",
+      "android/java/src/org/chromium/base/ImmutableFlagWithDefault.java",
       "android/java/src/org/chromium/base/MutableIntParamWithSafeDefault.java",
       "android/java/src/org/chromium/base/MutableParamWithSafeDefault.java",
     ]
diff --git a/base/android/feature_map.cc b/base/android/feature_map.cc
--- a/base/android/feature_map.cc
+++ b/base/android/feature_map.cc
@@ -176,6 +187,51 @@ diff --git a/base/android/feature_map.cc b/base/android/feature_map.cc
   FeatureMap* feature_map = reinterpret_cast<FeatureMap*>(jfeature_map);
   const base::Feature* feature =
       feature_map->FindFeatureExposedToJava(feature_name);
diff --git a/base/android/java/src/org/chromium/base/FeatureMap.java b/base/android/java/src/org/chromium/base/FeatureMap.java
--- a/base/android/java/src/org/chromium/base/FeatureMap.java
+++ b/base/android/java/src/org/chromium/base/FeatureMap.java
@@ -159,6 +159,11 @@ public abstract class FeatureMap {
         return new MutableFlagWithSafeDefault(this, featureName, defaultValue);
     }
 
+    public ImmutableFlagWithDefault immutableFlagWithDefault(
+            String featureName, boolean defaultValue) {
+        return new ImmutableFlagWithDefault(this, featureName, defaultValue);
+    }
+
     private void ensureNativeMapInit() {
         assert FeatureList.isNativeInitialized();
 
diff --git a/base/android/java/src/org/chromium/base/ImmutableFlagWithDefault.java b/base/android/java/src/org/chromium/base/ImmutableFlagWithDefault.java
new file mode 100644
--- /dev/null
+++ b/base/android/java/src/org/chromium/base/ImmutableFlagWithDefault.java
@@ -0,0 +1,25 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base;
+
+import org.chromium.build.annotations.NullMarked;
+import org.chromium.build.annotations.Nullable;
+
+@NullMarked
+public class ImmutableFlagWithDefault extends MutableFlagWithSafeDefault {
+    private final boolean mDefaultValue;
+    private @Nullable Boolean mInMemoryCachedValue;
+
+    public ImmutableFlagWithDefault(
+            FeatureMap featureMap, String featureName, boolean defaultValue) {
+        super(featureMap, featureName, defaultValue);
+        mDefaultValue = defaultValue;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return mDefaultValue;
+    }
+}
diff --git a/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java b/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java
--- a/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java
+++ b/base/android/java/src/org/chromium/base/cached_flags/ValuesReturned.java
@@ -1359,31 +1415,39 @@ diff --git a/components/webui/flags/flags_state.cc b/components/webui/flags/flag
diff --git a/components/webui/flags/resources/app.css b/components/webui/flags/resources/app.css
--- a/components/webui/flags/resources/app.css
+++ b/components/webui/flags/resources/app.css
@@ -391,3 +391,27 @@ cr-tabs {
@@ -391,3 +391,35 @@ cr-tabs {
     padding-top: 1.5rem;
   }
 }
+
+#appcontainer {
+  overflow-y: scroll;
+}
+
+.cromite #header {
+  display: none;
+}
+
+.cromite .blurb-container {
+  display: none;
+}
+
+.cromite #tabs {
+  display: none;
+}
+
+.cromite #tab-content-available {
+  display: none;
+}
+
+.cromite #tab-content-unavailable {
+  display: none;
+}
+
+.cromite #tab-content-cromite {
+  display: block !important;
+}
+
+.cromite .section-header-title {
+  display: none;
+}
+1 −1
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@ new file mode 100644
+
+  update_client::CrxUpdateItem item;
+  if (component_updater->GetComponentDetails(id, &item) && item.component) {
+    base::Value::Dict dict;
+    base::DictValue dict;
+    dict.Set("id", id);
+    dict.Set("version", item.component->version.GetString());
+    dict.Set("status", (int)item.state);
Loading