Loading build/patches/Add-a-proxy-configuration-page.patch +19 −19 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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 Loading @@ -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); + Loading Loading @@ -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: Loading Loading @@ -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 + Loading Loading @@ -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_) { Loading @@ -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()); Loading @@ -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; + Loading Loading @@ -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 { Loading @@ -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); +} + Loading build/patches/Add-an-always-incognito-mode.patch +60 −10 Original line number Diff line number Diff line Loading @@ -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 +- Loading @@ -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 +- Loading @@ -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 + Loading @@ -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 Loading Loading @@ -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. + Loading Loading @@ -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; Loading Loading @@ -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; + } + Loading Loading @@ -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 Loading build/patches/Add-bookmark-import-export-actions.patch +17 −52 Original line number Diff line number Diff line Loading @@ -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 +- Loading @@ -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 +- Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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 { } } Loading Loading @@ -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 Loading Loading @@ -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); Loading build/patches/Add-cromite-flags-support.patch +68 −4 Original line number Diff line number Diff line Loading @@ -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 +++++++++- Loading Loading @@ -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 +- Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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; +} Loading build/patches/Add-cromite-test-support.patch +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
build/patches/Add-a-proxy-configuration-page.patch +19 −19 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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 Loading @@ -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); + Loading Loading @@ -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: Loading Loading @@ -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 + Loading Loading @@ -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_) { Loading @@ -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()); Loading @@ -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; + Loading Loading @@ -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 { Loading @@ -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); +} + Loading
build/patches/Add-an-always-incognito-mode.patch +60 −10 Original line number Diff line number Diff line Loading @@ -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 +- Loading @@ -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 +- Loading @@ -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 + Loading @@ -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 Loading Loading @@ -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. + Loading Loading @@ -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; Loading Loading @@ -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; + } + Loading Loading @@ -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 Loading
build/patches/Add-bookmark-import-export-actions.patch +17 −52 Original line number Diff line number Diff line Loading @@ -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 +- Loading @@ -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 +- Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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 { } } Loading Loading @@ -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 Loading Loading @@ -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); Loading
build/patches/Add-cromite-flags-support.patch +68 −4 Original line number Diff line number Diff line Loading @@ -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 +++++++++- Loading Loading @@ -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 +- Loading Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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; +} Loading
build/patches/Add-cromite-test-support.patch +1 −1 Original line number Diff line number Diff line Loading @@ -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