Browse Source

Release 89.0.4389.78

csagan5 4 năm trước cách đây
mục cha
commit
a55c7672af
28 tập tin đã thay đổi với 1292 bổ sung1570 xóa
  1. 11 1
      CHANGELOG.md
  2. 1 0
      README.md
  3. 1 1
      build/RELEASE
  4. 1 0
      build/bromite_patches_list.txt
  5. 9 12
      build/patches/Add-a-proxy-configuration-page.patch
  6. 2 2
      build/patches/Add-an-always-incognito-mode.patch
  7. 1 1
      build/patches/Add-bookmark-import-export-actions.patch
  8. 12 13
      build/patches/Add-custom-tab-intents-privacy-option.patch
  9. 2 2
      build/patches/Add-exit-menu-item.patch
  10. 8 8
      build/patches/Add-history-support-in-incognito-mode.patch
  11. 27 3
      build/patches/Add-menu-item-to-bookmark-all-tabs.patch
  12. 2 2
      build/patches/Add-menu-item-to-view-source.patch
  13. 13 18
      build/patches/Add-option-to-not-persist-tabs-across-sessions.patch
  14. 8 8
      build/patches/Automated-domain-substitution.patch
  15. 150 620
      build/patches/Bromite-AdBlockUpdaterService.patch
  16. 64 138
      build/patches/Disable-safe-browsing.patch
  17. 3 17
      build/patches/Disable-sync-services-menu-entry.patch
  18. 15 4
      build/patches/Enable-network-isolation-features.patch
  19. 54 0
      build/patches/Make-all-favicon-requests-on-demand.patch
  20. 21 15
      build/patches/Move-some-account-settings-back-to-privacy-settings.patch
  21. 4 595
      build/patches/Remove-binary-blob-integrations.patch
  22. 6 6
      build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch
  23. 1 1
      build/patches/Remove-help-menu-item.patch
  24. 861 44
      build/patches/Remove-signin-and-data-saver-integrations.patch
  25. 8 8
      build/patches/User-agent-customization.patch
  26. 3 3
      build/patches/kill-TOS-and-metrics-opt-out.patch
  27. 1 22
      build/patches/kill-Vision.patch
  28. 3 26
      build/patches/ungoogled-chromium-Disable-profile-avatar.patch

+ 11 - 1
CHANGELOG.md

@@ -1,7 +1,17 @@
+# 89.0.4389.78
+* make all favicon requests on-demand
+* restored older icon for view source menu item
+* prevent adblock filters update check on app start (fixes https://github.com/bromite/bromite/issues/967)
+* removed UI for adblock filters (fixes https://github.com/bromite/bromite/issues/941)
+* dropped patch for swapped favicons bug
+* dropped patch to enable reduced-referrer-granularity by default (already present upstream)
+* dropped password reuse detection patch
+* dropped UA customization patch
+* enabled PartitionExpectCTStateByNetworkIsolationKey and PartitionDomainReliabilityByNetworkIsolationKey (fixes https://github.com/bromite/bromite/issues/985)
+
 # 88.0.4324.207
 * add flag for save-data-header
 * add option to force tablet UI
-* fix bug with wrong last checked time (thanks to @uazo, fixes https://github.com/bromite/bromite/issues/941)
 * fix bug with adblock filters not being downloaded correctly (fixes https://github.com/bromite/bromite/issues/960)
 * move up bookmark all tabs menu item (fixes https://github.com/bromite/bromite/issues/943)
 * fix icons for exit and view source menu items

+ 1 - 0
README.md

@@ -57,6 +57,7 @@ ETH donations address: `0xf47ff39223d828f99fec5ab53bd068c5c0522042`
 
 ## Features not related to privacy
 * import/export bookmarks
+* bookmark all tabs from tabs regroup menu
 * flag to allow screenshots of incognito tabs
 * allow playing videos in background tabs and disable pause on switching tabs
 * all codecs included (proprietary, open H.264 etc.)

+ 1 - 1
build/RELEASE

@@ -1 +1 @@
-88.0.4324.207
+89.0.4389.78

+ 1 - 0
build/bromite_patches_list.txt

@@ -145,4 +145,5 @@ Enable-app-overflow-menu-icons-by-default.patch
 Add-menu-item-to-bookmark-all-tabs.patch
 Add-flag-for-save-data-header.patch
 Add-option-to-force-tablet-UI.patch
+Make-all-favicon-requests-on-demand.patch
 Automated-domain-substitution.patch

+ 9 - 12
build/patches/Add-a-proxy-configuration-page.patch

@@ -11,7 +11,7 @@ for SimpleURLLoaders as well.
 ---
  chrome/android/java/res/values/values.xml     |   3 +
  .../java/res/xml/privacy_preferences.xml      |   4 +
- .../privacy/settings/PrivacySettings.java     |   6 +-
+ .../privacy/settings/PrivacySettings.java     |   5 +-
  .../chrome_autocomplete_provider_client.cc    |   2 +
  chrome/browser/browser_resources.grd          |   6 +
  chrome/browser/net/proxy_service_factory.cc   |  23 +-
@@ -33,7 +33,7 @@ for SimpleURLLoaders as well.
  .../proxy_config/proxy_config_dictionary.h    |   7 +-
  net/proxy_resolution/proxy_config.cc          |  52 ++-
  net/proxy_resolution/proxy_config.h           |   3 +
- 24 files changed, 998 insertions(+), 15 deletions(-)
+ 24 files changed, 997 insertions(+), 15 deletions(-)
  create mode 100644 chrome/browser/resources/proxy_config.css
  create mode 100644 chrome/browser/resources/proxy_config.html
  create mode 100644 chrome/browser/resources/proxy_config.js
@@ -70,7 +70,13 @@ 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
-@@ -54,7 +54,9 @@ public class PrivacySettings
+@@ -51,12 +51,15 @@ public class PrivacySettings
+     private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
+     public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
+     private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
++    private static final String PREF_PROXY_OPTIONS = "proxy";
+     private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
+             PREF_ALWAYS_INCOGNITO,
              PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS,
              PREF_CLOSE_TABS_ON_EXIT,
              PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
@@ -81,15 +87,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  
      private ManagedPreferenceDelegate mManagedPreferenceDelegate;
  
-@@ -62,6 +64,8 @@ public class PrivacySettings
- 
-     private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
- 
-+    private static final String PREF_PROXY_OPTIONS = "proxy";
-+
-     @Override
-     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-         PrivacyPreferencesManagerImpl privacyPrefManager =
 diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
 +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc

+ 2 - 2
build/patches/Add-an-always-incognito-mode.patch

@@ -147,7 +147,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
  import org.chromium.chrome.browser.IntentHandler.TabOpenType;
  import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout;
-@@ -1639,8 +1640,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1633,8 +1634,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          Bundle savedInstanceState = getSavedInstanceState();
  
          // We determine the model as soon as possible so every systems get initialized coherently.
@@ -170,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
  import org.chromium.chrome.browser.dependency_injection.ModuleFactoryOverrides;
  import org.chromium.chrome.browser.device.DeviceClassManager;
-@@ -1596,6 +1597,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1590,6 +1591,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              throw new IllegalStateException(
                      "Attempting to access TabCreator before initialization");
          }

+ 1 - 1
build/patches/Add-bookmark-import-export-actions.patch

@@ -402,7 +402,7 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
    ]
  
    configs += [
-@@ -3442,8 +3446,6 @@ static_library("browser") {
+@@ -3440,8 +3444,6 @@ static_library("browser") {
        "badging/badge_manager_factory.h",
        "banners/app_banner_manager_desktop.cc",
        "banners/app_banner_manager_desktop.h",

+ 12 - 13
build/patches/Add-custom-tab-intents-privacy-option.patch

@@ -3,11 +3,11 @@ Date: Wed, 29 Aug 2018 11:03:44 +0200
 Subject: Add custom tab intents privacy option
 
 ---
- .../android/java/res/xml/privacy_preferences.xml   |  5 +++++
- .../chrome/browser/LaunchIntentDispatcher.java     |  4 ++++
- .../browser/privacy/settings/PrivacySettings.java  | 14 +++++++++++++-
- .../ui/android/strings/android_chrome_strings.grd  |  7 +++++++
- 4 files changed, 29 insertions(+), 1 deletion(-)
+ chrome/android/java/res/xml/privacy_preferences.xml |  5 +++++
+ .../chrome/browser/LaunchIntentDispatcher.java      |  4 ++++
+ .../browser/privacy/settings/PrivacySettings.java   | 13 ++++++++++++-
+ .../ui/android/strings/android_chrome_strings.grd   |  7 +++++++
+ 4 files changed, 28 insertions(+), 1 deletion(-)
 
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
@@ -48,7 +48,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
 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
-@@ -49,10 +49,13 @@ public class PrivacySettings
+@@ -46,10 +46,12 @@ public class PrivacySettings
+     private static final String PREF_DO_NOT_TRACK = "do_not_track";
+     private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
+     private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
++    public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
      private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
              PREF_ALWAYS_INCOGNITO,
              PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS,
@@ -58,12 +62,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  
      private ManagedPreferenceDelegate mManagedPreferenceDelegate;
  
-+    public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
-+
-     @Override
-     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-         PrivacyPreferencesManagerImpl privacyPrefManager =
-@@ -105,6 +108,10 @@ public class PrivacySettings
+@@ -105,6 +107,10 @@ public class PrivacySettings
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
              PrivacyPreferencesManagerImpl.getInstance().setNetworkPredictionEnabled(
                      (boolean) newValue);
@@ -74,7 +73,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          }
  
          return true;
-@@ -128,6 +135,11 @@ public class PrivacySettings
+@@ -128,6 +134,11 @@ public class PrivacySettings
              canMakePaymentPref.setChecked(prefService.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
          }
  

+ 2 - 2
build/patches/Add-exit-menu-item.patch

@@ -58,7 +58,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton;
  import org.chromium.chrome.browser.app.tabmodel.ChromeNextTabPolicySupplier;
  import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton;
-@@ -1827,6 +1828,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1821,6 +1822,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          } else if (id == R.id.close_tab) {
              getCurrentTabModel().closeTab(currentTab, true, false, true);
              RecordUserAction.record("MobileTabClosed");
@@ -78,7 +78,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.ChromeActivitySessionTracker;
  import org.chromium.chrome.browser.ChromeApplication;
  import org.chromium.chrome.browser.ChromeWindow;
-@@ -1984,6 +1985,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1978,6 +1979,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              RecordUserAction.record("MobileMenuSettings");
          }
  

+ 8 - 8
build/patches/Add-history-support-in-incognito-mode.patch

@@ -47,15 +47,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
      private static final String PREF_NETWORK_PREDICTIONS = "preload_pages";
      private static final String PREF_SECURE_DNS = "secure_dns";
-@@ -51,6 +54,7 @@ public class PrivacySettings
-     private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
+@@ -54,6 +57,7 @@ public class PrivacySettings
+     private static final String PREF_PROXY_OPTIONS = "proxy";
      private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
              PREF_ALWAYS_INCOGNITO,
 +            PREF_INCOGNITO_TAB_HISTORY_ENABLED,
              PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS,
              PREF_CLOSE_TABS_ON_EXIT,
              PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
-@@ -106,6 +110,11 @@ public class PrivacySettings
+@@ -103,6 +107,11 @@ public class PrivacySettings
          Preference secureDnsPref = findPreference(PREF_SECURE_DNS);
          secureDnsPref.setVisible(SecureDnsSettings.isUiEnabled());
  
@@ -67,7 +67,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          updateSummaries();
      }
  
-@@ -126,6 +135,9 @@ public class PrivacySettings
+@@ -123,6 +132,9 @@ public class PrivacySettings
              SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
              sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
              sharedPreferencesEditor.apply();
@@ -77,7 +77,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          }
  
          return true;
-@@ -170,6 +182,13 @@ public class PrivacySettings
+@@ -167,6 +179,13 @@ public class PrivacySettings
                  (ChromeSwitchPreference) findPreference(PREF_CLOSE_TABS_ON_EXIT);
          closeTabsOnExitPref.setOnPreferenceChangeListener(this);
          closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
@@ -164,7 +164,7 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse
  #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
  #include "chrome/browser/android/explore_sites/history_statistics_reporter.h"
  #include "chrome/browser/android/ntp/recent_tabs_page_prefs.h"
-@@ -969,6 +971,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
+@@ -968,6 +970,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
    variations::VariationsService::RegisterProfilePrefs(registry);
    video_tutorials::RegisterPrefs(registry);
    feed::prefs::RegisterFeedSharedProfilePrefs(registry);
@@ -191,7 +191,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
 diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 --- a/chrome/common/pref_names.cc
 +++ b/chrome/common/pref_names.cc
-@@ -3152,6 +3152,11 @@ const char kShowCaretBrowsingDialog[] =
+@@ -3155,6 +3155,11 @@ const char kShowCaretBrowsingDialog[] =
  const char kLacrosAllowed[] = "lacros_allowed";
  #endif
  
@@ -206,7 +206,7 @@ diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 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
-@@ -1115,6 +1115,10 @@ extern const char kCartModuleRemoved[];
+@@ -1116,6 +1116,10 @@ extern const char kCartModuleRemoved[];
  extern const char kCartModuleWelcomeSurfaceShownTimes[];
  #endif
  

+ 27 - 3
build/patches/Add-menu-item-to-bookmark-all-tabs.patch

@@ -3,6 +3,7 @@ Date: Thu, 18 Feb 2021 21:22:52 +0100
 Subject: Add menu item to bookmark all tabs
 
 ---
+ chrome/android/java/res/menu/main_menu.xml    |  6 ++
  .../java/res/menu/main_menu_regroup.xml       |  3 +
  .../chrome/browser/ChromeTabbedActivity.java  | 23 +++++++
  .../browser/bookmarks/BookmarkBridge.java     | 62 +++++++++++++++++++
@@ -18,8 +19,31 @@ Subject: Add menu item to bookmark all tabs
  components/bookmarks/browser/bookmark_model.h |  7 +++
  components/bookmarks/browser/bookmark_node.cc | 13 ++++
  components/bookmarks/browser/bookmark_node.h  |  5 ++
- 15 files changed, 157 insertions(+), 1 deletion(-)
+ 16 files changed, 163 insertions(+), 1 deletion(-)
 
+diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
+--- a/chrome/android/java/res/menu/main_menu.xml
++++ b/chrome/android/java/res/menu/main_menu.xml
+@@ -57,6 +57,9 @@
+         <item android:id="@+id/all_bookmarks_menu_id"
+             android:title="@string/menu_bookmarks"
+             android:icon="@drawable/btn_star_filled" />
++        <item android:id="@+id/bookmark_all_tabs_menu_id"
++            android:title="@string/menu_bookmark_all_tabs"
++            android:icon="@drawable/ic_folder_blue_24dp" />
+         <item android:id="@+id/recent_tabs_menu_id"
+             android:title="@string/menu_recent_tabs"
+             android:icon="@drawable/devices_black_24dp" />
+@@ -146,6 +149,9 @@
+         <item android:id="@+id/track_prices_row_menu_id"
+             android:title="@string/menu_track_prices"
+             android:icon="@drawable/ic_trending_down_black" />
++        <item android:id="@+id/bookmark_all_tabs_menu_id"
++            android:title="@string/menu_bookmark_all_tabs"
++            android:icon="@drawable/ic_folder_blue_24dp" />
+         <item android:id="@id/preferences_id"
+             android:title="@string/menu_settings"
+             android:icon="@drawable/settings_cog" />
 diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android/java/res/menu/main_menu_regroup.xml
 --- a/chrome/android/java/res/menu/main_menu_regroup.xml
 +++ b/chrome/android/java/res/menu/main_menu_regroup.xml
@@ -45,7 +69,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
  import org.chromium.chrome.browser.bookmarks.BookmarkUtils;
  import org.chromium.chrome.browser.compositor.CompositorViewHolder;
  import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
-@@ -1838,6 +1840,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1832,6 +1834,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
              // Close both incognito and normal tabs
              getTabModelSelector().closeAllTabs();
              RecordUserAction.record("MobileMenuCloseAllTabs");
@@ -54,7 +78,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
          } else if (id == R.id.close_all_incognito_tabs_menu_id) {
              // Close only incognito tabs
              getTabModelSelector().getModel(true).closeAllTabs();
-@@ -1874,6 +1878,25 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1868,6 +1872,25 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
          mTabModalHandler.onOmniboxFocusChanged(hasFocus);
      }
  

+ 2 - 2
build/patches/Add-menu-item-to-view-source.patch

@@ -55,7 +55,7 @@ diff --git a/chrome/android/java/res/menu/main_menu_regroup.xml b/chrome/android
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
-@@ -1856,6 +1856,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1850,6 +1850,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
                  NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER);
              }
              RecordUserAction.record("MobileMenuDownloadManager");
@@ -67,7 +67,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
 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
-@@ -2109,6 +2109,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2082,6 +2082,8 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              } catch (ActivityNotFoundException e) {
                  Toast.makeText(context, R.string.open_webapk_failed, Toast.LENGTH_SHORT).show();
              }

+ 13 - 18
build/patches/Add-option-to-not-persist-tabs-across-sessions.patch

@@ -3,11 +3,11 @@ Date: Sat, 7 Sep 2019 15:07:42 +0200
 Subject: Add option to not persist tabs across sessions
 
 ---
- .../java/res/xml/privacy_preferences.xml        |  5 +++++
- .../chrome/browser/ChromeTabbedActivity.java    |  4 +++-
- .../privacy/settings/PrivacySettings.java       | 17 ++++++++++++++++-
- .../android/strings/android_chrome_strings.grd  |  6 ++++++
- 4 files changed, 30 insertions(+), 2 deletions(-)
+ .../android/java/res/xml/privacy_preferences.xml |  5 +++++
+ .../chrome/browser/ChromeTabbedActivity.java     |  4 +++-
+ .../privacy/settings/PrivacySettings.java        | 16 +++++++++++++++-
+ .../android/strings/android_chrome_strings.grd   |  6 ++++++
+ 4 files changed, 29 insertions(+), 2 deletions(-)
 
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
@@ -27,7 +27,7 @@ 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/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
-@@ -1118,8 +1118,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
+@@ -1112,8 +1112,10 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
              boolean hadCipherData =
                      CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
  
@@ -59,7 +59,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  import org.chromium.chrome.R;
  import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
  import org.chromium.chrome.browser.flags.ChromeFeatureList;
-@@ -49,6 +52,7 @@ public class PrivacySettings
+@@ -47,9 +50,11 @@ public class PrivacySettings
+     private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
+     private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
+     public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
++    private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
      private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
              PREF_ALWAYS_INCOGNITO,
              PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS,
@@ -67,16 +71,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
              PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
              PREF_ALLOW_CUSTOM_TAB_INTENTS};
  
-@@ -56,6 +60,8 @@ public class PrivacySettings
- 
-     public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
- 
-+    private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
-+
-     @Override
-     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-         PrivacyPreferencesManagerImpl privacyPrefManager =
-@@ -102,7 +108,11 @@ public class PrivacySettings
+@@ -101,7 +106,11 @@ public class PrivacySettings
      @Override
      public boolean onPreferenceChange(Preference preference, Object newValue) {
          String key = preference.getKey();
@@ -89,7 +84,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
-@@ -151,6 +161,11 @@ public class PrivacySettings
+@@ -150,6 +159,11 @@ public class PrivacySettings
          if (secureDnsPref != null && secureDnsPref.isVisible()) {
              secureDnsPref.setSummary(SecureDnsSettings.getSummary(getContext()));
          }

+ 8 - 8
build/patches/Automated-domain-substitution.patch

@@ -3964,7 +3964,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
        </message>
        <message name="IDS_FONT_ACCESS_CHOOSER_NO_FONTS_FOUND_PROMPT" desc="The label shown to the user to inform them that no fonts were found matching the requirements that the application provided.">
          No matching font found.
-@@ -10481,7 +10481,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -10445,7 +10445,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
      <if expr="is_android">
        <message name="IDS_SECURITY_KEY_ATTESTATION_INFOBAR_QUESTION" desc="An infobar prompt shown to a user when a website wants to see information that identifies the user's Security Key, such as make and model number. The 'make' of a device is the brand name of the manufacturer, e.g. Yubikey is a make of Security Key. The 'model' of a device is the specific product, e.g. Yubikey Neo is a model of Security Key.">
          <ph name="URL">
@@ -3973,7 +3973,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
          </ph> wants to see the make and model of your Security Key
        </message>
      </if>
-@@ -10656,13 +10656,13 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -10620,13 +10620,13 @@ Please help our engineers fix this problem. Tell us what happened right before y
      <!-- Web-modal dialog shown during Web Authenticaton API requests. -->
      <if expr="is_win or is_macosx or desktop_linux or chromeos">
        <message name="IDS_WEBAUTHN_GENERIC_TITLE" desc="Title of most dialogs shown while the user is authenticating on a web site using a security key.">
@@ -3989,7 +3989,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
        </message>
        <message name="IDS_WEBAUTHN_TRANSPORT_SELECTION_DESCRIPTION" desc="Description in the dialog instructing the user to choose how they want to connect their security key with their computer, e.g. USB or Bluetooth.">
          Pick an option
-@@ -10850,7 +10850,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -10814,7 +10814,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
        </message>
  
        <!-- WebAuthn account selection for resident keys -->
@@ -3998,7 +3998,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
          Select an account to sign in
        </message>
        <message name="IDS_WEBAUTHN_UNKNOWN_ACCOUNT" desc="Label shown to the user on the list of account names if the account stored does not have a name associated to it.">
-@@ -10863,7 +10863,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -10827,7 +10827,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
          Your security key can't be used with this site
        </message>
        <message name="IDS_WEBAUTHN_ERROR_MISSING_CAPABILITY_DESC" desc="The description on a dialog informing the user that the security key (an external physical device for user authentication) that they selected does not support some capability that the site requested.">
@@ -4007,7 +4007,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
        </message>
        <message name="IDS_WEBAUTHN_STORAGE_FULL_DESC" desc="The description on a dialog informing the user that the security key (an external physical device for user authentication) that they selected does not have enough storage capacity to create the requested account.">
          Your security key does not have enough space for any more accounts.
-@@ -10872,7 +10872,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -10836,7 +10836,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
          Allow this site to see your security key?
        </message>
        <message name="IDS_WEBAUTHN_REQUEST_ATTESTATION_PERMISSION_DESC" desc="The description on a dialog informing the user that the website wants to see information that identifies the user's Security Key, such as make and model number. The 'make' of a device is the brand name of the manufacturer, e.g. Yubikey is a make of Security Key. The 'model' of a device is the specific product, e.g. Yubikey Neo is a model of Security Key.">
@@ -4016,7 +4016,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
        </message>
        <message name="IDS_WEBAUTHN_ALLOW_ATTESTATION" desc="Label on button to allow a website to see information that identifies the user's Security Key, such as make and model number. The 'make' of a device is the brand name of the manufacturer, e.g. Yubikey is a make of Security Key. The 'model' of a device is the specific product, e.g. Yubikey Neo is a model of Security Key.">
          Allow
-@@ -11059,7 +11059,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -11023,7 +11023,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
  
      <!-- App uninstall prompt for Google -->
      <message name="IDS_APP_UNINSTALL_PROMPT_REMOVE_DATA_CHECKBOX_FOR_GOOGLE" desc="Checkbox text to ask the user whether they want to remove associated data at uninstall time for Google hostnames. Only used when uninstalling an app associated with a Google hostname.">
@@ -4025,7 +4025,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
      </message>
  
      <message name="IDS_APP_UNINSTALL_PROMPT_LEARN_MORE" desc="The label that the user can click to learn more about removing associated data at uninstall time.">
-@@ -11148,7 +11148,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -11112,7 +11112,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
        <message name="IDS_MAC_SYSTEM_INFOBAR_LINK_URL_ARM"
                 desc="Mac system-specific infobar link for Arm64-on-Arm64."
                 translateable="false">
@@ -4034,7 +4034,7 @@ diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources
        </message>
        <message name="IDS_MAC_SYSTEM_INFOBAR_LINK_TEXT_ROSETTA"
                 desc="Mac system-specific infobar link text for Intel-on-Arm64."
-@@ -11158,7 +11158,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
+@@ -11122,7 +11122,7 @@ Please help our engineers fix this problem. Tell us what happened right before y
        <message name="IDS_MAC_SYSTEM_INFOBAR_LINK_URL_ROSETTA"
                 desc="Mac system-specific infobar link for Intel-on-Arm64."
                 translateable="false">

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 150 - 620
build/patches/Bromite-AdBlockUpdaterService.patch


+ 64 - 138
build/patches/Disable-safe-browsing.patch

@@ -13,8 +13,6 @@ Disable CrowdDeny feature
  .../EnhancedProtectionPromoUtils.java         |  3 +-
  .../privacy/settings/PrivacySettings.java     | 50 +------------
  .../SafeBrowsingSettingsLauncher.java         |  9 ---
- .../sync/settings/GoogleServicesSettings.java | 10 +--
- .../settings/SyncAndServicesSettings.java     | 15 +---
  .../android/chrome_main_delegate_android.cc   |  1 +
  chrome/browser/BUILD.gn                       | 23 ------
  chrome/browser/about_flags.cc                 |  2 +-
@@ -45,7 +43,7 @@ Disable CrowdDeny feature
  .../lookalike_url_controller_client.cc        |  4 --
  .../metrics/chrome_metrics_service_client.cc  |  3 -
  ...ial_comparison_cert_verifier_controller.cc |  3 -
- .../chrome_password_manager_client.cc         |  2 +
+ .../chrome_password_manager_client.cc         | 25 +------
  ...ve_origin_permission_revocation_request.cc |  2 +
  .../permissions/chrome_permissions_client.cc  | 15 ----
  .../permissions/chrome_permissions_client.h   |  3 -
@@ -74,10 +72,10 @@ Disable CrowdDeny feature
  .../content/captive_portal_blocking_page.cc   |  7 --
  .../content/cert_report_helper.cc             |  2 -
  .../unified_consent_service.cc                |  2 +-
- .../native_file_system_file_writer_impl.cc    | 59 +--------------
+ .../native_file_system_file_writer_impl.cc    | 42 +----------
  .../native_file_system_file_writer_impl.h     |  9 +--
  .../file_system_access_permission_context.h   |  6 --
- 71 files changed, 180 insertions(+), 732 deletions(-)
+ 69 files changed, 179 insertions(+), 714 deletions(-)
 
 diff --git a/chrome/android/java/res/xml/google_services_preferences.xml b/chrome/android/java/res/xml/google_services_preferences.xml
 --- a/chrome/android/java/res/xml/google_services_preferences.xml
@@ -330,114 +328,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/safe_browsing/S
 -                        SettingsAccessPoint.SECURITY_INTERSTITIAL));
      }
  }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java
-@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.preferences.Pref;
- import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
- import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
- import org.chromium.chrome.browser.profiles.Profile;
--import org.chromium.chrome.browser.safe_browsing.SafeBrowsingBridge;
- import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
- import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
- import org.chromium.chrome.browser.signin.services.SigninManager;
-@@ -252,9 +251,6 @@ public class GoogleServicesSettings
-         } else if (PREF_PASSWORD_LEAK_DETECTION.equals(key)) {
-             assert !mIsSecurityPreferenceRemoved;
-             mPrefService.setBoolean(Pref.PASSWORD_LEAK_DETECTION_ENABLED, (boolean) newValue);
--        } else if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
--            assert !mIsSecurityPreferenceRemoved;
--            SafeBrowsingBridge.setSafeBrowsingExtendedReportingEnabled((boolean) newValue);
-         } else if (PREF_NAVIGATION_ERROR.equals(key)) {
-             mPrefService.setBoolean(Pref.ALTERNATE_ERROR_PAGES_ENABLED, (boolean) newValue);
-         } else if (PREF_USAGE_AND_CRASH_REPORTING.equals(key)) {
-@@ -307,8 +303,7 @@ public class GoogleServicesSettings
-         assert !mIsSecurityPreferenceRemoved;
-         boolean safe_browsing_enabled = mPrefService.getBoolean(Pref.SAFE_BROWSING_ENABLED);
-         mSafeBrowsingReporting.setEnabled(safe_browsing_enabled);
--        mSafeBrowsingReporting.setChecked(safe_browsing_enabled
--                && SafeBrowsingBridge.isSafeBrowsingExtendedReportingEnabled());
-+        mSafeBrowsingReporting.setChecked(safe_browsing_enabled);
- 
-         boolean has_token_for_leak_check = PasswordUIView.hasAccountForLeakCheckRequest();
-         boolean leak_detection_enabled =
-@@ -338,9 +333,6 @@ public class GoogleServicesSettings
-             if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
-                 return mPrefService.isManagedPreference(Pref.SEARCH_SUGGEST_ENABLED);
-             }
--            if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
--                return SafeBrowsingBridge.isSafeBrowsingExtendedReportingManaged();
--            }
-             if (PREF_SAFE_BROWSING.equals(key)) {
-                 return mPrefService.isManagedPreference(Pref.SAFE_BROWSING_ENABLED);
-             }
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncAndServicesSettings.java
-@@ -47,7 +47,6 @@ import org.chromium.chrome.browser.preferences.Pref;
- import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
- import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
- import org.chromium.chrome.browser.profiles.Profile;
--import org.chromium.chrome.browser.safe_browsing.SafeBrowsingBridge;
- import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
- import org.chromium.chrome.browser.settings.SettingsActivity;
- import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
-@@ -108,8 +107,6 @@ public class SyncAndServicesSettings extends PreferenceFragmentCompat
-     public static final String PREF_SAFE_BROWSING = "safe_browsing";
-     @VisibleForTesting
-     public static final String PREF_PASSWORD_LEAK_DETECTION = "password_leak_detection";
--    @VisibleForTesting
--    public static final String PREF_SAFE_BROWSING_SCOUT_REPORTING = "safe_browsing_scout_reporting";
-     private static final String PREF_USAGE_AND_CRASH_REPORTING = "usage_and_crash_reports";
-     private static final String PREF_URL_KEYED_ANONYMIZED_DATA = "url_keyed_anonymized_data";
-     private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search";
-@@ -221,7 +218,6 @@ public class SyncAndServicesSettings extends PreferenceFragmentCompat
-         if (mIsSafeBrowsingPreferenceRemoved) {
-             removePreference(servicesCategory, findPreference(PREF_SAFE_BROWSING));
-             removePreference(servicesCategory, findPreference(PREF_PASSWORD_LEAK_DETECTION));
--            removePreference(servicesCategory, findPreference(PREF_SAFE_BROWSING_SCOUT_REPORTING));
-             mSafeBrowsing = null;
-             mPasswordLeakDetection = null;
-             mSafeBrowsingReporting = null;
-@@ -235,8 +231,6 @@ public class SyncAndServicesSettings extends PreferenceFragmentCompat
-             mPasswordLeakDetection.setOnPreferenceChangeListener(this);
-             mPasswordLeakDetection.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
- 
--            mSafeBrowsingReporting =
--                    (ChromeSwitchPreference) findPreference(PREF_SAFE_BROWSING_SCOUT_REPORTING);
-             mSafeBrowsingReporting.setOnPreferenceChangeListener(this);
-             mSafeBrowsingReporting.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
-         }
-@@ -403,9 +397,6 @@ public class SyncAndServicesSettings extends PreferenceFragmentCompat
-         } else if (PREF_PASSWORD_LEAK_DETECTION.equals(key)) {
-             assert !mIsSafeBrowsingPreferenceRemoved;
-             mPrefService.setBoolean(Pref.PASSWORD_LEAK_DETECTION_ENABLED, (boolean) newValue);
--        } else if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
--            assert !mIsSafeBrowsingPreferenceRemoved;
--            SafeBrowsingBridge.setSafeBrowsingExtendedReportingEnabled((boolean) newValue);
-         } else if (PREF_NAVIGATION_ERROR.equals(key)) {
-             mPrefService.setBoolean(Pref.ALTERNATE_ERROR_PAGES_ENABLED, (boolean) newValue);
-         } else if (PREF_USAGE_AND_CRASH_REPORTING.equals(key)) {
-@@ -659,8 +650,7 @@ public class SyncAndServicesSettings extends PreferenceFragmentCompat
-         assert !mIsSafeBrowsingPreferenceRemoved;
-         boolean safe_browsing_enabled = mPrefService.getBoolean(Pref.SAFE_BROWSING_ENABLED);
-         mSafeBrowsingReporting.setEnabled(safe_browsing_enabled);
--        mSafeBrowsingReporting.setChecked(safe_browsing_enabled
--                && SafeBrowsingBridge.isSafeBrowsingExtendedReportingEnabled());
-+        mSafeBrowsingReporting.setChecked(safe_browsing_enabled);
- 
-         boolean has_token_for_leak_check = PasswordUIView.hasAccountForLeakCheckRequest();
-         boolean leak_detection_enabled =
-@@ -687,9 +677,6 @@ public class SyncAndServicesSettings extends PreferenceFragmentCompat
-             if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
-                 return mPrefService.isManagedPreference(Pref.SEARCH_SUGGEST_ENABLED);
-             }
--            if (PREF_SAFE_BROWSING_SCOUT_REPORTING.equals(key)) {
--                return SafeBrowsingBridge.isSafeBrowsingExtendedReportingManaged();
--            }
-             if (PREF_SAFE_BROWSING.equals(key)) {
-                 return mPrefService.isManagedPreference(Pref.SAFE_BROWSING_ENABLED);
-             }
 diff --git a/chrome/app/android/chrome_main_delegate_android.cc b/chrome/app/android/chrome_main_delegate_android.cc
 --- a/chrome/app/android/chrome_main_delegate_android.cc
 +++ b/chrome/app/android/chrome_main_delegate_android.cc
@@ -1746,7 +1636,53 @@ diff --git a/chrome/browser/net/trial_comparison_cert_verifier_controller.cc b/c
 diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc
 --- a/chrome/browser/password_manager/chrome_password_manager_client.cc
 +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
-@@ -1463,6 +1463,7 @@ bool ChromePasswordManagerClient::IsPasswordManagementEnabledForCurrentPage(
+@@ -831,21 +831,13 @@ autofill::LanguageCode ChromePasswordManagerClient::GetPageLanguage() const {
+ 
+ safe_browsing::PasswordProtectionService*
+ ChromePasswordManagerClient::GetPasswordProtectionService() const {
+-  return safe_browsing::ChromePasswordProtectionService::
+-      GetPasswordProtectionService(profile_);
++  return nullptr;
+ }
+ 
+ #if defined(ON_FOCUS_PING_ENABLED)
+ void ChromePasswordManagerClient::CheckSafeBrowsingReputation(
+     const GURL& form_action,
+     const GURL& frame_url) {
+-  safe_browsing::PasswordProtectionService* pps =
+-      GetPasswordProtectionService();
+-  if (pps) {
+-    pps->MaybeStartPasswordFieldOnFocusRequest(
+-        web_contents(), web_contents()->GetLastCommittedURL(), form_action,
+-        frame_url, pps->GetAccountInfo().hosted_domain);
+-  }
+ }
+ #endif  // defined(ON_FOCUS_PING_ENABLED)
+ 
+@@ -855,22 +847,9 @@ void ChromePasswordManagerClient::CheckProtectedPasswordEntry(
+     const std::vector<password_manager::MatchingReusedCredential>&
+         matching_reused_credentials,
+     bool password_field_exists) {
+-  safe_browsing::PasswordProtectionService* pps =
+-      GetPasswordProtectionService();
+-  if (!pps)
+-    return;
+-
+-  pps->MaybeStartProtectedPasswordEntryRequest(
+-      web_contents(), web_contents()->GetLastCommittedURL(), username,
+-      password_type, matching_reused_credentials, password_field_exists);
+ }
+ 
+ void ChromePasswordManagerClient::LogPasswordReuseDetectedEvent() {
+-  safe_browsing::PasswordProtectionService* pps =
+-      GetPasswordProtectionService();
+-  if (pps) {
+-    pps->MaybeLogPasswordReuseDetectedEvent(web_contents());
+-  }
+ }
+ 
+ ukm::SourceId ChromePasswordManagerClient::GetUkmSourceId() {
+@@ -1463,6 +1442,7 @@ bool ChromePasswordManagerClient::IsPasswordManagementEnabledForCurrentPage(
      is_enabled = false;
    }
  
@@ -1754,7 +1690,7 @@ diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b
    // SafeBrowsing Delayed Warnings experiment can delay some SafeBrowsing
    // warnings until user interaction. If the current page has a delayed warning,
    // it'll have a user interaction observer attached. Disable password
-@@ -1473,6 +1474,7 @@ bool ChromePasswordManagerClient::IsPasswordManagementEnabledForCurrentPage(
+@@ -1473,6 +1453,7 @@ bool ChromePasswordManagerClient::IsPasswordManagementEnabledForCurrentPage(
      observer->OnPasswordSaveOrAutofillDenied();
      is_enabled = false;
    }
@@ -2581,7 +2517,7 @@ diff --git a/content/browser/file_system_access/native_file_system_file_writer_i
        auto_close_(auto_close) {
    DCHECK_EQ(swap_url.type(), url.type());
    receiver_.set_disconnect_handler(base::BindOnce(
-@@ -513,63 +512,7 @@ void NativeFileSystemFileWriterImpl::CloseImpl(CloseCallback callback) {
+@@ -513,15 +512,7 @@ void NativeFileSystemFileWriterImpl::CloseImpl(CloseCallback callback) {
  
    close_callback_ = std::move(callback);
  
@@ -2594,25 +2530,14 @@ diff --git a/content/browser/file_system_access/native_file_system_file_writer_i
 -  ComputeHashForSwapFile(
 -      base::BindOnce(&NativeFileSystemFileWriterImpl::DoAfterWriteCheck,
 -                     weak_factory_.GetWeakPtr()));
--}
--
--void NativeFileSystemFileWriterImpl::AbortImpl(AbortCallback callback) {
--  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
--  if (is_close_pending()) {
--    std::move(callback).Run(native_file_system_error::FromStatus(
--        FileSystemAccessStatus::kInvalidState,
--        "An attempt was made to abort an already closing writer."));
--    return;
--  }
--
--  auto_close_ = false;
--
--  std::move(callback).Run(native_file_system_error::Ok());
--
--  // |this| is deleted after this call.
--  manager()->RemoveFileWriter(this);
--}
--
++  DidAfterWriteCheck(FileSystemAccessPermissionContext::AfterWriteCheckResult::kAllow);
+ }
+ 
+ void NativeFileSystemFileWriterImpl::AbortImpl(AbortCallback callback) {
+@@ -541,37 +532,6 @@ void NativeFileSystemFileWriterImpl::AbortImpl(AbortCallback callback) {
+   manager()->RemoveFileWriter(this);
+ }
+ 
 -// static
 -void NativeFileSystemFileWriterImpl::DoAfterWriteCheck(
 -    base::File::Error hash_result,
@@ -2642,10 +2567,11 @@ diff --git a/content/browser/file_system_access/native_file_system_file_writer_i
 -      std::move(item), context().frame_id,
 -      base::BindOnce(&NativeFileSystemFileWriterImpl::DidAfterWriteCheck,
 -                     weak_factory_.GetWeakPtr()));
-+  DidAfterWriteCheck(FileSystemAccessPermissionContext::AfterWriteCheckResult::kAllow);
- }
- 
+-}
+-
  void NativeFileSystemFileWriterImpl::DidAfterWriteCheck(
+     FileSystemAccessPermissionContext::AfterWriteCheckResult result) {
+   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 diff --git a/content/browser/file_system_access/native_file_system_file_writer_impl.h b/content/browser/file_system_access/native_file_system_file_writer_impl.h
 --- a/content/browser/file_system_access/native_file_system_file_writer_impl.h
 +++ b/content/browser/file_system_access/native_file_system_file_writer_impl.h

+ 3 - 17
build/patches/Disable-sync-services-menu-entry.patch

@@ -3,10 +3,9 @@ Date: Mon, 11 Nov 2019 23:09:48 +0100
 Subject: Disable sync services menu entry
 
 ---
- chrome/android/java/res/xml/main_preferences.xml      | 11 ++---------
- chrome/android/java/res/xml/privacy_preferences.xml   |  5 -----
- .../browser/sync/settings/SyncSettingsUtils.java      |  3 +++
- 3 files changed, 5 insertions(+), 14 deletions(-)
+ chrome/android/java/res/xml/main_preferences.xml    | 11 ++---------
+ chrome/android/java/res/xml/privacy_preferences.xml |  5 -----
+ 2 files changed, 2 insertions(+), 14 deletions(-)
 
 diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml
 --- a/chrome/android/java/res/xml/main_preferences.xml
@@ -49,19 +48,6 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
 -        app:allowDividerBelow="false"
 -        android:order="8"/>
  </PreferenceScreen>
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncSettingsUtils.java
-@@ -208,6 +208,9 @@ public class SyncSettingsUtils {
-      */
-     public static String getSyncStatusSummary(Context context) {
-         Resources res = context.getResources();
-+        if (true) {
-+            res.getString(R.string.sync_is_disabled);
-+        }
- 
-         if (!IdentityServicesProvider.get()
-                         .getIdentityManager(Profile.getLastUsedRegularProfile())
 -- 
 2.17.1
 

+ 15 - 4
build/patches/Enable-network-isolation-features.patch

@@ -4,15 +4,16 @@ Subject: Enable network isolation features
 
 Enable SplitCacheByNetworkIsolationKey, kSplitHostCacheByNetworkIsolationKey,
 kPartitionConnectionsByNetworkIsolationKey, kPartitionHttpServerPropertiesByNetworkIsolationKey,
-kPartitionSSLSessionsByNetworkIsolationKey
+kPartitionSSLSessionsByNetworkIsolationKey, PartitionExpectCTStateByNetworkIsolationKey,
+PartitionNelAndReportingByNetworkIsolationKey
 ---
- net/base/features.cc | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
+ net/base/features.cc | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
 
 diff --git a/net/base/features.cc b/net/base/features.cc
 --- a/net/base/features.cc
 +++ b/net/base/features.cc
-@@ -71,22 +71,22 @@ const base::Feature kNetworkQualityEstimator{"NetworkQualityEstimator",
+@@ -71,30 +71,30 @@ const base::Feature kNetworkQualityEstimator{"NetworkQualityEstimator",
                                               base::FEATURE_DISABLED_BY_DEFAULT};
  
  const base::Feature kSplitCacheByNetworkIsolationKey{
@@ -40,6 +41,16 @@ diff --git a/net/base/features.cc b/net/base/features.cc
  
  const base::Feature kPartitionExpectCTStateByNetworkIsolationKey{
      "PartitionExpectCTStateByNetworkIsolationKey",
+-    base::FEATURE_DISABLED_BY_DEFAULT};
++    base::FEATURE_ENABLED_BY_DEFAULT};
+ 
+ const base::Feature kPartitionNelAndReportingByNetworkIsolationKey{
+     "PartitionNelAndReportingByNetworkIsolationKey",
+-    base::FEATURE_DISABLED_BY_DEFAULT};
++    base::FEATURE_ENABLED_BY_DEFAULT};
+ 
+ const base::Feature kExpectCTPruning{"ExpectCTPruning",
+                                      base::FEATURE_ENABLED_BY_DEFAULT};
 -- 
 2.17.1
 

+ 54 - 0
build/patches/Make-all-favicon-requests-on-demand.patch

@@ -0,0 +1,54 @@
+From: Francois Marier <francois@brave.com>
+Date: Tue, 14 Jul 2020 17:39:44 -0700
+Subject: Make all favicon requests on-demand
+
+This patch can be dropped once https://crbug.com/1096660 is fixed
+as long as the test is retained and still passes.
+---
+ components/favicon/core/favicon_database.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/components/favicon/core/favicon_database.cc b/components/favicon/core/favicon_database.cc
+--- a/components/favicon/core/favicon_database.cc
++++ b/components/favicon/core/favicon_database.cc
+@@ -504,6 +504,7 @@ FaviconBitmapID FaviconDatabase::AddFaviconBitmap(
+     base::Time time,
+     const gfx::Size& pixel_size) {
+   DCHECK(icon_id);
++  type = FaviconBitmapType::ON_DEMAND; // Make all icons ON_DEMAND.
+ 
+   sql::Statement statement(db_.GetCachedStatement(
+       SQL_FROM_HERE,
+@@ -558,8 +559,8 @@ bool FaviconDatabase::SetFaviconBitmap(
+   } else {
+     statement.BindNull(0);
+   }
+-  statement.BindInt64(1, time.ToDeltaSinceWindowsEpoch().InMicroseconds());
+-  statement.BindInt64(2, 0);
++  statement.BindInt64(1, 0);
++  statement.BindInt64(2, time.ToDeltaSinceWindowsEpoch().InMicroseconds());
+   statement.BindInt64(3, bitmap_id);
+ 
+   return statement.Run();
+@@ -568,7 +569,7 @@ bool FaviconDatabase::SetFaviconBitmap(
+ bool FaviconDatabase::SetFaviconBitmapLastUpdateTime(FaviconBitmapID bitmap_id,
+                                                      base::Time time) {
+   DCHECK(bitmap_id);
+-  // By updating last_updated timestamp, we assume the icon is of type ON_VISIT.
++  /* By updating last_updated timestamp, we assume the icon is of type ON_VISIT.
+   // If it is ON_DEMAND, reset last_requested to 0 and thus silently change the
+   // type to ON_VISIT.
+   sql::Statement statement(
+@@ -578,7 +579,8 @@ bool FaviconDatabase::SetFaviconBitmapLastUpdateTime(FaviconBitmapID bitmap_id,
+   statement.BindInt64(0, time.ToDeltaSinceWindowsEpoch().InMicroseconds());
+   statement.BindInt64(1, 0);
+   statement.BindInt64(2, bitmap_id);
+-  return statement.Run();
++  return statement.Run(); */
++  return true;
+ }
+ 
+ bool FaviconDatabase::TouchOnDemandFavicon(const GURL& icon_url,
+-- 
+2.17.1
+

+ 21 - 15
build/patches/Move-some-account-settings-back-to-privacy-settings.patch

@@ -5,8 +5,8 @@ Subject: Move some account settings back to privacy settings
 Search suggestions, autofill assistant and contextual search
 ---
  .../java/res/xml/privacy_preferences.xml      | 20 ++++++
- .../privacy/settings/PrivacySettings.java     | 62 ++++++++++++++++++-
- 2 files changed, 80 insertions(+), 2 deletions(-)
+ .../privacy/settings/PrivacySettings.java     | 64 ++++++++++++++++++-
+ 2 files changed, 82 insertions(+), 2 deletions(-)
 
 diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
 --- a/chrome/android/java/res/xml/privacy_preferences.xml
@@ -53,7 +53,21 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
  /**
   * Fragment to keep track of the all the privacy related preferences.
   */
-@@ -59,7 +66,8 @@ public class PrivacySettings
+@@ -55,6 +62,13 @@ public class PrivacySettings
+     public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
+     private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
+     private static final String PREF_PROXY_OPTIONS = "proxy";
++
++    // moved from SyncAndServicesSettings.java
++    private static final String PREF_SERVICES_CATEGORY = "services_category";
++    private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
++    private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search";
++    public static final String PREF_AUTOFILL_ASSISTANT = "autofill_assistant";
++
+     private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
+             PREF_ALWAYS_INCOGNITO,
+             PREF_INCOGNITO_TAB_HISTORY_ENABLED,
+@@ -62,11 +76,19 @@ public class PrivacySettings
              PREF_CLOSE_TABS_ON_EXIT,
              PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
              PREF_ALLOW_CUSTOM_TAB_INTENTS,
@@ -63,15 +77,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
              };
  
      private ManagedPreferenceDelegate mManagedPreferenceDelegate;
-@@ -70,6 +78,18 @@ public class PrivacySettings
  
-     private static final String PREF_PROXY_OPTIONS = "proxy";
- 
-+    // moved from SyncAndServicesSettings.java
-+    private static final String PREF_SERVICES_CATEGORY = "services_category";
-+    private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
-+    private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search";
-+    public static final String PREF_AUTOFILL_ASSISTANT = "autofill_assistant";
 +    private ChromeSwitchPreference mSearchSuggestions;
 +    private @Nullable ChromeSwitchPreference mAutofillAssistant;
 +    private @Nullable Preference mContextualSearch;
@@ -82,7 +88,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
          PrivacyPreferencesManagerImpl privacyPrefManager =
-@@ -96,6 +116,29 @@ public class PrivacySettings
+@@ -93,6 +115,29 @@ public class PrivacySettings
  
          mManagedPreferenceDelegate = createManagedPreferenceDelegate();
  
@@ -112,7 +118,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          ChromeSwitchPreference canMakePaymentPref =
                  (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
          canMakePaymentPref.setOnPreferenceChangeListener(this);
-@@ -128,6 +171,11 @@ public class PrivacySettings
+@@ -125,6 +170,11 @@ public class PrivacySettings
          } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
              UserPrefs.get(Profile.getLastUsedRegularProfile())
                      .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
@@ -124,7 +130,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
          } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
              PrivacyPreferencesManagerImpl.getInstance().setNetworkPredictionEnabled(
                      (boolean) newValue);
-@@ -143,6 +191,16 @@ public class PrivacySettings
+@@ -140,6 +190,16 @@ public class PrivacySettings
          return true;
      }
  
@@ -141,7 +147,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
      @Override
      public void onResume() {
          super.onResume();
-@@ -153,7 +211,7 @@ public class PrivacySettings
+@@ -150,7 +210,7 @@ public class PrivacySettings
       * Updates the summaries for several preferences.
       */
      public void updateSummaries() {

+ 4 - 595
build/patches/Remove-binary-blob-integrations.patch

@@ -37,7 +37,6 @@ Parts of this patch were developed by csagan5, uazo and others.
  .../inline/InlineUpdateControllerFactory.java |  16 -
  .../inline/PlayInlineUpdateController.java    | 226 +-----------
  .../settings/PasswordSettings.java            |  14 -
- .../services/gcm/GCMBackgroundTask.java       |   1 -
  .../browser/webauth/AuthenticatorImpl.java    |  29 +-
  .../modules/chrome_feature_modules.gni        |   3 -
  .../browser/signin/services/android/BUILD.gn  |   1 -
@@ -53,7 +52,6 @@ Parts of this patch were developed by csagan5, uazo and others.
  components/gcm_driver/android/BUILD.gn        |   1 -
  .../gcm_driver/instance_id/android/BUILD.gn   |   3 -
  .../instance_id/InstanceIDBridge.java         |  49 +--
- .../instance_id/InstanceIDWithSubtype.java    |  26 +-
  .../media_router/browser/android/BUILD.gn     |   9 -
  .../media_router/BrowserMediaRouter.java      |  18 +-
  .../media_router/CastSessionUtil.java         |  35 --
@@ -86,17 +84,12 @@ Parts of this patch were developed by csagan5, uazo and others.
  remoting/android/client_java_tmpl.gni         |   3 -
  services/BUILD.gn                             |   9 -
  services/device/geolocation/BUILD.gn          |   3 -
- .../geolocation/LocationProviderGmsCore.java  | 102 +-----
  services/shape_detection/BUILD.gn             |   4 -
- .../shape_detection/BarcodeDetectionImpl.java | 114 +-----
- .../BarcodeDetectionProviderImpl.java         |  31 +-
- .../FaceDetectionImplGmsCore.java             |  30 +-
- .../shape_detection/TextDetectionImpl.java    |  24 +-
  third_party/android_deps/BUILD.gn             | 344 +-----------------
  .../gms/ChromiumPlayServicesAvailability.java |  10 +-
  third_party/android_sdk/BUILD.gn              |   3 -
  third_party/google_android_play_core/BUILD.gn |   5 -
- 77 files changed, 85 insertions(+), 2686 deletions(-)
+ 70 files changed, 66 insertions(+), 2377 deletions(-)
  delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java
  delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java
 
@@ -257,7 +250,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/ChromeBackupAgentImpl.java",
    "java/src/org/chromium/chrome/browser/ChromeBackupWatcher.java",
    "java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java",
-@@ -1218,10 +1217,6 @@ chrome_java_sources = [
+@@ -1211,10 +1210,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/searchwidget/SearchWidgetProvider.java",
    "java/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivity.java",
    "java/src/org/chromium/chrome/browser/services/AccountsChangedReceiver.java",
@@ -268,7 +261,7 @@ diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java
    "java/src/org/chromium/chrome/browser/settings/MainSettings.java",
    "java/src/org/chromium/chrome/browser/settings/SettingsActivity.java",
    "java/src/org/chromium/chrome/browser/settings/SettingsLauncherImpl.java",
-@@ -1509,9 +1504,6 @@ chrome_java_sources = [
+@@ -1472,9 +1467,6 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/webapps/addtohomescreen/AddToHomescreenViewBinder.java",
    "java/src/org/chromium/chrome/browser/webauth/AuthenticatorFactory.java",
    "java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java",
@@ -430,7 +423,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AppHooks.java b
  import org.chromium.base.ContextUtils;
  import org.chromium.base.annotations.CalledByNative;
  import org.chromium.chrome.browser.banners.AppDetailsDelegate;
-@@ -294,16 +291,7 @@ public abstract class AppHooks {
+@@ -293,16 +290,7 @@ public abstract class AppHooks {
       * same as {@link GoogleApiAvailability#isGooglePlayServicesAvailable()}.
       */
      public int isGoogleApiAvailableWithMinApkVersion(int minApkVersion) {
@@ -1412,17 +1405,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manage
      }
  
      private Context getStyledContext() {
-diff --git a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundTask.java b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundTask.java
---- a/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundTask.java
-+++ b/chrome/android/java/src/org/chromium/chrome/browser/services/gcm/GCMBackgroundTask.java
-@@ -42,7 +42,6 @@ public class GCMBackgroundTask implements BackgroundTask {
-             return false;
-         }
- 
--        ChromeGcmListenerServiceImpl.dispatchMessageToDriver(message);
-         return false;
-     }
- 
 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
 --- a/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
 +++ b/chrome/android/java/src/org/chromium/chrome/browser/webauth/AuthenticatorImpl.java
@@ -2282,85 +2264,6 @@ diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/com
                      return doBackgroundWork();
                  }
                  @Override
-diff --git a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
---- a/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
-+++ b/components/gcm_driver/instance_id/android/java/src/org/chromium/components/gcm_driver/instance_id/InstanceIDWithSubtype.java
-@@ -10,8 +10,6 @@ import android.text.TextUtils;
- 
- import androidx.annotation.VisibleForTesting;
- 
--import com.google.android.gms.iid.InstanceID;
--
- import org.chromium.base.ContextUtils;
- 
- import java.io.IOException;
-@@ -26,8 +24,6 @@ public class InstanceIDWithSubtype {
-     // Must match the private InstanceID.OPTION_SUBTYPE, which is guaranteed to not change.
-     private static final String OPTION_SUBTYPE = "subtype";
- 
--    private final InstanceID mInstanceID;
--
-     /**
-      * Cached instances. May be accessed from multiple threads; synchronize on sSubtypeInstancesLock
-      */
-@@ -39,10 +35,6 @@ public class InstanceIDWithSubtype {
-     @VisibleForTesting
-     protected static FakeFactory sFakeFactoryForTesting;
- 
--    protected InstanceIDWithSubtype(InstanceID instanceID) {
--        mInstanceID = instanceID;
--    }
--
-     /**
-      * Returns an instance of this class. Unlike {@link InstanceID#getInstance(Context)}, it is not
-      * a singleton, but instead a different instance will be returned for each {@code subtype}.
-@@ -58,11 +50,6 @@ public class InstanceIDWithSubtype {
-                 if (sFakeFactoryForTesting != null) {
-                     existing = sFakeFactoryForTesting.create(subtype);
-                 } else {
--                    Bundle options = new Bundle();
--                    options.putCharSequence(OPTION_SUBTYPE, subtype);
--                    InstanceID instanceID =
--                            InstanceID.getInstance(ContextUtils.getApplicationContext(), options);
--                    existing = new InstanceIDWithSubtype(instanceID);
-                 }
-                 sSubtypeInstances.put(subtype, existing);
-             }
-@@ -71,30 +58,25 @@ public class InstanceIDWithSubtype {
-     }
- 
-     public String getSubtype() {
--        return mInstanceID.getSubtype();
-+        return "";
-     }
- 
-     public String getId() {
--        return mInstanceID.getId();
-+        return "";
-     }
- 
-     public long getCreationTime() {
--        return mInstanceID.getCreationTime();
-+        return 0;
-     }
- 
-     public void deleteInstanceID() throws IOException {
--        synchronized (sSubtypeInstancesLock) {
--            sSubtypeInstances.remove(mInstanceID.getSubtype());
--            mInstanceID.deleteInstanceID();
--        }
-     }
- 
-     public void deleteToken(String authorizedEntity, String scope) throws IOException {
--        mInstanceID.deleteToken(authorizedEntity, scope);
-     }
- 
-     public String getToken(String authorizedEntity, String scope) throws IOException {
--        return mInstanceID.getToken(authorizedEntity, scope);
-+        return "";
-     }
- 
-     /** Fake subclasses can set {@link #sFakeFactoryForTesting} to an implementation of this. */
 diff --git a/components/media_router/browser/android/BUILD.gn b/components/media_router/browser/android/BUILD.gn
 --- a/components/media_router/browser/android/BUILD.gn
 +++ b/components/media_router/browser/android/BUILD.gn
@@ -4017,155 +3920,6 @@ diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/
        "//base:base_java",
        "//base:jni_java",
        "//components/location/android:location_java",
-diff --git a/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderGmsCore.java b/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderGmsCore.java
---- a/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderGmsCore.java
-+++ b/services/device/geolocation/android/java/src/org/chromium/device/geolocation/LocationProviderGmsCore.java
-@@ -8,132 +8,40 @@ import android.content.Context;
- import android.location.Location;
- import android.os.Bundle;
- 
--import com.google.android.gms.common.ConnectionResult;
--import com.google.android.gms.common.api.GoogleApiClient;
--import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
--import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
--import com.google.android.gms.location.FusedLocationProviderApi;
--import com.google.android.gms.location.LocationListener;
--import com.google.android.gms.location.LocationRequest;
--import com.google.android.gms.location.LocationServices;
--
- import org.chromium.base.Log;
- import org.chromium.base.ThreadUtils;
- import org.chromium.components.location.LocationUtils;
--import org.chromium.gms.ChromiumPlayServicesAvailability;
- 
- /**
-  * This is a LocationProvider using Google Play Services.
-  *
-  * https://developers.google.com/android/reference/com/google/android/gms/location/package-summary
-  */
--public class LocationProviderGmsCore implements ConnectionCallbacks, OnConnectionFailedListener,
--                                                LocationListener, LocationProvider {
-+public class LocationProviderGmsCore implements LocationProvider {
-     private static final String TAG = "LocationProvider";
- 
-     // Values for the LocationRequest's setInterval for normal and high accuracy, respectively.
-     private static final long UPDATE_INTERVAL_MS = 1000;
-     private static final long UPDATE_INTERVAL_FAST_MS = 500;
- 
--    private final GoogleApiClient mGoogleApiClient;
--    private FusedLocationProviderApi mLocationProviderApi = LocationServices.FusedLocationApi;
--
--    private boolean mEnablehighAccuracy;
--    private LocationRequest mLocationRequest;
--
-     public static boolean isGooglePlayServicesAvailable(Context context) {
--        return ChromiumPlayServicesAvailability.isGooglePlayServicesAvailable(context);
-+        return false;
-     }
- 
-     LocationProviderGmsCore(Context context) {
-         Log.i(TAG, "Google Play Services");
--        mGoogleApiClient = new GoogleApiClient.Builder(context)
--                                   .addApi(LocationServices.API)
--                                   .addConnectionCallbacks(this)
--                                   .addOnConnectionFailedListener(this)
--                                   .build();
--        assert mGoogleApiClient != null;
--    }
--
--    LocationProviderGmsCore(GoogleApiClient client, FusedLocationProviderApi locationApi) {
--        mGoogleApiClient = client;
--        mLocationProviderApi = locationApi;
--    }
--
--    // ConnectionCallbacks implementation
--    @Override
--    public void onConnected(Bundle connectionHint) {
--        ThreadUtils.assertOnUiThread();
--
--        mLocationRequest = LocationRequest.create();
--        if (mEnablehighAccuracy) {
--            // With enableHighAccuracy, request a faster update interval and configure the provider
--            // for high accuracy mode.
--            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
--                    .setInterval(UPDATE_INTERVAL_FAST_MS);
--        } else {
--            // Use balanced mode by default. In this mode, the API will prefer the network provider
--            // but may use sensor data (for instance, GPS) if high accuracy is requested by another
--            // app.
--            //
--            // If location is configured for sensors-only then elevate the priority to ensure GPS
--            // and other sensors are used.
--            if (LocationUtils.getInstance().isSystemLocationSettingSensorsOnly()) {
--                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
--            } else {
--                mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
--            }
--            mLocationRequest.setInterval(UPDATE_INTERVAL_MS);
--        }
--
--        final Location location = mLocationProviderApi.getLastLocation(mGoogleApiClient);
--        if (location != null) {
--            LocationProviderAdapter.onNewLocationAvailable(location);
--        }
--
--        try {
--            // Request updates on UI Thread replicating LocationProviderAndroid's behaviour.
--            mLocationProviderApi.requestLocationUpdates(
--                    mGoogleApiClient, mLocationRequest, this, ThreadUtils.getUiThreadLooper());
--        } catch (IllegalStateException | SecurityException e) {
--            // IllegalStateException is thrown "If this method is executed in a thread that has not
--            // called Looper.prepare()". SecurityException is thrown if there is no permission, see
--            // https://crbug.com/731271.
--            Log.e(TAG, " mLocationProviderApi.requestLocationUpdates() " + e);
--            LocationProviderAdapter.newErrorAvailable(
--                    "Failed to request location updates: " + e.toString());
--            assert false;
--        }
--    }
--
--    @Override
--    public void onConnectionSuspended(int cause) {}
--
--    // OnConnectionFailedListener implementation
--    @Override
--    public void onConnectionFailed(ConnectionResult result) {
--        LocationProviderAdapter.newErrorAvailable(
--                "Failed to connect to Google Play Services: " + result.toString());
-     }
- 
-     // LocationProvider implementation
-     @Override
-     public void start(boolean enableHighAccuracy) {
-         ThreadUtils.assertOnUiThread();
--        if (mGoogleApiClient.isConnected()) mGoogleApiClient.disconnect();
--
-         mEnablehighAccuracy = enableHighAccuracy;
--        mGoogleApiClient.connect(); // Should return via onConnected().
-     }
- 
-     @Override
-     public void stop() {
-         ThreadUtils.assertOnUiThread();
--        if (!mGoogleApiClient.isConnected()) return;
--
--        mLocationProviderApi.removeLocationUpdates(mGoogleApiClient, this);
--
--        mGoogleApiClient.disconnect();
-     }
- 
-     @Override
-@@ -142,10 +50,4 @@ public class LocationProviderGmsCore implements ConnectionCallbacks, OnConnectio
-         if (mGoogleApiClient == null) return false;
-         return mGoogleApiClient.isConnecting() || mGoogleApiClient.isConnected();
-     }
--
--    // LocationListener implementation
--    @Override
--    public void onLocationChanged(Location location) {
--        LocationProviderAdapter.onNewLocationAvailable(location);
--    }
- }
 diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.gn
 --- a/services/shape_detection/BUILD.gn
 +++ b/services/shape_detection/BUILD.gn
@@ -4180,351 +3934,6 @@ diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.
        "//base:base_java",
        "//mojo/public/java:base_java",
        "//mojo/public/java:bindings_java",
-diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java
---- a/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java
-+++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionImpl.java
-@@ -8,10 +8,6 @@ import android.graphics.Point;
- import android.graphics.Rect;
- import android.util.SparseArray;
- 
--import com.google.android.gms.vision.Frame;
--import com.google.android.gms.vision.barcode.Barcode;
--import com.google.android.gms.vision.barcode.BarcodeDetector;
--
- import org.chromium.base.ContextUtils;
- import org.chromium.base.Log;
- import org.chromium.gfx.mojom.PointF;
-@@ -28,50 +24,7 @@ import org.chromium.shape_detection.mojom.BarcodeFormat;
- public class BarcodeDetectionImpl implements BarcodeDetection {
-     private static final String TAG = "BarcodeDetectionImpl";
- 
--    private BarcodeDetector mBarcodeDetector;
--
-     public BarcodeDetectionImpl(BarcodeDetectorOptions options) {
--        int formats = Barcode.ALL_FORMATS;
--        if (options.formats != null && options.formats.length > 0) {
--            formats = 0;
--            // Keep this list in sync with the constants defined in
--            // com.google.android.gms.vision.barcode.Barcode and the list of
--            // supported formats in BarcodeDetectionProviderImpl.
--            for (int i = 0; i < options.formats.length; ++i) {
--                if (options.formats[i] == BarcodeFormat.AZTEC) {
--                    formats |= Barcode.AZTEC;
--                } else if (options.formats[i] == BarcodeFormat.CODE_128) {
--                    formats |= Barcode.CODE_128;
--                } else if (options.formats[i] == BarcodeFormat.CODE_39) {
--                    formats |= Barcode.CODE_39;
--                } else if (options.formats[i] == BarcodeFormat.CODE_93) {
--                    formats |= Barcode.CODE_93;
--                } else if (options.formats[i] == BarcodeFormat.CODABAR) {
--                    formats |= Barcode.CODABAR;
--                } else if (options.formats[i] == BarcodeFormat.DATA_MATRIX) {
--                    formats |= Barcode.DATA_MATRIX;
--                } else if (options.formats[i] == BarcodeFormat.EAN_13) {
--                    formats |= Barcode.EAN_13;
--                } else if (options.formats[i] == BarcodeFormat.EAN_8) {
--                    formats |= Barcode.EAN_8;
--                } else if (options.formats[i] == BarcodeFormat.ITF) {
--                    formats |= Barcode.ITF;
--                } else if (options.formats[i] == BarcodeFormat.PDF417) {
--                    formats |= Barcode.PDF417;
--                } else if (options.formats[i] == BarcodeFormat.QR_CODE) {
--                    formats |= Barcode.QR_CODE;
--                } else if (options.formats[i] == BarcodeFormat.UPC_A) {
--                    formats |= Barcode.UPC_A;
--                } else if (options.formats[i] == BarcodeFormat.UPC_E) {
--                    formats |= Barcode.UPC_E;
--                } else {
--                    Log.e(TAG, "Unsupported barcode format hint: " + options.formats[i]);
--                }
--            }
--        }
--        mBarcodeDetector = new BarcodeDetector.Builder(ContextUtils.getApplicationContext())
--                                   .setBarcodeFormats(formats)
--                                   .build();
-     }
- 
-     @Override
-@@ -80,47 +33,12 @@ public class BarcodeDetectionImpl implements BarcodeDetection {
-         // on the device; this happens "fast", but it might have not completed,
-         // bail in this case. Also, the API was disabled between and v.9.0 and
-         // v.9.2, see https://developers.google.com/android/guides/releases.
--        if (!mBarcodeDetector.isOperational()) {
--            Log.e(TAG, "BarcodeDetector is not operational");
--            callback.call(new BarcodeDetectionResult[0]);
--            return;
--        }
--
--        Frame frame = BitmapUtils.convertToFrame(bitmapData);
--        if (frame == null) {
--            Log.e(TAG, "Error converting Mojom Bitmap to Frame");
--            callback.call(new BarcodeDetectionResult[0]);
--            return;
--        }
--
--        final SparseArray<Barcode> barcodes = mBarcodeDetector.detect(frame);
--
--        BarcodeDetectionResult[] barcodeArray = new BarcodeDetectionResult[barcodes.size()];
--        for (int i = 0; i < barcodes.size(); i++) {
--            barcodeArray[i] = new BarcodeDetectionResult();
--            final Barcode barcode = barcodes.valueAt(i);
--            barcodeArray[i].rawValue = barcode.rawValue;
--            final Rect rect = barcode.getBoundingBox();
--            barcodeArray[i].boundingBox = new RectF();
--            barcodeArray[i].boundingBox.x = rect.left;
--            barcodeArray[i].boundingBox.y = rect.top;
--            barcodeArray[i].boundingBox.width = rect.width();
--            barcodeArray[i].boundingBox.height = rect.height();
--            final Point[] corners = barcode.cornerPoints;
--            barcodeArray[i].cornerPoints = new PointF[corners.length];
--            for (int j = 0; j < corners.length; j++) {
--                barcodeArray[i].cornerPoints[j] = new PointF();
--                barcodeArray[i].cornerPoints[j].x = corners[j].x;
--                barcodeArray[i].cornerPoints[j].y = corners[j].y;
--            }
--            barcodeArray[i].format = toBarcodeFormat(barcode.format);
--        }
--        callback.call(barcodeArray);
-+        Log.e(TAG, "BarcodeDetector is not operational");
-+        callback.call(new BarcodeDetectionResult[0]);
-     }
- 
-     @Override
-     public void close() {
--        mBarcodeDetector.release();
-     }
- 
-     @Override
-@@ -129,34 +47,6 @@ public class BarcodeDetectionImpl implements BarcodeDetection {
-     }
- 
-     private int toBarcodeFormat(int format) {
--        switch (format) {
--            case Barcode.CODE_128:
--                return BarcodeFormat.CODE_128;
--            case Barcode.CODE_39:
--                return BarcodeFormat.CODE_39;
--            case Barcode.CODE_93:
--                return BarcodeFormat.CODE_93;
--            case Barcode.CODABAR:
--                return BarcodeFormat.CODABAR;
--            case Barcode.DATA_MATRIX:
--                return BarcodeFormat.DATA_MATRIX;
--            case Barcode.EAN_13:
--                return BarcodeFormat.EAN_13;
--            case Barcode.EAN_8:
--                return BarcodeFormat.EAN_8;
--            case Barcode.ITF:
--                return BarcodeFormat.ITF;
--            case Barcode.QR_CODE:
--                return BarcodeFormat.QR_CODE;
--            case Barcode.UPC_A:
--                return BarcodeFormat.UPC_A;
--            case Barcode.UPC_E:
--                return BarcodeFormat.UPC_E;
--            case Barcode.PDF417:
--                return BarcodeFormat.PDF417;
--            case Barcode.AZTEC:
--                return BarcodeFormat.AZTEC;
--        }
-         return BarcodeFormat.UNKNOWN;
-     }
- }
-diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionProviderImpl.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionProviderImpl.java
---- a/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionProviderImpl.java
-+++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/BarcodeDetectionProviderImpl.java
-@@ -8,8 +8,6 @@ import android.content.Context;
- import android.content.pm.PackageInfo;
- import android.content.pm.PackageManager.NameNotFoundException;
- 
--import com.google.android.gms.common.GoogleApiAvailability;
--
- import org.chromium.base.ContextUtils;
- import org.chromium.base.Log;
- import org.chromium.gms.ChromiumPlayServicesAvailability;
-@@ -36,15 +34,6 @@ public class BarcodeDetectionProviderImpl implements BarcodeDetectionProvider {
- 
-     @Override
-     public void enumerateSupportedFormats(EnumerateSupportedFormatsResponse callback) {
--        // Keep this list in sync with the constants defined in
--        // com.google.android.gms.vision.barcode.Barcode and the format hints
--        // supported by BarcodeDetectionImpl.
--        int[] supportedFormats = {BarcodeFormat.AZTEC, BarcodeFormat.CODE_128,
--                BarcodeFormat.CODE_39, BarcodeFormat.CODE_93, BarcodeFormat.CODABAR,
--                BarcodeFormat.DATA_MATRIX, BarcodeFormat.EAN_13, BarcodeFormat.EAN_8,
--                BarcodeFormat.ITF, BarcodeFormat.PDF417, BarcodeFormat.QR_CODE, BarcodeFormat.UPC_A,
--                BarcodeFormat.UPC_E};
--        callback.call(supportedFormats);
-     }
- 
-     @Override
-@@ -54,23 +43,7 @@ public class BarcodeDetectionProviderImpl implements BarcodeDetectionProvider {
-     public void onConnectionError(MojoException e) {}
- 
-     public static BarcodeDetectionProvider create() {
--        Context ctx = ContextUtils.getApplicationContext();
--        if (!ChromiumPlayServicesAvailability.isGooglePlayServicesAvailable(ctx)) {
--            Log.w(TAG, "Google Play Services not available");
--            return null;
--        }
--        try {
--            PackageInfo playServicesPackage = ctx.getPackageManager().getPackageInfo(
--                    GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0);
--            if (playServicesPackage.versionCode < 19742000) {
--                // https://crbug.com/1020746
--                Log.w(TAG, "Detection disabled (%s < 19.7.42)", playServicesPackage.versionName);
--                return null;
--            }
--        } catch (NameNotFoundException e) {
--            Log.w(TAG, "Google Play Services not available");
--            return null;
--        }
--        return new BarcodeDetectionProviderImpl();
-+        Log.w(TAG, "Google Play Services not available");
-+        return null;
-     }
- }
-diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionImplGmsCore.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionImplGmsCore.java
---- a/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionImplGmsCore.java
-+++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionImplGmsCore.java
-@@ -7,11 +7,6 @@ package org.chromium.shape_detection;
- import android.graphics.PointF;
- import android.util.SparseArray;
- 
--import com.google.android.gms.vision.Frame;
--import com.google.android.gms.vision.face.Face;
--import com.google.android.gms.vision.face.FaceDetector;
--import com.google.android.gms.vision.face.Landmark;
--
- import org.chromium.base.ContextUtils;
- import org.chromium.base.Log;
- import org.chromium.gfx.mojom.RectF;
-@@ -36,26 +31,10 @@ public class FaceDetectionImplGmsCore implements FaceDetection {
-     private static final int MAX_EULER_Z = 15;
-     private final int mMaxFaces;
-     private final boolean mFastMode;
--    private final FaceDetector mFaceDetector;
- 
--    FaceDetectionImplGmsCore(FaceDetectorOptions options) {
--        FaceDetector.Builder builder =
--                new FaceDetector.Builder(ContextUtils.getApplicationContext());
-+    FaceDetectionImplGmsCore(FaceDetectorOptions options) { FaceDetector.Builder builder = new FaceDetector.Builder(ContextUtils.getApplicationContext());
-         mMaxFaces = Math.min(options.maxDetectedFaces, MAX_FACES);
-         mFastMode = options.fastMode;
--
--        try {
--            builder.setMode(mFastMode ? FaceDetector.FAST_MODE : FaceDetector.ACCURATE_MODE);
--            builder.setLandmarkType(FaceDetector.ALL_LANDMARKS);
--            if (mMaxFaces == 1) {
--                builder.setProminentFaceOnly(true);
--            }
--        } catch (IllegalArgumentException e) {
--            Log.e(TAG, "Unexpected exception " + e);
--            assert false;
--        }
--
--        mFaceDetector = builder.build();
-     }
- 
-     @Override
-@@ -63,7 +42,7 @@ public class FaceDetectionImplGmsCore implements FaceDetection {
-         // The vision library will be downloaded the first time the API is used
-         // on the device; this happens "fast", but it might have not completed,
-         // bail in this case.
--        if (!mFaceDetector.isOperational()) {
-+/*        if (!mFaceDetector.isOperational()) {
-             Log.e(TAG, "FaceDetector is not operational");
- 
-             // Fallback to Android's FaceDetectionImpl.
-@@ -131,12 +110,13 @@ public class FaceDetectionImplGmsCore implements FaceDetection {
-             faceArray[i].landmarks = mojoLandmarks.toArray(
-                     new org.chromium.shape_detection.mojom.Landmark[mojoLandmarks.size()]);
-         }
--        callback.call(faceArray);
-+        callback.call(faceArray); */
-+        Log.e(TAG, "FaceDetector is not operational");
-+        callback.call(new FaceDetectionResult[0]);
-     }
- 
-     @Override
-     public void close() {
--        mFaceDetector.release();
-     }
- 
-     @Override
-diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java
---- a/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java
-+++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/TextDetectionImpl.java
-@@ -8,15 +8,10 @@ import android.graphics.Point;
- import android.graphics.Rect;
- import android.util.SparseArray;
- 
--import com.google.android.gms.vision.Frame;
--import com.google.android.gms.vision.text.TextBlock;
--import com.google.android.gms.vision.text.TextRecognizer;
--
- import org.chromium.base.ContextUtils;
- import org.chromium.base.Log;
- import org.chromium.gfx.mojom.PointF;
- import org.chromium.gfx.mojom.RectF;
--import org.chromium.gms.ChromiumPlayServicesAvailability;
- import org.chromium.mojo.system.MojoException;
- import org.chromium.shape_detection.mojom.TextDetection;
- import org.chromium.shape_detection.mojom.TextDetectionResult;
-@@ -27,10 +22,7 @@ import org.chromium.shape_detection.mojom.TextDetectionResult;
- public class TextDetectionImpl implements TextDetection {
-     private static final String TAG = "TextDetectionImpl";
- 
--    private TextRecognizer mTextRecognizer;
--
-     public TextDetectionImpl() {
--        mTextRecognizer = new TextRecognizer.Builder(ContextUtils.getApplicationContext()).build();
-     }
- 
-     @Override
-@@ -39,13 +31,10 @@ public class TextDetectionImpl implements TextDetection {
-         // on the device; this happens "fast", but it might have not completed,
-         // bail in this case. Also, the API was disabled between and v.9.0 and
-         // v.9.2, see https://developers.google.com/android/guides/releases.
--        if (!mTextRecognizer.isOperational()) {
-             Log.e(TAG, "TextDetector is not operational");
-             callback.call(new TextDetectionResult[0]);
-             return;
--        }
--
--        Frame frame = BitmapUtils.convertToFrame(bitmapData);
-+/*      Frame frame = BitmapUtils.convertToFrame(bitmapData);
-         if (frame == null) {
-             Log.e(TAG, "Error converting Mojom Bitmap to Frame");
-             callback.call(new TextDetectionResult[0]);
-@@ -73,12 +62,11 @@ public class TextDetectionImpl implements TextDetection {
-                 detectedTextArray[i].cornerPoints[j].y = corners[j].y;
-             }
-         }
--        callback.call(detectedTextArray);
-+        callback.call(detectedTextArray); */
-     }
- 
-     @Override
-     public void close() {
--        mTextRecognizer.release();
-     }
- 
-     @Override
-@@ -87,11 +75,7 @@ public class TextDetectionImpl implements TextDetection {
-     }
- 
-     public static TextDetection create() {
--        if (!ChromiumPlayServicesAvailability.isGooglePlayServicesAvailable(
--                    ContextUtils.getApplicationContext())) {
--            Log.e(TAG, "Google Play Services not available");
--            return null;
--        }
--        return new TextDetectionImpl();
-+        Log.e(TAG, "Google Play Services not available");
-+        return null;
-     }
- }
 diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
 --- a/third_party/android_deps/BUILD.gn
 +++ b/third_party/android_deps/BUILD.gn

+ 6 - 6
build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch

@@ -9,8 +9,8 @@ Subject: Remove blocklisted URLs upon bookmark creation
 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
-@@ -143,6 +143,8 @@ import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
- import org.chromium.chrome.browser.settings.AdBlockPreferences;
+@@ -136,6 +136,8 @@ import org.chromium.chrome.browser.profiles.Profile;
+ import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
  import org.chromium.chrome.browser.share.ShareDelegate;
  import org.chromium.chrome.browser.share.ShareDelegateImpl;
 +import org.chromium.chrome.browser.suggestions.SuggestionsDependencyFactory;
@@ -18,7 +18,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.tab.AccessibilityVisibilityHandler;
  import org.chromium.chrome.browser.tab.Tab;
  import org.chromium.chrome.browser.tab.TabHidingType;
-@@ -216,6 +218,8 @@ import org.chromium.url.GURL;
+@@ -208,6 +210,8 @@ import org.chromium.url.GURL;
  import org.chromium.url.Origin;
  import org.chromium.webapk.lib.client.WebApkNavigationClient;
  
@@ -27,7 +27,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import java.util.ArrayList;
  import java.util.List;
  import java.util.function.Consumer;
-@@ -260,6 +264,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -252,6 +256,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
      private UmaSessionStats mUmaSessionStats;
      private ContextReporter mContextReporter;
@@ -35,7 +35,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  
      private boolean mPartnerBrowserRefreshNeeded;
  
-@@ -1270,6 +1275,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1243,6 +1248,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
              mCompositorViewHolder = null;
          }
  
@@ -47,7 +47,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
          onDestroyInternal();
  
          if (mDidAddPolicyChangeListener) {
-@@ -1518,6 +1528,13 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1491,6 +1501,13 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          // Defense in depth against the UI being erroneously enabled.
          BookmarkBridge bridge = mBookmarkBridgeSupplier.get();

+ 1 - 1
build/patches/Remove-help-menu-item.patch

@@ -38,7 +38,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcu
 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
-@@ -1997,15 +1997,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -1991,15 +1991,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  
          final Tab currentTab = getActivityTab();
  

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 861 - 44
build/patches/Remove-signin-and-data-saver-integrations.patch


+ 8 - 8
build/patches/User-agent-customization.patch

@@ -82,7 +82,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
-@@ -1162,6 +1162,7 @@ chrome_java_sources = [
+@@ -1155,6 +1155,7 @@ chrome_java_sources = [
    "java/src/org/chromium/chrome/browser/payments/ui/DimmingDialog.java",
    "java/src/org/chromium/chrome/browser/payments/ui/LineItem.java",
    "java/src/org/chromium/chrome/browser/payments/ui/PaymentAppComparator.java",
@@ -206,7 +206,7 @@ new file mode 100644
 diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml
 --- a/chrome/android/java/res/xml/main_preferences.xml
 +++ b/chrome/android/java/res/xml/main_preferences.xml
-@@ -104,6 +104,11 @@
+@@ -101,6 +101,11 @@
          android:key="content_settings"
          android:order="19"
          android:title="@string/prefs_site_settings"/>
@@ -257,7 +257,7 @@ new file mode 100644
 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
-@@ -76,6 +76,7 @@ import org.chromium.chrome.browser.app.flags.ChromeCachedFlags;
+@@ -72,6 +72,7 @@ import org.chromium.chrome.browser.app.flags.ChromeCachedFlags;
  import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFactory;
  import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController;
  import org.chromium.chrome.browser.app.tabmodel.AsyncTabParamsManagerSingleton;
@@ -265,7 +265,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
  import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
  import org.chromium.chrome.browser.bookmarks.BookmarkModel;
-@@ -217,6 +218,13 @@ import org.chromium.ui.widget.Toast;
+@@ -209,6 +210,13 @@ import org.chromium.ui.widget.Toast;
  import org.chromium.url.GURL;
  import org.chromium.url.Origin;
  import org.chromium.webapk.lib.client.WebApkNavigationClient;
@@ -279,7 +279,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
  
  import org.chromium.url.GURL;
  
-@@ -2129,11 +2137,18 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
+@@ -2102,11 +2110,18 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
          } else if (id == R.id.view_source_id) {
              currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrlString()));
          } else if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) {
@@ -936,7 +936,7 @@ diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_a
 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
-@@ -1284,6 +1284,13 @@ std::string GetPlatformForUAMetadata() {
+@@ -1285,6 +1285,13 @@ std::string GetPlatformForUAMetadata() {
  blink::UserAgentMetadata GetUserAgentMetadata() {
    blink::UserAgentMetadata metadata;
  
@@ -950,7 +950,7 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/ch
    metadata.brand_version_list = GetBrandVersionList();
    metadata.full_version = version_info::GetVersionNumber();
    metadata.platform = GetPlatformForUAMetadata();
-@@ -2377,6 +2384,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
+@@ -2378,6 +2385,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
              switches::kDisableTargetBlankImpliesNoOpener);
        }
  
@@ -1132,7 +1132,7 @@ diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
 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
-@@ -1119,6 +1119,14 @@ extern const char kCartModuleWelcomeSurfaceShownTimes[];
+@@ -1120,6 +1120,14 @@ extern const char kCartModuleWelcomeSurfaceShownTimes[];
  extern const char kIncognitoTabHistoryEnabled[];
  #endif
  

+ 3 - 3
build/patches/kill-TOS-and-metrics-opt-out.patch

@@ -70,7 +70,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAnd
          mTosAndPrivacy = (TextView) view.findViewById(R.id.tos_and_privacy);
  
          mAcceptButton.setOnClickListener((v) -> onTosButtonClicked());
-@@ -152,11 +150,6 @@ public class ToSAndUMAFirstRunFragment extends Fragment implements FirstRunFragm
+@@ -142,11 +140,6 @@ public class ToSAndUMAFirstRunFragment extends Fragment implements FirstRunFragm
          if (!isVisibleToUser) {
              // Restore original enabled & visibility states, in case the user returns to the page.
              setSpinnerVisible(false);
@@ -82,7 +82,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAnd
          }
      }
  
-@@ -192,8 +185,6 @@ public class ToSAndUMAFirstRunFragment extends Fragment implements FirstRunFragm
+@@ -182,8 +175,6 @@ public class ToSAndUMAFirstRunFragment extends Fragment implements FirstRunFragm
              RecordHistogram.recordTimesHistogram("MobileFre.TosFragment.SpinnerVisibleDuration",
                      SystemClock.elapsedRealtime() - mTosAcceptedTime);
          }
@@ -91,7 +91,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAnd
      }
  
      private void setSpinnerVisible(boolean spinnerVisible) {
-@@ -217,10 +208,6 @@ public class ToSAndUMAFirstRunFragment extends Fragment implements FirstRunFragm
+@@ -207,10 +198,6 @@ public class ToSAndUMAFirstRunFragment extends Fragment implements FirstRunFragm
  
          mAcceptButton.setVisibility(visibility);
          mTosAndPrivacy.setVisibility(visibility);

+ 1 - 22
build/patches/kill-Vision.patch

@@ -7,9 +7,8 @@ Barcode, face and text detection APIs
  chrome/android/BUILD.gn                       |  2 --
  services/shape_detection/BUILD.gn             |  6 -----
  .../chromium/shape_detection/BitmapUtils.java | 12 ----------
- .../FaceDetectionProviderImpl.java            | 10 +-------
  .../shape_detection/InterfaceRegistrar.java   | 23 ++-----------------
- 5 files changed, 3 insertions(+), 50 deletions(-)
+ 4 files changed, 2 insertions(+), 41 deletions(-)
 
 diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
 --- a/chrome/android/BUILD.gn
@@ -68,26 +67,6 @@ diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detect
 -        return new Frame.Builder().setBitmap(bitmap).build();
 -    }
  }
-diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionProviderImpl.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionProviderImpl.java
---- a/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionProviderImpl.java
-+++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/FaceDetectionProviderImpl.java
-@@ -21,15 +21,7 @@ public class FaceDetectionProviderImpl implements FaceDetectionProvider {
-     @Override
-     public void createFaceDetection(
-             InterfaceRequest<FaceDetection> request, FaceDetectorOptions options) {
--        final boolean isGmsCoreSupported =
--                ChromiumPlayServicesAvailability.isGooglePlayServicesAvailable(
--                        ContextUtils.getApplicationContext());
--
--        if (isGmsCoreSupported) {
--            FaceDetection.MANAGER.bind(new FaceDetectionImplGmsCore(options), request);
--        } else {
--            FaceDetection.MANAGER.bind(new FaceDetectionImpl(options), request);
--        }
-+        FaceDetection.MANAGER.bind(new FaceDetectionImpl(options), request);
-     }
- 
-     @Override
 diff --git a/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java b/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java
 --- a/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java
 +++ b/services/shape_detection/android/java/src/org/chromium/shape_detection/InterfaceRegistrar.java

+ 3 - 26
build/patches/ungoogled-chromium-Disable-profile-avatar.patch

@@ -4,10 +4,9 @@ Subject: ungoogled-chromium: Disable profile avatar
 
 Added some Bromite-specific further improvements
 ---
- chrome/browser/BUILD.gn                              | 2 --
- chrome/browser/profiles/profile_attributes_entry.cc  | 6 ------
- chrome/browser/profiles/profile_avatar_downloader.cc | 8 +-------
- 3 files changed, 1 insertion(+), 15 deletions(-)
+ chrome/browser/BUILD.gn                             | 2 --
+ chrome/browser/profiles/profile_attributes_entry.cc | 6 ------
+ 2 files changed, 8 deletions(-)
 
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
 --- a/chrome/browser/BUILD.gn
@@ -37,28 +36,6 @@ diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browse
    // TODO(crbug.com/1100835): After launch, remove the treatment of placeholder
    // avatars from GetHighResAvatar() and from any other places.
    if (ShouldShowGenericColoredAvatar(GetAvatarIconIndex())) {
-diff --git a/chrome/browser/profiles/profile_avatar_downloader.cc b/chrome/browser/profiles/profile_avatar_downloader.cc
---- a/chrome/browser/profiles/profile_avatar_downloader.cc
-+++ b/chrome/browser/profiles/profile_avatar_downloader.cc
-@@ -17,17 +17,11 @@
- #include "net/url_request/referrer_policy.h"
- #include "ui/gfx/image/image.h"
- 
--namespace {
--const char kHighResAvatarDownloadUrlPrefix[] =
--    "https://www.gstatic.com/chrome/profile_avatars/";
--}
--
- ProfileAvatarDownloader::ProfileAvatarDownloader(size_t icon_index,
-                                                  FetchCompleteCallback callback)
-     : icon_index_(icon_index), callback_(std::move(callback)) {
-   DCHECK(!callback_.is_null());
--  GURL url(std::string(kHighResAvatarDownloadUrlPrefix) +
--           profiles::GetDefaultAvatarIconFileNameAtIndex(icon_index));
-+  GURL url(std::string("about:blank"));
-   net::NetworkTrafficAnnotationTag traffic_annotation =
-       net::DefineNetworkTrafficAnnotation("profile_avatar", R"(
-         semantics {
 -- 
 2.17.1
 

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác