diff --git a/build/patches/Add-lifetime-options-for-permissions.patch b/build/patches/Add-lifetime-options-for-permissions.patch index 9c10bbb5..3d28380e 100644 --- a/build/patches/Add-lifetime-options-for-permissions.patch +++ b/build/patches/Add-lifetime-options-for-permissions.patch @@ -229,7 +229,7 @@ diff --git a/chrome/browser/permissions/one_time_permissions_tracker_factory.cc diff --git a/chrome/browser/ui/views/permissions/embedded_permission_prompt.cc b/chrome/browser/ui/views/permissions/embedded_permission_prompt.cc --- a/chrome/browser/ui/views/permissions/embedded_permission_prompt.cc +++ b/chrome/browser/ui/views/permissions/embedded_permission_prompt.cc -@@ -650,7 +650,7 @@ void EmbeddedPermissionPrompt::SendDelegateAction(Action action) { +@@ -654,7 +654,7 @@ void EmbeddedPermissionPrompt::SendDelegateAction(Action action) { delegate_->Accept(); break; case Action::kAllowThisTime: @@ -288,7 +288,7 @@ diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/c private void setUpClearDataPreference() { ClearWebsiteStorage preference = findPreference(PREF_CLEAR_DATA); long usage = mSite.getTotalUsage(); -@@ -1091,6 +1096,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment +@@ -1092,6 +1097,10 @@ public class SingleWebsiteSettings extends BaseSiteSettingsFragment AppCompatResources.getColorStateList(getContext(), mHighlightColor) .getDefaultColor()); } @@ -329,7 +329,7 @@ diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/comp diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc --- a/components/content_settings/core/browser/content_settings_utils.cc +++ b/components/content_settings/core/browser/content_settings_utils.cc -@@ -155,6 +155,42 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints) { +@@ -160,6 +160,42 @@ bool IsConstraintPersistent(const ContentSettingConstraints& constraints) { return constraints.session_model() == mojom::SessionModel::DURABLE; } @@ -509,7 +509,7 @@ diff --git a/components/page_info/android/page_info_controller_android.cc b/comp diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc -@@ -1178,6 +1178,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1179,6 +1179,8 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, permission_info.is_one_time = (info.metadata.session_model() == content_settings::mojom::SessionModel::ONE_TIME); @@ -667,7 +667,7 @@ diff --git a/components/permissions/android/java/src/org/chromium/components/per diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc --- a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc -@@ -159,6 +159,11 @@ void PermissionDialogJavaDelegate::DismissDialog() { +@@ -158,6 +158,11 @@ void PermissionDialogJavaDelegate::DismissDialog() { Java_PermissionDialogDelegate_dismissFromNative(env, j_delegate_); } @@ -679,7 +679,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ // static void PermissionDialogDelegate::Create( content::WebContents* web_contents, -@@ -187,6 +192,13 @@ PermissionDialogDelegate* PermissionDialogDelegate::CreateForTesting( +@@ -186,6 +191,13 @@ PermissionDialogDelegate* PermissionDialogDelegate::CreateForTesting( void PermissionDialogDelegate::Accept(JNIEnv* env, const JavaParamRef& obj) { CHECK(permission_prompt_); @@ -693,7 +693,7 @@ diff --git a/components/permissions/android/permission_prompt/permission_dialog_ permission_prompt_->Accept(); } -@@ -194,12 +206,22 @@ void PermissionDialogDelegate::AcceptThisTime( +@@ -193,12 +205,22 @@ void PermissionDialogDelegate::AcceptThisTime( JNIEnv* env, const JavaParamRef& obj) { CHECK(permission_prompt_); @@ -1212,8 +1212,8 @@ diff --git a/components/permissions/permission_request_manager.cc b/components/p if (should_auto_approve_request) { if (should_auto_approve_request == PermissionAction::GRANTED) { -- request->PermissionGranted(/*is_one_time=*/false); -+ request->PermissionGranted(/*is_one_time=*/false, content_settings::mojom::LifetimeMode::ALWAYS); +- request->PermissionGranted(/*is_one_time=*/true); ++ request->PermissionGranted(/*is_one_time=*/true, content_settings::mojom::LifetimeMode::UNTIL_ORIGIN_CLOSED); } request->RequestFinished(); return; diff --git a/build/patches/Add-option-to-use-home-page-as-NTP.patch b/build/patches/Add-option-to-use-home-page-as-NTP.patch index 411dc26a..5d6f997d 100644 --- a/build/patches/Add-option-to-use-home-page-as-NTP.patch +++ b/build/patches/Add-option-to-use-home-page-as-NTP.patch @@ -6,8 +6,8 @@ And allow use about:blank as default homepage License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../tab_management/TabGridDialogMediator.java | 9 ++++++++- .../tasks/tab_management/TabGroupUiMediator.java | 8 +++++++- + .../browser/tasks/tab_management/TabUiUtils.java | 9 ++++++++- .../java/res/xml/homepage_preferences.xml | 5 +++++ .../chrome/browser/homepage/HomepageManager.java | 16 ++++++++++++++++ .../homepage/settings/HomepageSettings.java | 12 ++++++++++++ @@ -20,43 +20,6 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/common/pref_names.h | 4 ++++ 12 files changed, 67 insertions(+), 3 deletions(-) -diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java ---- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java -+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediator.java -@@ -30,6 +30,7 @@ import org.chromium.base.task.TaskTraits; - import org.chromium.chrome.browser.data_sharing.DataSharingNotificationManager; - import org.chromium.chrome.browser.data_sharing.ui.shared_image_tiles.SharedImageTilesCoordinator; - import org.chromium.chrome.browser.flags.ChromeFeatureList; -+import org.chromium.chrome.browser.homepage.HomepageManager; - import org.chromium.chrome.browser.tab.Tab; - import org.chromium.chrome.browser.tab.TabCreationState; - import org.chromium.chrome.browser.tab.TabLaunchType; -@@ -65,6 +66,7 @@ import org.chromium.ui.KeyboardVisibilityDelegate; - import org.chromium.ui.base.DeviceFormFactor; - import org.chromium.ui.modelutil.PropertyModel; - import org.chromium.ui.text.EmptyTextWatcher; -+import org.chromium.url.GURL; - - import java.util.ArrayList; - import java.util.List; -@@ -820,11 +822,16 @@ public class TabGridDialogMediator - - assert relatedTabs.size() > 0; - -+ String url = UrlConstants.NTP_URL; -+ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) { -+ GURL gurl = HomepageManager.getInstance().getHomepageGurl(); -+ url = gurl != null ? gurl.getSpec() : url; -+ } - Tab parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1); - mTabCreatorManager - .getTabCreator(currentTab.isIncognito()) - .createNewTab( -- new LoadUrlParams(UrlConstants.NTP_URL), -+ new LoadUrlParams(url), - TabLaunchType.FROM_TAB_GROUP_UI, - parentTabToAttach); - RecordUserAction.record("MobileNewTabOpened." + mComponentName); diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java @@ -68,7 +31,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import org.chromium.chrome.browser.layouts.LayoutStateProvider; import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver; import org.chromium.chrome.browser.layouts.LayoutType; -@@ -427,10 +428,15 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -433,10 +434,15 @@ public class TabGroupUiMediator implements BackPressHandler { assert relatedTabs.size() > 0; parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1); @@ -85,6 +48,33 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser TabLaunchType.FROM_TAB_GROUP_UI, parentTabToAttach); RecordUserAction.record( +diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java +--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java ++++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiUtils.java +@@ -31,6 +31,8 @@ import org.chromium.components.tab_group_sync.SavedTabGroup; + import org.chromium.components.tab_group_sync.TabGroupSyncService; + import org.chromium.components.tab_groups.TabGroupColorId; + import org.chromium.content_public.browser.LoadUrlParams; ++import org.chromium.chrome.browser.homepage.HomepageManager; ++import org.chromium.url.GURL; + + import java.util.List; + import java.util.Objects; +@@ -191,8 +193,13 @@ public class TabUiUtils { + List relatedTabs = filter.getRelatedTabList(tabId); + assert relatedTabs.size() > 0; + ++ String url = UrlConstants.NTP_URL; ++ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) { ++ GURL gurl = HomepageManager.getInstance().getHomepageGurl(); ++ url = gurl != null ? gurl.getSpec() : url; ++ } + Tab parentTabToAttach = relatedTabs.get(relatedTabs.size() - 1); +- tabCreator.createNewTab(new LoadUrlParams(UrlConstants.NTP_URL), type, parentTabToAttach); ++ tabCreator.createNewTab(new LoadUrlParams(url), type, parentTabToAttach); + } + + /** diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml --- a/chrome/android/java/res/xml/homepage_preferences.xml +++ b/chrome/android/java/res/xml/homepage_preferences.xml @@ -103,7 +93,7 @@ diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/andro diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java -@@ -238,6 +238,22 @@ public class HomepageManager +@@ -237,6 +237,22 @@ public class HomepageManager notifyHomepageUpdated(); } @@ -184,7 +174,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome import org.chromium.chrome.browser.prefetch.settings.PreloadPagesSettingsBridge; import org.chromium.chrome.browser.prefetch.settings.PreloadPagesState; import org.chromium.chrome.browser.profiles.Profile; -@@ -484,6 +485,13 @@ public class ChromeTabCreator extends TabCreator { +@@ -486,6 +487,13 @@ public class ChromeTabCreator extends TabCreator { * @return the created tab. */ public Tab launchUrl(String url, @TabLaunchType int type, Intent intent, long intentTimestamp) { @@ -223,7 +213,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1414,6 +1414,9 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1453,6 +1453,9 @@ Your Google account may have other forms of browsing history like searches and a Last hour @@ -236,7 +226,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -89,6 +89,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -91,6 +91,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( prefs::kShowForwardButton, true, GetHomeAndForwardButtonAndHomePageIsNewTabPageFlags()); @@ -248,7 +238,7 @@ diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_u diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -1350,6 +1350,10 @@ inline constexpr char kShowHomeButton[] = "browser.show_home_button"; +@@ -1361,6 +1361,10 @@ inline constexpr char kShowHomeButton[] = "browser.show_home_button"; // toolbar. inline constexpr char kShowForwardButton[] = "browser.show_forward_button"; diff --git a/build/patches/Add-setting-to-clear-data-on-exit.patch b/build/patches/Add-setting-to-clear-data-on-exit.patch index aec4cd48..1a3b5f91 100644 --- a/build/patches/Add-setting-to-clear-data-on-exit.patch +++ b/build/patches/Add-setting-to-clear-data-on-exit.patch @@ -566,7 +566,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -1823,6 +1823,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1814,6 +1814,7 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, {"clearedData", IDS_SETTINGS_CLEARED_DATA}, {"clearBrowsingData", IDS_SETTINGS_CLEAR_BROWSING_DATA}, {"clearBrowsingDataDescription", IDS_SETTINGS_CLEAR_DATA_DESCRIPTION}, diff --git a/build/patches/Add-support-for-writing-URIs.patch b/build/patches/Add-support-for-writing-URIs.patch index 53157613..ecea32d1 100644 --- a/build/patches/Add-support-for-writing-URIs.patch +++ b/build/patches/Add-support-for-writing-URIs.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils.cc --- a/base/android/content_uri_utils.cc +++ b/base/android/content_uri_utils.cc -@@ -39,6 +39,16 @@ int64_t GetContentUriFileSize(const FilePath& content_uri) { +@@ -68,6 +68,16 @@ int64_t GetContentUriFileSize(const FilePath& content_uri) { return Java_ContentUriUtils_getContentUriFileSize(env, j_uri); } @@ -35,9 +35,9 @@ diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils. diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h --- a/base/android/content_uri_utils.h +++ b/base/android/content_uri_utils.h -@@ -18,6 +18,10 @@ namespace base { - // Returns -1 if the URI is invalid. - BASE_EXPORT File OpenContentUriForRead(const FilePath& content_uri); +@@ -27,6 +27,10 @@ BASE_EXPORT std::optional TranslateOpenFlagsToJavaMode( + BASE_EXPORT File OpenContentUri(const FilePath& content_uri, + uint32_t open_flags); +// Opens a content URI for write and returns the file descriptor to the caller. +// Returns -1 if the URI is invalid. @@ -67,7 +67,7 @@ diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base /** This class provides methods to access content URI schemes. */ public abstract class ContentUriUtils { private static final String TAG = "ContentUriUtils"; -@@ -86,6 +90,36 @@ public abstract class ContentUriUtils { +@@ -89,6 +93,36 @@ public abstract class ContentUriUtils { return -1; } diff --git a/build/patches/Allow-building-without-supervised-users.patch b/build/patches/Allow-building-without-supervised-users.patch index a03e049b..44dd1425 100644 --- a/build/patches/Allow-building-without-supervised-users.patch +++ b/build/patches/Allow-building-without-supervised-users.patch @@ -4,61 +4,37 @@ Subject: Allow building without supervised users License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/android/BUILD.gn | 1 - - .../browser/feed/FeedSurfaceCoordinator.java | 5 +---- - .../feedback/ChromeFeedbackCollector.java | 1 - - chrome/browser/BUILD.gn | 2 -- - chrome/browser/feedback/android/BUILD.gn | 2 -- - .../prefs/chrome_pref_service_factory.cc | 2 +- - .../profiles/profile_attributes_entry.cc | 2 +- - chrome/browser/profiles/profile_impl.cc | 5 +---- - chrome/browser/profiles/profile_manager.cc | 20 ------------------- - chrome/browser/ui/webui/managed_ui_handler.cc | 4 ---- - .../webui/management/management_ui_handler.cc | 4 ---- - .../browser/supervised_user_pref_store.cc | 1 + - .../browser/supervised_user_preferences.cc | 6 +++++- - .../core/browser/supervised_user_service.cc | 5 +---- - .../core/browser/supervised_user_utils.cc | 1 + - .../supervised_user/core/common/features.cc | 6 ++++++ - 16 files changed, 18 insertions(+), 49 deletions(-) + chrome/android/BUILD.gn | 1 - + .../chrome/browser/feedback/ChromeFeedbackCollector.java | 1 - + chrome/browser/feedback/android/BUILD.gn | 2 -- + chrome/browser/prefs/chrome_pref_service_factory.cc | 2 +- + chrome/browser/profiles/profile_attributes_entry.cc | 2 +- + chrome/browser/profiles/profile_impl.cc | 5 +---- + chrome/browser/profiles/profile_manager.cc | 7 ------- + chrome/browser/ui/webui/managed_ui_handler.cc | 4 ---- + .../browser/ui/webui/management/management_ui_handler.cc | 4 ---- + .../core/browser/supervised_user_pref_store.cc | 1 + + .../core/browser/supervised_user_preferences.cc | 6 +++++- + .../core/browser/supervised_user_service.cc | 5 +---- + .../supervised_user/core/browser/supervised_user_utils.cc | 1 + + components/supervised_user/core/common/features.cc | 6 ++++++ + 14 files changed, 17 insertions(+), 30 deletions(-) diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -780,7 +780,6 @@ if (current_toolchain == default_toolchain) { - "//components/dom_distiller/core:distiller_type_java", - "//components/ntp_tiles:ntp_tiles_enums_java", +@@ -783,7 +783,6 @@ if (current_toolchain == default_toolchain) { "//components/offline_pages/core:offline_page_model_enums_java", + "//components/sharing_message:sharing_dialog_type_generated_enum", + "//components/sharing_message:sharing_send_message_result_generated_enum", - "//components/supervised_user/core/browser:supervised_user_utils_enum_javagen", ] # From java_sources.gni. -diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java ---- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java -+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java -@@ -67,7 +67,6 @@ import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; - import org.chromium.components.feature_engagement.EventConstants; - import org.chromium.components.feature_engagement.Tracker; - import org.chromium.components.prefs.PrefService; --import org.chromium.components.supervised_user.SupervisedUserPreferences; - import org.chromium.components.user_prefs.UserPrefs; - import org.chromium.third_party.android.swiperefresh.SwipeRefreshLayout; - import org.chromium.ui.base.DeviceFormFactor; -@@ -784,9 +783,7 @@ public class FeedSurfaceCoordinator - * Returns true if the supervised user feed should be displayed. - */ - public boolean shouldDisplaySupervisedFeed() { -- PrefService prefService = UserPrefs.get(mProfile); -- return SupervisedUserPreferences.isSubjectToParentalControls(prefService) -- && ChromeFeatureList.isEnabled(ChromeFeatureList.KID_FRIENDLY_CONTENT_FEED); -+ return false; - } - - /** diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java --- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java -@@ -85,7 +85,6 @@ public class ChromeFeedbackCollector extends FeedbackCollectorSetManagedPolicies(policy_service, policy_connector); factory->SetRecommendedPolicies(policy_service, policy_connector); @@ -112,7 +76,7 @@ diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browse diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc --- a/chrome/browser/profiles/profile_attributes_entry.cc +++ b/chrome/browser/profiles/profile_attributes_entry.cc -@@ -459,7 +459,7 @@ bool ProfileAttributesEntry::IsSigninRequired() const { +@@ -454,7 +454,7 @@ bool ProfileAttributesEntry::IsSigninRequired() const { } std::string ProfileAttributesEntry::GetSupervisedUserId() const { @@ -135,7 +99,7 @@ diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/p // Changes in the profile avatar. pref_change_registrar_.Add( -@@ -1629,6 +1625,7 @@ GURL ProfileImpl::GetHomePage() { +@@ -1631,6 +1627,7 @@ GURL ProfileImpl::GetHomePage() { } void ProfileImpl::UpdateSupervisedUserIdInStorage() { @@ -146,31 +110,18 @@ diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/p diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc -@@ -1212,23 +1212,6 @@ void ProfileManager::InitProfileUserPrefs(Profile* profile) { +@@ -1213,10 +1213,6 @@ void ProfileManager::InitProfileUserPrefs(Profile* profile) { profile->GetPrefs()->SetString(prefs::kProfileName, profile_name); } -- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); -- bool force_supervised_user_id = --#if BUILDFLAG(IS_CHROMEOS_ASH) -- !ash::IsSigninBrowserContext(profile) && -- !ash::IsLockScreenAppBrowserContext(profile) && --#endif -- command_line->HasSwitch(switches::kSupervisedUserId); -- -- if (force_supervised_user_id) { -- supervised_user_id = -- command_line->GetSwitchValueASCII(switches::kSupervisedUserId); -- } -- if (force_supervised_user_id || -- !profile->GetPrefs()->HasPrefPath(prefs::kSupervisedUserId)) { +- if (!profile->GetPrefs()->HasPrefPath(prefs::kSupervisedUserId)) { - profile->GetPrefs()->SetString(prefs::kSupervisedUserId, - supervised_user_id); - } #if !BUILDFLAG(IS_ANDROID) if (profile->IsNewProfile()) { profile->GetPrefs()->SetBoolean(prefs::kHasSeenWelcomePage, false); -@@ -2041,9 +2024,6 @@ void ProfileManager::AddProfileToStorage(Profile* profile) { +@@ -2029,9 +2025,6 @@ void ProfileManager::AddProfileToStorage(Profile* profile) { init_params.icon_index = profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex); @@ -222,7 +173,7 @@ diff --git a/components/supervised_user/core/browser/supervised_user_pref_store. diff --git a/components/supervised_user/core/browser/supervised_user_preferences.cc b/components/supervised_user/core/browser/supervised_user_preferences.cc --- a/components/supervised_user/core/browser/supervised_user_preferences.cc +++ b/components/supervised_user/core/browser/supervised_user_preferences.cc -@@ -165,6 +165,10 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -158,6 +158,10 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { } void EnableParentalControls(PrefService& pref_service) { @@ -233,7 +184,7 @@ diff --git a/components/supervised_user/core/browser/supervised_user_preferences pref_service.SetString(prefs::kSupervisedUserId, supervised_user::kChildAccountSUID); SetIsChildAccountStatusKnown(pref_service); -@@ -187,7 +191,7 @@ bool IsSafeSitesEnabled(const PrefService& pref_service) { +@@ -180,7 +184,7 @@ bool IsSafeSitesEnabled(const PrefService& pref_service) { } bool IsSubjectToParentalControls(const PrefService& pref_service) { @@ -241,7 +192,7 @@ diff --git a/components/supervised_user/core/browser/supervised_user_preferences + return false; } - bool AreExtensionsPermissionsEnabled(const PrefService& pref_service) { + } // namespace supervised_user diff --git a/components/supervised_user/core/browser/supervised_user_service.cc b/components/supervised_user/core/browser/supervised_user_service.cc --- a/components/supervised_user/core/browser/supervised_user_service.cc +++ b/components/supervised_user/core/browser/supervised_user_service.cc @@ -256,7 +207,7 @@ diff --git a/components/supervised_user/core/browser/supervised_user_service.cc FirstTimeInterstitialBannerState banner_state = static_cast( user_prefs_->GetInteger(prefs::kFirstTimeInterstitialBannerState)); -@@ -190,6 +186,7 @@ FirstTimeInterstitialBannerState SupervisedUserService::GetUpdatedBannerState( +@@ -187,6 +183,7 @@ FirstTimeInterstitialBannerState SupervisedUserService::GetUpdatedBannerState( } void SupervisedUserService::SetActive(bool active) { @@ -278,7 +229,7 @@ diff --git a/components/supervised_user/core/browser/supervised_user_utils.cc b/ diff --git a/components/supervised_user/core/common/features.cc b/components/supervised_user/core/common/features.cc --- a/components/supervised_user/core/common/features.cc +++ b/components/supervised_user/core/common/features.cc -@@ -179,4 +179,10 @@ bool IsKidFriendlyContentFeedAvailable() { +@@ -177,4 +177,10 @@ bool IsKidFriendlyContentFeedAvailable() { return base::FeatureList::IsEnabled(kKidFriendlyContentFeed); } diff --git a/build/patches/Always-use-new-tab-page-for-default-home-page.patch b/build/patches/Always-use-new-tab-page-for-default-home-page.patch index df874db6..0d1c9dfc 100644 --- a/build/patches/Always-use-new-tab-page-for-default-home-page.patch +++ b/build/patches/Always-use-new-tab-page-for-default-home-page.patch @@ -6,18 +6,18 @@ Ignore any partner-provided home page. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../chromium/chrome/browser/homepage/HomepageManager.java | 4 ---- - .../partnercustomizations/PartnerBrowserCustomizations.java | 2 +- - .../org/chromium/components/search_engines/TemplateUrl.java | 1 + - .../search_engines/android/template_url_service_android.cc | 5 +---- - .../always-use-new-tab-page-for-default-home-page.inc | 2 ++ - 5 files changed, 5 insertions(+), 9 deletions(-) + .../org/chromium/chrome/browser/homepage/HomepageManager.java | 4 ---- + .../partnercustomizations/PartnerBrowserCustomizations.java | 2 +- + .../org/chromium/components/search_engines/TemplateUrl.java | 1 + + .../search_engines/android/template_url_service_android.cc | 1 + + .../always-use-new-tab-page-for-default-home-page.inc | 2 ++ + 5 files changed, 5 insertions(+), 5 deletions(-) create mode 100755 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java -@@ -156,10 +156,6 @@ public class HomepageManager +@@ -155,10 +155,6 @@ public class HomepageManager * tab page if the homepage button is force enabled via flag. */ public GURL getDefaultHomepageGurl() { @@ -54,18 +54,14 @@ diff --git a/components/search_engines/android/java/src/org/chromium/components/ diff --git a/components/search_engines/android/template_url_service_android.cc b/components/search_engines/android/template_url_service_android.cc --- a/components/search_engines/android/template_url_service_android.cc +++ b/components/search_engines/android/template_url_service_android.cc -@@ -405,10 +405,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( +@@ -404,6 +404,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( + jimage_translate_source_language_param_key, const base::android::JavaParamRef& - jimage_translate_target_language_param_key, - jboolean set_as_default) { -- // The function is scheduled to run only when the service is loaded, see -- // `TemplateUrlService#runWhenLoaded()`. -- CHECK(template_url_service_->loaded(), base::NotFatalUntil::M128); -- + jimage_translate_target_language_param_key) { + if ((true)) return false; - // Check if there is already a search engine created from Play API. - TemplateURLService::TemplateURLVector template_urls = - template_url_service_->GetTemplateURLs(); + // The function is scheduled to run only when the service is loaded, see + // `TemplateUrlService#runWhenLoaded()`. + CHECK(template_url_service_->loaded(), base::NotFatalUntil::M128); diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/always-use-new-tab-page-for-default-home-page.inc new file mode 100755 --- /dev/null diff --git a/build/patches/Bromite-subresource-adblocker.patch b/build/patches/Bromite-subresource-adblocker.patch index 8eea9e25..967fded7 100644 --- a/build/patches/Bromite-subresource-adblocker.patch +++ b/build/patches/Bromite-subresource-adblocker.patch @@ -22,7 +22,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/java/res/xml/main_preferences.xml | 5 + .../browser/settings/AdBlockEditor.java | 91 ++++++ .../browser/settings/AdBlockPreferences.java | 58 ++++ - .../chrome/browser/tabmodel/TabModelImpl.java | 2 +- + .../chrome/browser/tabmodel/TabModelImpl.java | 4 +- chrome/app/generated_resources.grd | 10 + chrome/browser/after_startup_task_utils.cc | 4 + chrome/browser/browser_process.h | 6 + @@ -52,7 +52,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../core/browser/verified_ruleset_dealer.cc | 4 + .../core/common/indexed_ruleset.cc | 5 +- .../Bromite-subresource-adblocker.inc | 3 + - 40 files changed, 1256 insertions(+), 127 deletions(-) + 40 files changed, 1256 insertions(+), 129 deletions(-) create mode 100644 chrome/android/java/res/layout/adblock_editor.xml create mode 100644 chrome/android/java/res/xml/adblock_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/AdBlockEditor.java @@ -68,7 +68,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -353,6 +353,7 @@ if (current_toolchain == default_toolchain) { +@@ -357,6 +357,7 @@ if (current_toolchain == default_toolchain) { "//chrome/android/modules/cablev2_authenticator/public:java", "//chrome/android/modules/stack_unwinder/provider:java", "//chrome/android/webapk/libs/client:client_java", @@ -79,7 +79,7 @@ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -428,6 +428,7 @@ chrome_java_resources = [ +@@ -433,6 +433,7 @@ chrome_java_resources = [ "java/res/layout/account_divider_preference.xml", "java/res/layout/account_management_account_row.xml", "java/res/layout/app_history_filter.xml", @@ -87,7 +87,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja "java/res/layout/auto_sign_in_first_run_dialog.xml", "java/res/layout/autofill_billing_address_dropdown.xml", "java/res/layout/autofill_card_name_and_number.xml", -@@ -620,6 +621,7 @@ chrome_java_resources = [ +@@ -623,6 +624,7 @@ chrome_java_resources = [ "java/res/xml/about_chrome_preferences.xml", "java/res/xml/account_management_preferences.xml", "java/res/xml/ad_services_config.xml", @@ -98,7 +98,7 @@ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_ja diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -950,6 +950,8 @@ chrome_java_sources = [ +@@ -941,6 +941,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/permissions/PermissionSettingsBridge.java", "java/src/org/chromium/chrome/browser/permissions/PermissionUpdateRequester.java", "java/src/org/chromium/chrome/browser/photo_picker/DecoderServiceImpl.java", @@ -428,19 +428,21 @@ new file mode 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java -@@ -860,7 +860,7 @@ public class TabModelImpl extends TabModelJniBridge { - protected boolean createTabWithWebContents( - Tab parent, Profile profile, WebContents webContents) { - return getTabCreator(profile.isOffTheRecord()) -- .createTabWithWebContents(parent, webContents, TabLaunchType.FROM_RECENT_TABS); -+ .createTabWithWebContents(parent, webContents, TabLaunchType.FROM_LINK); +@@ -853,9 +853,7 @@ public class TabModelImpl extends TabModelJniBridge { + .createTabWithWebContents( + parent, + webContents, +- select +- ? TabLaunchType.FROM_RECENT_TABS_FOREGROUND +- : TabLaunchType.FROM_RECENT_TABS); ++ TabLaunchType.FROM_LINK); } @Override diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd -@@ -15805,6 +15805,16 @@ Please help our engineers fix this problem. Tell us what happened right before y +@@ -15905,6 +15905,16 @@ Please help our engineers fix this problem. Tell us what happened right before y Never show this again. @@ -481,7 +483,7 @@ diff --git a/chrome/browser/after_startup_task_utils.cc b/chrome/browser/after_s diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h --- a/chrome/browser/browser_process.h +++ b/chrome/browser/browser_process.h -@@ -21,6 +21,7 @@ +@@ -31,6 +31,7 @@ #include "build/chromeos_buildflags.h" #include "chrome/common/buildflags.h" #include "media/media_buildflags.h" @@ -489,7 +491,7 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h class BackgroundModeManager; class BrowserProcessPlatformPart; -@@ -72,6 +73,10 @@ namespace component_updater { +@@ -86,6 +87,10 @@ namespace component_updater { class ComponentUpdateService; } @@ -497,10 +499,10 @@ diff --git a/chrome/browser/browser_process.h b/chrome/browser/browser_process.h +class AdBlockUpdaterService; +} + - namespace extensions { - class EventRouterForwarder; + namespace gcm { + class GCMDriver; } -@@ -255,6 +260,7 @@ class BrowserProcess { +@@ -264,6 +269,7 @@ class BrowserProcess { #endif virtual component_updater::ComponentUpdateService* component_updater() = 0; @@ -550,7 +552,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc MediaFileSystemRegistry* media_file_system_registry() override; WebRtcLogUploader* webrtc_log_uploader() override; network_time::NetworkTimeTracker* network_time_tracker() override; -@@ -420,6 +421,7 @@ class BrowserProcessImpl : public BrowserProcess, +@@ -419,6 +420,7 @@ class BrowserProcessImpl : public BrowserProcess, // to concerns over integrity of data shared between profiles, // but some users of component updater only install per-user. std::unique_ptr component_updater_; @@ -561,7 +563,7 @@ diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_proc diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc -@@ -474,6 +474,9 @@ StartupProfileInfo CreateInitialProfile( +@@ -470,6 +470,9 @@ StartupProfileInfo CreateInitialProfile( // missing code in the above test. CHECK(profile_info.profile) << "Cannot get default profile."; @@ -672,7 +674,7 @@ new file mode 100755 diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -630,6 +630,10 @@ SystemNetworkContextManager::~SystemNetworkContextManager() { +@@ -635,6 +635,10 @@ SystemNetworkContextManager::~SystemNetworkContextManager() { void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { StubResolverConfigReader::RegisterPrefs(registry); @@ -686,7 +688,7 @@ diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/brows diff --git a/chrome/browser/sessions/session_restore_android.cc b/chrome/browser/sessions/session_restore_android.cc --- a/chrome/browser/sessions/session_restore_android.cc +++ b/chrome/browser/sessions/session_restore_android.cc -@@ -56,8 +56,10 @@ content::WebContents* SessionRestore::RestoreForeignSessionTab( +@@ -57,8 +57,10 @@ content::WebContents* SessionRestore::RestoreForeignSessionTab( DCHECK(current_tab); // If swapped, return the current tab's most up-to-date web contents. if (disposition == WindowOpenDisposition::CURRENT_TAB) { @@ -726,7 +728,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -2779,6 +2779,11 @@ inline constexpr char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled"; +@@ -2824,6 +2824,11 @@ inline constexpr char kAudioCaptureAllowed[] = "hardware.audio_capture_enabled"; inline constexpr char kAudioCaptureAllowedUrls[] = "hardware.audio_capture_allowed_urls"; @@ -1568,7 +1570,7 @@ diff --git a/components/subresource_filter/content/browser/content_subresource_f web_contents_helper_(web_contents_helper) {} ContentSubresourceFilterThrottleManager:: -@@ -668,6 +672,17 @@ ContentSubresourceFilterThrottleManager:: +@@ -667,6 +671,17 @@ ContentSubresourceFilterThrottleManager:: throttle->NotifyPageActivationWithRuleset(EnsureRulesetHandle(), ad_tagging_state); } diff --git a/build/patches/Client-hints-overrides.patch b/build/patches/Client-hints-overrides.patch index 45f4b050..344be4e2 100644 --- a/build/patches/Client-hints-overrides.patch +++ b/build/patches/Client-hints-overrides.patch @@ -20,9 +20,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../blink/renderer/core/frame/navigator_ua.idl | 4 +++- .../renderer/core/frame/navigator_ua_data.cc | 1 + .../renderer/core/frame/navigator_ua_data.idl | 5 ++++- - .../renderer/core/loader/base_fetch_context.cc | 6 ++++-- + .../renderer/core/loader/frame_fetch_context.cc | 4 +++- .../platform/runtime_enabled_features.json5 | 5 +++++ - 15 files changed, 56 insertions(+), 14 deletions(-) + 15 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Client-hints-overrides.inc create mode 100644 cromite_flags/content/common/features_cc/Client-hints-overrides.inc create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Client-hints-overrides.inc @@ -90,7 +90,7 @@ diff --git a/content/browser/client_hints/client_hints.cc b/content/browser/clie diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc -@@ -1206,6 +1206,11 @@ void NavigationURLLoaderImpl::OnAcceptCHFrameReceived( +@@ -1208,6 +1208,11 @@ void NavigationURLLoaderImpl::OnAcceptCHFrameReceived( return; } @@ -131,7 +131,7 @@ new file mode 100644 diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc -@@ -107,6 +107,7 @@ const size_t kMaxRestarts = 32; +@@ -108,6 +108,7 @@ const size_t kMaxRestarts = 32; // Returns true when Early Hints are allowed on the given protocol. bool EarlyHintsAreAllowedOn(HttpConnectionInfo connection_info) { @@ -231,40 +231,31 @@ diff --git a/third_party/blink/renderer/core/frame/navigator_ua_data.idl b/third [HighEntropy, MeasureAs=NavigatorUAData_Brands] readonly attribute FrozenArray brands; [HighEntropy=Direct, MeasureAs=NavigatorUAData_Mobile] readonly attribute boolean mobile; [HighEntropy=Direct, MeasureAs=NavigatorUAData_Platform] readonly attribute DOMString platform; -diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.cc b/third_party/blink/renderer/core/loader/base_fetch_context.cc ---- a/third_party/blink/renderer/core/loader/base_fetch_context.cc -+++ b/third_party/blink/renderer/core/loader/base_fetch_context.cc -@@ -167,7 +167,7 @@ void BaseFetchContext::AddClientHintsIfNecessary( - // specifying accomponying client hints, in which case we disable sending - // them. - using network::mojom::blink::WebClientHintsType; -- if (ua) { -+ if (RuntimeEnabledFeatures::UserAgentClientHintEnabled() && ua) { - // ShouldSendClientHint is called to make sure UA is controlled by - // Permissions Policy. - if (ShouldSendClientHint(policy, resource_origin, is_1p_origin, -@@ -329,7 +329,7 @@ void BaseFetchContext::AddClientHintsIfNecessary( +diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc +--- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc ++++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc +@@ -216,6 +216,8 @@ bool ShouldSendClientHint(const PermissionsPolicy& policy, + bool is_1p_origin, + network::mojom::blink::WebClientHintsType type, + const ClientHintsPreferences& hints_preferences) { ++ if (!RuntimeEnabledFeatures::UserAgentClientHintEnabled()) ++ return false; + // For subresource requests, sending the hint in the fetch request based on + // the permissions policy. + if (!policy.IsFeatureEnabledForOrigin( +@@ -600,7 +602,7 @@ void FrameFetchContext::AddClientHintsIfNecessary( } // Only send User Agent hints if the info is available - if (ua) { + if (RuntimeEnabledFeatures::UserAgentClientHintEnabled() && ua) { - if (ShouldSendClientHint(policy, resource_origin, is_1p_origin, - WebClientHintsType::kUAArch, hints_preferences)) { - SetHttpHeader(WebClientHintsType::kUAArch, -@@ -682,6 +682,8 @@ bool BaseFetchContext::ShouldSendClientHint( - bool is_1p_origin, - network::mojom::blink::WebClientHintsType type, - const ClientHintsPreferences& hints_preferences) const { -+ if (!RuntimeEnabledFeatures::UserAgentClientHintEnabled()) -+ return false; - // For subresource requests, sending the hint in the fetch request based on - // the permissions policy. - if ((!policy || + // ShouldSendClientHint is called to make sure UA is controlled by + // Permissions Policy. + if (ShouldSendClientHint(*policy, resource_origin, is_1p_origin, diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -361,6 +361,11 @@ +@@ -381,6 +381,11 @@ name: "AtomicMoveAPI", status: "test", }, diff --git a/build/patches/Cromite-Branding.patch b/build/patches/Cromite-Branding.patch index 90cc9f77..225be1b9 100644 --- a/build/patches/Cromite-Branding.patch +++ b/build/patches/Cromite-Branding.patch @@ -13137,7 +13137,7 @@ e)fqMZZ`3a)Ds&5H CreateProfilePrefStoreManager( +@@ -290,10 +291,7 @@ std::unique_ptr CreateProfilePrefStoreManager( #endif std::string seed; CHECK(ui::ResourceBundle::HasSharedInstance()); @@ -13218,7 +13218,7 @@ diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html -- +- + $i18n{aboutPageTitle} @@ -13226,7 +13226,7 @@ diff --git a/chrome/browser/resources/settings/settings_menu/settings_menu.html diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -2438,7 +2438,7 @@ Your Google account may have other forms of browsing history like searches and a +@@ -2393,7 +2393,7 @@ Your Google account may have other forms of browsing history like searches and a About Chrome @@ -18920,7 +18920,7 @@ diff --git a/components/version_ui/resources/about_version_mobile.css b/componen diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc -@@ -617,7 +617,7 @@ void ResolveInvalidConfigurations() { +@@ -622,7 +622,7 @@ void ResolveInvalidConfigurations() { base::FeatureList::IsEnabled( features::kPrivacySandboxAdsAPIsM1Override)) && !base::FeatureList::IsEnabled(blink::features::kFencedFrames)) { @@ -18929,7 +18929,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "Fenced frames cannot be enabled in this configuration. Use --" << switches::kEnableFeatures << "=" << blink::features::kFencedFrames.name << " instead."; -@@ -627,9 +627,8 @@ void ResolveInvalidConfigurations() { +@@ -632,9 +632,8 @@ void ResolveInvalidConfigurations() { if (!base::FeatureList::IsEnabled(blink::features::kFencedFrames) && base::FeatureList::IsEnabled( blink::features::kFencedFramesLocalUnpartitionedDataAccess)) { @@ -18941,7 +18941,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "Fenced frames must be enabled in order to enable local " "unpartitioned " << "data access. Use --" << switches::kEnableFeatures << "=" -@@ -642,7 +641,7 @@ void ResolveInvalidConfigurations() { +@@ -647,7 +646,7 @@ void ResolveInvalidConfigurations() { // The Document API should be additionally gated by the // `kBrowsingTopicsDocumentAPI` feature. if (!base::FeatureList::IsEnabled(blink::features::kBrowsingTopics)) { @@ -18950,7 +18950,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "Topics cannot be enabled in this configuration. Use --" << switches::kEnableFeatures << "=" << blink::features::kBrowsingTopics.name << " in addition."; -@@ -662,7 +661,7 @@ void ResolveInvalidConfigurations() { +@@ -667,7 +666,7 @@ void ResolveInvalidConfigurations() { } if (!base::FeatureList::IsEnabled(blink::features::kSharedStorageAPI)) { @@ -18959,7 +18959,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "SharedStorage cannot be enabled in this " "configuration. Use --" << switches::kEnableFeatures << "=" -@@ -672,7 +671,7 @@ void ResolveInvalidConfigurations() { +@@ -677,7 +676,7 @@ void ResolveInvalidConfigurations() { if (!base::FeatureList::IsEnabled(blink::features::kSharedStorageAPIM118) || !base::FeatureList::IsEnabled(blink::features::kSharedStorageAPI)) { @@ -18968,7 +18968,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "SharedStorage for M118+ cannot be enabled in this " "configuration. Use --" << switches::kEnableFeatures << "=" -@@ -683,7 +682,7 @@ void ResolveInvalidConfigurations() { +@@ -688,7 +687,7 @@ void ResolveInvalidConfigurations() { if (!base::FeatureList::IsEnabled(blink::features::kSharedStorageAPIM125) || !base::FeatureList::IsEnabled(blink::features::kSharedStorageAPI)) { @@ -18977,7 +18977,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "SharedStorage for M125+ cannot be enabled in this " "configuration. Use --" << switches::kEnableFeatures << "=" -@@ -694,7 +693,7 @@ void ResolveInvalidConfigurations() { +@@ -699,7 +698,7 @@ void ResolveInvalidConfigurations() { if (!base::FeatureList::IsEnabled( attribution_reporting::features::kConversionMeasurement)) { @@ -18986,7 +18986,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "AttributionReporting cannot be enabled in this " "configuration. Use --" << switches::kEnableFeatures << "=" -@@ -707,8 +706,8 @@ void ResolveInvalidConfigurations() { +@@ -712,8 +711,8 @@ void ResolveInvalidConfigurations() { attribution_reporting::features::kConversionMeasurement) || !base::FeatureList::IsEnabled( network::features::kAttributionReportingCrossAppWeb)) { @@ -18997,7 +18997,7 @@ diff --git a/content/child/runtime_features.cc b/content/child/runtime_features. << "AttributionReportingCrossAppWeb cannot be enabled in this " "configuration. Use --" << switches::kEnableFeatures << "=" -@@ -719,7 +718,7 @@ void ResolveInvalidConfigurations() { +@@ -724,7 +723,7 @@ void ResolveInvalidConfigurations() { } if (!base::FeatureList::IsEnabled(blink::features::kInterestGroupStorage)) { diff --git a/build/patches/Disable-feeds-support-by-default.patch b/build/patches/Disable-feeds-support-by-default.patch index d9d29b91..ed34fd46 100644 --- a/build/patches/Disable-feeds-support-by-default.patch +++ b/build/patches/Disable-feeds-support-by-default.patch @@ -4,32 +4,12 @@ Subject: Disable feeds support by default License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/BUILD.gn | 9 +++++++++ chrome/browser/feed/android/web_feed_bridge.cc | 18 ++++++++++++++++++ - chrome/browser/prefs/browser_prefs.cc | 10 +++++----- + chrome/browser/prefs/browser_prefs.cc | 2 +- .../feed/core/shared_prefs/pref_names.cc | 2 +- components/feed/feed_feature_list.cc | 3 +++ - 5 files changed, 36 insertions(+), 6 deletions(-) + 4 files changed, 23 insertions(+), 2 deletions(-) -diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn ---- a/chrome/browser/BUILD.gn -+++ b/chrome/browser/BUILD.gn -@@ -2658,6 +2658,15 @@ static_library("browser") { - ] - } - -+ if (is_android && !enable_feed_v2) { -+ sources += [ -+ "feed/feed_service_factory.cc", -+ "feed/feed_service_factory.h", -+ ] -+ deps += [ -+ "//components/feed:feature_list", -+ ] -+ } - if (enable_feed_v2) { - sources += [ - "feed/feed_service_factory.cc", diff --git a/chrome/browser/feed/android/web_feed_bridge.cc b/chrome/browser/feed/android/web_feed_bridge.cc --- a/chrome/browser/feed/android/web_feed_bridge.cc +++ b/chrome/browser/feed/android/web_feed_bridge.cc @@ -109,34 +89,7 @@ diff --git a/chrome/browser/feed/android/web_feed_bridge.cc b/chrome/browser/fee diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -251,11 +251,11 @@ - #endif - - #include "components/feed/buildflags.h" --#if BUILDFLAG(ENABLE_FEED_V2) -+//#if BUILDFLAG(ENABLE_FEED_V2) - #include "components/feed/core/common/pref_names.h" // nogncheck - #include "components/feed/core/shared_prefs/pref_names.h" // nogncheck - #include "components/feed/core/v2/ios_shared_prefs.h" // nogncheck --#endif -+//#endif - - #if BUILDFLAG(IS_ANDROID) - #include "chrome/browser/accessibility/accessibility_prefs/android/accessibility_prefs_controller.h" -@@ -1898,10 +1898,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, - ChromeRLZTrackerDelegate::RegisterProfilePrefs(registry); - #endif - --#if BUILDFLAG(ENABLE_FEED_V2) -+//#if BUILDFLAG(ENABLE_FEED_V2) - feed::prefs::RegisterFeedSharedProfilePrefs(registry); - feed::RegisterProfilePrefs(registry); --#endif -+//#endif - - #if BUILDFLAG(IS_ANDROID) - cdm::MediaDrmStorageImpl::RegisterProfilePrefs(registry); -@@ -2688,7 +2688,7 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, +@@ -2695,7 +2695,7 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs, syncer::SyncPrefs::MaybeMigrateAutofillToPerAccountPref(profile_prefs); #endif // !BUILDFLAG(IS_ANDROID) @@ -160,7 +113,7 @@ diff --git a/components/feed/core/shared_prefs/pref_names.cc b/components/feed/c diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc --- a/components/feed/feed_feature_list.cc +++ b/components/feed/feed_feature_list.cc -@@ -150,4 +150,7 @@ bool IsWebFeedEnabledForLocale(const std::string& country) { +@@ -149,4 +149,7 @@ bool IsWebFeedEnabledForLocale(const std::string& country) { !base::FeatureList::IsEnabled(kWebFeedKillSwitch); } diff --git a/build/patches/Disable-privacy-sandbox.patch b/build/patches/Disable-privacy-sandbox.patch index ef8f0611..1526398b 100644 --- a/build/patches/Disable-privacy-sandbox.patch +++ b/build/patches/Disable-privacy-sandbox.patch @@ -36,7 +36,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -3483,6 +3483,9 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed( +@@ -3532,6 +3532,9 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed( const url::Origin* destination_origin, const url::Origin* reporting_origin, bool* can_bypass) { @@ -61,7 +61,7 @@ diff --git a/chrome/browser/first_party_sets/first_party_sets_navigation_throttl diff --git a/chrome/browser/first_party_sets/first_party_sets_policy_service.cc b/chrome/browser/first_party_sets/first_party_sets_policy_service.cc --- a/chrome/browser/first_party_sets/first_party_sets_policy_service.cc +++ b/chrome/browser/first_party_sets/first_party_sets_policy_service.cc -@@ -59,6 +59,7 @@ const base::Value::Dict* GetOverridesPolicyForProfile( +@@ -60,6 +60,7 @@ const base::Value::Dict* GetOverridesPolicyForProfile( } ServiceState GetServiceState(Profile* profile, bool pref_enabled) { @@ -69,7 +69,7 @@ diff --git a/chrome/browser/first_party_sets/first_party_sets_policy_service.cc if (profile->IsSystemProfile() || profile->IsGuestSession() || profile->IsOffTheRecord()) { return ServiceState::kPermanentlyDisabled; -@@ -112,7 +113,7 @@ void FirstPartySetsPolicyService::Init() { +@@ -114,7 +115,7 @@ void FirstPartySetsPolicyService::Init() { profile, profile->GetPrefs() && profile->GetPrefs()->GetBoolean( prefs::kPrivacySandboxRelatedWebsiteSetsEnabled)); @@ -81,7 +81,7 @@ diff --git a/chrome/browser/first_party_sets/first_party_sets_policy_service.cc diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -1288,7 +1288,7 @@ void RegisterProfilePrefsForMigration( +@@ -1298,7 +1298,7 @@ void RegisterProfilePrefsForMigration( registry->RegisterTimePref(kPlusAddressLastFetchedTime, base::Time()); // Deprecated 03/2024. @@ -93,7 +93,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc --- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc -@@ -477,7 +477,7 @@ bool PrivacySandboxServiceImpl::IsRestrictedNoticeEnabled() { +@@ -519,7 +519,7 @@ bool PrivacySandboxServiceImpl::IsRestrictedNoticeEnabled() { void PrivacySandboxServiceImpl::SetFirstPartySetsDataAccessEnabled( bool enabled) { pref_service_->SetBoolean(prefs::kPrivacySandboxRelatedWebsiteSetsEnabled, @@ -161,9 +161,9 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_attestations/privacy_san diff --git a/components/privacy_sandbox/privacy_sandbox_features.cc b/components/privacy_sandbox/privacy_sandbox_features.cc --- a/components/privacy_sandbox/privacy_sandbox_features.cc +++ b/components/privacy_sandbox/privacy_sandbox_features.cc -@@ -288,4 +288,8 @@ BASE_FEATURE(kPrivacySandboxMigratePrefsToNoticeConsentDataModel, - "PrivacySandboxMigratePrefsToNoticeConsentDataModel", - base::FEATURE_ENABLED_BY_DEFAULT); +@@ -236,4 +236,8 @@ BASE_FEATURE(kPrivacySandboxPrivacyPolicy, + "PrivacySandboxPrivacyPolicy", + base::FEATURE_DISABLED_BY_DEFAULT); +SET_CROMITE_FEATURE_DISABLED(kPrivacySandboxSettings4); +SET_CROMITE_FEATURE_ENABLED(kDisablePrivacySandboxPrompts); @@ -272,23 +272,18 @@ diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/compo diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/components/privacy_sandbox/tracking_protection_prefs.cc --- a/components/privacy_sandbox/tracking_protection_prefs.cc +++ b/components/privacy_sandbox/tracking_protection_prefs.cc -@@ -61,14 +61,14 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -53,9 +53,9 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { - // Tracking Protection Settings Prefs + // TODO(https://b/333527273): Deprecate registry->RegisterBooleanPref( - prefs::kBlockAll3pcToggleEnabled, false, + prefs::kBlockAll3pcToggleEnabled, false, // with true enables FPS user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); +- registry->RegisterBooleanPref(prefs::kTrackingProtection3pcdEnabled, false); ++ registry->RegisterBooleanPref(prefs::kTrackingProtection3pcdEnabled, false); // with true enables FPS registry->RegisterBooleanPref(prefs::kAllowAll3pcToggleEnabled, false); registry->RegisterIntegerPref( prefs::kTrackingProtectionLevel, - static_cast(TrackingProtectionLevel::kStandard), - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); -- registry->RegisterBooleanPref(prefs::kTrackingProtection3pcdEnabled, false); -+ registry->RegisterBooleanPref(prefs::kTrackingProtection3pcdEnabled, false); // with true enables FPS - registry->RegisterBooleanPref( - prefs::kIpProtectionEnabled, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); diff --git a/components/signin/public/identity_manager/account_capabilities.cc b/components/signin/public/identity_manager/account_capabilities.cc --- a/components/signin/public/identity_manager/account_capabilities.cc +++ b/components/signin/public/identity_manager/account_capabilities.cc @@ -325,7 +320,7 @@ new file mode 100644 diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -2618,6 +2618,7 @@ BASE_FEATURE(kWebviewAccelerateSmallCanvases, +@@ -2625,6 +2625,7 @@ BASE_FEATURE(kWebviewAccelerateSmallCanvases, // constants for features in the section above. bool IsAllowURNsInIframeEnabled() { diff --git a/build/patches/Enable-Do-Not-Track-by-default.patch b/build/patches/Enable-Do-Not-Track-by-default.patch index ad0c1435..245dbee1 100644 --- a/build/patches/Enable-Do-Not-Track-by-default.patch +++ b/build/patches/Enable-Do-Not-Track-by-default.patch @@ -10,13 +10,13 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/components/privacy_sandbox/tracking_protection_prefs.cc b/components/privacy_sandbox/tracking_protection_prefs.cc --- a/components/privacy_sandbox/tracking_protection_prefs.cc +++ b/components/privacy_sandbox/tracking_protection_prefs.cc -@@ -78,7 +78,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { - prefs::kFingerprintingProtectionEnabled, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); +@@ -47,7 +47,7 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { + base::Time()); + registry->RegisterBooleanPref( - prefs::kEnableDoNotTrack, false, + prefs::kEnableDoNotTrack, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - registry->RegisterBooleanPref(prefs::kUserBypass3pcExceptionsMigrated, false); registry->RegisterBooleanPref(prefs::kEnableGPC, true); + registry->RegisterBooleanPref(prefs::kUserBypass3pcExceptionsMigrated, false); -- diff --git a/build/patches/Enable-Global-Privacy-Control.patch b/build/patches/Enable-Global-Privacy-Control.patch index 29ce6bb4..2ec1cfc5 100644 --- a/build/patches/Enable-Global-Privacy-Control.patch +++ b/build/patches/Enable-Global-Privacy-Control.patch @@ -464,7 +464,7 @@ diff --git a/chrome/browser/ui/prefs/pref_watcher.h b/chrome/browser/ui/prefs/pr diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -1772,6 +1772,9 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1763,6 +1763,9 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, {"doNotTrackDialogMessage", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_TEXT}, {"doNotTrackDialogLearnMoreA11yLabel", IDS_SETTINGS_ENABLE_DO_NOT_TRACK_DIALOG_LEARN_MORE_ACCESSIBILITY_LABEL}, diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index 91fecc5f..065ffb6c 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -61,7 +61,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.R; import org.chromium.chrome.browser.password_check.PasswordCheck; -@@ -59,6 +60,11 @@ import java.lang.annotation.Retention; +@@ -58,6 +59,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Locale; @@ -73,7 +73,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage /** * The "Passwords" screen in Settings, which allows the user to enable or disable password saving, * to view saved passwords (just the username and URL), and to delete saved passwords. -@@ -66,7 +72,7 @@ import java.util.Locale; +@@ -65,7 +71,7 @@ import java.util.Locale; public class PasswordSettings extends ChromeBaseSettingsFragment implements PasswordListObserver, Preference.OnPreferenceClickListener, @@ -82,7 +82,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage @IntDef({ TrustedVaultBannerState.NOT_SHOWN, TrustedVaultBannerState.OFFER_OPT_IN, -@@ -96,6 +102,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -95,6 +101,12 @@ public class PasswordSettings extends ChromeBaseSettingsFragment public static final String PREF_TRUSTED_VAULT_BANNER = "trusted_vault_banner"; public static final String PREF_KEY_MANAGE_ACCOUNT_LINK = "manage_account_link"; @@ -95,7 +95,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage private static final String PREF_KEY_CATEGORY_SAVED_PASSWORDS = "saved_passwords"; private static final String PREF_KEY_CATEGORY_EXCEPTIONS = "exceptions"; private static final String PREF_KEY_SAVED_PASSWORDS_NO_TEXT = "saved_passwords_no_text"; -@@ -128,6 +140,8 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -127,6 +139,8 @@ public class PasswordSettings extends ChromeBaseSettingsFragment private Preference mLinkPref; private Menu mMenu; @@ -104,7 +104,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage private @ManagePasswordsReferrer int mManagePasswordsReferrer; private BottomSheetController mBottomSheetController; -@@ -307,6 +321,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -306,6 +320,7 @@ public class PasswordSettings extends ChromeBaseSettingsFragment } createSavePasswordsSwitch(); @@ -112,7 +112,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage if (shouldShowAutoSigninOption()) { createAutoSignInCheckbox(); } -@@ -580,6 +595,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment +@@ -578,6 +593,71 @@ public class PasswordSettings extends ChromeBaseSettingsFragment getPrefService().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE)); } @@ -187,7 +187,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -457,8 +457,7 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -462,8 +462,7 @@ public class MainSettings extends ChromeBaseSettingsFragment private void updateAutofillPreferences() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O @@ -214,7 +214,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav /** * Implementation of the interface {@link Tab}. Contains and manages a {@link ContentView}. This * class is not intended to be extended. -@@ -995,6 +1002,11 @@ class TabImpl implements Tab { +@@ -1000,6 +1007,11 @@ class TabImpl implements Tab { for (TabObserver observer : mObservers) observer.onDestroyed(this); mObservers.clear(); @@ -226,7 +226,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav mUserDataHost.destroy(); mTabViewManager.destroy(); hideNativePage(false, null); -@@ -1267,8 +1279,7 @@ class TabImpl implements Tab { +@@ -1274,8 +1286,7 @@ class TabImpl implements Tab { */ boolean providesAutofillStructure() { // TODO(b/326231439): Check pref and AutofillService! @@ -236,7 +236,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav } // Forwarded from TabWebContentsDelegateAndroid. -@@ -1999,15 +2010,20 @@ class TabImpl implements Tab { +@@ -2017,15 +2028,20 @@ class TabImpl implements Tab { * @return true if the the provider is available for the given WebContents. */ private boolean prepareAutofillProvider(WebContents newWebContents) { @@ -263,7 +263,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav mAutofillProvider = new AutofillProvider( getContext(), -@@ -2016,7 +2032,16 @@ class TabImpl implements Tab { +@@ -2034,7 +2050,16 @@ class TabImpl implements Tab { getContext().getString(R.string.app_name)); TabImplJni.get().initializeAutofillIfNecessary(mNativeTabAndroid); } @@ -284,7 +284,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.jav diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -3918,28 +3918,6 @@ const FeatureEntry::FeatureVariation kAutofillGranularFillingAvailableVariations +@@ -3858,28 +3858,6 @@ const FeatureEntry::FeatureVariation kAutofillGranularFillingAvailableVariations kAutofillGranularFillingAvailableVariationWithExpandControlVisibleOnSelectionOnly), nullptr}}; @@ -313,7 +313,7 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc const FeatureEntry::FeatureParam kDefaultBrowserPromptRefreshAggressive[] = { {"max_prompt_count", "-1"}, {"reprompt_duration", "7d"}, -@@ -6144,15 +6122,6 @@ const FeatureEntry kFeatureEntries[] = { +@@ -6184,15 +6162,6 @@ const FeatureEntry kFeatureEntries[] = { #endif // BUILDFLAG(IS_CHROMEOS_ASH) #if BUILDFLAG(IS_ANDROID) @@ -345,7 +345,7 @@ diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_ diff --git a/chrome/browser/autofill/android/BUILD.gn b/chrome/browser/autofill/android/BUILD.gn --- a/chrome/browser/autofill/android/BUILD.gn +++ b/chrome/browser/autofill/android/BUILD.gn -@@ -125,7 +125,7 @@ android_library("bottom_sheet_utils_java") { +@@ -129,7 +129,7 @@ android_library("bottom_sheet_utils_java") { generate_jni("jni_headers") { sources = [ "java/src/org/chromium/chrome/browser/autofill/AddressNormalizerFactory.java", @@ -370,7 +370,7 @@ diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -675,12 +675,6 @@ const char kAutofillVcnEnrollRequestTimeoutDescription[] = +@@ -728,12 +728,6 @@ const char kAutofillVcnEnrollRequestTimeoutDescription[] = "VCN enrollment request. Upon timeout, the client will terminate the VCN " "enrollment UI, but the request may still succeed server-side."; @@ -386,7 +386,7 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descripti diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -399,9 +399,6 @@ extern const char kAutofillUpstreamUpdatedUiDescription[]; +@@ -428,9 +428,6 @@ extern const char kAutofillUpstreamUpdatedUiDescription[]; extern const char kAutofillVcnEnrollRequestTimeoutName[]; extern const char kAutofillVcnEnrollRequestTimeoutDescription[]; @@ -539,7 +539,7 @@ diff --git a/chrome/browser/ui/autofill/autofill_client_provider.h b/chrome/brow diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc -@@ -380,9 +380,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { +@@ -377,9 +377,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { web_contents); chrome::ChainedBackNavigationTracker::CreateForWebContents(web_contents); chrome_browser_net::NetErrorTabHelper::CreateForWebContents(web_contents); @@ -736,15 +736,15 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co }, source, Lift(source, std::forward(args))...); } -@@ -592,6 +599,8 @@ void ContentAutofillDriver::JavaScriptChangedAutofilledValue( - void ContentAutofillDriver::Reset() { - owner_->router().UnregisterDriver(*this, /*driver_is_dying=*/false); - autofill_manager_->Reset(); +@@ -262,6 +269,8 @@ ContentAutofillDriver::ContentAutofillDriver( + + ContentAutofillDriver::~ContentAutofillDriver() { + owner_->router().UnregisterDriver(*this, /*driver_is_dying=*/true); + if (secondary_autofill_manager_) + secondary_autofill_manager_->Reset(); } - const mojo::AssociatedRemote& + void ContentAutofillDriver::Reset(ContentAutofillDriverFactoryPassKey) { @@ -604,6 +613,10 @@ ContentAutofillDriver::GetAutofillAgent() { return autofill_agent_; } @@ -759,9 +759,9 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h --- a/components/autofill/content/browser/content_autofill_driver.h +++ b/components/autofill/content/browser/content_autofill_driver.h -@@ -123,6 +123,12 @@ class ContentAutofillDriver : public AutofillDriver, - ContentAutofillDriver& operator=(const ContentAutofillDriver&) = delete; - ~ContentAutofillDriver() override; +@@ -135,6 +135,12 @@ class ContentAutofillDriver : public AutofillDriver, + // AutofillDriverFactory. Called on certain types of navigations. + void Reset(ContentAutofillDriverFactoryPassKey pass_key); + void set_secondary_autofill_manager( + std::unique_ptr secondary_autofill_manager) { @@ -772,7 +772,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.h b/com content::RenderFrameHost* render_frame_host() { return &*render_frame_host_; } const content::RenderFrameHost* render_frame_host() const { return &*render_frame_host_; -@@ -282,6 +288,10 @@ class ContentAutofillDriver : public AutofillDriver, +@@ -292,6 +298,10 @@ class ContentAutofillDriver : public AutofillDriver, // The factory that created this driver. Outlives `this`. const raw_ref owner_; @@ -786,7 +786,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.h b/com diff --git a/components/autofill/content/browser/content_autofill_driver_factory.cc b/components/autofill/content/browser/content_autofill_driver_factory.cc --- a/components/autofill/content/browser/content_autofill_driver_factory.cc +++ b/components/autofill/content/browser/content_autofill_driver_factory.cc -@@ -22,6 +22,12 @@ +@@ -23,6 +23,12 @@ #include "content/public/browser/web_contents.h" #include "third_party/blink/public/common/features.h" @@ -799,23 +799,23 @@ diff --git a/components/autofill/content/browser/content_autofill_driver_factory namespace autofill { class ScopedAutofillManagersObservation; -@@ -98,6 +104,12 @@ ContentAutofillDriver* ContentAutofillDriverFactory::DriverForFrame( - // 5. `render_frame_host->~RenderFrameHostImpl()` finishes. - if (render_frame_host->IsRenderFrameLive()) { - driver = std::make_unique(render_frame_host, this); +@@ -127,6 +133,12 @@ ContentAutofillDriver* ContentAutofillDriverFactory::DriverForFrame( + return nullptr; + } + driver = std::make_unique(render_frame_host, this); +#if BUILDFLAG(IS_ANDROID) -+ if (!driver->GetAutofillManager().IsAndroidAutofill()) { -+ driver->set_secondary_autofill_manager( -+ base::WrapUnique(new AndroidAutofillManager(driver.get()))); -+ } ++ if (!driver->GetAutofillManager().IsAndroidAutofill()) { ++ driver->set_secondary_autofill_manager( ++ base::WrapUnique(new AndroidAutofillManager(driver.get()))); ++ } +#endif - for (Observer& observer : observers_) { - observer.OnContentAutofillDriverCreated(*this, *driver); - } + DCHECK_EQ(driver->GetLifecycleState(), LifecycleState::kInactive); + for (auto& observer : observers()) { + observer.OnAutofillDriverCreated(*this, *driver); diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc -@@ -1440,12 +1440,16 @@ void AutofillAgent::ShowSuggestions( +@@ -1352,12 +1352,16 @@ void AutofillAgent::ShowSuggestions( password_generation_agent_->ShowPasswordGenerationSuggestions( input_element)) { is_popup_possibly_visible_ = true; @@ -832,12 +832,14 @@ diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components } } -@@ -1454,10 +1458,12 @@ void AutofillAgent::ShowSuggestions( - // IsPasswordFieldForAutofill() because we are interested in whether the field - // is *currently* a password field, not whether it has ever been a password - // field. +@@ -1366,12 +1370,14 @@ void AutofillAgent::ShowSuggestions( + // `FormControlTypeForAutofill()` because we are interested in whether the + // field is *currently* a password field, not whether it has ever been a + // password field. +#if !BUILDFLAG(IS_ANDROID) - if (input_element && input_element.IsPasswordField() && // nocheck + if (input_element && + input_element.FormControlType() // nocheck + == blink::mojom::FormControlType::kInputPassword && !config_.query_password_suggestions) { return; } @@ -848,7 +850,7 @@ diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc -@@ -857,7 +857,10 @@ void PasswordAutofillAgent::UpdatePasswordStateForTextChange( +@@ -854,7 +854,10 @@ void PasswordAutofillAgent::UpdatePasswordStateForTextChange( void PasswordAutofillAgent::TrackAutofilledElement( const WebFormControlElement& element) { @@ -863,7 +865,7 @@ diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/c diff --git a/components/autofill/core/browser/autofill_driver.h b/components/autofill/core/browser/autofill_driver.h --- a/components/autofill/core/browser/autofill_driver.h +++ b/components/autofill/core/browser/autofill_driver.h -@@ -77,6 +77,8 @@ class AutofillDriver { +@@ -148,6 +148,8 @@ class AutofillDriver { // Returns the AutofillManager owned by the AutofillDriver. virtual AutofillManager& GetAutofillManager() = 0; @@ -875,9 +877,9 @@ diff --git a/components/autofill/core/browser/autofill_driver.h b/components/aut diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h --- a/components/autofill/core/browser/autofill_manager.h +++ b/components/autofill/core/browser/autofill_manager.h -@@ -201,6 +201,8 @@ class AutofillManager - - ~AutofillManager() override; +@@ -219,6 +219,8 @@ class AutofillManager + LifecycleState new_state, + base::PassKey pass_key); + virtual bool IsAndroidAutofill() const = 0; + @@ -887,8 +889,8 @@ diff --git a/components/autofill/core/browser/autofill_manager.h b/components/au diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc --- a/components/autofill/core/browser/browser_autofill_manager.cc +++ b/components/autofill/core/browser/browser_autofill_manager.cc -@@ -697,6 +697,8 @@ BrowserAutofillManager::~BrowserAutofillManager() { - // (due to a navigation). +@@ -703,6 +703,8 @@ BrowserAutofillManager::~BrowserAutofillManager() { + single_field_form_fill_router_->CancelPendingQueries(); } +bool BrowserAutofillManager::IsAndroidAutofill() const { return false; } @@ -899,7 +901,7 @@ diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/comp diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h --- a/components/autofill/core/browser/browser_autofill_manager.h +++ b/components/autofill/core/browser/browser_autofill_manager.h -@@ -106,6 +106,8 @@ class BrowserAutofillManager : public AutofillManager { +@@ -112,6 +112,8 @@ class BrowserAutofillManager : public AutofillManager { ~BrowserAutofillManager() override; @@ -911,7 +913,7 @@ diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/compo diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc -@@ -834,7 +834,7 @@ BASE_FEATURE(kAutofillEnableSecurityTouchEventFilteringAndroid, +@@ -890,7 +890,7 @@ BASE_FEATURE(kAutofillEnableSecurityTouchEventFilteringAndroid, BASE_FEATURE(kAutofillVirtualViewStructureAndroid, "AutofillVirtualViewStructureAndroid", base::FEATURE_DISABLED_BY_DEFAULT); @@ -923,7 +925,7 @@ diff --git a/components/autofill/core/common/autofill_features.cc b/components/a diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h -@@ -284,28 +284,6 @@ COMPONENT_EXPORT(AUTOFILL) +@@ -298,28 +298,6 @@ COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillEnableSecurityTouchEventFilteringAndroid); COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillVirtualViewStructureAndroid); diff --git a/build/patches/Enable-search-engine-settings-desktop-ui.patch b/build/patches/Enable-search-engine-settings-desktop-ui.patch index f7117e20..2e1a84d0 100644 --- a/build/patches/Enable-search-engine-settings-desktop-ui.patch +++ b/build/patches/Enable-search-engine-settings-desktop-ui.patch @@ -28,7 +28,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html chrome/browser/search/background/BUILD.gn | 4 +- .../browser/search_engines/android/BUILD.gn | 2 + .../java/res/layout/search_engine_layout.xml | 25 ++ - .../settings/SearchEngineSettings.java | 19 ++ + .../settings/SearchEngineSettings.java | 20 ++ chrome/browser/ui/BUILD.gn | 12 + .../edit_search_engine_controller.cc | 8 +- .../edit_search_engine_controller.h | 6 +- @@ -70,7 +70,7 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ui/webui/resources/include_polymer.gni | 2 +- ui/webui/resources/js/BUILD.gn | 2 +- ui/webui/resources/js/load_time_data.ts | 17 +- - 63 files changed, 1086 insertions(+), 61 deletions(-) + 63 files changed, 1087 insertions(+), 61 deletions(-) create mode 100644 chrome/app/settings_strings_android.grdp create mode 100644 chrome/browser/search_engines/android/java/res/layout/search_engine_layout.xml create mode 100644 chrome/browser/ui/webui/settings/settings_localized_strings_provider_android.cc @@ -82,9 +82,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsLauncherImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsLauncherImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsLauncherImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsLauncherImpl.java -@@ -14,6 +14,9 @@ import androidx.fragment.app.Fragment; - - import org.jni_zero.CalledByNative; +@@ -12,6 +12,9 @@ import android.os.Bundle; + import androidx.annotation.Nullable; + import androidx.fragment.app.Fragment; +import org.chromium.base.ContextUtils; +import org.chromium.chrome.browser.customtabs.CustomTabActivity; @@ -92,9 +92,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/Settin import org.chromium.base.IntentUtils; import org.chromium.chrome.browser.accessibility.settings.AccessibilitySettings; import org.chromium.chrome.browser.autofill.settings.AutofillPaymentMethodsFragment; -@@ -39,6 +42,13 @@ public class SettingsLauncherImpl implements SettingsLauncher { - - public SettingsLauncherImpl() {} +@@ -33,6 +36,13 @@ public class SettingsLauncherImpl implements SettingsLauncher { + /** Instantiated through SettingsLauncherFactory. */ + SettingsLauncherImpl() {} + @Override + public void launchUrlInCustomTab(Context context, String url) { @@ -133,7 +133,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp -@@ -2596,6 +2596,9 @@ +@@ -2611,6 +2611,9 @@ URL with %s in place of query @@ -411,7 +411,7 @@ new file mode 100644 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3745,6 +3745,9 @@ static_library("browser") { +@@ -3473,6 +3473,9 @@ static_library("browser") { "//components/user_scripts/android", ] } @@ -424,7 +424,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc -@@ -144,6 +144,9 @@ +@@ -138,6 +138,9 @@ #endif #if BUILDFLAG(IS_ANDROID) @@ -434,7 +434,7 @@ diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser #include "chrome/browser/android/dom_distiller/distiller_ui_handle_android.h" #include "chrome/browser/facilitated_payments/payment_link_handler_factory.h" #include "chrome/browser/offline_pages/android/offline_page_auto_fetcher.h" -@@ -1174,6 +1177,15 @@ void PopulateChromeWebUIFrameBinders( +@@ -1175,6 +1178,15 @@ void PopulateChromeWebUIFrameBinders( app_management::mojom::PageHandlerFactory, WebAppSettingsUI>(map); #endif @@ -764,7 +764,7 @@ diff --git a/chrome/browser/search/background/BUILD.gn b/chrome/browser/search/b diff --git a/chrome/browser/search_engines/android/BUILD.gn b/chrome/browser/search_engines/android/BUILD.gn --- a/chrome/browser/search_engines/android/BUILD.gn +++ b/chrome/browser/search_engines/android/BUILD.gn -@@ -78,6 +78,7 @@ android_resources("java_resources") { +@@ -77,6 +77,7 @@ android_resources("java_resources") { "java/res/layout/default_search_engine_dialog_view.xml", "java/res/layout/search_engine.xml", "java/res/layout/search_engine_choice_header.xml", @@ -772,7 +772,7 @@ diff --git a/chrome/browser/search_engines/android/BUILD.gn b/chrome/browser/sea "java/res/layout/search_engine_choice_item.xml", "java/res/layout/search_engine_choice_view.xml", "java/res/layout/search_engine_recent_title.xml", -@@ -86,6 +87,7 @@ android_resources("java_resources") { +@@ -85,6 +86,7 @@ android_resources("java_resources") { "java/res/values/ids.xml", ] deps = [ @@ -813,7 +813,7 @@ new file mode 100644 diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java --- a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java +++ b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineSettings.java -@@ -8,6 +8,10 @@ import android.os.Bundle; +@@ -8,12 +8,18 @@ import android.os.Bundle; import android.view.View; import android.widget.ListView; @@ -824,15 +824,15 @@ diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/ import androidx.fragment.app.ListFragment; import org.chromium.chrome.browser.profiles.Profile; -@@ -27,6 +31,7 @@ import org.chromium.components.search_engines.TemplateUrlService; - public class SearchEngineSettings extends ListFragment implements ProfileDependentSetting { - private SearchEngineAdapter mSearchEngineAdapter; - private Profile mProfile; -+ private SettingsLauncher mSettingsLauncher; + import org.chromium.chrome.browser.search_engines.R; + import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; + import org.chromium.chrome.browser.settings.ProfileDependentSetting; ++import org.chromium.chrome.browser.settings.SettingsLauncherFactory; ++import org.chromium.components.browser_ui.settings.SettingsLauncher; + import org.chromium.components.search_engines.TemplateUrlService; - String getValueForTesting() { - return mSearchEngineAdapter.getValueForTesting(); -@@ -48,6 +53,19 @@ public class SearchEngineSettings extends ListFragment implements ProfileDepende + /** +@@ -47,6 +53,20 @@ public class SearchEngineSettings extends ListFragment implements ProfileDepende setListAdapter(mSearchEngineAdapter); } @@ -843,7 +843,8 @@ diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/ + + TextView selectButton = (TextView) v.findViewById(R.id.open_desktop_ui); + selectButton.setOnClickListener(view -> { -+ mSettingsLauncher.launchUrlInCustomTab(getContext(), ++ SettingsLauncher settingsLauncher = SettingsLauncherFactory.createSettingsLauncher(); ++ settingsLauncher.launchUrlInCustomTab(getContext(), + "chrome://settings/searchEngines"); + }); + return v; @@ -852,18 +853,10 @@ diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/ @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); -@@ -92,6 +110,7 @@ public class SearchEngineSettings extends ListFragment implements ProfileDepende - * @param settingsLauncher The SettingsLauncher that is injected. - */ - public void setSettingsLauncher(SettingsLauncher settingsLauncher) { -+ mSettingsLauncher = settingsLauncher; - createAdapterIfNecessary(); - mSearchEngineAdapter.setSettingsLauncher(settingsLauncher); - } diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1030,6 +1030,18 @@ static_library("ui") { +@@ -1039,6 +1039,18 @@ static_library("ui") { # TODO(b/335257259): Resolve circular deps. # Any circular includes must depend on the target "//chrome/browser:browser_public_dependencies". allow_circular_includes_from += [ "//chrome/browser/facilitated_payments" ] @@ -1066,15 +1059,15 @@ diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrom --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc @@ -122,6 +122,8 @@ + #include "chrome/browser/ui/webui/offline/offline_internals_ui.h" #include "chrome/browser/ui/webui/webapks/webapks_ui.h" - #include "components/feed/buildflags.h" #include "components/feed/feed_feature_list.h" +#include "chrome/browser/ui/webui/settings/settings_ui_android.h" +#include "chrome/browser/ui/webui/settings/settings_utils.h" #else // BUILDFLAG(IS_ANDROID) #include "chrome/browser/media/router/discovery/access_code/access_code_cast_feature.h" #include "chrome/browser/media/router/media_router_feature.h" -@@ -569,6 +571,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, +@@ -547,6 +549,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; } #endif // !BUILDFLAG(IS_ANDROID) @@ -1322,7 +1315,7 @@ diff --git a/chrome/browser/ui/webui/settings/search_engines_handler.h b/chrome/ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -2432,6 +2432,8 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) { +@@ -2441,6 +2441,8 @@ void AddSearchEnginesStrings(content::WebUIDataSource* html_source) { {"searchEnginesQueryURL", IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL}, {"searchEnginesQueryURLExplanation", IDS_SETTINGS_SEARCH_ENGINES_QUERY_URL_EXPLANATION}, @@ -1331,7 +1324,7 @@ diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provide {"searchEnginesMakeDefault", IDS_SETTINGS_SEARCH_ENGINES_MAKE_DEFAULT}, {"searchEnginesActivate", IDS_SETTINGS_SEARCH_ENGINES_ACTIVATE}, {"searchEnginesDeactivate", IDS_SETTINGS_SEARCH_ENGINES_DEACTIVATE}, -@@ -3736,6 +3738,12 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -3753,6 +3755,12 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, AddSystemStrings(html_source); #endif @@ -1857,19 +1850,19 @@ new file mode 100644 diff --git a/components/search_engines/android/template_url_service_android.cc b/components/search_engines/android/template_url_service_android.cc --- a/components/search_engines/android/template_url_service_android.cc +++ b/components/search_engines/android/template_url_service_android.cc -@@ -419,7 +419,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( +@@ -422,7 +422,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( if (existing_play_api_turl->safe_for_autoreplace()) { template_url_service_->ResetTemplateURL( existing_play_api_turl, existing_play_api_turl->short_name(), - existing_play_api_turl->keyword(), existing_play_api_turl->url()); + existing_play_api_turl->keyword(), existing_play_api_turl->url(), /*suggestion_url*/ ""); } + } - // Only one search engine can be marked as coming from Play at a time. diff --git a/components/search_engines/search_engines_switches.cc b/components/search_engines/search_engines_switches.cc --- a/components/search_engines/search_engines_switches.cc +++ b/components/search_engines/search_engines_switches.cc -@@ -38,6 +38,7 @@ COMPONENT_EXPORT(SEARCH_ENGINES_SWITCHES) +@@ -44,6 +44,7 @@ COMPONENT_EXPORT(SEARCH_ENGINES_SWITCHES) BASE_FEATURE(kSearchEngineChoiceTrigger, "SearchEngineChoiceTrigger", base::FEATURE_ENABLED_BY_DEFAULT); @@ -1941,7 +1934,7 @@ diff --git a/components/search_engines/template_url_service.h b/components/searc diff --git a/content/browser/webui/web_ui_impl.cc b/content/browser/webui/web_ui_impl.cc --- a/content/browser/webui/web_ui_impl.cc +++ b/content/browser/webui/web_ui_impl.cc -@@ -246,6 +246,10 @@ void WebUIImpl::RegisterMessageCallback(std::string_view message, +@@ -239,6 +239,10 @@ void WebUIImpl::RegisterMessageCallback(std::string_view message, message_callbacks_.emplace(message, std::move(callback)); } @@ -1952,7 +1945,7 @@ diff --git a/content/browser/webui/web_ui_impl.cc b/content/browser/webui/web_ui void WebUIImpl::ProcessWebUIMessage(const GURL& source_url, const std::string& message, base::Value::List args) { -@@ -259,8 +263,14 @@ void WebUIImpl::ProcessWebUIMessage(const GURL& source_url, +@@ -252,8 +256,14 @@ void WebUIImpl::ProcessWebUIMessage(const GURL& source_url, return; } @@ -1978,9 +1971,9 @@ diff --git a/content/browser/webui/web_ui_impl.h b/content/browser/webui/web_ui_ base::Value::List args) override; + void DoNotCrashOnUnhandledMessage() override; bool CanCallJavascript() override; - void CallJavascriptFunctionUnsafe(std::string_view function_name) override; void CallJavascriptFunctionUnsafe( -@@ -151,6 +152,8 @@ class CONTENT_EXPORT WebUIImpl : public WebUI, public mojom::WebUIHost { + std::string_view function_name, +@@ -150,6 +151,8 @@ class CONTENT_EXPORT WebUIImpl : public WebUI, public mojom::WebUIHost { std::unique_ptr controller_; @@ -2003,7 +1996,7 @@ diff --git a/content/public/browser/web_ui.h b/content/public/browser/web_ui.h diff --git a/third_party/polymer/v3_0/BUILD.gn b/third_party/polymer/v3_0/BUILD.gn --- a/third_party/polymer/v3_0/BUILD.gn +++ b/third_party/polymer/v3_0/BUILD.gn -@@ -36,6 +36,12 @@ js_files = [ +@@ -34,6 +34,12 @@ js_files = [ "paper-spinner/paper-spinner-styles.js", ] @@ -2019,7 +2012,7 @@ diff --git a/third_party/polymer/v3_0/BUILD.gn b/third_party/polymer/v3_0/BUILD. diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc --- a/ui/base/template_expressions.cc +++ b/ui/base/template_expressions.cc -@@ -14,6 +14,7 @@ +@@ -19,6 +19,7 @@ #include "base/no_destructor.h" #include "base/strings/escape.h" #include "base/values.h" @@ -2027,7 +2020,7 @@ diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc #include "build/chromeos_buildflags.h" #if DCHECK_IS_ON() -@@ -166,11 +167,25 @@ bool ReplaceTemplateExpressionsInternal( +@@ -171,11 +172,25 @@ bool ReplaceTemplateExpressionsInternal( std::string key(source.substr(current_pos, key_end - current_pos)); CHECK(!key.empty()); diff --git a/build/patches/History-number-of-days-privacy-setting.patch b/build/patches/History-number-of-days-privacy-setting.patch index d4305b64..ceab5390 100644 --- a/build/patches/History-number-of-days-privacy-setting.patch +++ b/build/patches/History-number-of-days-privacy-setting.patch @@ -54,15 +54,15 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java -@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; +@@ -45,6 +45,7 @@ import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; import org.chromium.chrome.browser.usage_stats.UsageStatsConsentDialog; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; - import org.chromium.components.browser_ui.settings.FragmentSettingsLauncher; -+import org.chromium.components.browser_ui.settings.SpinnerPreference; - import org.chromium.components.browser_ui.settings.SettingsLauncher; import org.chromium.components.browser_ui.settings.SettingsUtils; ++import org.chromium.components.browser_ui.settings.SpinnerPreference; import org.chromium.components.browser_ui.site_settings.ContentSettingsResources; -@@ -62,6 +63,9 @@ import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; + import org.chromium.components.browser_ui.site_settings.SingleCategorySettings; + import org.chromium.components.browser_ui.util.TraceEventVectorDrawableCompat; +@@ -61,6 +62,9 @@ import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate; @@ -71,8 +71,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting + /** Fragment to keep track of the all the privacy related preferences. */ public class PrivacySettings extends ChromeBaseSettingsFragment - implements Preference.OnPreferenceChangeListener, FragmentSettingsLauncher { -@@ -104,6 +108,8 @@ public class PrivacySettings extends ChromeBaseSettingsFragment + implements Preference.OnPreferenceChangeListener { +@@ -102,6 +106,8 @@ public class PrivacySettings extends ChromeBaseSettingsFragment private ChromeSwitchPreference allowCustomTabIntentsPref; private ChromeSwitchPreference openExternalLinksPref; @@ -81,7 +81,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting @Override public void onCreatePreferencesCromite(Bundle savedInstanceState, String rootKey) { getActivity().setTitle(R.string.prefs_privacy_security); -@@ -236,6 +242,40 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -232,6 +238,40 @@ public class PrivacySettings extends ChromeBaseSettingsFragment Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK); syncAndServicesLink.setSummary(buildFooterString()); @@ -122,7 +122,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting Preference thirdPartyCookies = findPreference(PREF_THIRD_PARTY_COOKIES); Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK); -@@ -479,6 +519,29 @@ public class PrivacySettings extends ChromeBaseSettingsFragment +@@ -470,6 +510,29 @@ public class PrivacySettings extends ChromeBaseSettingsFragment && ChromeFeatureList.isEnabled(ChromeFeatureList.FINGERPRINTING_PROTECTION_SETTING); } @@ -163,7 +163,7 @@ diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chro #include "components/embedder_support/pref_names.h" #include "components/language/core/browser/pref_names.h" #include "components/live_caption/pref_names.h" -@@ -213,6 +214,9 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { +@@ -212,6 +213,9 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetAllowlistedKeys() { (*s_allowlist)[::prefs::kShowForwardButton] = settings_api::PrefType::kBoolean; @@ -218,7 +218,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/chrome/browser/resources/settings/privacy_page/privacy_page.ts --- a/chrome/browser/resources/settings/privacy_page/privacy_page.ts +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.ts -@@ -81,6 +81,23 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { +@@ -82,6 +82,23 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { static get properties() { return { @@ -245,7 +245,7 @@ diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/ch diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1290,6 +1290,18 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1329,6 +1329,18 @@ Your Google account may have other forms of browsing history like searches and a Browsing history @@ -267,18 +267,18 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -1831,6 +1831,11 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, +@@ -1849,6 +1849,11 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, + IDS_SETTINGS_SAFEBROWSING_ENHANCED_THINGS_TO_CONSIDER_BULLET_THREE}, + {"safeBrowsingStandard", IDS_SETTINGS_SAFEBROWSING_STANDARD}, {"safeBrowsingStandardDesc", IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC}, - {"safeBrowsingStandardDescUpdated", - IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC_UPDATED}, -+ {"expireHistory", IDS_SETTINGS_EXPIRE_HISTORY}, -+ {"noHistory", IDS_SETTINGS_NO_HISTORY}, -+ {"dayHistory", IDS_SETTINGS_DAY_HISTORY_DESCRIPTION}, -+ {"daysHistory", IDS_SETTINGS_DAYS_HISTORY_DESCRIPTION}, -+ {"foreverHistory", IDS_SETTINGS_FOREVER_HISTORY_DESCRIPTION}, ++ {"expireHistory", IDS_SETTINGS_EXPIRE_HISTORY}, ++ {"noHistory", IDS_SETTINGS_NO_HISTORY}, ++ {"dayHistory", IDS_SETTINGS_DAY_HISTORY_DESCRIPTION}, ++ {"daysHistory", IDS_SETTINGS_DAYS_HISTORY_DESCRIPTION}, ++ {"foreverHistory", IDS_SETTINGS_FOREVER_HISTORY_DESCRIPTION}, #if BUILDFLAG(GOOGLE_CHROME_BRANDING) - {"safeBrowsingStandardDescUpdatedProxy", - IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC_UPDATED_PROXY}, + {"safeBrowsingStandardDescProxy", + IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC_PROXY}, diff --git a/components/browser_ui/settings/android/java/res/layout-sw360dp/preference_spinner_single_line.xml b/components/browser_ui/settings/android/java/res/layout-sw360dp/preference_spinner_single_line.xml --- a/components/browser_ui/settings/android/java/res/layout-sw360dp/preference_spinner_single_line.xml +++ b/components/browser_ui/settings/android/java/res/layout-sw360dp/preference_spinner_single_line.xml diff --git a/build/patches/Keep-disabled-FetchLaterAPI.patch b/build/patches/Keep-disabled-FetchLaterAPI.patch index d8533778..8c707f14 100644 --- a/build/patches/Keep-disabled-FetchLaterAPI.patch +++ b/build/patches/Keep-disabled-FetchLaterAPI.patch @@ -99,7 +99,7 @@ new file mode 100644 diff --git a/third_party/blink/renderer/core/fetch/fetch_manager.cc b/third_party/blink/renderer/core/fetch/fetch_manager.cc --- a/third_party/blink/renderer/core/fetch/fetch_manager.cc +++ b/third_party/blink/renderer/core/fetch/fetch_manager.cc -@@ -1168,7 +1168,11 @@ void FetchManager::Loader::Failed( +@@ -1170,7 +1170,11 @@ void FetchManager::Loader::Failed( if (resolver_) { ScriptState::Scope scope(GetScriptState()); if (dom_exception) { @@ -112,7 +112,7 @@ diff --git a/third_party/blink/renderer/core/fetch/fetch_manager.cc b/third_part } else { v8::Local value = exception_.Get(GetScriptState()->GetIsolate()); -@@ -1188,7 +1192,11 @@ void FetchManager::Loader::Failed( +@@ -1190,7 +1194,11 @@ void FetchManager::Loader::Failed( V8String(GetScriptState()->GetIsolate(), IdentifiersFactory::IdFromToken(*issue_id))); } @@ -159,7 +159,7 @@ diff --git a/third_party/blink/renderer/platform/loader/child_url_loader_factory diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc -@@ -2912,7 +2912,7 @@ void ResourceFetcher::PrepareForLeakDetection() { +@@ -2921,7 +2921,7 @@ void ResourceFetcher::PrepareForLeakDetection() { void ResourceFetcher::StopFetchingInternal(StopFetchingTarget target) { // TODO(toyoshim): May want to suspend scheduler while canceling loaders so // that the cancellations below do not awake unnecessary scheduling. @@ -171,7 +171,7 @@ diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.c diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -1768,10 +1768,9 @@ +@@ -1866,10 +1866,9 @@ }, { // The Blink runtime-enabled feature name for the API's IDL. diff --git a/build/patches/Move-navigation-bar-to-bottom.patch b/build/patches/Move-navigation-bar-to-bottom.patch index 7103d1fe..ff9eaf5c 100644 --- a/build/patches/Move-navigation-bar-to-bottom.patch +++ b/build/patches/Move-navigation-bar-to-bottom.patch @@ -17,7 +17,6 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html cc/base/features.h | 2 + cc/input/browser_controls_offset_manager.cc | 6 + cc/trees/layer_tree_host_impl.cc | 3 + - .../start_surface/StartSurfaceMediator.java | 4 + .../tab_management/TabGroupUiCoordinator.java | 7 +- .../tab_management/TabGroupUiMediator.java | 56 ++++++- .../tab_management/TabGroupUiProperties.java | 7 +- @@ -32,8 +31,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../layouts/LayoutManagerChrome.java | 19 ++- .../layouts/LayoutManagerChromeTablet.java | 4 +- .../layouts/ToolbarSwipeLayout.java | 14 +- - .../overlays/strip/StripLayoutHelper.java | 2 +- - .../strip/StripLayoutHelperManager.java | 38 ++++- + .../overlays/strip/ScrollDelegate.java | 2 +- + .../strip/StripLayoutHelperManager.java | 37 ++++- .../scene_layer/StaticTabSceneLayer.java | 7 +- .../scene_layer/TabListSceneLayer.java | 8 + .../scene_layer/TabStripSceneLayer.java | 19 ++- @@ -50,7 +49,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../StatusIndicatorSceneLayer.java | 6 +- .../browser/toolbar/ToolbarManager.java | 37 ++++- .../chrome/browser/ui/BottomContainer.java | 18 +++ - .../ui/system/StatusBarColorController.java | 9 ++ + .../ui/system/StatusBarColorController.java | 8 + .../android/compositor/layer/toolbar_layer.cc | 10 +- .../scene_layer/tab_strip_scene_layer.cc | 16 +- .../BottomControlsStacker.java | 2 +- @@ -61,7 +60,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/flags/ChromeFeatureList.java | 10 ++ chrome/browser/hub/internal/BUILD.gn | 5 + .../chrome/browser/hub/HubCoordinator.java | 8 + - .../chrome/browser/hub/HubManagerImpl.java | 17 +- + .../chrome/browser/hub/HubManagerImpl.java | 24 ++- .../browser/hub/ReversedLinearLayout.java | 42 +++++ .../android/res/layout/hub_layout.xml | 4 +- .../android/res/layout/hub_toolbar_layout.xml | 2 +- @@ -79,7 +78,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../toolbar/LocationBarFocusScrimHandler.java | 5 + .../bottom/BottomControlsContentDelegate.java | 9 +- .../bottom/BottomControlsCoordinator.java | 11 +- - .../bottom/BottomControlsMediator.java | 18 ++- + .../bottom/BottomControlsMediator.java | 20 ++- .../bottom/BottomControlsProperties.java | 6 +- .../bottom/BottomControlsViewBinder.java | 2 + .../bottom/ScrollingBottomViewSceneLayer.java | 19 ++- @@ -91,7 +90,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../AccessibilitySettingsDelegate.java | 7 + .../render_widget_host_view_android.cc | 3 + .../Move-navigation-bar-to-bottom.inc | 17 ++ - 78 files changed, 1006 insertions(+), 80 deletions(-) + 77 files changed, 1006 insertions(+), 83 deletions(-) create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc @@ -151,7 +150,7 @@ diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_cont diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc -@@ -4496,6 +4496,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { +@@ -4588,6 +4588,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { if (scroll_delta.IsZero()) return false; @@ -161,31 +160,10 @@ diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc // This counter-scrolls the page to keep the appearance of the page content // being fixed while the browser controls animate. viewport().ScrollBy(scroll_delta, -diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java ---- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -+++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -@@ -98,6 +98,8 @@ import org.chromium.url.GURL; - - import java.util.List; - -+import org.chromium.chrome.browser.flags.ChromeFeatureList; -+ - /** The mediator implements the logic to interact with the surfaces and caller. */ - class StartSurfaceMediator - implements StartSurface.OnTabSelectingListener, -@@ -860,6 +862,8 @@ class StartSurfaceMediator - } - - private void setTopMargin(int topMargin) { -+ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) -+ topMargin = 0; - mPropertyModel.set(TOP_MARGIN, topMargin); - } - diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java -@@ -38,6 +38,7 @@ import org.chromium.components.feature_engagement.FeatureConstants; +@@ -39,6 +39,7 @@ import org.chromium.components.feature_engagement.FeatureConstants; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; @@ -193,7 +171,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.util.List; -@@ -156,7 +157,8 @@ public class TabGroupUiCoordinator +@@ -161,7 +162,8 @@ public class TabGroupUiCoordinator public void initializeWithNative( Activity activity, BottomControlsCoordinator.BottomControlsVisibilityController visibilityController, @@ -203,7 +181,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser var currentTabModelFilterSupplier = mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilterSupplier(); try (TraceEvent e = TraceEvent.scoped("TabGroupUiCoordinator.initializeWithNative")) { -@@ -214,7 +216,8 @@ public class TabGroupUiCoordinator +@@ -220,7 +222,8 @@ public class TabGroupUiCoordinator mLayoutStateProviderSupplier, mIncognitoStateProvider, mTabGridDialogControllerSupplier, @@ -229,7 +207,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** A mediator for the TabGroupUi. Responsible for managing the internal state of the component. */ public class TabGroupUiMediator implements BackPressHandler { /** An interface to control the TabGroupUi component. */ -@@ -118,6 +124,11 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -119,6 +125,11 @@ public class TabGroupUiMediator implements BackPressHandler { private final @ColorInt int mPrimaryBackgroundColor; private final @ColorInt int mIncognitoBackgroundColor; @@ -241,7 +219,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser TabGroupUiMediator( Context context, BottomControlsVisibilityController visibilityController, -@@ -131,7 +142,8 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -133,7 +144,8 @@ public class TabGroupUiMediator implements BackPressHandler { @Nullable LazyOneshotSupplier dialogControllerSupplier, @@ -251,7 +229,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser this( context, visibilityController, -@@ -145,7 +157,8 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -148,7 +160,8 @@ public class TabGroupUiMediator implements BackPressHandler { dialogControllerSupplier, omniboxFocusStateSupplier, SemanticColorUtils.getDialogBgColor(context), @@ -261,7 +239,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } @VisibleForTesting -@@ -164,7 +177,9 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -168,7 +181,9 @@ public class TabGroupUiMediator implements BackPressHandler { dialogControllerSupplier, ObservableSupplier omniboxFocusStateSupplier, @ColorInt int primaryBackgroundColor, @@ -272,7 +250,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mContext = context; mResetHandler = resetHandler; mModel = model; -@@ -183,11 +198,30 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -188,11 +203,30 @@ public class TabGroupUiMediator implements BackPressHandler { mIsShowingOverViewMode = true; } @@ -303,7 +281,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser if (getTabsToShowForId(lastId).contains(tab)) { return; } -@@ -247,6 +281,7 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -252,6 +286,7 @@ public class TabGroupUiMediator implements BackPressHandler { return; } resetTabStripWithRelatedTabsForId(currentTab.getId()); @@ -311,7 +289,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } @Override -@@ -372,6 +407,8 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -374,6 +409,8 @@ public class TabGroupUiMediator implements BackPressHandler { resetTabStripWithRelatedTabsForId(tab.getId()); } @@ -320,7 +298,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mHandleBackPressChangedSupplier = handleBackPressChangedSupplier; if (mTabGridDialogControllerSupplier != null) { mTabGridDialogControllerSupplier.onAvailable( -@@ -399,6 +436,18 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -401,6 +438,18 @@ public class TabGroupUiMediator implements BackPressHandler { mModel.set(TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID, drawableId); } @@ -339,7 +317,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser void setupLeftButtonOnClickListener(View.OnClickListener listener) { mModel.set(TabGroupUiProperties.LEFT_BUTTON_ON_CLICK_LISTENER, listener); } -@@ -528,6 +577,7 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -534,6 +583,7 @@ public class TabGroupUiMediator implements BackPressHandler { } public void destroy() { @@ -447,7 +425,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import android.graphics.Rect; import android.util.Size; import android.view.LayoutInflater; -@@ -55,6 +59,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -57,6 +61,8 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.widget.ViewLookupCachingFrameLayout; @@ -456,7 +434,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; -@@ -112,6 +118,128 @@ public class TabListCoordinator +@@ -114,6 +120,128 @@ public class TabListCoordinator private int mAwaitingTabId = Tab.INVALID_TAB_ID; private @TabActionState int mTabActionState; @@ -585,7 +563,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Construct a coordinator for UI that shows a list of tabs. * -@@ -354,6 +482,12 @@ public class TabListCoordinator +@@ -356,6 +484,12 @@ public class TabListCoordinator checkAwaitingLayout(); } }; @@ -598,7 +576,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mRecyclerView.setLayoutManager(gridLayoutManager); mMediator.registerOrientationListener(gridLayoutManager); mMediator.updateSpanCount( -@@ -365,8 +499,7 @@ public class TabListCoordinator +@@ -367,8 +501,7 @@ public class TabListCoordinator .getDecorView() .getWindowVisibleDisplayFrame(frame); updateGridCardLayout(frame.width()); @@ -608,7 +586,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser LinearLayoutManager layoutManager = new LinearLayoutManager( context, -@@ -381,6 +514,17 @@ public class TabListCoordinator +@@ -383,6 +516,17 @@ public class TabListCoordinator } }; mRecyclerView.setLayoutManager(layoutManager); @@ -626,16 +604,16 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser } mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations); } -@@ -396,7 +540,7 @@ public class TabListCoordinator - - mHasEmptyView = hasEmptyView; +@@ -400,7 +544,7 @@ public class TabListCoordinator if (mHasEmptyView) { -- mTabListEmptyCoordinator = new TabListEmptyCoordinator(parentView, mModel); -+ mTabListEmptyCoordinator = new TabListEmptyCoordinator(parentView, mModel, mBrowserControlsStateProvider); + mTabListEmptyCoordinator = + new TabListEmptyCoordinator( +- parentView, mModel, this::runOnItemAnimatorFinished); ++ parentView, mModel, this::runOnItemAnimatorFinished, mBrowserControlsStateProvider); mEmptyStateHeadingResId = emptyHeadingStringResId; mEmptyStateSubheadingResId = emptySubheadingStringResId; mEmptyStateImageResId = emptyImageResId; -@@ -685,6 +829,9 @@ public class TabListCoordinator +@@ -689,6 +833,9 @@ public class TabListCoordinator void prepareTabSwitcherPaneView() { registerLayoutChangeListener(); mRecyclerView.setupCustomItemAnimator(); @@ -648,13 +626,14 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListEmptyCoordinator.java -@@ -9,10 +9,13 @@ import android.view.View; +@@ -9,11 +9,14 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import android.widget.FrameLayout; +import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; + import org.chromium.base.Callback; import org.chromium.chrome.tab_ui.R; import org.chromium.ui.modelutil.ListObservable; import org.chromium.ui.modelutil.ListObservable.ListObserver; @@ -662,17 +641,19 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser /** * Empty coordinator that is responsible for showing an empty state view in tab switcher when we are -@@ -30,13 +33,16 @@ class TabListEmptyCoordinator { - private ListObserver mListObserver; +@@ -32,15 +35,18 @@ class TabListEmptyCoordinator { + private Callback mRunOnItemAnimatorFinished; private boolean mIsTabSwitcherShowing; private boolean mIsListObserverAttached; + private BrowserControlsStateProvider mBrowserControlsStateProvider; -- public TabListEmptyCoordinator(ViewGroup rootView, TabListModel model) { -+ public TabListEmptyCoordinator(ViewGroup rootView, TabListModel model, -+ BrowserControlsStateProvider browserControlsStateProvider) { + public TabListEmptyCoordinator( +- ViewGroup rootView, TabListModel model, Callback runOnItemAnimatorFinished) { ++ ViewGroup rootView, TabListModel model, Callback runOnItemAnimatorFinished, ++ BrowserControlsStateProvider browserControlsStateProvider) { mRootView = rootView; mContext = rootView.getContext(); + mRunOnItemAnimatorFinished = runOnItemAnimatorFinished; // Observe TabListModel to determine when to add / remove empty state view. mModel = model; @@ -680,7 +661,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser mListObserver = new ListObserver() { @Override -@@ -121,6 +127,15 @@ class TabListEmptyCoordinator { +@@ -136,6 +142,15 @@ class TabListEmptyCoordinator { public void attachEmptyView() { if (mEmptyView != null && mEmptyView.getParent() == null) { mRootView.addView(mEmptyView); @@ -741,7 +722,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener( preference -> { -@@ -237,6 +258,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment +@@ -238,6 +259,11 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment mDelegate.getBrowserContextHandle(), (Integer) newValue); } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); @@ -849,7 +830,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/s diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -252,6 +252,9 @@ import org.chromium.webapk.lib.client.WebApkNavigationClient; +@@ -255,6 +255,9 @@ import org.chromium.webapk.lib.client.WebApkNavigationClient; import java.util.ArrayList; import java.util.List; @@ -862,7 +843,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java -@@ -251,6 +251,10 @@ public class CompositorViewHolder extends FrameLayout +@@ -250,6 +250,10 @@ public class CompositorViewHolder extends FrameLayout @Override public void setCurrentTouchEventOffsets(float top) { EventForwarder forwarder = getEventForwarder(); @@ -870,10 +851,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/Comp + // no need to adjust the touch offsets, since the content view is never moved + top = 0; + } - if (forwarder != null) forwarder.setCurrentTouchEventOffsets(0, top); + if (forwarder != null) forwarder.setCurrentTouchOffsetY(top); } -@@ -881,6 +885,9 @@ public class CompositorViewHolder extends FrameLayout +@@ -884,6 +888,9 @@ public class CompositorViewHolder extends FrameLayout mApplicationBottomInsetSupplier != null ? mApplicationBottomInsetSupplier.get().webContentsHeightInset : 0; @@ -973,7 +954,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/ToolbarSwipeLayout.java -@@ -36,6 +36,8 @@ import org.chromium.ui.base.LocalizationUtils; +@@ -37,6 +37,8 @@ import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; @@ -982,7 +963,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo import java.util.ArrayList; import java.util.List; -@@ -441,7 +443,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -446,7 +448,11 @@ public class ToolbarSwipeLayout extends Layout { mLeftToolbarOverlay.setXOffset(leftX * dpToPx); } mLeftTab.setX(leftX); @@ -995,7 +976,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo needUpdate = updateSnap(dt, mLeftTab) || needUpdate; } else if (mLeftToolbarOverlay != null) { mLeftToolbarOverlay.setManualVisibility(false); -@@ -454,7 +460,11 @@ public class ToolbarSwipeLayout extends Layout { +@@ -459,7 +465,11 @@ public class ToolbarSwipeLayout extends Layout { mRightToolbarOverlay.setXOffset(rightX * dpToPx); } mRightTab.setX(rightX); @@ -1008,30 +989,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layo needUpdate = updateSnap(dt, mRightTab) || needUpdate; } else if (mRightToolbarOverlay != null) { mRightToolbarOverlay.setManualVisibility(false); -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -@@ -789,7 +789,7 @@ public class StripLayoutHelper implements StripLayoutTabDelegate, StripLayoutGro - boolean isRtl = LocalizationUtils.isLayoutRtl(); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/ScrollDelegate.java +@@ -193,6 +193,6 @@ public class ScrollDelegate { boolean useUnadjustedScrollOffset = isRtl != isLeft; - float offset = -- -(useUnadjustedScrollOffset ? mScrollOffset : (mMinScrollOffset - mScrollOffset)); -+ -Math.abs(useUnadjustedScrollOffset ? mScrollOffset : (mMinScrollOffset - mScrollOffset)); + float scrollOffset = mScrollOffset; - if (offset <= 0.f) { - return 0.f; +- return -(useUnadjustedScrollOffset ? scrollOffset : (mMinScrollOffset - scrollOffset)); ++ return -Math.abs(useUnadjustedScrollOffset ? scrollOffset : (mMinScrollOffset - scrollOffset)); + } + } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -34,6 +34,7 @@ import org.chromium.base.Callback; - import org.chromium.base.metrics.RecordUserAction; - import org.chromium.base.supplier.ObservableSupplier; - import org.chromium.base.supplier.ObservableSupplierImpl; -+import org.chromium.base.supplier.Supplier; - import org.chromium.chrome.R; - import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; - import org.chromium.chrome.browser.compositor.LayerTitleCache; -@@ -97,6 +98,8 @@ import org.chromium.ui.interpolators.Interpolators; +@@ -100,6 +100,8 @@ import org.chromium.ui.interpolators.Interpolators; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.util.ColorUtils; import org.chromium.url.GURL; @@ -1040,7 +1012,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -@@ -265,12 +268,16 @@ public class StripLayoutHelperManager +@@ -268,12 +270,16 @@ public class StripLayoutHelperManager // Drag-Drop @Nullable private TabDragSource mTabDragSource; @@ -1054,26 +1026,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over return; } + y -= mStripFilterArea.top; - if (mModelSelectorButton.onDown(x, y, fromMouse, buttons)) { + if (mModelSelectorButton != null + && mModelSelectorButton.onDown(x, y, fromMouse, buttons)) { return; - } -@@ -293,6 +300,7 @@ public class StripLayoutHelperManager +@@ -299,6 +305,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } + y -= mStripFilterArea.top; - mModelSelectorButton.drag(x, y); - getActiveStripLayoutHelper().drag(time(), x, y, dx); - } -@@ -302,6 +310,7 @@ public class StripLayoutHelperManager + if (mModelSelectorButton != null) { + mModelSelectorButton.drag(x, y); + } +@@ -310,6 +317,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } + y -= mStripFilterArea.top; long time = time(); - if (mModelSelectorButton.click(x, y, fromMouse, buttons)) { - mModelSelectorButton.handleClick(time); -@@ -315,6 +324,7 @@ public class StripLayoutHelperManager + if (mModelSelectorButton != null + && mModelSelectorButton.click(x, y, fromMouse, buttons)) { +@@ -324,6 +332,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1081,7 +1053,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().fling(time(), x, y, velocityX, velocityY); } -@@ -323,6 +333,7 @@ public class StripLayoutHelperManager +@@ -332,6 +341,7 @@ public class StripLayoutHelperManager if (DragDropGlobalState.hasValue()) { return; } @@ -1089,7 +1061,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over getActiveStripLayoutHelper().onLongPress(time(), x, y); } -@@ -429,7 +440,8 @@ public class StripLayoutHelperManager +@@ -438,7 +448,8 @@ public class StripLayoutHelperManager // implement an interface to manage strip transition states. @NonNull ToolbarManager toolbarManager, @Nullable DesktopWindowStateProvider desktopWindowStateProvider, @@ -1099,7 +1071,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over Resources res = context.getResources(); mUpdateHost = updateHost; mLayerTitleCacheSupplier = layerTitleCacheSupplier; -@@ -591,6 +603,8 @@ public class StripLayoutHelperManager +@@ -550,6 +561,8 @@ public class StripLayoutHelperManager !mTabStripObscured && getStripVisibilityState() == StripVisibilityState.VISIBLE); @@ -1108,7 +1080,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over tabHoverCardViewStub.setOnInflateListener( (viewStub, view) -> { -@@ -753,6 +767,10 @@ public class StripLayoutHelperManager +@@ -783,6 +796,10 @@ public class StripLayoutHelperManager // layer should be a negative value. yOffset -= getHeight(); } @@ -1119,7 +1091,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mTabStripTreeProvider.pushAndUpdateStrip( this, mLayerTitleCacheSupplier.get(), -@@ -766,7 +784,9 @@ public class StripLayoutHelperManager +@@ -796,7 +813,9 @@ public class StripLayoutHelperManager mStripTransitionScrimOpacity, mLeftPadding, mRightPadding, @@ -1130,7 +1102,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over return mTabStripTreeProvider; } -@@ -822,11 +842,21 @@ public class StripLayoutHelperManager +@@ -855,11 +874,21 @@ public class StripLayoutHelperManager mLeftPadding, mRightPadding); @@ -1358,7 +1330,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/Chr diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -110,6 +110,7 @@ import org.chromium.ui.base.DeviceFormFactor; +@@ -109,6 +109,7 @@ import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; @@ -1366,7 +1338,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. import java.util.List; -@@ -669,11 +670,16 @@ public class NewTabPage +@@ -661,11 +662,16 @@ public class NewTabPage final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1385,7 +1357,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage. if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -689,9 +695,7 @@ public class NewTabPage +@@ -681,9 +687,7 @@ public class NewTabPage * strip. */ private int getToolbarExtraYOffset() { @@ -1409,7 +1381,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageL import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; -@@ -178,10 +181,17 @@ public class NewTabPageLayout extends LinearLayout { +@@ -174,10 +177,17 @@ public class NewTabPageLayout extends LinearLayout { mMiddleSpacer = findViewById(R.id.ntp_middle_spacer); mFakeSearchBoxLayout = findViewById(R.id.search_box); insertSiteSectionView(); @@ -1506,7 +1478,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsP diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java -@@ -85,6 +85,11 @@ import org.chromium.url.GURL; +@@ -84,6 +84,11 @@ import org.chromium.url.GURL; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -1518,7 +1490,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se import java.lang.ref.WeakReference; /** Queries the user's default search engine and shows autocomplete suggestions. */ -@@ -288,6 +293,12 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -287,6 +292,12 @@ public class SearchActivity extends AsyncInitializationActivity // Build the search box. mSearchBox = contentView.findViewById(R.id.search_location_bar); View anchorView = contentView.findViewById(R.id.toolbar); @@ -1534,7 +1506,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/Se diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java -@@ -408,6 +408,11 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -403,6 +403,11 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManager(mSnackbarManager); } @@ -1598,7 +1570,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicato diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -190,6 +190,9 @@ import org.chromium.url.GURL; +@@ -196,6 +196,9 @@ import org.chromium.url.GURL; import java.util.List; @@ -1608,7 +1580,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -629,6 +632,17 @@ public class ToolbarManager +@@ -648,6 +651,17 @@ public class ToolbarManager }, AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); mControlContainer = controlContainer; mToolbarHairline = mControlContainer.findViewById(R.id.toolbar_hairline); @@ -1626,7 +1598,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBookmarkModelSupplier = bookmarkModelSupplier; mBookmarkModelSupplier.addObserver(mBookmarkModelSupplierObserver); -@@ -1112,6 +1126,7 @@ public class ToolbarManager +@@ -1137,6 +1151,7 @@ public class ToolbarManager // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1634,7 +1606,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar } else if (mLayoutChangeListener == null) { mLayoutChangeListener = (view, -@@ -1125,6 +1140,7 @@ public class ToolbarManager +@@ -1150,6 +1165,7 @@ public class ToolbarManager oldBottom) -> { if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1642,7 +1614,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mControlContainer.removeOnLayoutChangeListener( mLayoutChangeListener); mLayoutChangeListener = null; -@@ -1513,16 +1529,28 @@ public class ToolbarManager +@@ -1539,16 +1555,28 @@ public class ToolbarManager return ((LocationBarCoordinator) mLocationBar).getUrlBarTextWithoutAutocomplete(); } @@ -1673,7 +1645,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar mBrowserControlsVisibilityManager, mIncognitoStateProvider, mScrimCoordinator, -@@ -1547,7 +1575,7 @@ public class ToolbarManager +@@ -1574,7 +1602,7 @@ public class ToolbarManager mBottomControlsStacker, mFullscreenManager, mEdgeToEdgeControllerSupplier, @@ -1682,7 +1654,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar bottomControlsContentDelegateSupplier, mTabObscuringHandler, mOverlayPanelVisibilitySupplier, -@@ -1555,7 +1583,8 @@ public class ToolbarManager +@@ -1582,7 +1610,8 @@ public class ToolbarManager /* readAloudRestoringSupplier= */ () -> { final var readAloud = mReadAloudControllerSupplier.get(); return readAloud != null && readAloud.isRestoringPlayer(); @@ -1734,7 +1706,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/BottomContai diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java -@@ -8,10 +8,13 @@ import android.content.Context; +@@ -8,6 +8,7 @@ import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.Window; @@ -1742,13 +1714,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/Statu import androidx.annotation.ColorInt; import androidx.annotation.Nullable; - -+import org.chromium.chrome.browser.flags.ChromeFeatureList; -+ - import org.chromium.base.CallbackController; +@@ -17,6 +18,7 @@ import org.chromium.base.CallbackController; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.chrome.R; -@@ -482,6 +485,12 @@ public class StatusBarColorController + import org.chromium.chrome.browser.ActivityTabProvider; ++import org.chromium.chrome.browser.flags.ChromeFeatureList; + import org.chromium.chrome.browser.layouts.LayoutManager; + import org.chromium.chrome.browser.layouts.LayoutStateProvider; + import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver; +@@ -479,6 +481,12 @@ public class StatusBarColorController boolean needsDarkStatusBarIcons = !ColorUtils.shouldUseLightForegroundOnBackground(color); UiUtils.setStatusBarIconColor(root, needsDarkStatusBarIcons); UiUtils.setStatusBarColor(window, color); @@ -1838,7 +1812,7 @@ diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer diff --git a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java --- a/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java +++ b/chrome/browser/browser_controls/android/java/src/org/chromium/chrome/browser/browser_controls/BottomControlsStacker.java -@@ -122,7 +122,7 @@ public class BottomControlsStacker implements BrowserControlsStateProvider.Obser +@@ -178,7 +178,7 @@ public class BottomControlsStacker implements BrowserControlsStateProvider.Obser /** * @return {@link BrowserControlsStateProvider} instance in the current Activity. */ @@ -1919,7 +1893,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse #include "chrome/browser/android/webapk/webapk_features.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/flags/android/chrome_session_state.h" -@@ -260,6 +261,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -267,6 +268,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kNavBarColorMatchesTabBackground, &kNewTabSearchEngineUrlAndroid, &kNewTabPageAndroidTriggerForPrerender2, @@ -1931,7 +1905,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse 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 -@@ -374,6 +374,10 @@ public abstract class ChromeFeatureList { +@@ -373,6 +373,10 @@ public abstract class ChromeFeatureList { public static final String NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2 = "NewTabPageAndroidTriggerForPrerender2"; public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe"; @@ -1942,7 +1916,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; -@@ -670,6 +674,10 @@ public abstract class ChromeFeatureList { +@@ -660,6 +664,10 @@ public abstract class ChromeFeatureList { public static final CachedFlag sPriceInsights = newCachedFlag(PRICE_INSIGHTS, false); public static final CachedFlag sPrivacyGuideAndroid3 = newCachedFlag(PRIVACY_GUIDE_ANDROID_3, false); @@ -1953,15 +1927,15 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final CachedFlag sPrivacyGuidePreloadAndroid = newCachedFlag(PRIVACY_GUIDE_PRELOAD_ANDROID, false); public static final CachedFlag sOptimizationGuidePushNotifications = -@@ -800,6 +808,8 @@ public abstract class ChromeFeatureList { +@@ -788,6 +796,8 @@ public abstract class ChromeFeatureList { sPrivacyGuideAndroid3, sPrivacyGuidePreloadAndroid, sOptimizationGuidePushNotifications, + sMoveTopToolbarToBottom, + sDisableToolbarSwipeUp, sPaintPreviewDemo, + sPostGetMyMemoryStateToBackground, sPrefetchBrowserInitiatedTriggers, - sQueryTiles, diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/BUILD.gn --- a/chrome/browser/hub/internal/BUILD.gn +++ b/chrome/browser/hub/internal/BUILD.gn @@ -1987,15 +1961,15 @@ diff --git a/chrome/browser/hub/internal/BUILD.gn b/chrome/browser/hub/internal/ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java --- a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java +++ b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/HubCoordinator.java -@@ -8,6 +8,7 @@ import android.content.Context; - import android.view.LayoutInflater; +@@ -9,6 +9,7 @@ import android.view.LayoutInflater; import android.view.View; + import android.view.ViewGroup; import android.widget.FrameLayout; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -@@ -18,6 +19,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; +@@ -19,6 +20,7 @@ import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.OneshotSupplier; import org.chromium.base.supplier.TransitiveObservableSupplier; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; @@ -2003,7 +1977,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.toolbar.menu_button.MenuButtonCoordinator; -@@ -93,6 +95,12 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { +@@ -94,6 +96,12 @@ public class HubCoordinator implements PaneHubController, BackPressHandler { HubPaneHostView hubPaneHostView = mContainerView.findViewById(R.id.hub_pane_host); mHubPaneHostCoordinator = new HubPaneHostCoordinator(hubPaneHostView, paneManager.getFocusedPaneSupplier()); @@ -2035,7 +2009,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.profiles.ProfileProvider; import org.chromium.chrome.browser.tab.Tab; -@@ -111,7 +113,10 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -120,7 +122,10 @@ public class HubManagerImpl implements HubManager, HubController { LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); assert params != null : "HubContainerView should always have layout params."; mStatusIndicatorHeight = height; @@ -2047,7 +2021,7 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br mHubContainerView.setLayoutParams(params); } -@@ -121,7 +126,10 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -130,7 +135,10 @@ public class HubManagerImpl implements HubManager, HubController { LayoutParams params = (LayoutParams) mHubContainerView.getLayoutParams(); assert params != null : "HubContainerView should always have layout params."; mAppHeaderHeight = height; @@ -2059,15 +2033,29 @@ diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/br mHubContainerView.setLayoutParams(params); } -@@ -242,6 +250,9 @@ public class HubManagerImpl implements HubManager, HubController { +@@ -242,6 +250,8 @@ public class HubManagerImpl implements HubManager, HubController { + mSnackbarManager.popParentViewFromOverrideStack(mSnackbarOverrideToken); + mSnackbarOverrideToken = TokenHolder.INVALID_TOKEN; + } ++ if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) ++ mSnackbarManager.setParentView(null); + } + + private void attachPaneDependencies(@Nullable Pane pane) { +@@ -254,8 +264,12 @@ public class HubManagerImpl implements HubManager, HubController { mMenuOrKeyboardActionController.registerMenuOrKeyboardActionHandler( menuOrKeyboardActionHandler); } -- mSnackbarManager.setParentView(mHubContainerView); +- mSnackbarOverrideToken = +- mSnackbarManager.pushParentViewToOverrideStack( +- mHubCoordinator.getSnackbarContainer()); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) + mSnackbarManager.setParentView((ViewGroup)getPaneHostView()); -+ else -+ mSnackbarManager.setParentView(mHubContainerView); ++ else { ++ mSnackbarOverrideToken = ++ mSnackbarManager.pushParentViewToOverrideStack( ++ mHubCoordinator.getSnackbarContainer()); ++ } } } diff --git a/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java b/chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java @@ -2151,7 +2139,7 @@ diff --git a/chrome/browser/hub/internal/android/res/layout/hub_toolbar_layout.x diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -2168,7 +2168,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2206,7 +2206,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -2159,7 +2147,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse + true); #endif - #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) + registry->RegisterBooleanPref( diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java --- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java +++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java @@ -2512,7 +2500,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1699,6 +1699,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1696,6 +1696,12 @@ Your Google account may have other forms of browsing history like searches and a Force Tablet Mode @@ -2528,7 +2516,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn --- a/chrome/browser/ui/android/toolbar/BUILD.gn +++ b/chrome/browser/ui/android/toolbar/BUILD.gn -@@ -167,6 +167,7 @@ android_library("java") { +@@ -168,6 +168,7 @@ android_library("java") { "//content/public/android:content_java", "//third_party/android_deps:material_design_java", "//third_party/androidx:androidx_annotation_annotation_experimental_java", @@ -2633,7 +2621,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/BottomControlsMediator.java -@@ -25,6 +25,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeSupplier.ChangeObse +@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils; import org.chromium.ui.KeyboardVisibilityDelegate; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modelutil.PropertyModel; @@ -2641,7 +2629,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * This class is responsible for reacting to events from the outside world, interacting with other -@@ -148,6 +149,12 @@ class BottomControlsMediator +@@ -147,6 +148,12 @@ class BottomControlsMediator } void setBottomControlsVisible(boolean visible) { @@ -2654,7 +2642,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mIsBottomControlsVisible = visible; updateCompositedViewVisibility(); updateAndroidViewVisibility(); -@@ -182,6 +189,7 @@ class BottomControlsMediator +@@ -181,6 +188,7 @@ class BottomControlsMediator int bottomControlsMinHeightOffset, boolean needsAnimate, boolean isVisibilityForced) { @@ -2662,19 +2650,21 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow // Method call routed to onBrowserControlsOffsetUpdate. if (BottomControlsStacker.isDispatchingYOffset()) return; -@@ -303,10 +311,12 @@ class BottomControlsMediator +@@ -306,11 +314,13 @@ class BottomControlsMediator && !mIsInSwipeLayout && getBrowserControls().getBottomControlOffset() == 0; if (visible) { -- // Translate view so that its bottom is aligned with browser controls min height. +- // Translate view so that its bottom is aligned with the "base" y_offset, or the +- // y_offset when the bottom controls aren't offset. - mModel.set( - BottomControlsProperties.ANDROID_VIEW_TRANSLATE_Y, -- -getBrowserControls().getBottomControlsMinHeight()); +- mModel.get(BottomControlsProperties.Y_OFFSET)); + if (!ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { -+ // Translate view so that its bottom is aligned with browser controls min height. ++ // Translate view so that its bottom is aligned with the "base" y_offset, or the ++ // y_offset when the bottom controls aren't offset. + mModel.set( + BottomControlsProperties.ANDROID_VIEW_TRANSLATE_Y, -+ -getBrowserControls().getBottomControlsMinHeight()); ++ mModel.get(BottomControlsProperties.Y_OFFSET)); + } } mModel.set(BottomControlsProperties.ANDROID_VIEW_VISIBLE, visible); diff --git a/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch b/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch index 4589cc77..a9001150 100644 --- a/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch +++ b/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch @@ -538,17 +538,17 @@ diff --git a/chrome/browser/ui/prefs/prefs_tab_helper.cc b/chrome/browser/ui/pre diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -@@ -574,6 +574,10 @@ void AddDownloadsStrings(content::WebUIDataSource* html_source) { - {"dayHistory", IDS_SETTINGS_DAY_HISTORY_DESCRIPTION}, - {"daysHistory", IDS_SETTINGS_DAYS_HISTORY_DESCRIPTION}, - {"foreverHistory", IDS_SETTINGS_FOREVER_HISTORY_DESCRIPTION}, -+ {"referersPolicyTitle", IDS_REFERERS_POLICY_TITLE}, -+ {"standardRefererPolicy", IDS_STANDARD_REFERER_POLICY_TITLE}, -+ {"noCrossOriginTopFramePolicy", IDS_NO_CROSS_ORIGIN_TOP_FRAME_POLICY_TITLE}, -+ {"disableRefererPolicy", IDS_DISABLE_REFERER_POLICY_TITLE}, +@@ -1854,6 +1854,10 @@ void AddPrivacyStrings(content::WebUIDataSource* html_source, + {"dayHistory", IDS_SETTINGS_DAY_HISTORY_DESCRIPTION}, + {"daysHistory", IDS_SETTINGS_DAYS_HISTORY_DESCRIPTION}, + {"foreverHistory", IDS_SETTINGS_FOREVER_HISTORY_DESCRIPTION}, ++ {"referersPolicyTitle", IDS_REFERERS_POLICY_TITLE}, ++ {"standardRefererPolicy", IDS_STANDARD_REFERER_POLICY_TITLE}, ++ {"noCrossOriginTopFramePolicy", IDS_NO_CROSS_ORIGIN_TOP_FRAME_POLICY_TITLE}, ++ {"disableRefererPolicy", IDS_DISABLE_REFERER_POLICY_TITLE}, #if BUILDFLAG(GOOGLE_CHROME_BRANDING) - void AddGetTheMostOutOfChromeStrings(content::WebUIDataSource* html_source) { - static constexpr webui::LocalizedString kLocalizedStrings[] = { + {"safeBrowsingStandardDescProxy", + IDS_SETTINGS_SAFEBROWSING_STANDARD_DESC_PROXY}, diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h diff --git a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch index 49b86fd9..94ecba73 100644 --- a/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch +++ b/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch @@ -8,8 +8,6 @@ Voice button and legacy share/voice functionality is not restored. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../chrome/browser/settings/MainSettings.java | 3 +- - .../browser/share/ShareButtonController.java | 37 +++++++++++ - chrome/browser/about_flags.cc | 6 -- chrome/browser/flag-metadata.json | 3 +- .../flags/android/chrome_feature_list.cc | 5 ++ .../browser/flags/ChromeFeatureList.java | 1 + @@ -20,21 +18,21 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../AdaptiveToolbarStatePredictorTest.java | 15 +++++ ...oButtonGroupAdaptiveToolbarPreference.java | 1 + ...ve-button-in-top-toolbar-customization.inc | 3 + - 13 files changed, 147 insertions(+), 12 deletions(-) + 11 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-adaptive-button-in-top-toolbar-customization.inc diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -52,6 +52,7 @@ import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; - import org.chromium.chrome.browser.sync.settings.SignInPreference; - import org.chromium.chrome.browser.sync.settings.SyncPromoPreference; +@@ -55,6 +55,7 @@ import org.chromium.chrome.browser.sync.settings.SyncPromoPreference; import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils; + import org.chromium.chrome.browser.tab_group_sync.TabGroupSyncFeatures; + import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; +import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarFeatures; import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarStatePredictor; import org.chromium.chrome.browser.tracing.settings.DeveloperSettings; import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; -@@ -268,7 +269,7 @@ public class MainSettings extends ChromeBaseSettingsFragment +@@ -271,7 +272,7 @@ public class MainSettings extends ChromeBaseSettingsFragment uiState -> { // We don't show the toolbar shortcut settings page if disabled from // finch. @@ -43,79 +41,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSe getPreferenceScreen() .removePreference(findPreference(PREF_TOOLBAR_SHORTCUT)); }); -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java ---- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareButtonController.java -@@ -111,6 +111,43 @@ public class ShareButtonController extends BaseButtonDataProvider { - return mShareUtils.shouldEnableShare(tab); - } - -+/* @Override -+ public ButtonData get(Tab tab) { -+ updateButtonVisibility(tab); -+ maybeSetIphCommandBuilder(tab); -+ return mButtonData; -+ } -+ -+ private void updateButtonVisibility(Tab tab) { -+ if (tab == null || tab.getWebContents() == null || mTabProvider == null -+ || mTabProvider.get() == null || !isFeatureEnabled()) { -+ mButtonData.setCanShow(false); -+ return; -+ } -+ -+ final boolean isDeviceWideEnough = -+ mScreenWidthDp >= AdaptiveToolbarFeatures.getDeviceMinimumWidthForShowingButton(); -+ if (mShareDelegateSupplier.get() == null || !isDeviceWideEnough) { -+ mButtonData.setCanShow(false); -+ return; -+ } -+ -+ mButtonData.setCanShow(mShareUtils.shouldEnableShare(tab)); -+ } -+ -+ private static boolean isFeatureEnabled() { -+ return (AdaptiveToolbarFeatures.isSingleVariantModeEnabled() -+ && AdaptiveToolbarFeatures.getSingleVariantMode() -+ == AdaptiveToolbarButtonVariant.SHARE) -+ || AdaptiveToolbarFeatures.isCustomizationEnabled(); -+ } -+ -+ private void notifyObservers(boolean hint) { -+ for (ButtonDataObserver observer : mObservers) { -+ observer.buttonDataChanged(hint); -+ } -+ } */ -+ - /** - * Returns an IPH for this button. Only called once native is initialized and when {@code - * AdaptiveToolbarFeatures.isCustomizationEnabled()} is true. -diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc ---- a/chrome/browser/about_flags.cc -+++ b/chrome/browser/about_flags.cc -@@ -701,18 +701,12 @@ const FeatureEntry::FeatureParam kAdaptiveButtonCustomization_Share[] = { - {"default_segment", "share"}, - {"show_ui_only_after_ready", "false"}, - {"ignore_segmentation_results", "true"}}; --const FeatureEntry::FeatureParam kAdaptiveButtonCustomization_Voice[] = { -- {"default_segment", "voice"}, -- {"show_ui_only_after_ready", "false"}, -- {"ignore_segmentation_results", "true"}}; - const FeatureEntry::FeatureVariation - kAdaptiveButtonInTopToolbarCustomizationVariations[] = { - {"New Tab", kAdaptiveButtonCustomization_NewTab, - std::size(kAdaptiveButtonCustomization_NewTab), nullptr}, - {"Share", kAdaptiveButtonCustomization_Share, - std::size(kAdaptiveButtonCustomization_Share), nullptr}, -- {"Voice", kAdaptiveButtonCustomization_Voice, -- std::size(kAdaptiveButtonCustomization_Voice), nullptr}, - }; - - const FeatureEntry::FeatureParam kContextualPageActionsUiParams_Quiet[] = { diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -47,9 +47,10 @@ +@@ -52,9 +52,10 @@ "expiry_milestone": 130 }, { @@ -130,7 +59,7 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.js 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 -@@ -159,6 +159,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -168,6 +168,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &history::kOrganicRepeatableQueries, &history_clusters::internal::kJourneys, &history_clusters::internal::kOmniboxAction, @@ -138,7 +67,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse &kAdaptiveButtonInTopToolbarTranslate, &kAdaptiveButtonInTopToolbarAddToBookmarks, &kAdaptiveButtonInTopToolbarCustomizationV2, -@@ -419,6 +420,10 @@ static jlong JNI_ChromeFeatureMap_GetNativeMap(JNIEnv* env) { +@@ -420,6 +421,10 @@ static jlong JNI_ChromeFeatureMap_GetNativeMap(JNIEnv* env) { // Alphabetical: @@ -152,7 +81,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse 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 -@@ -158,6 +158,7 @@ public abstract class ChromeFeatureList { +@@ -160,6 +160,7 @@ public abstract class ChromeFeatureList { public static final String ACCOUNT_REAUTHENTICATION_RECENT_TIME_WINDOW = "AccountReauthenticationRecentTimeWindow"; public static final String ALLOW_USER_CERTIFICATES = "AllowUserCertificates"; @@ -163,8 +92,8 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java -@@ -278,6 +278,15 @@ public class AdaptiveToolbarButtonController - new AdaptiveToolbarStatePredictor(profile, mAndroidPermissionDelegate); +@@ -281,6 +281,15 @@ public class AdaptiveToolbarButtonController + new AdaptiveToolbarStatePredictor(mContext, profile, mAndroidPermissionDelegate); ContextUtils.getAppSharedPreferences().registerOnSharedPreferenceChangeListener(this); + if (AdaptiveToolbarFeatures.isSingleVariantModeEnabled()) { @@ -182,9 +111,9 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java -@@ -16,8 +16,18 @@ import org.chromium.chrome.browser.readaloud.ReadAloudFeatures; - +@@ -18,8 +18,18 @@ import org.chromium.ui.base.DeviceFormFactor; import java.util.HashMap; + import java.util.List; -/** A utility class for handling feature flags used by {@link AdaptiveToolbarButtonController}. */ +/** A utility class for handling feature flags used by {@link AdaptiveToolbarButtonController}. * @@ -202,16 +131,16 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** Finch default group for new tab variation. */ static final String NEW_TAB = "new-tab"; -@@ -33,6 +43,7 @@ public class AdaptiveToolbarFeatures { - private static final String VARIATION_PARAM_DISABLE_UI = "disable_ui"; - private static final String VARIATION_PARAM_IGNORE_SEGMENTATION_RESULTS = - "ignore_segmentation_results"; +@@ -48,6 +58,7 @@ public class AdaptiveToolbarFeatures { + @AdaptiveToolbarButtonVariant private static Integer sButtonVariant; + + /** For testing only. */ + private static final String VARIATION_PARAM_SINGLE_VARIANT_MODE = "mode"; - private static final String VARIATION_PARAM_SHOW_UI_ONLY_AFTER_READY = - "show_ui_only_after_ready"; - @VisibleForTesting static final String VARIATION_PARAM_MIN_VERSION = "min_version_adaptive"; -@@ -113,6 +124,21 @@ public class AdaptiveToolbarFeatures { - } + private static String sDefaultSegmentForTesting; + + private static HashMap sActionChipOverridesForTesting; +@@ -79,6 +90,21 @@ public class AdaptiveToolbarFeatures { + return false; } + /** @@ -232,8 +161,8 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Returns whether the adaptive toolbar is enabled with segmentation and customization. * -@@ -252,11 +278,48 @@ public class AdaptiveToolbarFeatures { - ChromeFeatureList.CONTEXTUAL_PAGE_ACTIONS, "enable_ui", true); +@@ -204,6 +230,42 @@ public class AdaptiveToolbarFeatures { + return segmentationResults.get(0); } + /** @@ -275,12 +204,14 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow /** * Returns the default variant to be shown in segmentation experiment when the backend results * are unavailable or not configured. +@@ -211,6 +273,7 @@ public class AdaptiveToolbarFeatures { + * @param context @{@link Context} to determine form-factor. */ - static @AdaptiveToolbarButtonVariant int getSegmentationDefault() { + static @AdaptiveToolbarButtonVariant int getSegmentationDefault(Context context) { + assert !isSingleVariantModeEnabled(); assert isCustomizationEnabled(); if (sButtonVariant != null) return sButtonVariant; - String defaultSegment = getDefaultSegment(); + String defaultSegment = getDefaultSegment(context); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarPrefs.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarPrefs.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarPrefs.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarPrefs.java @@ -296,7 +227,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java -@@ -91,10 +91,15 @@ public class AdaptiveToolbarStatePredictor { +@@ -99,10 +99,15 @@ public class AdaptiveToolbarStatePredictor { // Early return if the feature isn't enabled. if (!AdaptiveToolbarFeatures.isCustomizationEnabled()) { @@ -317,7 +248,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java -@@ -70,6 +70,21 @@ public class AdaptiveToolbarStatePredictorTest { +@@ -73,6 +73,21 @@ public class AdaptiveToolbarStatePredictorTest { statePredictor.recomputeUiState(verifyResultCallback(expected)); } diff --git a/build/patches/Use-list-mode-for-tab-switcher.patch b/build/patches/Use-list-mode-for-tab-switcher.patch index cadfb367..beaf0d5e 100644 --- a/build/patches/Use-list-mode-for-tab-switcher.patch +++ b/build/patches/Use-list-mode-for-tab-switcher.patch @@ -11,9 +11,9 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../java/res/xml/privacy_preferences.xml | 6 ++++ .../flags/cromite/sTabSwitcherListMode.java | 33 +++++++++++++++++++ .../Use-list-mode-for-tab-switcher.grdp | 9 +++++ - .../browser/toolbar/top/ToolbarPhone.java | 16 +++++---- + .../browser/toolbar/top/ToolbarPhone.java | 6 ++-- .../tab-switcher-list-mode.inc | 3 ++ - 6 files changed, 63 insertions(+), 8 deletions(-) + 6 files changed, 57 insertions(+), 4 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 @@ -21,15 +21,15 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html 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 -@@ -11,6 +11,7 @@ import org.chromium.base.ResettersForTesting; - import org.chromium.base.SysUtils; +@@ -12,6 +12,7 @@ import org.chromium.base.SysUtils; import org.chromium.chrome.browser.flags.ChromeFeatureList; + import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter; import org.chromium.ui.base.DeviceFormFactor; +import org.chromium.chrome.browser.flags.cromite.sTabSwitcherListMode; import java.util.Locale; import java.util.Set; -@@ -46,8 +47,7 @@ public class TabUiFeatureUtilities { +@@ -47,8 +48,7 @@ public class TabUiFeatureUtilities { /** Returns whether the Grid Tab Switcher UI should use list mode. */ public static boolean shouldUseListMode() { @@ -110,25 +110,15 @@ new file mode 100644 diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java -@@ -51,6 +51,7 @@ import org.chromium.base.MathUtils; - import org.chromium.base.TraceEvent; +@@ -51,6 +51,7 @@ import org.chromium.base.TraceEvent; import org.chromium.base.supplier.ObservableSupplier; + import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.cromite.sTabSwitcherListMode; import org.chromium.chrome.browser.omnibox.LocationBar; import org.chromium.chrome.browser.omnibox.LocationBarCoordinator; import org.chromium.chrome.browser.omnibox.NewTabPageDelegate; -@@ -503,7 +504,8 @@ public class ToolbarPhone extends ToolbarLayout - - private void inflateTabSwitchingResources() { - mToggleTabStackButton = findViewById(R.id.tab_switcher_button); -- mToggleTabStackButton.setClickable(false); -+ if (!sTabSwitcherListMode.getInstance().isEnabled()) -+ mToggleTabStackButton.setClickable(false); - } - - private void enableTabSwitchingResources() { -@@ -1935,7 +1937,7 @@ public class ToolbarPhone extends ToolbarLayout +@@ -1849,7 +1850,7 @@ public class ToolbarPhone extends ToolbarLayout // On entering the tab switcher, set the focusability of the url bar to be false. This will // occur at the start of the enter event, and will later be reset to true upon finishing the // exit event. @@ -137,30 +127,16 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow mLocationBar.setUrlBarFocusable(false); } -@@ -1952,9 +1954,10 @@ public class ToolbarPhone extends ToolbarLayout - && (mTabSwitcherState == STATIC_TAB || mTabSwitcherState == EXITING_TAB_SWITCHER)) { - return; - } -- // Prevent pressing the tab switcher button until after transition finishes. -- mToggleTabStackButton.setClickable(false); -- -+ if (!sTabSwitcherListMode.getInstance().isEnabled()) { -+ // Prevent pressing the tab switcher button until after transition finishes. -+ mToggleTabStackButton.setClickable(false); -+ } - mTabSwitcherState = inTabSwitcherMode ? ENTERING_TAB_SWITCHER : EXITING_TAB_SWITCHER; +@@ -2047,7 +2048,8 @@ public class ToolbarPhone extends ToolbarLayout + + updateLocationBarForNtp(mVisualState, urlHasFocus()); + +- getTabSwitcherButtonCoordinator().getContainerView().setClickable(!hasFocus); ++ if (!sTabSwitcherListMode.getInstance().isEnabled()) ++ getTabSwitcherButtonCoordinator().getContainerView().setClickable(!hasFocus); + triggerUrlFocusAnimation(hasFocus); + } - // The width of location bar depends on mTabSwitcherState so layout request is needed. See -@@ -2014,7 +2017,8 @@ public class ToolbarPhone extends ToolbarLayout - } - if (mTabSwitcherState == ENTERING_TAB_SWITCHER) { - mTabSwitcherState = TAB_SWITCHER; -- mToggleTabStackButton.setClickable(false); -+ if (!sTabSwitcherListMode.getInstance().isEnabled()) -+ mToggleTabStackButton.setClickable(false); - } - // Ensure clickable if in STATIC_TAB mode. - if (mTabSwitcherState == STATIC_TAB) { diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/tab-switcher-list-mode.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/tab-switcher-list-mode.inc new file mode 100644 --- /dev/null