From 441c8bc218f4d3a608f09d0e5e49dbafda4b4bd1 Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 8 Sep 2023 16:01:51 +0530 Subject: [PATCH 01/40] Browser: Import bromite repo --- .github/FUNDING.yml | 4 - .github/ISSUE_TEMPLATE/bug_report.md | 89 - .github/ISSUE_TEMPLATE/feature_request.md | 35 - .gitmodules | 3 - bromite | 1 - bromite/build/bromite_patches_list.txt | 204 + .../AImageReader-CFI-crash-mitigations.patch | 258 + .../Add-AllowUserCertificates-flag.patch | 180 + ...dd-Alt-D-hotkey-to-focus-address-bar.patch | 23 + .../Add-DuckDuckGo-Lite-search-engine.patch | 954 + .../Add-English-only-search-engine.patch | 1031 + .../Add-IsCleartextPermitted-flag.patch | 98 + .../Add-a-proxy-configuration-page.patch | 1404 + .../Add-an-always-incognito-mode.patch | 2041 + .../Add-bookmark-import-export-actions.patch | 1698 + ...dd-custom-tab-intents-privacy-option.patch | 222 + .../build/patches/Add-exit-menu-item.patch | 133 + ...g-for-omnibox-autocomplete-filtering.patch | 140 + .../Add-flag-for-save-data-header.patch | 112 + ...nfigure-maximum-connections-per-host.patch | 158 + ...ontrol-video-playback-resume-feature.patch | 76 + .../Add-flag-to-disable-IPv6-probes.patch | 155 + ...-to-disable-external-intent-requests.patch | 58 + .../Add-flag-to-disable-vibration.patch | 156 + ...Add-lifetime-options-for-permissions.patch | 1382 + .../Add-menu-item-to-bookmark-all-tabs.patch | 699 + .../Add-menu-item-to-view-source.patch | 130 + .../Add-option-to-force-tablet-UI.patch | 252 + ...-to-not-persist-tabs-across-sessions.patch | 122 + .../Add-option-to-use-home-page-as-NTP.patch | 207 + .../patches/Add-site-engagement-flag.patch | 186 + ...-support-for-ISupportHelpAndFeedback.patch | 53 + .../Add-support-for-writing-URIs.patch | 100 + .../patches/Add-webGL-site-setting.patch | 505 + .../patches/Add-webRTC-site-settings.patch | 401 + ...ow-building-without-enable_reporting.patch | 440 + ...ow-building-without-supervised-users.patch | 53 + .../Allow-playing-audio-in-background.patch | 54 + ...e-new-tab-page-for-default-home-page.patch | 27 + ...ioBuffer-AnalyserNode-fp-mitigations.patch | 63 + .../Automated-domain-substitution.patch | 42721 ++++++++++++++++ .../patches/Battery-API-return-nothing.patch | 67 + ...Block-gateway-attacks-via-websockets.patch | 286 + .../Block-qjz9zk-or-trk-requests.patch | 290 + .../Bookmarks-select-all-menu-entry.patch | 96 + .../build/patches/Bromite-auto-updater.patch | 1595 + .../build/patches/Bromite-package-name.patch | 23 + .../Bromite-subresource-adblocker.patch | 1908 + .../build/patches/Chromium-package-name.patch | 23 + ...-resolution-in-requestAnimationFrame.patch | 40 + .../patches/Client-hints-overrides.patch | 139 + .../Content-settings-infrastructure.patch | 1270 + ...ctionary-suggestions-for-the-Omnibox.patch | 978 + .../patches/Disable-AGSA-by-default.patch | 319 + ...ble-Accessibility-service-by-default.patch | 74 + .../patches/Disable-AsyncDNS-by-default.patch | 32 + ...DRM-media-origin-IDs-preprovisioning.patch | 25 + .../Disable-FLoC-and-privacy-sandbox.patch | 251 + ...le-NTP-remote-suggestions-by-default.patch | 51 + .../build/patches/Disable-PrivacyGuide.patch | 40 + .../Disable-StartSurface-feature.patch | 27 + .../patches/Disable-TLS-resumption.patch | 297 + .../patches/Disable-UA-full-version.patch | 61 + .../Disable-add-to-home-screen-prompt.patch | 26 + .../patches/Disable-all-predictors-code.patch | 298 + .../patches/Disable-all-promo-dialogs.patch | 34 + .../Disable-conversion-measurement-api.patch | 231 + .../patches/Disable-crash-reporting.patch | 25 + .../Disable-feeds-support-by-default.patch | 65 + ...Disable-fetching-of-all-field-trials.patch | 236 + .../patches/Disable-idle-detection.patch | 23 + ...-lock-icon-in-address-bar-by-default.patch | 25 + ...media-router-and-remoting-by-default.patch | 79 + .../Disable-minidump-upload-scheduling.patch | 39 + .../Disable-offline-pages-in-CCT.patch | 25 + ...-omission-of-URL-elements-in-Omnibox.patch | 49 + .../patches/Disable-plugins-enumeration.patch | 24 + ...e-references-to-fonts.googleapis.com.patch | 63 + ...sts-for-single-word-Omnibar-searches.patch | 30 + .../build/patches/Disable-safe-browsing.patch | 3128 ++ .../build/patches/Disable-safety-check.patch | 97 + .../Disable-smart-selection-by-default.patch | 124 + ...isable-some-signed-exchange-features.patch | 33 + ...ble-support-for-RAR-files-inspection.patch | 97 + .../Disable-text-fragments-by-default.patch | 163 + ...Disable-the-DIAL-repeating-discovery.patch | 36 + .../Disable-third-party-origin-trials.patch | 241 + .../patches/Disable-update-scheduler.patch | 25 + .../patches/Disable-various-metrics.patch | 210 + .../Do-not-build-API-keys-infobar.patch | 23 + .../Do-not-compile-QR-code-sharing.patch | 343 + .../Do-not-hide-component-extensions.patch | 26 + ...ore-download-location-prompt-setting.patch | 42 + .../patches/Do-not-link-with-libatomic.patch | 27 + .../Do-not-store-passwords-by-default.patch | 31 + bromite/build/patches/DoH-improvements.patch | 94 + .../Enable-Certificate-Transparency.patch | 206 + .../build/patches/Enable-ECH-by-default.patch | 25 + .../patches/Enable-HEVC-by-default.patch | 27 + ...able-PermuteTLSExtensions-by-default.patch | 25 + ...-SPPI-for-devices-with-enough-memory.patch | 44 + ...ctOriginIsolation-and-SitePerProcess.patch | 86 + ...e-darken-websites-checkbox-in-themes.patch | 44 + ...fwrapv-in-Clang-for-non-UBSan-builds.patch | 60 + .../Enable-native-Android-autofill.patch | 812 + .../Enable-network-isolation-features.patch | 72 + ...-prefetch-privacy-changes-by-default.patch | 25 + .../build/patches/Enable-share-intent.patch | 421 + ...ble-third-party-storage-partitioning.patch | 25 + .../Experimental-user-scripts-support.patch | 10484 ++++ .../Follow-only-system-dark-mode.patch | 25 + .../Guard-for-user-agent-reduction.patch | 83 + ...ing-against-incognito-mode-detection.patch | 23 + ...story-number-of-days-privacy-setting.patch | 513 + ...e-enterprise-policies-for-secure-DNS.patch | 29 + ...prove-plain-text-rendering-on-mobile.patch | 34 + ...number-of-autocomplete-matches-to-10.patch | 49 + ...ripts-for-AMP-tracking-ads-and-video.patch | 193 + .../Invalidate-components-public-key.patch | 26 + bromite/build/patches/JIT-site-settings.patch | 483 + .../Keep-empty-tabs-between-sessions.patch | 44 + ...-allow-screenshots-in-Incognito-mode.patch | 32 + .../patches/Logcat-crash-reports-UI.patch | 869 + .../patches/Modify-default-preferences.patch | 339 + .../Move-navigation-bar-to-bottom.patch | 2630 + ...nt-settings-back-to-privacy-settings.patch | 121 + .../Multiple-fingerprinting-mitigations.patch | 842 + .../patches/Never-fetch-popular-sites.patch | 45 + ...HTTP-probes-for-connection-detection.patch | 27 + ...uiltin-autocomplete-for-chrome-flags.patch | 23 + .../patches/OpenSearch-miscellaneous.patch | 262 + .../patches/Override-Navigator-Language.patch | 96 + .../Partition-Blink-memory-cache.patch | 204 + .../Partition-blobs-by-top-frame-URL.patch | 217 + .../patches/Re-introduce-kWebAuthCable.patch | 147 + ...-modal-dialog-flag-to-close-all-tabs.patch | 233 + ...e-introduce-override_build_timestamp.patch | 50 + ...ders-in-DoH-requests-to-bare-minimum.patch | 76 + ...Reintroduce-override_build_timestamp.patch | 50 + .../patches/Remove-EV-certificates.patch | 78 + ...referrals-in-cross-origin-navigation.patch | 110 + .../patches/Remove-SMS-integration.patch | 381 + .../Remove-binary-blob-integrations.patch | 4321 ++ ...cklisted-URLs-upon-bookmark-creation.patch | 60 + .../Remove-contextual-search-manager.patch | 1427 + .../build/patches/Remove-help-menu-item.patch | 92 + ...-mremap-from-seccomp-baseline-policy.patch | 26 + .../Remove-navigator.connection-info.patch | 86 + ...load-of-com.google.android.gms.fonts.patch | 71 + ...price-shopping-commerce-integrations.patch | 2268 + .../Remove-segmentation-platform.patch | 72 + .../Remove-signin-and-sync-integrations.patch | 5689 ++ ...Remove-voice-recognition-integration.patch | 998 + ...weblayer-dependency-on-Play-Services.patch | 22 + ...ndow-name-on-cross-origin-navigation.patch | 34 + ...ce-DoH-probe-domain-with-RIPE-domain.patch | 38 + .../Restore-Search-Ready-Omnibox-flag.patch | 165 + .../Restore-Simplified-NTP-launch.patch | 452 + ...-button-in-top-toolbar-customization.patch | 287 + .../Restore-classic-new-tab-page.patch | 85 + .../Restore-offline-indicator-v2-flag.patch | 228 + ...Delete-block-external-form-redirects.patch | 211 + ...evert-Permit-blocking-of-view-source.patch | 201 + ...emove-disable-pull-to-refresh-effect.patch | 72 + ...vert-flags-remove-num-raster-threads.patch | 94 + ...l-of-execution-context-address-space.patch | 914 + ...moval-of-an-option-to-block-autoplay.patch | 613 + ...-Note-9-SDK27-crazylinker-workaround.patch | 46 + ...tings-for-cookies-javascript-and-ads.patch | 135 + .../patches/Site-setting-for-images.patch | 495 + .../Switch-to-fstack-protector-strong.patch | 43 + .../patches/Timezone-customization.patch | 1352 + .../patches/Unexpire-tab-groups-flags.patch | 72 + .../patches/Update-i18n-zh_CN-support.patch | 203 + .../Use-4-tile-rows-never-show-logo.patch | 80 + .../Use-64-bit-WebView-processes.patch | 40 + .../patches/Use-dummy-DFM-installer.patch | 486 + .../patches/User-agent-customization.patch | 1243 + bromite/build/patches/Welcome-screen.patch | 711 + .../patches/autofill-miscellaneous.patch | 219 + ...build-remove-calling-untrusted-hooks.patch | 176 + .../patches/disable-AdsBlockedInfoBar.patch | 76 + .../disable-WebView-variations-support.patch | 39 + .../disable-appending-variations-header.patch | 26 + .../disable-battery-status-updater.patch | 46 + ...IPv6-connectivity-probes-to-RIPE-DNS.patch | 37 + .../do-not-add-suffix-to-package-name.patch | 23 + .../patches/do-not-hide-.orig-files.patch | 23 + .../enable-ftrivial-auto-var-init-zero.patch | 26 + .../exit-on-failure-of-inclusion.patch | 33 + ...t_run-deactivate-autoupdate-globally.patch | 31 + bromite/build/patches/kill-Auth.patch | 102 + .../kill-Location-fall-back-to-system.patch | 48 + bromite/build/patches/kill-Vision.patch | 135 + ...rce-text-x-suse-ymp-to-be-downloaded.patch | 25 + ...net-cert-increase-default-key-length.patch | 26 + ...nH264-enable-ARM-ARM64-optimizations.patch | 82 + ...always-prompt-for-download-directory.patch | 44 + ...ofile-resetter-disable-send-settings.patch | 31 + .../sharing-hub-always-use-visible-URL.patch | 31 + ...le-fetching-of-languages-from-server.patch | 30 + .../ungoogled-chromium-Disable-Gaia.patch | 44 + ...hromium-Disable-Network-Time-Tracker.patch | 28 + ...d-chromium-Disable-intranet-detector.patch | 29 + ...gled-chromium-Disable-profile-avatar.patch | 42 + ...romium-Disable-translate-integration.patch | 225 + ...ed-chromium-Disable-untraceable-URLs.patch | 71 + ...chromium-Disable-webRTC-log-uploader.patch | 56 + ...ed-chromium-no-special-hosts-domains.patch | 698 + .../updater-disable-updater-pings.patch | 65 + ...RTC-do-not-expose-local-IP-addresses.patch | 53 + ...iew-Hard-no-to-persistent-histograms.patch | 32 + build.sh | 2 +- 213 files changed, 117175 insertions(+), 133 deletions(-) delete mode 100644 .github/FUNDING.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .gitmodules delete mode 160000 bromite create mode 100644 bromite/build/bromite_patches_list.txt create mode 100644 bromite/build/patches/AImageReader-CFI-crash-mitigations.patch create mode 100644 bromite/build/patches/Add-AllowUserCertificates-flag.patch create mode 100644 bromite/build/patches/Add-Alt-D-hotkey-to-focus-address-bar.patch create mode 100644 bromite/build/patches/Add-DuckDuckGo-Lite-search-engine.patch create mode 100644 bromite/build/patches/Add-English-only-search-engine.patch create mode 100644 bromite/build/patches/Add-IsCleartextPermitted-flag.patch create mode 100644 bromite/build/patches/Add-a-proxy-configuration-page.patch create mode 100644 bromite/build/patches/Add-an-always-incognito-mode.patch create mode 100644 bromite/build/patches/Add-bookmark-import-export-actions.patch create mode 100644 bromite/build/patches/Add-custom-tab-intents-privacy-option.patch create mode 100644 bromite/build/patches/Add-exit-menu-item.patch create mode 100644 bromite/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch create mode 100644 bromite/build/patches/Add-flag-for-save-data-header.patch create mode 100644 bromite/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch create mode 100644 bromite/build/patches/Add-flag-to-control-video-playback-resume-feature.patch create mode 100644 bromite/build/patches/Add-flag-to-disable-IPv6-probes.patch create mode 100644 bromite/build/patches/Add-flag-to-disable-external-intent-requests.patch create mode 100644 bromite/build/patches/Add-flag-to-disable-vibration.patch create mode 100644 bromite/build/patches/Add-lifetime-options-for-permissions.patch create mode 100644 bromite/build/patches/Add-menu-item-to-bookmark-all-tabs.patch create mode 100644 bromite/build/patches/Add-menu-item-to-view-source.patch create mode 100644 bromite/build/patches/Add-option-to-force-tablet-UI.patch create mode 100644 bromite/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch create mode 100644 bromite/build/patches/Add-option-to-use-home-page-as-NTP.patch create mode 100644 bromite/build/patches/Add-site-engagement-flag.patch create mode 100644 bromite/build/patches/Add-support-for-ISupportHelpAndFeedback.patch create mode 100644 bromite/build/patches/Add-support-for-writing-URIs.patch create mode 100644 bromite/build/patches/Add-webGL-site-setting.patch create mode 100644 bromite/build/patches/Add-webRTC-site-settings.patch create mode 100644 bromite/build/patches/Allow-building-without-enable_reporting.patch create mode 100644 bromite/build/patches/Allow-building-without-supervised-users.patch create mode 100644 bromite/build/patches/Allow-playing-audio-in-background.patch create mode 100644 bromite/build/patches/Always-use-new-tab-page-for-default-home-page.patch create mode 100644 bromite/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch create mode 100644 bromite/build/patches/Automated-domain-substitution.patch create mode 100644 bromite/build/patches/Battery-API-return-nothing.patch create mode 100644 bromite/build/patches/Block-gateway-attacks-via-websockets.patch create mode 100644 bromite/build/patches/Block-qjz9zk-or-trk-requests.patch create mode 100644 bromite/build/patches/Bookmarks-select-all-menu-entry.patch create mode 100644 bromite/build/patches/Bromite-auto-updater.patch create mode 100644 bromite/build/patches/Bromite-package-name.patch create mode 100644 bromite/build/patches/Bromite-subresource-adblocker.patch create mode 100644 bromite/build/patches/Chromium-package-name.patch create mode 100644 bromite/build/patches/Clamp-time-resolution-in-requestAnimationFrame.patch create mode 100644 bromite/build/patches/Client-hints-overrides.patch create mode 100644 bromite/build/patches/Content-settings-infrastructure.patch create mode 100644 bromite/build/patches/Dictionary-suggestions-for-the-Omnibox.patch create mode 100644 bromite/build/patches/Disable-AGSA-by-default.patch create mode 100644 bromite/build/patches/Disable-Accessibility-service-by-default.patch create mode 100644 bromite/build/patches/Disable-AsyncDNS-by-default.patch create mode 100644 bromite/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch create mode 100644 bromite/build/patches/Disable-FLoC-and-privacy-sandbox.patch create mode 100644 bromite/build/patches/Disable-NTP-remote-suggestions-by-default.patch create mode 100644 bromite/build/patches/Disable-PrivacyGuide.patch create mode 100644 bromite/build/patches/Disable-StartSurface-feature.patch create mode 100644 bromite/build/patches/Disable-TLS-resumption.patch create mode 100644 bromite/build/patches/Disable-UA-full-version.patch create mode 100644 bromite/build/patches/Disable-add-to-home-screen-prompt.patch create mode 100644 bromite/build/patches/Disable-all-predictors-code.patch create mode 100644 bromite/build/patches/Disable-all-promo-dialogs.patch create mode 100644 bromite/build/patches/Disable-conversion-measurement-api.patch create mode 100644 bromite/build/patches/Disable-crash-reporting.patch create mode 100644 bromite/build/patches/Disable-feeds-support-by-default.patch create mode 100644 bromite/build/patches/Disable-fetching-of-all-field-trials.patch create mode 100644 bromite/build/patches/Disable-idle-detection.patch create mode 100644 bromite/build/patches/Disable-lock-icon-in-address-bar-by-default.patch create mode 100644 bromite/build/patches/Disable-media-router-and-remoting-by-default.patch create mode 100644 bromite/build/patches/Disable-minidump-upload-scheduling.patch create mode 100644 bromite/build/patches/Disable-offline-pages-in-CCT.patch create mode 100644 bromite/build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch create mode 100644 bromite/build/patches/Disable-plugins-enumeration.patch create mode 100644 bromite/build/patches/Disable-references-to-fonts.googleapis.com.patch create mode 100644 bromite/build/patches/Disable-requests-for-single-word-Omnibar-searches.patch create mode 100644 bromite/build/patches/Disable-safe-browsing.patch create mode 100644 bromite/build/patches/Disable-safety-check.patch create mode 100644 bromite/build/patches/Disable-smart-selection-by-default.patch create mode 100644 bromite/build/patches/Disable-some-signed-exchange-features.patch create mode 100644 bromite/build/patches/Disable-support-for-RAR-files-inspection.patch create mode 100644 bromite/build/patches/Disable-text-fragments-by-default.patch create mode 100644 bromite/build/patches/Disable-the-DIAL-repeating-discovery.patch create mode 100644 bromite/build/patches/Disable-third-party-origin-trials.patch create mode 100644 bromite/build/patches/Disable-update-scheduler.patch create mode 100644 bromite/build/patches/Disable-various-metrics.patch create mode 100644 bromite/build/patches/Do-not-build-API-keys-infobar.patch create mode 100644 bromite/build/patches/Do-not-compile-QR-code-sharing.patch create mode 100644 bromite/build/patches/Do-not-hide-component-extensions.patch create mode 100644 bromite/build/patches/Do-not-ignore-download-location-prompt-setting.patch create mode 100644 bromite/build/patches/Do-not-link-with-libatomic.patch create mode 100644 bromite/build/patches/Do-not-store-passwords-by-default.patch create mode 100644 bromite/build/patches/DoH-improvements.patch create mode 100644 bromite/build/patches/Enable-Certificate-Transparency.patch create mode 100644 bromite/build/patches/Enable-ECH-by-default.patch create mode 100644 bromite/build/patches/Enable-HEVC-by-default.patch create mode 100644 bromite/build/patches/Enable-PermuteTLSExtensions-by-default.patch create mode 100644 bromite/build/patches/Enable-SPPI-for-devices-with-enough-memory.patch create mode 100644 bromite/build/patches/Enable-StrictOriginIsolation-and-SitePerProcess.patch create mode 100644 bromite/build/patches/Enable-darken-websites-checkbox-in-themes.patch create mode 100644 bromite/build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch create mode 100644 bromite/build/patches/Enable-native-Android-autofill.patch create mode 100644 bromite/build/patches/Enable-network-isolation-features.patch create mode 100644 bromite/build/patches/Enable-prefetch-privacy-changes-by-default.patch create mode 100644 bromite/build/patches/Enable-share-intent.patch create mode 100644 bromite/build/patches/Enable-third-party-storage-partitioning.patch create mode 100644 bromite/build/patches/Experimental-user-scripts-support.patch create mode 100644 bromite/build/patches/Follow-only-system-dark-mode.patch create mode 100644 bromite/build/patches/Guard-for-user-agent-reduction.patch create mode 100644 bromite/build/patches/Hardening-against-incognito-mode-detection.patch create mode 100644 bromite/build/patches/History-number-of-days-privacy-setting.patch create mode 100644 bromite/build/patches/Ignore-enterprise-policies-for-secure-DNS.patch create mode 100644 bromite/build/patches/Improve-plain-text-rendering-on-mobile.patch create mode 100644 bromite/build/patches/Increase-number-of-autocomplete-matches-to-10.patch create mode 100644 bromite/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch create mode 100644 bromite/build/patches/Invalidate-components-public-key.patch create mode 100644 bromite/build/patches/JIT-site-settings.patch create mode 100644 bromite/build/patches/Keep-empty-tabs-between-sessions.patch create mode 100644 bromite/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch create mode 100644 bromite/build/patches/Logcat-crash-reports-UI.patch create mode 100644 bromite/build/patches/Modify-default-preferences.patch create mode 100644 bromite/build/patches/Move-navigation-bar-to-bottom.patch create mode 100644 bromite/build/patches/Move-some-account-settings-back-to-privacy-settings.patch create mode 100644 bromite/build/patches/Multiple-fingerprinting-mitigations.patch create mode 100644 bromite/build/patches/Never-fetch-popular-sites.patch create mode 100644 bromite/build/patches/Never-use-HTTP-probes-for-connection-detection.patch create mode 100644 bromite/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch create mode 100644 bromite/build/patches/OpenSearch-miscellaneous.patch create mode 100644 bromite/build/patches/Override-Navigator-Language.patch create mode 100644 bromite/build/patches/Partition-Blink-memory-cache.patch create mode 100644 bromite/build/patches/Partition-blobs-by-top-frame-URL.patch create mode 100644 bromite/build/patches/Re-introduce-kWebAuthCable.patch create mode 100644 bromite/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch create mode 100644 bromite/build/patches/Re-introduce-override_build_timestamp.patch create mode 100644 bromite/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch create mode 100644 bromite/build/patches/Reintroduce-override_build_timestamp.patch create mode 100644 bromite/build/patches/Remove-EV-certificates.patch create mode 100644 bromite/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch create mode 100644 bromite/build/patches/Remove-SMS-integration.patch create mode 100644 bromite/build/patches/Remove-binary-blob-integrations.patch create mode 100644 bromite/build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch create mode 100644 bromite/build/patches/Remove-contextual-search-manager.patch create mode 100644 bromite/build/patches/Remove-help-menu-item.patch create mode 100644 bromite/build/patches/Remove-mremap-from-seccomp-baseline-policy.patch create mode 100644 bromite/build/patches/Remove-navigator.connection-info.patch create mode 100644 bromite/build/patches/Remove-preload-of-com.google.android.gms.fonts.patch create mode 100644 bromite/build/patches/Remove-price-shopping-commerce-integrations.patch create mode 100644 bromite/build/patches/Remove-segmentation-platform.patch create mode 100644 bromite/build/patches/Remove-signin-and-sync-integrations.patch create mode 100644 bromite/build/patches/Remove-voice-recognition-integration.patch create mode 100644 bromite/build/patches/Remove-weblayer-dependency-on-Play-Services.patch create mode 100644 bromite/build/patches/Remove-window-name-on-cross-origin-navigation.patch create mode 100644 bromite/build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch create mode 100644 bromite/build/patches/Restore-Search-Ready-Omnibox-flag.patch create mode 100644 bromite/build/patches/Restore-Simplified-NTP-launch.patch create mode 100644 bromite/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch create mode 100644 bromite/build/patches/Restore-classic-new-tab-page.patch create mode 100644 bromite/build/patches/Restore-offline-indicator-v2-flag.patch create mode 100644 bromite/build/patches/Revert-Delete-block-external-form-redirects.patch create mode 100644 bromite/build/patches/Revert-Permit-blocking-of-view-source.patch create mode 100644 bromite/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch create mode 100644 bromite/build/patches/Revert-flags-remove-num-raster-threads.patch create mode 100644 bromite/build/patches/Revert-removal-of-execution-context-address-space.patch create mode 100644 bromite/build/patches/Revert-the-removal-of-an-option-to-block-autoplay.patch create mode 100644 bromite/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch create mode 100644 bromite/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch create mode 100644 bromite/build/patches/Site-setting-for-images.patch create mode 100644 bromite/build/patches/Switch-to-fstack-protector-strong.patch create mode 100644 bromite/build/patches/Timezone-customization.patch create mode 100644 bromite/build/patches/Unexpire-tab-groups-flags.patch create mode 100644 bromite/build/patches/Update-i18n-zh_CN-support.patch create mode 100644 bromite/build/patches/Use-4-tile-rows-never-show-logo.patch create mode 100644 bromite/build/patches/Use-64-bit-WebView-processes.patch create mode 100644 bromite/build/patches/Use-dummy-DFM-installer.patch create mode 100644 bromite/build/patches/User-agent-customization.patch create mode 100644 bromite/build/patches/Welcome-screen.patch create mode 100644 bromite/build/patches/autofill-miscellaneous.patch create mode 100644 bromite/build/patches/build-remove-calling-untrusted-hooks.patch create mode 100644 bromite/build/patches/disable-AdsBlockedInfoBar.patch create mode 100644 bromite/build/patches/disable-WebView-variations-support.patch create mode 100644 bromite/build/patches/disable-appending-variations-header.patch create mode 100644 bromite/build/patches/disable-battery-status-updater.patch create mode 100644 bromite/build/patches/dns-send-IPv6-connectivity-probes-to-RIPE-DNS.patch create mode 100644 bromite/build/patches/do-not-add-suffix-to-package-name.patch create mode 100644 bromite/build/patches/do-not-hide-.orig-files.patch create mode 100644 bromite/build/patches/enable-ftrivial-auto-var-init-zero.patch create mode 100644 bromite/build/patches/exit-on-failure-of-inclusion.patch create mode 100644 bromite/build/patches/first_run-deactivate-autoupdate-globally.patch create mode 100644 bromite/build/patches/kill-Auth.patch create mode 100644 bromite/build/patches/kill-Location-fall-back-to-system.patch create mode 100644 bromite/build/patches/kill-Vision.patch create mode 100644 bromite/build/patches/mime_util-force-text-x-suse-ymp-to-be-downloaded.patch create mode 100644 bromite/build/patches/net-cert-increase-default-key-length.patch create mode 100644 bromite/build/patches/openH264-enable-ARM-ARM64-optimizations.patch create mode 100644 bromite/build/patches/prefs-always-prompt-for-download-directory.patch create mode 100644 bromite/build/patches/profile-resetter-disable-send-settings.patch create mode 100644 bromite/build/patches/sharing-hub-always-use-visible-URL.patch create mode 100644 bromite/build/patches/translate-disable-fetching-of-languages-from-server.patch create mode 100644 bromite/build/patches/ungoogled-chromium-Disable-Gaia.patch create mode 100644 bromite/build/patches/ungoogled-chromium-Disable-Network-Time-Tracker.patch create mode 100644 bromite/build/patches/ungoogled-chromium-Disable-intranet-detector.patch create mode 100644 bromite/build/patches/ungoogled-chromium-Disable-profile-avatar.patch create mode 100644 bromite/build/patches/ungoogled-chromium-Disable-translate-integration.patch create mode 100644 bromite/build/patches/ungoogled-chromium-Disable-untraceable-URLs.patch create mode 100644 bromite/build/patches/ungoogled-chromium-Disable-webRTC-log-uploader.patch create mode 100644 bromite/build/patches/ungoogled-chromium-no-special-hosts-domains.patch create mode 100644 bromite/build/patches/updater-disable-updater-pings.patch create mode 100644 bromite/build/patches/webRTC-do-not-expose-local-IP-addresses.patch create mode 100644 bromite/build/patches/webview-Hard-no-to-persistent-histograms.patch diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index dcc666f7..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,4 +0,0 @@ -# These are supported funding model platforms - -liberapay: csagan5 -custom: https://www.bromite.org/#donate diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 782bf25a..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -name: Bug report -about: Create a Bromite bug report - ---- - - - -### Bromite version - -Version: `89.0...` -Arch: `arm` or `arm64` or `x86` -Android version: (example: `9.0`) -Device model: (example: `SM-G960UZKABST`) - -### Flags - -These are the flags changed under `chrome://flags`: - - - -### Is this bug about the SystemWebView? - - - -Yes/No - -### Is the bug reproducible with latest version? - - - -Yes/No - -### Can the bug be reproduced with corresponding Chromium version? - - - -Yes/No - -### Is this bug happening in an incognito tab? -Yes/No - -### Allow ads for the site; is the bug caused by the adblocker? -Yes/No - -### Is the bug a crash? - -No - --- or -- - -Yes, this is the crash dump: -``` - -``` - -### Describe the bug - - - -### Steps to reproduce the bug - -Steps to reproduce the bug: -1. Go to '...' -2. Click on '...' -3. Scroll down to '...' -4. See error - -Do not write "any website", specify which URLs can be used to reproduce the issue. - -### Expected behavior - - - -### Screenshots - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 8540ae0a..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: Feature request -about: Suggest a privacy-related idea for this project - ---- - - - - - -### Is your feature request related to privacy? - - - -### Is there a patch available for this feature somewhere? - - - -### Describe the solution you would like - - - -### Describe alternatives you have considered - - diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 9293f69d..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "bromite"] - path = bromite - url = https://github.com/bromite/bromite/ diff --git a/bromite b/bromite deleted file mode 160000 index 6f40f834..00000000 --- a/bromite +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6f40f8341ab3fbcab458c10fe7b6bbcb8f881404 diff --git a/bromite/build/bromite_patches_list.txt b/bromite/build/bromite_patches_list.txt new file mode 100644 index 00000000..95deb1ec --- /dev/null +++ b/bromite/build/bromite_patches_list.txt @@ -0,0 +1,204 @@ +Remove-EV-certificates.patch +do-not-hide-.orig-files.patch +Do-not-link-with-libatomic.patch +do-not-add-suffix-to-package-name.patch +exit-on-failure-of-inclusion.patch +Disable-safe-browsing.patch +Remove-signin-and-sync-integrations.patch +Move-some-account-settings-back-to-privacy-settings.patch +Remove-contextual-search-manager.patch +kill-Vision.patch +kill-Location-fall-back-to-system.patch +kill-Auth.patch +Remove-binary-blob-integrations.patch +Remove-SMS-integration.patch +Remove-price-shopping-commerce-integrations.patch +Remove-voice-recognition-integration.patch +Do-not-compile-QR-code-sharing.patch +Timezone-customization.patch +Revert-the-removal-of-an-option-to-block-autoplay.patch +Add-support-for-ISupportHelpAndFeedback.patch +JIT-site-settings.patch +Site-setting-for-images.patch +Content-settings-infrastructure.patch +Add-webGL-site-setting.patch +Add-webRTC-site-settings.patch +Switch-to-fstack-protector-strong.patch +Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch +Bromite-package-name.patch +Restore-classic-new-tab-page.patch +Always-use-new-tab-page-for-default-home-page.patch +disable-battery-status-updater.patch +Battery-API-return-nothing.patch +updater-disable-updater-pings.patch +Disable-omission-of-URL-elements-in-Omnibox.patch +Modify-default-preferences.patch +Do-not-hide-component-extensions.patch +Do-not-store-passwords-by-default.patch +Disable-NTP-remote-suggestions-by-default.patch +Disable-references-to-fonts.googleapis.com.patch +webRTC-do-not-expose-local-IP-addresses.patch +Never-fetch-popular-sites.patch +ungoogled-chromium-Disable-webRTC-log-uploader.patch +ungoogled-chromium-Disable-untraceable-URLs.patch +ungoogled-chromium-Disable-translate-integration.patch +ungoogled-chromium-Disable-profile-avatar.patch +ungoogled-chromium-Disable-intranet-detector.patch +ungoogled-chromium-no-special-hosts-domains.patch +ungoogled-chromium-Disable-Gaia.patch +ungoogled-chromium-Disable-Network-Time-Tracker.patch +Disable-all-promo-dialogs.patch +Disable-update-scheduler.patch +Add-English-only-search-engine.patch +Add-DuckDuckGo-Lite-search-engine.patch +openH264-enable-ARM-ARM64-optimizations.patch +build-remove-calling-untrusted-hooks.patch +Inject-scripts-for-AMP-tracking-ads-and-video.patch +Allow-playing-audio-in-background.patch +Add-flag-to-control-video-playback-resume-feature.patch +Add-exit-menu-item.patch +Remove-help-menu-item.patch +AudioBuffer-AnalyserNode-fp-mitigations.patch +Multiple-fingerprinting-mitigations.patch +Add-flag-to-configure-maximum-connections-per-host.patch +Do-not-ignore-download-location-prompt-setting.patch +Add-support-for-writing-URIs.patch +Add-bookmark-import-export-actions.patch +Bookmarks-select-all-menu-entry.patch +Add-an-always-incognito-mode.patch +Keep-flag-to-allow-screenshots-in-Incognito-mode.patch +Add-option-to-not-persist-tabs-across-sessions.patch +Add-a-proxy-configuration-page.patch +Add-custom-tab-intents-privacy-option.patch +Disable-FLoC-and-privacy-sandbox.patch +History-number-of-days-privacy-setting.patch +Disable-fetching-of-all-field-trials.patch +Disable-plugins-enumeration.patch +net-cert-increase-default-key-length.patch +dns-send-IPv6-connectivity-probes-to-RIPE-DNS.patch +Add-flag-to-disable-IPv6-probes.patch +profile-resetter-disable-send-settings.patch +Do-not-build-API-keys-infobar.patch +autofill-miscellaneous.patch +Enable-native-Android-autofill.patch +first_run-deactivate-autoupdate-globally.patch +translate-disable-fetching-of-languages-from-server.patch +Offer-builtin-autocomplete-for-chrome-flags.patch +Use-4-tile-rows-never-show-logo.patch +Disable-various-metrics.patch +Enable-SPPI-for-devices-with-enough-memory.patch +Enable-StrictOriginIsolation-and-SitePerProcess.patch +Use-64-bit-WebView-processes.patch +prefs-always-prompt-for-download-directory.patch +Disable-offline-pages-in-CCT.patch +Disable-media-router-and-remoting-by-default.patch +Restore-Search-Ready-Omnibox-flag.patch +disable-AdsBlockedInfoBar.patch +Bromite-subresource-adblocker.patch +Bromite-auto-updater.patch +Replace-DoH-probe-domain-with-RIPE-domain.patch +Increase-number-of-autocomplete-matches-to-10.patch +Disable-requests-for-single-word-Omnibar-searches.patch +Disable-some-signed-exchange-features.patch +DoH-improvements.patch +Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch +Revert-flags-remove-disable-pull-to-refresh-effect.patch +Use-dummy-DFM-installer.patch +Disable-feeds-support-by-default.patch +Show-site-settings-for-cookies-javascript-and-ads.patch +Disable-DRM-media-origin-IDs-preprovisioning.patch +Disable-smart-selection-by-default.patch +Guard-for-user-agent-reduction.patch +AImageReader-CFI-crash-mitigations.patch +Add-menu-item-to-view-source.patch +Revert-removal-of-execution-context-address-space.patch +Block-gateway-attacks-via-websockets.patch +Enable-prefetch-privacy-changes-by-default.patch +Disable-support-for-RAR-files-inspection.patch +Enable-darken-websites-checkbox-in-themes.patch +Remove-blocklisted-URLs-upon-bookmark-creation.patch +Disable-the-DIAL-repeating-discovery.patch +Block-qjz9zk-or-trk-requests.patch +Hardening-against-incognito-mode-detection.patch +Remove-weblayer-dependency-on-Play-Services.patch +Restore-Simplified-NTP-launch.patch +Add-option-to-use-home-page-as-NTP.patch +Disable-text-fragments-by-default.patch +disable-WebView-variations-support.patch +Enable-network-isolation-features.patch +Revert-flags-remove-num-raster-threads.patch +webview-Hard-no-to-persistent-histograms.patch +Ignore-enterprise-policies-for-secure-DNS.patch +Add-menu-item-to-bookmark-all-tabs.patch +Re-introduce-modal-dialog-flag-to-close-all-tabs.patch +Add-option-to-force-tablet-UI.patch +Add-Alt-D-hotkey-to-focus-address-bar.patch +User-agent-customization.patch +Add-AllowUserCertificates-flag.patch +Add-IsCleartextPermitted-flag.patch +Unexpire-tab-groups-flags.patch +Add-flag-for-omnibox-autocomplete-filtering.patch +Revert-Delete-block-external-form-redirects.patch +Add-flag-to-disable-external-intent-requests.patch +Enable-share-intent.patch +Logcat-crash-reports-UI.patch +Add-flag-to-disable-vibration.patch +mime_util-force-text-x-suse-ymp-to-be-downloaded.patch +Client-hints-overrides.patch +Disable-AGSA-by-default.patch +Allow-building-without-enable_reporting.patch +Disable-lock-icon-in-address-bar-by-default.patch +Experimental-user-scripts-support.patch +Keep-empty-tabs-between-sessions.patch +Disable-third-party-origin-trials.patch +Never-use-HTTP-probes-for-connection-detection.patch +Disable-Accessibility-service-by-default.patch +Disable-conversion-measurement-api.patch +Restore-offline-indicator-v2-flag.patch +Re-introduce-override_build_timestamp.patch +enable-ftrivial-auto-var-init-zero.patch +disable-appending-variations-header.patch +Disable-idle-detection.patch +Allow-building-without-supervised-users.patch +Disable-minidump-upload-scheduling.patch +Revert-Permit-blocking-of-view-source.patch +Disable-safety-check.patch +Disable-all-predictors-code.patch +OpenSearch-miscellaneous.patch +Update-i18n-zh_CN-support.patch +Add-flag-for-save-data-header.patch +Disable-UA-full-version.patch +Dictionary-suggestions-for-the-Omnibox.patch +Disable-AsyncDNS-by-default.patch +Add-lifetime-options-for-permissions.patch +Disable-crash-reporting.patch +Samsung-Note-9-SDK27-crazylinker-workaround.patch +Disable-TLS-resumption.patch +Remove-mremap-from-seccomp-baseline-policy.patch +Move-navigation-bar-to-bottom.patch +Welcome-screen.patch +Add-site-engagement-flag.patch +Enable-Certificate-Transparency.patch +Invalidate-components-public-key.patch +Improve-plain-text-rendering-on-mobile.patch +Remove-segmentation-platform.patch +Follow-only-system-dark-mode.patch +Remove-window-name-on-cross-origin-navigation.patch +Remove-preload-of-com.google.android.gms.fonts.patch +Partition-Blink-memory-cache.patch +Remove-navigator.connection-info.patch +Disable-PrivacyGuide.patch +sharing-hub-always-use-visible-URL.patch +Re-introduce-kWebAuthCable.patch +Enable-HEVC-by-default.patch +Partition-blobs-by-top-frame-URL.patch +Override-Navigator-Language.patch +Disable-add-to-home-screen-prompt.patch +Remove-HTTP-referrals-in-cross-origin-navigation.patch +Enable-ECH-by-default.patch +Disable-StartSurface-feature.patch +Clamp-time-resolution-in-requestAnimationFrame.patch +Enable-PermuteTLSExtensions-by-default.patch +Enable-third-party-storage-partitioning.patch +Restore-adaptive-button-in-top-toolbar-customization.patch +Automated-domain-substitution.patch diff --git a/bromite/build/patches/AImageReader-CFI-crash-mitigations.patch b/bromite/build/patches/AImageReader-CFI-crash-mitigations.patch new file mode 100644 index 00000000..e60d7ba1 --- /dev/null +++ b/bromite/build/patches/AImageReader-CFI-crash-mitigations.patch @@ -0,0 +1,258 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 5 May 2020 07:22:20 +0200 +Subject: AImageReader CFI crash mitigations + +Revert "gpu/android: Remove setup for disabling AImageReader." +This reverts commit dcd5a39518246eb999f1cc63bf1ec95d93fd5b2f. + +Revert "Remove flags to enable/disable AImageReader." +This reverts commit 463fa0f2e3b9e418bc26e2c8954463f0b0f76634. + +Restore GPU bug blacklist for AImageReader on ARM and Qualcomm CPUs + +Restore the AImageReader blacklist for ARM/Qualcomm chipsets which causes +crashes on Android 9 and 10 (at different code locations). + +See discussions at: +* https://github.com/bromite/bromite/issues/445 +* https://github.com/bromite/bromite/issues/814 +* https://github.com/bromite/bromite/issues/1005 + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + base/android/android_image_reader_compat.cc | 8 +++++++- + base/android/android_image_reader_compat.h | 4 ++++ + chrome/browser/flag-metadata.json | 6 +++--- + gpu/config/gpu_driver_bug_list.json | 16 ++++++++++++++++ + gpu/config/gpu_finch_features.cc | 5 +++++ + gpu/config/gpu_finch_features.h | 1 + + gpu/config/gpu_util.cc | 8 ++++++++ + gpu/config/gpu_workaround_list.txt | 1 + + gpu/ipc/service/gpu_init.cc | 5 +++++ + gpu/ipc/service/stream_texture_android.cc | 11 ++++++++++- + media/base/media_switches.cc | 5 +++++ + media/base/media_switches.h | 1 + + 12 files changed, 66 insertions(+), 5 deletions(-) + +diff --git a/base/android/android_image_reader_compat.cc b/base/android/android_image_reader_compat.cc +--- a/base/android/android_image_reader_compat.cc ++++ b/base/android/android_image_reader_compat.cc +@@ -23,6 +23,8 @@ + namespace base { + namespace android { + ++bool AndroidImageReader::disable_support_ = false; ++ + AndroidImageReader& AndroidImageReader::GetInstance() { + // C++11 static local variable initialization is + // thread-safe. +@@ -30,8 +32,12 @@ AndroidImageReader& AndroidImageReader::GetInstance() { + return instance; + } + ++void AndroidImageReader::DisableSupport() { ++ disable_support_ = true; ++} ++ + bool AndroidImageReader::IsSupported() { +- return is_supported_; ++ return !disable_support_ && is_supported_; + } + + AndroidImageReader::AndroidImageReader() : is_supported_(LoadFunctions()) {} +diff --git a/base/android/android_image_reader_compat.h b/base/android/android_image_reader_compat.h +--- a/base/android/android_image_reader_compat.h ++++ b/base/android/android_image_reader_compat.h +@@ -24,6 +24,9 @@ class BASE_EXPORT AndroidImageReader { + AndroidImageReader(const AndroidImageReader&) = delete; + AndroidImageReader& operator=(const AndroidImageReader&) = delete; + ++ // Disable image reader support. ++ static void DisableSupport(); ++ + // Check if the image reader usage is supported. This function returns TRUE + // if android version is >=OREO, image reader support is not disabled and all + // the required functions are loaded. +@@ -61,6 +64,7 @@ class BASE_EXPORT AndroidImageReader { + jobject ANativeWindow_toSurface(JNIEnv* env, ANativeWindow* window); + + private: ++ static bool disable_support_; + friend class base::NoDestructor; + + AndroidImageReader(); +diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json +--- a/chrome/browser/flag-metadata.json ++++ b/chrome/browser/flag-metadata.json +@@ -2501,9 +2501,9 @@ + "expiry_milestone": 115 + }, + { +- "name": "enable-image-reader", +- "owners": [ "vikassoni", "liberato" ], +- "expiry_milestone": 115 ++ "name": "enable-image-reader", // Bromite: do not expire ++ "owners": [ "vikassoni", "liberato" ], // flag ++ "expiry_milestone": -1 + }, + { + "name": "enable-immersive-fullscreen-toolbar", +diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json +--- a/gpu/config/gpu_driver_bug_list.json ++++ b/gpu/config/gpu_driver_bug_list.json +@@ -3199,6 +3199,22 @@ + "dont_delete_source_texture_for_egl_image" + ] + }, ++ { ++ "id":335, ++ "cr_bugs": [1051705], ++ "description": "Disable AImageReader on ARM GPUs", ++ "os": { ++ "type": "android", ++ "version": { ++ "op": "<", ++ "value": "10" ++ } ++ }, ++ "gl_vendor": "ARM.*|Qualcomm.*", ++ "features": [ ++ "disable_aimagereader" ++ ] ++ }, + { + "id": 336, + "cr_bugs": [625785], +diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc +--- a/gpu/config/gpu_finch_features.cc ++++ b/gpu/config/gpu_finch_features.cc +@@ -64,6 +64,11 @@ BASE_FEATURE(kUseGles2ForOopR, + #endif + ); + ++ ++// Use android AImageReader when playing videos with MediaPlayer. ++const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer", ++ base::FEATURE_ENABLED_BY_DEFAULT}; ++ + #if BUILDFLAG(IS_ANDROID) + // Use android SurfaceControl API for managing display compositor's buffer queue + // and using overlays on Android. Also used by webview to disable surface +diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h +--- a/gpu/config/gpu_finch_features.h ++++ b/gpu/config/gpu_finch_features.h +@@ -17,6 +17,7 @@ namespace features { + GPU_EXPORT BASE_DECLARE_FEATURE(kUseGles2ForOopR); + + // All features in alphabetical order. The features should be documented ++GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer; + // alongside the definition of their values in the .cc file. + #if BUILDFLAG(IS_ANDROID) + GPU_EXPORT BASE_DECLARE_FEATURE(kAndroidSurfaceControl); +diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc +--- a/gpu/config/gpu_util.cc ++++ b/gpu/config/gpu_util.cc +@@ -121,6 +121,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus( + #if !BUILDFLAG(IS_ANDROID) + return kGpuFeatureStatusDisabled; + #else ++ if (blocklisted_features.count(GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL)) ++ return kGpuFeatureStatusBlocklisted; ++ + if (!gpu_preferences.enable_android_surface_control) + return kGpuFeatureStatusDisabled; + +@@ -344,6 +347,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) { + gpu_feature_info->status_values[GPU_FEATURE_TYPE_CANVAS_OOP_RASTERIZATION] = + kGpuFeatureStatusBlocklisted; + } ++ ++ if (gpu_feature_info->IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { ++ gpu_feature_info->status_values[GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL] = ++ kGpuFeatureStatusBlocklisted; ++ } + } + + // Estimates roughly user total disk space by counting in the drives where +diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt +--- a/gpu/config/gpu_workaround_list.txt ++++ b/gpu/config/gpu_workaround_list.txt +@@ -15,6 +15,7 @@ decode_encode_srgb_for_generatemipmap + depth_stencil_renderbuffer_resize_emulation + disable_2d_canvas_auto_flush + disable_accelerated_av1_decode ++disable_aimagereader + disable_accelerated_av1_encode + disable_accelerated_h264_encode + disable_accelerated_hevc_decode +diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc +--- a/gpu/ipc/service/gpu_init.cc ++++ b/gpu/ipc/service/gpu_init.cc +@@ -626,6 +626,11 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line, + } + #endif // BUILDFLAG(IS_WIN) + ++ // Disable AImageReader if the workaround is enabled. ++ if (gpu_feature_info_.IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) { ++ base::android::AndroidImageReader::DisableSupport(); ++ } ++ + if (gpu_feature_info_.status_values[GPU_FEATURE_TYPE_VULKAN] != + kGpuFeatureStatusEnabled || + !InitializeVulkan()) { +diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_texture_android.cc +--- a/gpu/ipc/service/stream_texture_android.cc ++++ b/gpu/ipc/service/stream_texture_android.cc +@@ -6,6 +6,7 @@ + + #include + ++#include "base/android/android_image_reader_compat.h" + #include "base/android/scoped_hardware_buffer_fence_sync.h" + #include "base/bind.h" + #include "base/feature_list.h" +@@ -51,7 +52,15 @@ std::unique_ptr MakeCurrent( + } + + TextureOwner::Mode GetTextureOwnerMode() { +- return features::IsAImageReaderEnabled() ++ const bool a_image_reader_supported = ++ base::android::AndroidImageReader::GetInstance().IsSupported(); ++ ++ // TODO(vikassoni) : Currently we have 2 different flags to enable/disable ++ // AImageReader - one for MCVD and other for MediaPlayer here. Merge those 2 ++ // flags into a single flag. Keeping the 2 flags separate for now since finch ++ // experiment using this flag is in progress. ++ return a_image_reader_supported && features::IsAImageReaderEnabled() && ++ base::FeatureList::IsEnabled(features::kAImageReaderMediaPlayer) + ? TextureOwner::Mode::kAImageReaderInsecure + : TextureOwner::Mode::kSurfaceTextureInsecure; + } +diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc +--- a/media/base/media_switches.cc ++++ b/media/base/media_switches.cc +@@ -750,6 +750,11 @@ BASE_FEATURE(kHardwareSecureDecryptionExperiment, + // Allows automatically disabling hardware secure Content Decryption Module + // (CDM) after failures or crashes to fallback to software secure CDMs. If this + // feature is disabled, the fallback will never happen and users could be stuck ++// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD) ++BASE_FEATURE(kAImageReaderVideoOutput, ++ "AImageReaderVideoOutput", ++ base::FEATURE_ENABLED_BY_DEFAULT); ++ + // in playback failures. + BASE_FEATURE(kHardwareSecureDecryptionFallback, + "HardwareSecureDecryptionFallback", +diff --git a/media/base/media_switches.h b/media/base/media_switches.h +--- a/media/base/media_switches.h ++++ b/media/base/media_switches.h +@@ -232,6 +232,7 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kVaapiVp8TemporalLayerHWEncoding); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kVaapiVp9kSVCHWEncoding); + #endif // defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS) + MEDIA_EXPORT BASE_DECLARE_FEATURE(kVideoBlitColorAccuracy); ++MEDIA_EXPORT BASE_DECLARE_FEATURE(kAImageReaderVideoOutput); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kVp9kSVCHWDecoding); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kWakeLockOptimisationHiddenMuted); + MEDIA_EXPORT BASE_DECLARE_FEATURE(kWebContentsCaptureHiDpi); +-- +2.25.1 diff --git a/bromite/build/patches/Add-AllowUserCertificates-flag.patch b/bromite/build/patches/Add-AllowUserCertificates-flag.patch new file mode 100644 index 00000000..92a873d2 --- /dev/null +++ b/bromite/build/patches/Add-AllowUserCertificates-flag.patch @@ -0,0 +1,180 @@ +From: uazo +Date: Mon, 26 Apr 2021 13:28:24 +0000 +Subject: Add AllowUserCertificates flag + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../src/org/chromium/chrome/browser/app/ChromeActivity.java | 3 +++ + .../chromium/chrome/browser/app/flags/ChromeCachedFlags.java | 1 + + chrome/browser/about_flags.cc | 4 ++++ + chrome/browser/flag_descriptions.cc | 5 +++++ + chrome/browser/flag_descriptions.h | 3 +++ + chrome/browser/flags/android/chrome_feature_list.cc | 5 +++++ + chrome/browser/flags/android/chrome_feature_list.h | 1 + + .../chromium/chrome/browser/flags/CachedFeatureFlags.java | 1 + + .../org/chromium/chrome/browser/flags/ChromeFeatureList.java | 3 +++ + net/android/java/src/org/chromium/net/X509Util.java | 5 +++++ + 10 files changed, 31 insertions(+) + +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 +@@ -226,6 +226,7 @@ import org.chromium.content_public.browser.ScreenOrientationProvider; + import org.chromium.content_public.browser.SelectionPopupController; + import org.chromium.content_public.browser.WebContents; + import org.chromium.content_public.common.ContentSwitches; ++import org.chromium.net.X509Util; + import org.chromium.printing.PrintManagerDelegateImpl; + import org.chromium.printing.PrintingController; + import org.chromium.printing.PrintingControllerImpl; +@@ -951,6 +952,8 @@ public abstract class ChromeActivity + UpdateMenuItemHelper.getInstance().onStart(); + ChromeActivitySessionTracker.getInstance().onStartWithNative(); + ChromeCachedFlags.getInstance().cacheNativeFlags(); ++ X509Util.AllowUserCertificates = ChromeFeatureList.isEnabled( ++ ChromeFeatureList.ALLOW_USER_CERTIFICATES); + OfflineIndicatorController.initialize(); + + // postDeferredStartupIfNeeded() is called in TabModelSelectorTabObsever#onLoadStopped(), +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java +@@ -78,6 +78,7 @@ public class ChromeCachedFlags { + add(ChromeFeatureList.sAndroidAuxiliarySearch); + add(ChromeFeatureList.sAnonymousUpdateChecks); + add(ChromeFeatureList.sAppMenuMobileSiteOption); ++ add(ChromeFeatureList.sAllowUserCertificates); + add(ChromeFeatureList.sBackGestureRefactorAndroid); + add(ChromeFeatureList.sCctBrandTransparency); + add(ChromeFeatureList.sCctIncognito); +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -8830,6 +8830,10 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(features::kWin10TabSearchCaptionButton)}, + #endif // BUILDFLAG(IS_WIN) + ++ {"allow-user-certificates", ++ flag_descriptions::kAllowUserCertificatesName, ++ flag_descriptions::kAllowUserCertificatesDescription, kOsAndroid, ++ FEATURE_VALUE_TYPE(chrome::android::kAllowUserCertificates)}, + {"omnibox-updated-connection-security-indicators", + flag_descriptions::kOmniboxUpdatedConnectionSecurityIndicatorsName, + flag_descriptions::kOmniboxUpdatedConnectionSecurityIndicatorsDescription, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -13,6 +13,11 @@ + + namespace flag_descriptions { + ++const char kAllowUserCertificatesName[] = "Allow user certificates"; ++const char kAllowUserCertificatesDescription[] = ++ "Allow user CA certificates during " ++ "validation of the certificate chain"; ++ + const char kAccelerated2dCanvasName[] = "Accelerated 2D canvas"; + const char kAccelerated2dCanvasDescription[] = + "Enables the use of the GPU to perform 2d canvas rendering instead of " +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -40,6 +40,9 @@ namespace flag_descriptions { + + // Cross-platform ------------------------------------------------------------- + ++extern const char kAllowUserCertificatesName[]; ++extern const char kAllowUserCertificatesDescription[]; ++ + extern const char kAccelerated2dCanvasName[]; + extern const char kAccelerated2dCanvasDescription[]; + +diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc +--- a/chrome/browser/flags/android/chrome_feature_list.cc ++++ b/chrome/browser/flags/android/chrome_feature_list.cc +@@ -148,6 +148,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &feed::kFeedNoViewCache, + &feed::kFeedReplaceAll, + &feed::kInterestFeedContentSuggestions, ++ &kAllowUserCertificates, + &feed::kInterestFeedV1ClicksAndViewsConditionalUpload, + &feed::kInterestFeedV2, + &feed::kInterestFeedV2Autoplay, +@@ -468,6 +469,10 @@ BASE_FEATURE(kAllowNewIncognitoTabIntents, + "AllowNewIncognitoTabIntents", + base::FEATURE_ENABLED_BY_DEFAULT); + ++BASE_FEATURE(kAllowUserCertificates, ++ "AllowUserCertificates", ++ base::FEATURE_DISABLED_BY_DEFAULT); ++ + BASE_FEATURE(kFocusOmniboxInIncognitoTabIntents, + "FocusOmniboxInIncognitoTabIntents", + base::FEATURE_ENABLED_BY_DEFAULT); +diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h +--- a/chrome/browser/flags/android/chrome_feature_list.h ++++ b/chrome/browser/flags/android/chrome_feature_list.h +@@ -17,6 +17,7 @@ BASE_DECLARE_FEATURE(kAdaptiveButtonInTopToolbar); + BASE_DECLARE_FEATURE(kAdaptiveButtonInTopToolbarCustomizationV2); + BASE_DECLARE_FEATURE(kAddToHomescreenIPH); + BASE_DECLARE_FEATURE(kAllowNewIncognitoTabIntents); ++BASE_DECLARE_FEATURE(kAllowUserCertificates); + BASE_DECLARE_FEATURE(kAndroidScrollOptimizations); + BASE_DECLARE_FEATURE(kAndroidSearchEngineChoiceNotification); + BASE_DECLARE_FEATURE(kAssistantConsentModal); +diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java +--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java ++++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java +@@ -50,6 +50,7 @@ public class CachedFeatureFlags { + ImmutableMap.builder() + .put(ChromeFeatureList.ANONYMOUS_UPDATE_CHECKS, true) + .put(ChromeFeatureList.APP_MENU_MOBILE_SITE_OPTION, false) ++ .put(ChromeFeatureList.ALLOW_USER_CERTIFICATES, false) + .put(ChromeFeatureList.BACK_GESTURE_REFACTOR, false) + .put(ChromeFeatureList.CCT_BRAND_TRANSPARENCY, false) + .put(ChromeFeatureList.CCT_INCOGNITO, true) +diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java ++++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +@@ -193,6 +193,7 @@ public abstract class ChromeFeatureList { + } + + /* Alphabetical: */ ++ public static final String ALLOW_USER_CERTIFICATES = "AllowUserCertificates"; + public static final String ABOUT_THIS_SITE_BANNER = "AboutThisSiteBanner"; + public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR = "AdaptiveButtonInTopToolbar"; + public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2 = +@@ -648,6 +649,8 @@ public abstract class ChromeFeatureList { + public static final String FEED_REPLACE_ALL = "FeedReplaceAll"; + + /* Alphabetical: */ ++ public static final CachedFlag sAllowUserCertificates = ++ new CachedFlag(ALLOW_USER_CERTIFICATES, false); + public static final CachedFlag sAndroidAuxiliarySearch = + new CachedFlag(OMNIBOX_ANDROID_AUXILIARY_SEARCH, false); + public static final CachedFlag sAnonymousUpdateChecks = +diff --git a/net/android/java/src/org/chromium/net/X509Util.java b/net/android/java/src/org/chromium/net/X509Util.java +--- a/net/android/java/src/org/chromium/net/X509Util.java ++++ b/net/android/java/src/org/chromium/net/X509Util.java +@@ -437,6 +437,8 @@ public class X509Util { + return false; + } + ++ public static boolean AllowUserCertificates = false; ++ + public static AndroidCertVerifyResult verifyServerCertificates(byte[][] certChain, + String authType, + String host) +@@ -517,6 +519,9 @@ public class X509Util { + isIssuedByKnownRoot = isKnownRoot(root); + } + ++ if (AllowUserCertificates == false && isIssuedByKnownRoot == false) ++ return new AndroidCertVerifyResult(CertVerifyStatusAndroid.NO_TRUSTED_ROOT); ++ + return new AndroidCertVerifyResult(CertVerifyStatusAndroid.OK, + isIssuedByKnownRoot, verifiedChain); + } +-- +2.25.1 diff --git a/bromite/build/patches/Add-Alt-D-hotkey-to-focus-address-bar.patch b/bromite/build/patches/Add-Alt-D-hotkey-to-focus-address-bar.patch new file mode 100644 index 00000000..34e2dfec --- /dev/null +++ b/bromite/build/patches/Add-Alt-D-hotkey-to-focus-address-bar.patch @@ -0,0 +1,23 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 9 Mar 2021 19:43:00 +0100 +Subject: Add Alt+D hotkey to focus address bar + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../java/src/org/chromium/chrome/browser/KeyboardShortcuts.java | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/KeyboardShortcuts.java +@@ -155,6 +155,8 @@ public class KeyboardShortcuts { + KeyEvent.KEYCODE_F, KeyEvent.META_CTRL_ON); + addShortcut(context, chromeFeatureShortcutGroup, R.string.keyboard_shortcut_address_bar, + KeyEvent.KEYCODE_L, KeyEvent.META_CTRL_ON); ++ addShortcut(context, chromeFeatureShortcutGroup, R.string.keyboard_shortcut_address_bar, ++ KeyEvent.KEYCODE_D, KeyEvent.META_ALT_ON); + shortcutGroups.add(chromeFeatureShortcutGroup); + + KeyboardShortcutGroup webpageShortcutGroup = new KeyboardShortcutGroup( +-- +2.25.1 diff --git a/bromite/build/patches/Add-DuckDuckGo-Lite-search-engine.patch b/bromite/build/patches/Add-DuckDuckGo-Lite-search-engine.patch new file mode 100644 index 00000000..ccfef6ed --- /dev/null +++ b/bromite/build/patches/Add-DuckDuckGo-Lite-search-engine.patch @@ -0,0 +1,954 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Thu, 12 Oct 2017 11:06:18 +0200 +Subject: Add DuckDuckGo Lite search engine + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../search_engines/prepopulated_engines.json | 10 + + .../search_engines/search_engine_type.h | 1 + + .../template_url_prepopulate_data.cc | 202 +++++++++--------- + 3 files changed, 112 insertions(+), 101 deletions(-) + +diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json +--- a/components/search_engines/prepopulated_engines.json ++++ b/components/search_engines/prepopulated_engines.json +@@ -102,6 +102,16 @@ + "id": 92 + }, + ++ "duckduckgo_light": { ++ "name": "DuckDuckGo Light", ++ "keyword": "duckduckgo.com/lite", ++ "favicon_url": "https://duckduckgo.com/favicon.ico", ++ "search_url": "https://duckduckgo.com/lite/?q={searchTerms}", ++ "suggest_url": "https://duckduckgo.com/ac/?q={searchTerms}&type=list", ++ "type": "SEARCH_ENGINE_DUCKDUCKGOLIGHT", ++ "id": 12 ++ }, ++ + "ecosia": { + "name": "Ecosia", + "keyword": "ecosia.org", +diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h +--- a/components/search_engines/search_engine_type.h ++++ b/components/search_engines/search_engine_type.h +@@ -79,6 +79,7 @@ enum SearchEngineType { + SEARCH_ENGINE_STARTER_PACK_HISTORY = 62, + SEARCH_ENGINE_STARTER_PACK_TABS = 63, + SEARCH_ENGINE_GOOGLE_EN = 64, ++ SEARCH_ENGINE_DUCKDUCKGOLIGHT = 65, + + SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. + }; +diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc +--- a/components/search_engines/template_url_prepopulate_data.cc ++++ b/components/search_engines/template_url_prepopulate_data.cc +@@ -42,7 +42,7 @@ const PrepopulatedEngine* const engines_AE[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -51,7 +51,7 @@ const PrepopulatedEngine* const engines_AL[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -60,7 +60,7 @@ const PrepopulatedEngine* const engines_AR[] = { + &googleen, &google, + &bing, + &yahoo_ar, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -68,7 +68,7 @@ const PrepopulatedEngine* const engines_AR[] = { + const PrepopulatedEngine* const engines_AT[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo_at, + &ecosia, + }; +@@ -78,7 +78,7 @@ const PrepopulatedEngine* const engines_AU[] = { + &googleen, &google, + &bing, + &yahoo_au, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -87,7 +87,7 @@ const PrepopulatedEngine* const engines_BA[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -97,7 +97,7 @@ const PrepopulatedEngine* const engines_BE[] = { + &bing, + &yahoo, + &ecosia, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Bulgaria +@@ -105,7 +105,7 @@ const PrepopulatedEngine* const engines_BG[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -114,7 +114,7 @@ const PrepopulatedEngine* const engines_BH[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -123,7 +123,7 @@ const PrepopulatedEngine* const engines_BI[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -132,7 +132,7 @@ const PrepopulatedEngine* const engines_BN[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -141,7 +141,7 @@ const PrepopulatedEngine* const engines_BO[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -150,7 +150,7 @@ const PrepopulatedEngine* const engines_BR[] = { + &googleen, &google, + &bing, + &yahoo_br, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -160,7 +160,7 @@ const PrepopulatedEngine* const engines_BY[] = { + &yandex_by, + &mail_ru, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Belize +@@ -168,7 +168,7 @@ const PrepopulatedEngine* const engines_BZ[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -177,7 +177,7 @@ const PrepopulatedEngine* const engines_CA[] = { + &googleen, &google, + &bing, + &yahoo_ca, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -185,7 +185,7 @@ const PrepopulatedEngine* const engines_CA[] = { + const PrepopulatedEngine* const engines_CH[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + &yahoo_ch, + }; +@@ -195,7 +195,7 @@ const PrepopulatedEngine* const engines_CL[] = { + &googleen, &google, + &bing, + &yahoo_cl, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -214,7 +214,7 @@ const PrepopulatedEngine* const engines_CO[] = { + &bing, + &yahoo_co, + &ecosia, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Costa Rica +@@ -222,7 +222,7 @@ const PrepopulatedEngine* const engines_CR[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -232,7 +232,7 @@ const PrepopulatedEngine* const engines_CZ[] = { + &seznam_cz, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Germany +@@ -240,7 +240,7 @@ const PrepopulatedEngine* const engines_DE[] = { + &googleen, &google, + &bing, + &ecosia, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo_de, + }; + +@@ -249,7 +249,7 @@ const PrepopulatedEngine* const engines_DK[] = { + &googleen, &google, + &bing, + &yahoo_dk, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -258,7 +258,7 @@ const PrepopulatedEngine* const engines_DO[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -268,7 +268,7 @@ const PrepopulatedEngine* const engines_DZ[] = { + &bing, + &yahoo_fr, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Ecuador +@@ -277,7 +277,7 @@ const PrepopulatedEngine* const engines_EC[] = { + &bing, + &yahoo, + &ecosia, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Estonia +@@ -285,7 +285,7 @@ const PrepopulatedEngine* const engines_EE[] = { + &googleen, &google, + &bing, + &yandex_ru, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo, + }; + +@@ -295,7 +295,7 @@ const PrepopulatedEngine* const engines_EG[] = { + &bing, + &yahoo, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Spain +@@ -303,7 +303,7 @@ const PrepopulatedEngine* const engines_ES[] = { + &googleen, &google, + &bing, + &yahoo_es, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -312,7 +312,7 @@ const PrepopulatedEngine* const engines_FI[] = { + &googleen, &google, + &bing, + &yahoo_fi, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -321,7 +321,7 @@ const PrepopulatedEngine* const engines_FO[] = { + &googleen, &google, + &bing, + &yahoo_dk, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -339,7 +339,7 @@ const PrepopulatedEngine* const engines_GB[] = { + &googleen, &google, + &bing, + &yahoo_uk, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -348,7 +348,7 @@ const PrepopulatedEngine* const engines_GR[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -357,7 +357,7 @@ const PrepopulatedEngine* const engines_GT[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -367,7 +367,7 @@ const PrepopulatedEngine* const engines_HK[] = { + &yahoo_hk, + &bing, + &baidu, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Honduras +@@ -375,7 +375,7 @@ const PrepopulatedEngine* const engines_HN[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -384,7 +384,7 @@ const PrepopulatedEngine* const engines_HR[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -393,7 +393,7 @@ const PrepopulatedEngine* const engines_HU[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -403,7 +403,7 @@ const PrepopulatedEngine* const engines_ID[] = { + &yahoo_id, + &bing, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Ireland +@@ -411,7 +411,7 @@ const PrepopulatedEngine* const engines_IE[] = { + &googleen, &google, + &bing, + &yahoo_uk, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -421,7 +421,7 @@ const PrepopulatedEngine* const engines_IL[] = { + &bing, + &yandex_ru, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // India +@@ -429,7 +429,7 @@ const PrepopulatedEngine* const engines_IN[] = { + &googleen, &google, + &bing, + &yahoo_in, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &info_com, + }; + +@@ -439,7 +439,7 @@ const PrepopulatedEngine* const engines_IQ[] = { + &bing, + &yahoo, + &yandex_tr, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Iran +@@ -448,14 +448,14 @@ const PrepopulatedEngine* const engines_IR[] = { + &bing, + &yahoo, + &ask, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Iceland + const PrepopulatedEngine* const engines_IS[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo, + &ecosia, + }; +@@ -465,7 +465,7 @@ const PrepopulatedEngine* const engines_IT[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -474,7 +474,7 @@ const PrepopulatedEngine* const engines_JM[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -483,7 +483,7 @@ const PrepopulatedEngine* const engines_JO[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -492,7 +492,7 @@ const PrepopulatedEngine* const engines_JP[] = { + &googleen, &google, + &yahoo_jp, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &baidu, + }; + +@@ -501,7 +501,7 @@ const PrepopulatedEngine* const engines_KE[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -519,7 +519,7 @@ const PrepopulatedEngine* const engines_KW[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -529,7 +529,7 @@ const PrepopulatedEngine* const engines_KZ[] = { + &yandex_kz, + &mail_ru, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Lebanon +@@ -537,7 +537,7 @@ const PrepopulatedEngine* const engines_LB[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -545,7 +545,7 @@ const PrepopulatedEngine* const engines_LB[] = { + const PrepopulatedEngine* const engines_LI[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo, + &ecosia, + }; +@@ -555,7 +555,7 @@ const PrepopulatedEngine* const engines_LT[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -563,7 +563,7 @@ const PrepopulatedEngine* const engines_LT[] = { + const PrepopulatedEngine* const engines_LU[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo, + &ecosia, + }; +@@ -574,7 +574,7 @@ const PrepopulatedEngine* const engines_LV[] = { + &bing, + &yandex_ru, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Libya +@@ -583,7 +583,7 @@ const PrepopulatedEngine* const engines_LY[] = { + &bing, + &yahoo, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Morocco +@@ -592,14 +592,14 @@ const PrepopulatedEngine* const engines_MA[] = { + &bing, + &yahoo_fr, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Monaco + const PrepopulatedEngine* const engines_MC[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo_fr, + &ecosia, + }; +@@ -619,7 +619,7 @@ const PrepopulatedEngine* const engines_ME[] = { + &bing, + &yahoo, + &yandex_ru, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Macedonia +@@ -627,7 +627,7 @@ const PrepopulatedEngine* const engines_MK[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -636,7 +636,7 @@ const PrepopulatedEngine* const engines_MX[] = { + &googleen, &google, + &bing, + &yahoo_mx, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -645,7 +645,7 @@ const PrepopulatedEngine* const engines_MY[] = { + &googleen, &google, + &bing, + &yahoo_my, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -654,7 +654,7 @@ const PrepopulatedEngine* const engines_NI[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -663,7 +663,7 @@ const PrepopulatedEngine* const engines_NL[] = { + &googleen, &google, + &bing, + &yahoo_nl, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -672,7 +672,7 @@ const PrepopulatedEngine* const engines_NO[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -681,7 +681,7 @@ const PrepopulatedEngine* const engines_NZ[] = { + &googleen, &google, + &bing, + &yahoo_nz, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -690,7 +690,7 @@ const PrepopulatedEngine* const engines_OM[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &petal_search, + }; + +@@ -699,7 +699,7 @@ const PrepopulatedEngine* const engines_PA[] = { + &googleen, &google, + &bing, + &yahoo_es, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -709,7 +709,7 @@ const PrepopulatedEngine* const engines_PE[] = { + &bing, + &yahoo_pe, + &ecosia, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Philippines +@@ -718,7 +718,7 @@ const PrepopulatedEngine* const engines_PH[] = { + &bing, + &yahoo, + &ecosia, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Pakistan +@@ -726,7 +726,7 @@ const PrepopulatedEngine* const engines_PK[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -735,7 +735,7 @@ const PrepopulatedEngine* const engines_PL[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -744,7 +744,7 @@ const PrepopulatedEngine* const engines_PR[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -753,7 +753,7 @@ const PrepopulatedEngine* const engines_PT[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -762,7 +762,7 @@ const PrepopulatedEngine* const engines_PY[] = { + &googleen, &google, + &bing, + &yahoo_es, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -771,7 +771,7 @@ const PrepopulatedEngine* const engines_QA[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_tr, + }; + +@@ -780,7 +780,7 @@ const PrepopulatedEngine* const engines_RO[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_tr, + }; + +@@ -789,7 +789,7 @@ const PrepopulatedEngine* const engines_RS[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_ru, + }; + +@@ -799,7 +799,7 @@ const PrepopulatedEngine* const engines_RU[] = { + &yandex_ru, + &mail_ru, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Rwanda +@@ -807,7 +807,7 @@ const PrepopulatedEngine* const engines_RW[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -817,7 +817,7 @@ const PrepopulatedEngine* const engines_SA[] = { + &bing, + &yahoo, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Sweden +@@ -825,7 +825,7 @@ const PrepopulatedEngine* const engines_SE[] = { + &googleen, &google, + &bing, + &yahoo_se, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -834,7 +834,7 @@ const PrepopulatedEngine* const engines_SG[] = { + &googleen, &google, + &bing, + &yahoo_sg, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &baidu, + }; + +@@ -842,7 +842,7 @@ const PrepopulatedEngine* const engines_SG[] = { + const PrepopulatedEngine* const engines_SI[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo, + &yandex_com, + }; +@@ -851,7 +851,7 @@ const PrepopulatedEngine* const engines_SI[] = { + const PrepopulatedEngine* const engines_SK[] = { + &googleen, &google, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo, + &yandex_com, + }; +@@ -861,7 +861,7 @@ const PrepopulatedEngine* const engines_SV[] = { + &googleen, &google, + &bing, + &yahoo_es, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -871,7 +871,7 @@ const PrepopulatedEngine* const engines_SY[] = { + &bing, + &yahoo, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Thailand +@@ -888,7 +888,7 @@ const PrepopulatedEngine* const engines_TN[] = { + &googleen, &google, + &bing, + &yahoo_fr, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yandex_com, + }; + +@@ -898,7 +898,7 @@ const PrepopulatedEngine* const engines_TR[] = { + &yandex_tr, + &yahoo_tr, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Trinidad and Tobago +@@ -906,7 +906,7 @@ const PrepopulatedEngine* const engines_TT[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -916,7 +916,7 @@ const PrepopulatedEngine* const engines_TW[] = { + &yahoo_tw, + &bing, + &baidu, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // Tanzania +@@ -924,7 +924,7 @@ const PrepopulatedEngine* const engines_TZ[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &baidu, + }; + +@@ -933,7 +933,7 @@ const PrepopulatedEngine* const engines_UA[] = { + &googleen, &google, + &yandex_ua, + &bing, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &yahoo, + }; + +@@ -942,7 +942,7 @@ const PrepopulatedEngine* const engines_US[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -951,7 +951,7 @@ const PrepopulatedEngine* const engines_UY[] = { + &googleen, &google, + &bing, + &yahoo_es, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -960,7 +960,7 @@ const PrepopulatedEngine* const engines_VE[] = { + &googleen, &google, + &bing, + &yahoo_es, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -979,7 +979,7 @@ const PrepopulatedEngine* const engines_YE[] = { + &bing, + &yahoo, + &yandex_com, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + }; + + // South Africa +@@ -987,7 +987,7 @@ const PrepopulatedEngine* const engines_ZA[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +@@ -996,7 +996,7 @@ const PrepopulatedEngine* const engines_ZW[] = { + &googleen, &google, + &bing, + &yahoo, +- &duckduckgo, ++ &duckduckgo, &duckduckgo_light, + &ecosia, + }; + +-- +2.25.1 diff --git a/bromite/build/patches/Add-English-only-search-engine.patch b/bromite/build/patches/Add-English-only-search-engine.patch new file mode 100644 index 00000000..178432f1 --- /dev/null +++ b/bromite/build/patches/Add-English-only-search-engine.patch @@ -0,0 +1,1031 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Mon, 11 Dec 2017 22:42:11 +0100 +Subject: Add English-only search engine + +Add a Google search engine that forces languages to English, +disable from all its searches RLZ and field experiments querystring parameters. + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../search_engines/prepopulated_engines.json | 21 ++ + .../search_engines/search_engine_type.h | 1 + + .../template_url_prepopulate_data.cc | 216 +++++++++--------- + 3 files changed, 130 insertions(+), 108 deletions(-) + +diff --git a/components/search_engines/prepopulated_engines.json b/components/search_engines/prepopulated_engines.json +--- a/components/search_engines/prepopulated_engines.json ++++ b/components/search_engines/prepopulated_engines.json +@@ -137,6 +137,27 @@ + "id": 1 + }, + ++ "googleen": { ++ "name": "Google in English", ++ "keyword": "googleen", ++ "favicon_url": "https://www.google.com/favicon.ico", ++ "search_url": "{google:baseURL}search?q={searchTerms}&ie={inputEncoding}&hl=en", ++ "suggest_url": "{google:baseSuggestURL}search?client={google:suggestClient}&q={searchTerms}&hl=en", ++ "image_url": "{google:baseURL}searchbyimage/upload?hl=en", ++ "new_tab_url": "{google:baseURL}_/chrome/newtab?hl=en&ie={inputEncoding}", ++ "contextual_search_url": "{google:baseURL}_/contextualsearch?{google:contextualSearchVersion}{google:contextualSearchContextData}&hl=en", ++ "image_url_post_params": "encoded_image={google:imageThumbnail},image_url={google:imageURL},sbisrc={google:imageSearchSource},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight}", ++ "alternate_urls": [ ++ "{google:baseURL}?hl=en#q={searchTerms}", ++ "{google:baseURL}search?hl=en#q={searchTerms}", ++ "{google:baseURL}webhp?hl=en#q={searchTerms}", ++ "{google:baseURL}s?hl=en#q={searchTerms}", ++ "{google:baseURL}s?hl=en&q={searchTerms}" ++ ], ++ "type": "SEARCH_ENGINE_GOOGLE_EN", ++ "id": 13 ++ }, ++ + "mail_ru": { + "name": "@MAIL.RU", + "keyword": "mail.ru", +diff --git a/components/search_engines/search_engine_type.h b/components/search_engines/search_engine_type.h +--- a/components/search_engines/search_engine_type.h ++++ b/components/search_engines/search_engine_type.h +@@ -78,6 +78,7 @@ enum SearchEngineType { + SEARCH_ENGINE_STARTER_PACK_BOOKMARKS = 61, + SEARCH_ENGINE_STARTER_PACK_HISTORY = 62, + SEARCH_ENGINE_STARTER_PACK_TABS = 63, ++ SEARCH_ENGINE_GOOGLE_EN = 64, + + SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. + }; +diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc +--- a/components/search_engines/template_url_prepopulate_data.cc ++++ b/components/search_engines/template_url_prepopulate_data.cc +@@ -29,7 +29,7 @@ namespace { + + // Default (for countries with no better engine set) + const PrepopulatedEngine* const engines_default[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + }; +@@ -39,7 +39,7 @@ const PrepopulatedEngine* const engines_default[] = { + // clang-format off + // United Arab Emirates + const PrepopulatedEngine* const engines_AE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -48,7 +48,7 @@ const PrepopulatedEngine* const engines_AE[] = { + + // Albania + const PrepopulatedEngine* const engines_AL[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -57,7 +57,7 @@ const PrepopulatedEngine* const engines_AL[] = { + + // Argentina + const PrepopulatedEngine* const engines_AR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_ar, + &duckduckgo, +@@ -66,7 +66,7 @@ const PrepopulatedEngine* const engines_AR[] = { + + // Austria + const PrepopulatedEngine* const engines_AT[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &yahoo_at, +@@ -75,7 +75,7 @@ const PrepopulatedEngine* const engines_AT[] = { + + // Australia + const PrepopulatedEngine* const engines_AU[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_au, + &duckduckgo, +@@ -84,7 +84,7 @@ const PrepopulatedEngine* const engines_AU[] = { + + // Bosnia and Herzegovina + const PrepopulatedEngine* const engines_BA[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -93,7 +93,7 @@ const PrepopulatedEngine* const engines_BA[] = { + + // Belgium + const PrepopulatedEngine* const engines_BE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &ecosia, +@@ -102,7 +102,7 @@ const PrepopulatedEngine* const engines_BE[] = { + + // Bulgaria + const PrepopulatedEngine* const engines_BG[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -111,7 +111,7 @@ const PrepopulatedEngine* const engines_BG[] = { + + // Bahrain + const PrepopulatedEngine* const engines_BH[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -120,7 +120,7 @@ const PrepopulatedEngine* const engines_BH[] = { + + // Burundi + const PrepopulatedEngine* const engines_BI[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -129,7 +129,7 @@ const PrepopulatedEngine* const engines_BI[] = { + + // Brunei + const PrepopulatedEngine* const engines_BN[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -138,7 +138,7 @@ const PrepopulatedEngine* const engines_BN[] = { + + // Bolivia + const PrepopulatedEngine* const engines_BO[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -147,7 +147,7 @@ const PrepopulatedEngine* const engines_BO[] = { + + // Brazil + const PrepopulatedEngine* const engines_BR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_br, + &duckduckgo, +@@ -156,7 +156,7 @@ const PrepopulatedEngine* const engines_BR[] = { + + // Belarus + const PrepopulatedEngine* const engines_BY[] = { +- &google, ++ &googleen, &google, + &yandex_by, + &mail_ru, + &bing, +@@ -165,7 +165,7 @@ const PrepopulatedEngine* const engines_BY[] = { + + // Belize + const PrepopulatedEngine* const engines_BZ[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -174,7 +174,7 @@ const PrepopulatedEngine* const engines_BZ[] = { + + // Canada + const PrepopulatedEngine* const engines_CA[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_ca, + &duckduckgo, +@@ -183,7 +183,7 @@ const PrepopulatedEngine* const engines_CA[] = { + + // Switzerland + const PrepopulatedEngine* const engines_CH[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &ecosia, +@@ -192,7 +192,7 @@ const PrepopulatedEngine* const engines_CH[] = { + + // Chile + const PrepopulatedEngine* const engines_CL[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_cl, + &duckduckgo, +@@ -204,13 +204,13 @@ const PrepopulatedEngine* const engines_CN[] = { + &sogou, + &baidu, + &bing, +- &google, ++ &googleen, &google, + &so_360, + }; + + // Colombia + const PrepopulatedEngine* const engines_CO[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_co, + &ecosia, +@@ -219,7 +219,7 @@ const PrepopulatedEngine* const engines_CO[] = { + + // Costa Rica + const PrepopulatedEngine* const engines_CR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -228,7 +228,7 @@ const PrepopulatedEngine* const engines_CR[] = { + + // Czech Republic + const PrepopulatedEngine* const engines_CZ[] = { +- &google, ++ &googleen, &google, + &seznam_cz, + &bing, + &yahoo, +@@ -237,7 +237,7 @@ const PrepopulatedEngine* const engines_CZ[] = { + + // Germany + const PrepopulatedEngine* const engines_DE[] = { +- &google, ++ &googleen, &google, + &bing, + &ecosia, + &duckduckgo, +@@ -246,7 +246,7 @@ const PrepopulatedEngine* const engines_DE[] = { + + // Denmark + const PrepopulatedEngine* const engines_DK[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_dk, + &duckduckgo, +@@ -255,7 +255,7 @@ const PrepopulatedEngine* const engines_DK[] = { + + // Dominican Republic + const PrepopulatedEngine* const engines_DO[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -264,7 +264,7 @@ const PrepopulatedEngine* const engines_DO[] = { + + // Algeria + const PrepopulatedEngine* const engines_DZ[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_fr, + &yandex_com, +@@ -273,7 +273,7 @@ const PrepopulatedEngine* const engines_DZ[] = { + + // Ecuador + const PrepopulatedEngine* const engines_EC[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &ecosia, +@@ -282,7 +282,7 @@ const PrepopulatedEngine* const engines_EC[] = { + + // Estonia + const PrepopulatedEngine* const engines_EE[] = { +- &google, ++ &googleen, &google, + &bing, + &yandex_ru, + &duckduckgo, +@@ -291,7 +291,7 @@ const PrepopulatedEngine* const engines_EE[] = { + + // Egypt + const PrepopulatedEngine* const engines_EG[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &yandex_com, +@@ -300,7 +300,7 @@ const PrepopulatedEngine* const engines_EG[] = { + + // Spain + const PrepopulatedEngine* const engines_ES[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_es, + &duckduckgo, +@@ -309,7 +309,7 @@ const PrepopulatedEngine* const engines_ES[] = { + + // Finland + const PrepopulatedEngine* const engines_FI[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_fi, + &duckduckgo, +@@ -318,7 +318,7 @@ const PrepopulatedEngine* const engines_FI[] = { + + // Faroe Islands + const PrepopulatedEngine* const engines_FO[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_dk, + &duckduckgo, +@@ -327,7 +327,7 @@ const PrepopulatedEngine* const engines_FO[] = { + + // France + const PrepopulatedEngine* const engines_FR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_fr, + &qwant, +@@ -336,7 +336,7 @@ const PrepopulatedEngine* const engines_FR[] = { + + // United Kingdom + const PrepopulatedEngine* const engines_GB[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_uk, + &duckduckgo, +@@ -345,7 +345,7 @@ const PrepopulatedEngine* const engines_GB[] = { + + // Greece + const PrepopulatedEngine* const engines_GR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -354,7 +354,7 @@ const PrepopulatedEngine* const engines_GR[] = { + + // Guatemala + const PrepopulatedEngine* const engines_GT[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -363,7 +363,7 @@ const PrepopulatedEngine* const engines_GT[] = { + + // Hong Kong + const PrepopulatedEngine* const engines_HK[] = { +- &google, ++ &googleen, &google, + &yahoo_hk, + &bing, + &baidu, +@@ -372,7 +372,7 @@ const PrepopulatedEngine* const engines_HK[] = { + + // Honduras + const PrepopulatedEngine* const engines_HN[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -381,7 +381,7 @@ const PrepopulatedEngine* const engines_HN[] = { + + // Croatia + const PrepopulatedEngine* const engines_HR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -390,7 +390,7 @@ const PrepopulatedEngine* const engines_HR[] = { + + // Hungary + const PrepopulatedEngine* const engines_HU[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -399,7 +399,7 @@ const PrepopulatedEngine* const engines_HU[] = { + + // Indonesia + const PrepopulatedEngine* const engines_ID[] = { +- &google, ++ &googleen, &google, + &yahoo_id, + &bing, + &yandex_com, +@@ -408,7 +408,7 @@ const PrepopulatedEngine* const engines_ID[] = { + + // Ireland + const PrepopulatedEngine* const engines_IE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_uk, + &duckduckgo, +@@ -417,7 +417,7 @@ const PrepopulatedEngine* const engines_IE[] = { + + // Israel + const PrepopulatedEngine* const engines_IL[] = { +- &google, ++ &googleen, &google, + &bing, + &yandex_ru, + &yahoo, +@@ -426,7 +426,7 @@ const PrepopulatedEngine* const engines_IL[] = { + + // India + const PrepopulatedEngine* const engines_IN[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_in, + &duckduckgo, +@@ -435,7 +435,7 @@ const PrepopulatedEngine* const engines_IN[] = { + + // Iraq + const PrepopulatedEngine* const engines_IQ[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &yandex_tr, +@@ -444,7 +444,7 @@ const PrepopulatedEngine* const engines_IQ[] = { + + // Iran + const PrepopulatedEngine* const engines_IR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &ask, +@@ -453,7 +453,7 @@ const PrepopulatedEngine* const engines_IR[] = { + + // Iceland + const PrepopulatedEngine* const engines_IS[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &yahoo, +@@ -462,7 +462,7 @@ const PrepopulatedEngine* const engines_IS[] = { + + // Italy + const PrepopulatedEngine* const engines_IT[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -471,7 +471,7 @@ const PrepopulatedEngine* const engines_IT[] = { + + // Jamaica + const PrepopulatedEngine* const engines_JM[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -480,7 +480,7 @@ const PrepopulatedEngine* const engines_JM[] = { + + // Jordan + const PrepopulatedEngine* const engines_JO[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -489,7 +489,7 @@ const PrepopulatedEngine* const engines_JO[] = { + + // Japan + const PrepopulatedEngine* const engines_JP[] = { +- &google, ++ &googleen, &google, + &yahoo_jp, + &bing, + &duckduckgo, +@@ -498,7 +498,7 @@ const PrepopulatedEngine* const engines_JP[] = { + + // Kenya + const PrepopulatedEngine* const engines_KE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -507,7 +507,7 @@ const PrepopulatedEngine* const engines_KE[] = { + + // South Korea + const PrepopulatedEngine* const engines_KR[] = { +- &google, ++ &googleen, &google, + &naver, + &daum, + &bing, +@@ -516,7 +516,7 @@ const PrepopulatedEngine* const engines_KR[] = { + + // Kuwait + const PrepopulatedEngine* const engines_KW[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -525,7 +525,7 @@ const PrepopulatedEngine* const engines_KW[] = { + + // Kazakhstan + const PrepopulatedEngine* const engines_KZ[] = { +- &google, ++ &googleen, &google, + &yandex_kz, + &mail_ru, + &bing, +@@ -534,7 +534,7 @@ const PrepopulatedEngine* const engines_KZ[] = { + + // Lebanon + const PrepopulatedEngine* const engines_LB[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -543,7 +543,7 @@ const PrepopulatedEngine* const engines_LB[] = { + + // Liechtenstein + const PrepopulatedEngine* const engines_LI[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &yahoo, +@@ -552,7 +552,7 @@ const PrepopulatedEngine* const engines_LI[] = { + + // Lithuania + const PrepopulatedEngine* const engines_LT[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -561,7 +561,7 @@ const PrepopulatedEngine* const engines_LT[] = { + + // Luxembourg + const PrepopulatedEngine* const engines_LU[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &yahoo, +@@ -570,7 +570,7 @@ const PrepopulatedEngine* const engines_LU[] = { + + // Latvia + const PrepopulatedEngine* const engines_LV[] = { +- &google, ++ &googleen, &google, + &bing, + &yandex_ru, + &yahoo, +@@ -579,7 +579,7 @@ const PrepopulatedEngine* const engines_LV[] = { + + // Libya + const PrepopulatedEngine* const engines_LY[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &yandex_com, +@@ -588,7 +588,7 @@ const PrepopulatedEngine* const engines_LY[] = { + + // Morocco + const PrepopulatedEngine* const engines_MA[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_fr, + &yandex_com, +@@ -597,7 +597,7 @@ const PrepopulatedEngine* const engines_MA[] = { + + // Monaco + const PrepopulatedEngine* const engines_MC[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &yahoo_fr, +@@ -606,7 +606,7 @@ const PrepopulatedEngine* const engines_MC[] = { + + // Moldova + const PrepopulatedEngine* const engines_MD[] = { +- &google, ++ &googleen, &google, + &yandex_ru, + &bing, + &mail_ru, +@@ -615,7 +615,7 @@ const PrepopulatedEngine* const engines_MD[] = { + + // Montenegro + const PrepopulatedEngine* const engines_ME[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &yandex_ru, +@@ -624,7 +624,7 @@ const PrepopulatedEngine* const engines_ME[] = { + + // Macedonia + const PrepopulatedEngine* const engines_MK[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -633,7 +633,7 @@ const PrepopulatedEngine* const engines_MK[] = { + + // Mexico + const PrepopulatedEngine* const engines_MX[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_mx, + &duckduckgo, +@@ -642,7 +642,7 @@ const PrepopulatedEngine* const engines_MX[] = { + + // Malaysia + const PrepopulatedEngine* const engines_MY[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_my, + &duckduckgo, +@@ -651,7 +651,7 @@ const PrepopulatedEngine* const engines_MY[] = { + + // Nicaragua + const PrepopulatedEngine* const engines_NI[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -660,7 +660,7 @@ const PrepopulatedEngine* const engines_NI[] = { + + // Netherlands + const PrepopulatedEngine* const engines_NL[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_nl, + &duckduckgo, +@@ -669,7 +669,7 @@ const PrepopulatedEngine* const engines_NL[] = { + + // Norway + const PrepopulatedEngine* const engines_NO[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -678,7 +678,7 @@ const PrepopulatedEngine* const engines_NO[] = { + + // New Zealand + const PrepopulatedEngine* const engines_NZ[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_nz, + &duckduckgo, +@@ -687,7 +687,7 @@ const PrepopulatedEngine* const engines_NZ[] = { + + // Oman + const PrepopulatedEngine* const engines_OM[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -696,7 +696,7 @@ const PrepopulatedEngine* const engines_OM[] = { + + // Panama + const PrepopulatedEngine* const engines_PA[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_es, + &duckduckgo, +@@ -705,7 +705,7 @@ const PrepopulatedEngine* const engines_PA[] = { + + // Peru + const PrepopulatedEngine* const engines_PE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_pe, + &ecosia, +@@ -714,7 +714,7 @@ const PrepopulatedEngine* const engines_PE[] = { + + // Philippines + const PrepopulatedEngine* const engines_PH[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &ecosia, +@@ -723,7 +723,7 @@ const PrepopulatedEngine* const engines_PH[] = { + + // Pakistan + const PrepopulatedEngine* const engines_PK[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -732,7 +732,7 @@ const PrepopulatedEngine* const engines_PK[] = { + + // Poland + const PrepopulatedEngine* const engines_PL[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -741,7 +741,7 @@ const PrepopulatedEngine* const engines_PL[] = { + + // Puerto Rico + const PrepopulatedEngine* const engines_PR[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -750,7 +750,7 @@ const PrepopulatedEngine* const engines_PR[] = { + + // Portugal + const PrepopulatedEngine* const engines_PT[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -759,7 +759,7 @@ const PrepopulatedEngine* const engines_PT[] = { + + // Paraguay + const PrepopulatedEngine* const engines_PY[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_es, + &duckduckgo, +@@ -768,7 +768,7 @@ const PrepopulatedEngine* const engines_PY[] = { + + // Qatar + const PrepopulatedEngine* const engines_QA[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -777,7 +777,7 @@ const PrepopulatedEngine* const engines_QA[] = { + + // Romania + const PrepopulatedEngine* const engines_RO[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -786,7 +786,7 @@ const PrepopulatedEngine* const engines_RO[] = { + + // Serbia + const PrepopulatedEngine* const engines_RS[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -795,7 +795,7 @@ const PrepopulatedEngine* const engines_RS[] = { + + // Russia + const PrepopulatedEngine* const engines_RU[] = { +- &google, ++ &googleen, &google, + &yandex_ru, + &mail_ru, + &bing, +@@ -804,7 +804,7 @@ const PrepopulatedEngine* const engines_RU[] = { + + // Rwanda + const PrepopulatedEngine* const engines_RW[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -813,7 +813,7 @@ const PrepopulatedEngine* const engines_RW[] = { + + // Saudi Arabia + const PrepopulatedEngine* const engines_SA[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &yandex_com, +@@ -822,7 +822,7 @@ const PrepopulatedEngine* const engines_SA[] = { + + // Sweden + const PrepopulatedEngine* const engines_SE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_se, + &duckduckgo, +@@ -831,7 +831,7 @@ const PrepopulatedEngine* const engines_SE[] = { + + // Singapore + const PrepopulatedEngine* const engines_SG[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_sg, + &duckduckgo, +@@ -840,7 +840,7 @@ const PrepopulatedEngine* const engines_SG[] = { + + // Slovenia + const PrepopulatedEngine* const engines_SI[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &yahoo, +@@ -849,7 +849,7 @@ const PrepopulatedEngine* const engines_SI[] = { + + // Slovakia + const PrepopulatedEngine* const engines_SK[] = { +- &google, ++ &googleen, &google, + &bing, + &duckduckgo, + &yahoo, +@@ -858,7 +858,7 @@ const PrepopulatedEngine* const engines_SK[] = { + + // El Salvador + const PrepopulatedEngine* const engines_SV[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_es, + &duckduckgo, +@@ -867,7 +867,7 @@ const PrepopulatedEngine* const engines_SV[] = { + + // Syria + const PrepopulatedEngine* const engines_SY[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &yandex_com, +@@ -876,7 +876,7 @@ const PrepopulatedEngine* const engines_SY[] = { + + // Thailand + const PrepopulatedEngine* const engines_TH[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_th, + &yandex_ru, +@@ -885,7 +885,7 @@ const PrepopulatedEngine* const engines_TH[] = { + + // Tunisia + const PrepopulatedEngine* const engines_TN[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_fr, + &duckduckgo, +@@ -894,7 +894,7 @@ const PrepopulatedEngine* const engines_TN[] = { + + // Turkey + const PrepopulatedEngine* const engines_TR[] = { +- &google, ++ &googleen, &google, + &yandex_tr, + &yahoo_tr, + &bing, +@@ -903,7 +903,7 @@ const PrepopulatedEngine* const engines_TR[] = { + + // Trinidad and Tobago + const PrepopulatedEngine* const engines_TT[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -912,7 +912,7 @@ const PrepopulatedEngine* const engines_TT[] = { + + // Taiwan + const PrepopulatedEngine* const engines_TW[] = { +- &google, ++ &googleen, &google, + &yahoo_tw, + &bing, + &baidu, +@@ -921,7 +921,7 @@ const PrepopulatedEngine* const engines_TW[] = { + + // Tanzania + const PrepopulatedEngine* const engines_TZ[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -930,7 +930,7 @@ const PrepopulatedEngine* const engines_TZ[] = { + + // Ukraine + const PrepopulatedEngine* const engines_UA[] = { +- &google, ++ &googleen, &google, + &yandex_ua, + &bing, + &duckduckgo, +@@ -939,7 +939,7 @@ const PrepopulatedEngine* const engines_UA[] = { + + // United States + const PrepopulatedEngine* const engines_US[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -948,7 +948,7 @@ const PrepopulatedEngine* const engines_US[] = { + + // Uruguay + const PrepopulatedEngine* const engines_UY[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_es, + &duckduckgo, +@@ -957,7 +957,7 @@ const PrepopulatedEngine* const engines_UY[] = { + + // Venezuela + const PrepopulatedEngine* const engines_VE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo_es, + &duckduckgo, +@@ -966,7 +966,7 @@ const PrepopulatedEngine* const engines_VE[] = { + + // Vietnam + const PrepopulatedEngine* const engines_VN[] = { +- &google, ++ &googleen, &google, + &coccoc, + &yahoo, + &bing, +@@ -975,7 +975,7 @@ const PrepopulatedEngine* const engines_VN[] = { + + // Yemen + const PrepopulatedEngine* const engines_YE[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &yandex_com, +@@ -984,7 +984,7 @@ const PrepopulatedEngine* const engines_YE[] = { + + // South Africa + const PrepopulatedEngine* const engines_ZA[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +@@ -993,7 +993,7 @@ const PrepopulatedEngine* const engines_ZA[] = { + + // Zimbabwe + const PrepopulatedEngine* const engines_ZW[] = { +- &google, ++ &googleen, &google, + &bing, + &yahoo, + &duckduckgo, +-- +2.25.1 diff --git a/bromite/build/patches/Add-IsCleartextPermitted-flag.patch b/bromite/build/patches/Add-IsCleartextPermitted-flag.patch new file mode 100644 index 00000000..105ca155 --- /dev/null +++ b/bromite/build/patches/Add-IsCleartextPermitted-flag.patch @@ -0,0 +1,98 @@ +From: uazo +Date: Mon, 26 Apr 2021 15:04:11 +0000 +Subject: Add IsCleartextPermitted flag + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 4 ++++ + chrome/browser/flag_descriptions.cc | 4 ++++ + chrome/browser/flag_descriptions.h | 3 +++ + net/base/features.cc | 4 ++++ + net/base/features.h | 2 ++ + net/url_request/url_request_http_job.cc | 4 ++++ + 6 files changed, 21 insertions(+) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -9070,6 +9070,10 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kRequestDesktopSiteExceptionsName, + flag_descriptions::kRequestDesktopSiteExceptionsDescription, kOsAndroid, + FEATURE_VALUE_TYPE(features::kRequestDesktopSiteExceptions)}, ++ {"cleartext-permitted", ++ flag_descriptions::kIsCleartextPermittedName, ++ flag_descriptions::kIsCleartextPermittedDescription, kOsAndroid, ++ FEATURE_VALUE_TYPE(net::features::kIsCleartextPermitted)}, + #endif + + {"export-bookmarks-use-saf", +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -1710,6 +1710,10 @@ const char kHttpsOnlyModeDescription[] = + "Adds a setting under chrome://settings/security to opt-in to HTTPS-First " + "Mode."; + ++const char kIsCleartextPermittedName[] = "Allow cleartext traffic"; ++const char kIsCleartextPermittedDescription[] = ++ "Allow insecure connections over HTTP"; ++ + const char kIgnoreGpuBlocklistName[] = "Override software rendering list"; + const char kIgnoreGpuBlocklistDescription[] = + "Overrides the built-in software rendering list and enables " +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -960,6 +960,9 @@ extern const char kHideShelfControlsInTabletModeDescription[]; + extern const char kHttpsOnlyModeName[]; + extern const char kHttpsOnlyModeDescription[]; + ++extern const char kIsCleartextPermittedName[]; ++extern const char kIsCleartextPermittedDescription[]; ++ + extern const char kIgnoreGpuBlocklistName[]; + extern const char kIgnoreGpuBlocklistDescription[]; + +diff --git a/net/base/features.cc b/net/base/features.cc +--- a/net/base/features.cc ++++ b/net/base/features.cc +@@ -113,6 +113,10 @@ BASE_FEATURE(kPartitionNelAndReportingByNetworkIsolationKey, + "PartitionNelAndReportingByNetworkIsolationKey", // must be enabled + base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite + ++BASE_FEATURE(kIsCleartextPermitted, ++ "IsCleartextPermitted", ++ base::FEATURE_ENABLED_BY_DEFAULT); ++ + BASE_FEATURE(kEnableDoubleKeyNetworkAnonymizationKey, + "EnableDoubleKeyNetworkAnonymizationKey", + base::FEATURE_DISABLED_BY_DEFAULT); +diff --git a/net/base/features.h b/net/base/features.h +--- a/net/base/features.h ++++ b/net/base/features.h +@@ -29,6 +29,8 @@ NET_EXPORT BASE_DECLARE_FEATURE(kAvoidH2Reprioritization); + // origin requests are restricted to contain at most the source origin. + NET_EXPORT BASE_DECLARE_FEATURE(kCapReferrerToOriginOnCrossOrigin); + ++NET_EXPORT BASE_DECLARE_FEATURE(kIsCleartextPermitted); ++ + // Support for altering the parameters used for DNS transaction timeout. See + // ResolveContext::SecureTransactionTimeout(). + NET_EXPORT BASE_DECLARE_FEATURE(kDnsTransactionDynamicTimeouts); +diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc +--- a/net/url_request/url_request_http_job.cc ++++ b/net/url_request/url_request_http_job.cc +@@ -212,6 +212,10 @@ std::unique_ptr URLRequestHttpJob::Create(URLRequest* request) { + } + + #if BUILDFLAG(IS_ANDROID) ++ if (base::FeatureList::IsEnabled(net::features::kIsCleartextPermitted) == false) { ++ return std::make_unique(request, ++ ERR_CLEARTEXT_NOT_PERMITTED); ++ } + // Check whether the app allows cleartext traffic to this host, and return + // ERR_CLEARTEXT_NOT_PERMITTED if not. + if (request->context()->check_cleartext_permitted() && +-- +2.25.1 diff --git a/bromite/build/patches/Add-a-proxy-configuration-page.patch b/bromite/build/patches/Add-a-proxy-configuration-page.patch new file mode 100644 index 00000000..9469d8f9 --- /dev/null +++ b/bromite/build/patches/Add-a-proxy-configuration-page.patch @@ -0,0 +1,1404 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Thu, 29 Mar 2018 00:43:32 +0200 +Subject: Add a proxy configuration page + +Accessible from proxy settings and chrome://proxy +Allows to use a PAC script URL, automatic configuration and explicit proxy settings. +Offer auto-complete for the proxy page URL. +Store proxy settings in LocalState instead of Profile, so that proxy is used for SimpleURLLoaders as well; +this implementation is the same as the one in ChromeOS which gets proxy information from the LocalState +for the system network context; this is strictly not correct on Android because the network context is +never connected to any user profile and only gets proxy information from the system. +Existing settings on Profile are migrated to LocalState on startup. + +Credits to @uazo for the LocalState integration. + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/android/java/res/values/values.xml | 3 + + .../java/res/xml/privacy_preferences.xml | 4 + + .../privacy/settings/PrivacySettings.java | 1 + + .../chrome_autocomplete_provider_client.cc | 2 + + chrome/browser/browser_resources.grd | 6 + + chrome/browser/net/proxy_service_factory.cc | 24 +- + chrome/browser/net/proxy_service_factory.h | 3 + + chrome/browser/prefs/browser_prefs.cc | 4 + + .../prefs/chrome_command_line_pref_store.cc | 2 +- + chrome/browser/resources/proxy_config.css | 61 +++ + chrome/browser/resources/proxy_config.html | 78 ++++ + chrome/browser/resources/proxy_config.js | 267 +++++++++++ + chrome/browser/ui/BUILD.gn | 2 + + .../webui/chrome_web_ui_controller_factory.cc | 3 + + chrome/browser/ui/webui/proxy_config_ui.cc | 418 ++++++++++++++++++ + chrome/browser/ui/webui/proxy_config_ui.h | 31 ++ + chrome/common/webui_url_constants.cc | 4 + + chrome/common/webui_url_constants.h | 2 + + .../pref_proxy_config_tracker_impl.cc | 1 + + .../proxy_config/proxy_config_dictionary.cc | 30 +- + .../proxy_config/proxy_config_dictionary.h | 7 +- + .../proxy_config/proxy_policy_handler.cc | 2 +- + net/proxy_resolution/proxy_config.cc | 52 ++- + net/proxy_resolution/proxy_config.h | 3 + + 24 files changed, 996 insertions(+), 14 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 + create mode 100644 chrome/browser/ui/webui/proxy_config_ui.cc + create mode 100644 chrome/browser/ui/webui/proxy_config_ui.h + +diff --git a/chrome/android/java/res/values/values.xml b/chrome/android/java/res/values/values.xml +--- a/chrome/android/java/res/values/values.xml ++++ b/chrome/android/java/res/values/values.xml +@@ -27,6 +27,9 @@ found in the LICENSE file. + + true + ++ Proxy configuration ++ chrome://proxy ++ + + 1200 + 200 +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 ++++ b/chrome/android/java/res/xml/privacy_preferences.xml +@@ -8,6 +8,10 @@ found in the LICENSE file. + + ++ + + + ++ ++ ++ ++ ++ ++ + + + +diff --git a/chrome/browser/net/proxy_service_factory.cc b/chrome/browser/net/proxy_service_factory.cc +--- a/chrome/browser/net/proxy_service_factory.cc ++++ b/chrome/browser/net/proxy_service_factory.cc +@@ -6,6 +6,7 @@ + + #include + ++#include "base/logging.h" + #include "base/threading/thread_task_runner_handle.h" + #include "build/build_config.h" + #include "build/chromeos_buildflags.h" +@@ -13,6 +14,9 @@ + #include "content/public/browser/browser_task_traits.h" + #include "content/public/browser/browser_thread.h" + #include "net/proxy_resolution/proxy_config_service.h" ++#include "components/proxy_config/proxy_config_pref_names.h" ++#include "components/prefs/pref_service.h" ++#include "components/prefs/pref_registry_simple.h" + + #if BUILDFLAG(IS_CHROMEOS_ASH) + #include "chromeos/ash/components/network/proxy/proxy_config_service_impl.h" +@@ -70,7 +74,20 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile( + return std::make_unique( + profile_prefs, local_state_prefs, nullptr); + #else +- return std::make_unique(profile_prefs, nullptr); ++ // Migrate from profile_prefs to local_state_prefs ++ if (local_state_prefs->GetBoolean("proxy_migrated") == false) { ++ const base::Value::Dict& dict = ++ profile_prefs->GetDict(proxy_config::prefs::kProxy); ++ ++ LOG(INFO) << "CreatePrefProxyConfigTrackerOfProfile: Migration from profile to local state"; ++ ++ const base::Value /*ProxyConfigDictionary*/ proxy_dict(dict.Clone()); ++ local_state_prefs->Set(proxy_config::prefs::kProxy, proxy_dict); ++ ++ local_state_prefs->SetBoolean("proxy_migrated", true); ++ local_state_prefs->CommitPendingWrite(); ++ } ++ return std::make_unique(local_state_prefs, nullptr); + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + } + +@@ -86,3 +103,8 @@ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( + nullptr); + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + } ++ ++// static ++void ProxyServiceFactory::RegisterPrefs(PrefRegistrySimple* registry) { ++ registry->RegisterBooleanPref("proxy_migrated", false); ++} +diff --git a/chrome/browser/net/proxy_service_factory.h b/chrome/browser/net/proxy_service_factory.h +--- a/chrome/browser/net/proxy_service_factory.h ++++ b/chrome/browser/net/proxy_service_factory.h +@@ -6,6 +6,7 @@ + #define CHROME_BROWSER_NET_PROXY_SERVICE_FACTORY_H_ + + #include ++#include "components/prefs/pref_registry_simple.h" + + class PrefProxyConfigTracker; + class PrefService; +@@ -35,6 +36,8 @@ class ProxyServiceFactory { + CreatePrefProxyConfigTrackerOfProfile(PrefService* profile_prefs, + PrefService* local_state_prefs); + ++ static void RegisterPrefs(PrefRegistrySimple* registry); ++ + // Creates a PrefProxyConfigTracker that tracks local state only. This tracker + // should be used for the system request context and the signin screen + // (ChromeOS only). +diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc +--- a/chrome/browser/prefs/browser_prefs.cc ++++ b/chrome/browser/prefs/browser_prefs.cc +@@ -165,6 +165,8 @@ + #include "rlz/buildflags/buildflags.h" + #include "third_party/abseil-cpp/absl/types/optional.h" + ++#include "chrome/browser/net/proxy_service_factory.h" ++ + #if BUILDFLAG(ENABLE_BACKGROUND_MODE) + #include "chrome/browser/background/background_mode_manager.h" + #endif +@@ -1013,6 +1015,8 @@ void RegisterLocalState(PrefRegistrySimple* registry) { + chrome::enterprise_util::RegisterLocalStatePrefs(registry); + component_updater::RegisterPrefs(registry); + embedder_support::OriginTrialPrefs::RegisterPrefs(registry); ++ ProxyServiceFactory::RegisterPrefs(registry); ++ + enterprise_reporting::RegisterLocalStatePrefs(registry); + ExternalProtocolHandler::RegisterPrefs(registry); + flags_ui::PrefServiceFlagsStorage::RegisterPrefs(registry); +diff --git a/chrome/browser/prefs/chrome_command_line_pref_store.cc b/chrome/browser/prefs/chrome_command_line_pref_store.cc +--- a/chrome/browser/prefs/chrome_command_line_pref_store.cc ++++ b/chrome/browser/prefs/chrome_command_line_pref_store.cc +@@ -159,7 +159,7 @@ void ChromeCommandLinePrefStore::ApplyProxyMode() { + command_line()->GetSwitchValueASCII(switches::kProxyBypassList); + SetValue(proxy_config::prefs::kProxy, + base::Value(ProxyConfigDictionary::CreateFixedServers( +- proxy_server, bypass_list)), ++ proxy_server, bypass_list, false)), + WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS); + } + } +diff --git a/chrome/browser/resources/proxy_config.css b/chrome/browser/resources/proxy_config.css +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/resources/proxy_config.css +@@ -0,0 +1,61 @@ ++/* Copyright (c) 2013 The Chromium Authors. All rights reserved. ++ * Use of this source code is governed by a BSD-style license that can be ++ * found in the LICENSE file. ++ */ ++ ++body { ++ font-size: 80%; ++ margin: 1em; ++} ++ ++#main-container { ++ max-width: 60em; ++ margin-left: auto; ++ margin-right: auto; ++} ++ ++button { ++ display: block; ++ font-size: 110%; ++ font-weight: bold; ++ margin: 10px auto; ++ padding: 1em; ++ width: 15em; ++} ++ ++h2 { ++ color: #546E7A; ++ font-weight: normal; ++ font-size: 170%; ++ margin-bottom: 1.5em; ++} ++ ++.radio-button-div { ++ margin: 7px auto; ++} ++ ++.warning { ++ color: red; ++ font-size: 90%; ++} ++ ++.section-container { ++ margin-top: 2em; ++} ++ ++#file-path-logging, ++#file-path-stopped { ++ font-family: monospace; ++} ++ ++.outline-box { ++ margin-top: 2em; ++ border: 1px solid #ababab; ++ padding: 0.5em; ++ line-height: 1.5em; ++} ++ ++textarea { ++ width: 95%; ++ height: 4em; ++} +diff --git a/chrome/browser/resources/proxy_config.html b/chrome/browser/resources/proxy_config.html +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/resources/proxy_config.html +@@ -0,0 +1,78 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++Proxy configuration ++ ++ ++
++ ++
++

Proxy configuration

++ Loading... ++
++ ++ ++ ++ ++
++ ++ +diff --git a/chrome/browser/resources/proxy_config.js b/chrome/browser/resources/proxy_config.js +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/resources/proxy_config.js +@@ -0,0 +1,267 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++import {$} from 'chrome://resources/js/util.js'; ++import {addSingletonGetter} from 'chrome://resources/js/cr.m.js'; ++ ++/** ++ * Main entry point called once the page has loaded. ++ */ ++function onLoad() { ++ ProxyConfigView.getInstance(); ++} ++ ++document.addEventListener('DOMContentLoaded', onLoad); ++ ++/** ++ * This class handles the presentation of the proxy-config view. Used as a ++ * singleton. ++ */ ++var ProxyConfigView = (function() { ++ 'use strict'; ++ ++ // -------------------------------------------------------------------------- ++ ++ var kIdStateDivUninitialized = 'state-pending'; ++ var kIdStateDivMain = 'state-main'; ++ var kIdApplyButton = 'apply'; ++ var kIdResetButton = 'reset'; ++ var kIdClearButton = 'clear'; ++ ++ var kIdModeEmpty = 'empty'; ++ var kIdModeDirect = 'direct'; ++ var kIdModeAutoDetect = 'auto-detect'; ++ var kIdModeUsePacURL = 'use-pac-url'; ++ ++ var kIdModeUseSingleList = 'use-single-list'; ++ var kIdModeUseListPerScheme = 'use-list-per-scheme'; ++ ++ var kIdPacURL = 'pac-url'; ++ var kIdPacMandatory = 'pac-mandatory'; ++ var kIdBypassRules = 'bypass-rules'; ++ var kIdReverseBypass = 'reverse-bypass'; ++ var kIdSingleProxies = 'single-proxies'; ++ var kIdHttpProxies = 'http-proxies'; ++ var kIdHttpsProxies = 'https-proxies'; ++ var kIdFtpProxies = 'ftp-proxies'; ++ var kIdFallbackProxies = 'fallback-proxies'; ++ ++ /** ++ * @constructor ++ */ ++ function ProxyConfigView() { ++ this.currentConfig = null; ++ ++ $(kIdResetButton).onclick = this.onReset_.bind(this); ++ $(kIdApplyButton).onclick = this.onApply_.bind(this); ++ $(kIdClearButton).onclick = this.onClear_.bind(this); ++ ++ // Tell ProxyConfigMessageHandler to notify the UI of future state changes ++ // from this point on. ++ chrome.send('enableNotifyUIWithState'); ++ } ++ ++ addSingletonGetter(ProxyConfigView); ++ window.ProxyConfigView = ProxyConfigView; ++ ++ ProxyConfigView.prototype = { ++ /** ++ * Updates the UI to reflect the current state. The state transitions are ++ * sent by the browser controller (ProxyConfigMessageHandler): ++ * ++ * * PENDING - This is the initial state when proxy configuration is opened ++ * for the first time, or there was an error during initialization. ++ * This state is short-lived and likely not observed; will ++ * immediately transition to AVAILABLE). ++ * ++ * * AVAILABLE - The reported proxy configuration is active; this state is entered ++ * on first page load (or right after PENDING if configuration was not ++ * available on page load) and every time some configuration change was applied. ++ * It can transition to either AVAILABLE or UNSET. ++ * ++ * * UNSET - Proxy configuration is reported to be currently not set. ++ * ++ */ ++ onProxyConfigChanged: function(state) { ++ // may happen only on first load; leave the loading page as another update is expected ++ // when proxy configuration has finished loading ++ if (state.pending) { ++ $(kIdStateDivMain).hidden = true; ++ $(kIdStateDivUninitialized).hidden = false; ++ return; ++ } ++ ++ if (!state.hasOwnProperty('config')) { ++ // configuration has been unset, use an empty one ++ this.eraseCurrentConfig_(); ++ } else { ++ // save the configuration as current and reset all controls to it ++ this.currentConfig = state.config; ++ } ++ ++ this.renderConfig_(); ++ ++ this.toggleButtons_(false); ++ $(kIdStateDivUninitialized).hidden = true; ++ $(kIdStateDivMain).hidden = false; ++ }, ++ ++ /** ++ * Set current configuration to an empty (default) one. ++ */ ++ eraseCurrentConfig_: function() { ++ this.currentConfig = { ++ "auto_detect": false, ++ "pending": false, ++ "rules": { ++ "bypass_rules": "", ++ "reverse_bypass": false, ++ "type": "none" ++ } ++ }; ++ }, ++ ++ /** ++ * Serialize the user-selected configuration in an object. ++ */ ++ serializeConfig_: function() { ++ if ($(kIdModeEmpty).checked) { ++ return { ++ "auto_detect": false, ++ "rules": { ++ "type": "none" ++ } ++ }; ++ } else if ($(kIdModeDirect).checked) { ++ return { ++ "auto_detect": false, ++ "rules": { ++ "type": "direct" ++ } ++ }; ++ } else if ($(kIdModeAutoDetect).checked) { ++ return { ++ "auto_detect": true ++ }; ++ } else if ($(kIdModeUsePacURL).checked) { ++ return { ++ "auto_detect": false, ++ "pac_url": $(kIdPacURL).value.trim(), ++ "pac_mandatory": $(kIdPacMandatory).checked, ++ "rules": {} ++ }; ++ } else if ($(kIdModeUseListPerScheme).checked || $(kIdModeUseSingleList).checked) { ++ var config = { ++ "auto_detect": false, ++ "rules": { ++ "bypass_rules": $(kIdBypassRules).value.trim(), ++ "reverse_bypass": $(kIdReverseBypass).checked, ++ "type": "list" ++ } ++ }; ++ ++ if ($(kIdModeUseListPerScheme).checked) { ++ config.rules.type = "list_per_scheme"; ++ ++ config.rules.proxies_for_http = $(kIdHttpProxies).value.trim(); ++ config.rules.proxies_for_https = $(kIdHttpsProxies).value.trim(); ++ config.rules.proxies_for_ftp = $(kIdFtpProxies).value.trim(); ++ config.rules.fallback_proxies = $(kIdFallbackProxies).value.trim(); ++ } else { ++ config.rules.single_proxies = $(kIdSingleProxies).value.trim(); ++ } ++ ++ return config; ++ } ++ ++ throw new Error('unexpected mode'); ++ }, ++ ++ /** ++ * Updates the UI to display the current proxy configuration. ++ */ ++ renderConfig_: function() { ++ if (this.currentConfig.auto_detect) { ++ $(kIdModeAutoDetect).checked = true; ++ } else if (this.currentConfig.hasOwnProperty('pac_url')) { ++ $(kIdPacURL).value = this.currentConfig.pac_url; ++ $(kIdPacMandatory).checked = this.currentConfig.pac_mandatory; ++ $(kIdModeUsePacURL).checked = true; ++ } else if (this.currentConfig.rules.type == "none") { ++ $(kIdModeEmpty).checked = true; ++ } else if (this.currentConfig.rules.type == "direct") { ++ $(kIdModeDirect).checked = true; ++ } else { ++ $(kIdBypassRules).value = this.currentConfig.rules.bypass_rules; ++ $(kIdReverseBypass).checked = this.currentConfig.rules.reverse_bypass; ++ ++ switch (this.currentConfig.rules.type) { ++ case "list": ++ $(kIdModeUseSingleList).checked = true; ++ $(kIdSingleProxies).value = this.currentConfig.rules.single_proxies; ++ break; ++ case "list_per_scheme": ++ $(kIdModeUseListPerScheme).checked = true; ++ $(kIdHttpProxies).value = this.currentConfig.rules.proxies_for_http; ++ $(kIdHttpsProxies).value = this.currentConfig.rules.proxies_for_https; ++ $(kIdFtpProxies).value = this.currentConfig.rules.proxies_for_ftp; ++ $(kIdFallbackProxies).value = this.currentConfig.rules.fallback_proxies; ++ break; ++ } ++ } ++ }, ++ ++ /** ++ * Apply the configuration currently displayed. ++ */ ++ onApply_: function() { ++ var config = this.serializeConfig_(); ++ ++ // disable buttons; will be enabled back when UI receives a state update ++ this.toggleButtons_(true); ++ chrome.send('apply', [config]); ++ }, ++ ++ /** ++ * Apply the configuration currently displayed. ++ */ ++ onClear_: function() { ++ // disable buttons; will be enabled back when UI receives a state update ++ this.toggleButtons_(true); ++ this.eraseCurrentConfig_(); ++ chrome.send('clear', []); ++ }, ++ ++ /** ++ * Toggle the disabled status of the action buttons. ++ */ ++ toggleButtons_: function(disabled) { ++ $(kIdApplyButton).disabled = disabled; ++ $(kIdResetButton).disabled = disabled; ++ $(kIdClearButton).disabled = disabled; ++ }, ++ ++ /** ++ * Reset currently displayed configuration to the last known configuration in use. ++ */ ++ onReset_: function() { ++ this.renderConfig_(); ++ } ++ }; ++ ++ return ProxyConfigView; ++})(); +diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn +--- a/chrome/browser/ui/BUILD.gn ++++ b/chrome/browser/ui/BUILD.gn +@@ -285,6 +285,8 @@ static_library("ui") { + "webui/metrics_internals/metrics_internals_ui.h", + "webui/net_export_ui.cc", + "webui/net_export_ui.h", ++ "webui/proxy_config_ui.cc", ++ "webui/proxy_config_ui.h", + "webui/net_internals/net_internals_ui.cc", + "webui/net_internals/net_internals_ui.h", + "webui/ntp_tiles_internals_ui.cc", +diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc ++++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +@@ -60,6 +60,7 @@ + #include "chrome/browser/ui/webui/ntp_tiles_internals_ui.h" + #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h" + #include "chrome/browser/ui/webui/policy/policy_ui.h" ++#include "chrome/browser/ui/webui/proxy_config_ui.h" + #include "chrome/browser/ui/webui/predictors/predictors_ui.h" + #include "chrome/browser/ui/webui/segmentation_internals/segmentation_internals_ui.h" + #include "chrome/browser/ui/webui/signin_internals_ui.h" +@@ -795,6 +796,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, + return &NewWebUI; + if (url.host_piece() == chrome::kChromeUINetExportHost) + return &NewWebUI; ++ if (url.host_piece() == chrome::kChromeUIProxyConfigHost) ++ return &NewWebUI; + if (url.host_piece() == chrome::kChromeUINetInternalsHost) + return &NewWebUI; + if (url.host_piece() == chrome::kChromeUINTPTilesInternalsHost) +diff --git a/chrome/browser/ui/webui/proxy_config_ui.cc b/chrome/browser/ui/webui/proxy_config_ui.cc +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/ui/webui/proxy_config_ui.cc +@@ -0,0 +1,418 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++#include "chrome/browser/ui/webui/proxy_config_ui.h" ++ ++#include ++ ++#include ++#include ++#include ++ ++#include "base/bind.h" ++#include "base/command_line.h" ++#include "base/lazy_instance.h" ++#include "base/memory/ref_counted.h" ++#include "base/strings/string_util.h" ++#include "base/strings/utf_string_conversions.h" ++#include "base/values.h" ++#include "chrome/browser/browser_process.h" ++#include "chrome/browser/net/proxy_service_factory.h" ++#include "chrome/browser/platform_util.h" ++#include "chrome/browser/profiles/profile.h" ++#include "chrome/common/url_constants.h" ++#include "chrome/grit/browser_resources.h" ++#include "components/prefs/pref_service.h" ++#include "components/proxy_config/pref_proxy_config_tracker_impl.h" ++#include "components/proxy_config/proxy_config_pref_names.h" ++#include "components/grit/components_resources.h" ++#include "content/public/browser/browser_thread.h" ++#include "content/public/browser/url_data_source.h" ++#include "content/public/browser/web_contents.h" ++#include "content/public/browser/web_ui.h" ++#include "content/public/browser/web_ui_data_source.h" ++#include "content/public/browser/web_ui_message_handler.h" ++ ++#include "url/gurl.h" ++ ++using content::BrowserThread; ++using content::WebContents; ++using content::WebUIMessageHandler; ++ ++namespace { ++ ++content::WebUIDataSource* CreateProxyConfigHTMLSource() { ++ content::WebUIDataSource* source = ++ content::WebUIDataSource::Create(chrome::kChromeUIProxyConfigHost); ++ ++ source->UseStringsJs(); ++ source->AddResourcePath("proxy_config.js", IDR_PROXY_CONFIG_JS); ++ source->SetDefaultResource(IDR_PROXY_CONFIG_HTML); ++ return source; ++} ++ ++// This class receives javascript messages from the renderer. ++// Note that the WebUI infrastructure runs on the UI thread, therefore all of ++// this class's public methods are expected to run on the UI thread. ++class ProxyConfigMessageHandler ++ : public WebUIMessageHandler, ++ public base::SupportsWeakPtr, ++ public net::ProxyConfigService::Observer { ++ public: ++ ProxyConfigMessageHandler(const ProxyConfigMessageHandler&) = delete; ++ ProxyConfigMessageHandler& operator=(const ProxyConfigMessageHandler&) = delete; ++ // Creates a ProxyConfigMessageHandler that handles message exchanges with the Javascript ++ // side of the UI and gets proxy settings from the Web UI associated profile to watch for changes. ++ // The created ProxyConfigMessageHandler must be destroyed before |profile|. ++ ProxyConfigMessageHandler(Profile *profile); ++ ~ProxyConfigMessageHandler() override; ++ ++ // WebUIMessageHandler implementation. ++ void RegisterMessages() override; ++ ++ // Messages ++ void OnEnableNotifyUIWithState(const base::Value::List& args); ++ void OnApply(const base::Value::List& args); ++ void OnClear(const base::Value::List& args); ++ ++ // net::ProxyConfigService::Observer implementation: ++ // Calls ProxyConfigView.onProxyConfigChanged JavaScript function in the ++ // renderer. ++ void OnProxyConfigChanged( ++ const net::ProxyConfigWithAnnotation& config, ++ net::ProxyConfigService::ConfigAvailability availability) override; ++ ++ private: ++ // Not owned. ++ PrefService *pref_service_; ++ std::unique_ptr proxy_config_service_; ++ // Monitors global and Profile prefs related to proxy configuration. ++ std::unique_ptr pref_proxy_config_tracker_; ++ bool is_observing_; ++ ++ void encodeConfig(const net::ProxyConfig& config, base::DictionaryValue& state); ++ ++ void apply(const net::ProxyConfig& config); ++ ++ base::WeakPtrFactory weak_ptr_factory_; ++}; ++ ++ProxyConfigMessageHandler::ProxyConfigMessageHandler(Profile *profile) ++ : ++ weak_ptr_factory_(this) { ++ ++ // used to set new configuration preferences ++ pref_service_ = g_browser_process->local_state(); ++ // observer is explicitly added only later in enableNotifyUIWithState ++ is_observing_ = false; ++ ++// If this is the ChromeOS sign-in profile, just create the tracker from global ++// state. ++#if defined(OS_CHROMEOS) ++ if (chromeos::ProfileHelper::IsSigninProfile(profile)) { ++ pref_proxy_config_tracker_.reset( ++ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( ++ g_browser_process->local_state())); ++ } ++#endif // defined(OS_CHROMEOS) ++ ++ if (!pref_proxy_config_tracker_) { ++ pref_proxy_config_tracker_ = ++ ProxyServiceFactory::CreatePrefProxyConfigTrackerOfProfile( ++ profile->GetPrefs(), g_browser_process->local_state()); ++ } ++ ++ proxy_config_service_ = ProxyServiceFactory::CreateProxyConfigService( ++ pref_proxy_config_tracker_.get(), nullptr); ++} ++ ++void ProxyConfigMessageHandler::OnProxyConfigChanged( ++ const net::ProxyConfigWithAnnotation& config, ++ net::ProxyConfigService::ConfigAvailability availability) { ++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || ++ !BrowserThread::IsThreadInitialized(BrowserThread::UI)); ++ ++ base::DictionaryValue state; ++ bool pending = false; ++ switch (availability) { ++ case net::ProxyConfigService::CONFIG_VALID: ++ encodeConfig(config.value(), state); ++ break; ++ case net::ProxyConfigService::CONFIG_UNSET: ++ state.SetPath({"config", "rules", "type"}, base::Value("none")); ++ break; ++ case net::ProxyConfigService::CONFIG_PENDING: ++ //NOTE: this can only happen when triggered manually first time ++ pending = true; ++ break; ++ } ++ state.SetKey("pending", base::Value(pending)); ++ ++ // call Javascript function ++ web_ui()->CallJavascriptFunctionUnsafe("ProxyConfigView.getInstance().onProxyConfigChanged", ++ *state.CreateDeepCopy()); ++} ++ ++const std::string omitDirect(const std::string pacString) { ++ if (pacString == "DIRECT") { ++ return ""; ++ } ++ return pacString; ++} ++ ++void ProxyConfigMessageHandler::encodeConfig(const net::ProxyConfig& config, base::DictionaryValue& state) { ++ // when automatic settings are enabled they take precedence over manual settings ++ // automatic settings are either the "auto-detect" flag or the existance of a PAC URL ++ ++ state.SetPath({"config", "auto_detect"}, base::Value(config.auto_detect())); ++ ++ auto rules = config.proxy_rules(); ++ if (config.has_pac_url()) { ++ state.SetPath({"config", "pac_url"}, base::Value(config.pac_url().spec())); ++ state.SetPath({"config", "pac_mandatory"}, base::Value(config.pac_mandatory())); ++ state.SetPath({"config", "rules", "type"}, base::Value("none")); ++ state.SetPath({"config", "rules", "bypass_rules"}, base::Value(rules.bypass_rules.ToString())); ++ state.SetPath({"config", "rules", "reverse_bypass"}, base::Value(rules.reverse_bypass)); ++ return; ++ } ++ ++ const char *type; ++ switch (rules.type) { ++ case net::ProxyConfig::ProxyRules::Type::EMPTY: ++ type = "direct"; ++ break; ++ case net::ProxyConfig::ProxyRules::Type::PROXY_LIST: ++ type = "list"; ++ ++ state.SetPath({"config", "rules", "single_proxies"}, base::Value(omitDirect(rules.single_proxies.ToPacString()))); ++ break; ++ case net::ProxyConfig::ProxyRules::Type::PROXY_LIST_PER_SCHEME: ++ type = "list_per_scheme"; ++ ++ state.SetPath({"config", "rules", "proxies_for_http"}, base::Value(omitDirect(rules.proxies_for_http.ToPacString()))); ++ state.SetPath({"config", "rules", "proxies_for_https"}, base::Value(omitDirect(rules.proxies_for_https.ToPacString()))); ++ state.SetPath({"config", "rules", "proxies_for_ftp"}, base::Value(omitDirect(rules.proxies_for_ftp.ToPacString()))); ++ state.SetPath({"config", "rules", "fallback_proxies"}, base::Value(omitDirect(rules.fallback_proxies.ToPacString()))); ++ break; ++ default: ++ NOTREACHED(); ++ break; ++ } ++ state.SetPath({"config", "rules", "type"}, base::Value(type)); ++ state.SetPath({"config", "rules", "bypass_rules"}, base::Value(rules.bypass_rules.ToString())); ++ state.SetPath({"config", "rules", "reverse_bypass"}, base::Value(rules.reverse_bypass)); ++} ++ ++ProxyConfigMessageHandler::~ProxyConfigMessageHandler() { ++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || ++ !BrowserThread::IsThreadInitialized(BrowserThread::UI)); ++ if (is_observing_) { ++ proxy_config_service_->RemoveObserver(this); ++ } ++ pref_proxy_config_tracker_->DetachFromPrefService(); ++} ++ ++void ProxyConfigMessageHandler::RegisterMessages() { ++ DCHECK_CURRENTLY_ON(BrowserThread::UI); ++ ++ web_ui()->RegisterMessageCallback( ++ "enableNotifyUIWithState", ++ base::BindRepeating(&ProxyConfigMessageHandler::OnEnableNotifyUIWithState, ++ base::Unretained(this))); ++ web_ui()->RegisterMessageCallback( ++ "apply", ++ base::BindRepeating(&ProxyConfigMessageHandler::OnApply, ++ base::Unretained(this))); ++ web_ui()->RegisterMessageCallback( ++ "clear", ++ base::BindRepeating(&ProxyConfigMessageHandler::OnClear, ++ base::Unretained(this))); ++} ++ ++// The proxy configuration UI is not notified of state changes until this function runs. ++// After this function, OnProxyConfigChanged() will be called on all proxy state changes. ++void ProxyConfigMessageHandler::OnEnableNotifyUIWithState( ++ const base::Value::List& list) { ++ DCHECK_CURRENTLY_ON(BrowserThread::UI); ++ ++ if (!is_observing_) { ++ is_observing_ = true; ++ proxy_config_service_->AddObserver(this); ++ } ++ ++ net::ProxyConfigWithAnnotation config; ++ auto availability = proxy_config_service_->GetLatestProxyConfig(&config); ++ ++ const PrefService::Preference* const pref = ++ pref_service_->FindPreference(proxy_config::prefs::kProxy); ++ ProxyConfigDictionary proxy_dict(pref->GetValue()->GetDict().Clone()); ++ ProxyPrefs::ProxyMode mode; ++ if (!proxy_dict.GetMode(&mode) || mode == ProxyPrefs::MODE_SYSTEM) { ++ availability = net::ProxyConfigService::CONFIG_UNSET; ++ } ++ ++ OnProxyConfigChanged(config, availability); ++} ++ ++void ProxyConfigMessageHandler::OnClear(const base::Value::List& list) { ++ DCHECK_CURRENTLY_ON(BrowserThread::UI); ++ ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateSystem(); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); ++ pref_service_->CommitPendingWrite(); ++ OnEnableNotifyUIWithState(list); ++} ++ ++void ProxyConfigMessageHandler::OnApply(const base::Value::List& list) { ++ DCHECK_CURRENTLY_ON(BrowserThread::UI); ++ ++ if ((list.size() != 1) || !list[0].is_dict()) { ++ return; ++ } ++ ++ const base::DictionaryValue* config = nullptr; ++ if (!list[0].GetAsDictionary(&config)) ++ return; ++ ++ const base::Value *autoDetect = config->FindKeyOfType("auto_detect", base::Value::Type::BOOLEAN); ++ if (autoDetect == nullptr) ++ return; ++ ++ if (autoDetect->GetBool()) { ++ apply(net::ProxyConfig::CreateAutoDetect()); ++ return; ++ } ++ ++ const base::Value *pacURL = config->FindKeyOfType("pac_url", base::Value::Type::STRING); ++ if (pacURL != nullptr) { ++ const base::Value *pacMandatory = config->FindKeyOfType("pac_mandatory", base::Value::Type::BOOLEAN); ++ if (pacMandatory == nullptr) ++ return; ++ auto proxyConfig = net::ProxyConfig::CreateFromCustomPacURL(GURL(pacURL->GetString())); ++ proxyConfig.set_pac_mandatory(pacMandatory->GetBool()); ++ ++ apply(proxyConfig); ++ return; ++ } ++ ++ const base::Value *rules = config->FindKeyOfType("rules", base::Value::Type::DICTIONARY); ++ if (rules == nullptr) ++ return; ++ ++ const base::Value *type = rules->FindKeyOfType("type", base::Value::Type::STRING); ++ if (type == nullptr) ++ return; ++ ++ net::ProxyConfig proxyConfig; ++ ++ bool readBypass = false; ++ ++ auto t = type->GetString(); ++ if (t == "list") { ++ const base::Value *single_proxies = rules->FindKeyOfType("single_proxies", base::Value::Type::STRING); ++ if (single_proxies == nullptr) ++ return; ++ proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::PROXY_LIST; ++ proxyConfig.proxy_rules().single_proxies.SetFromPacString(single_proxies->GetString()); ++ readBypass = true; ++ } else if (t == "list_per_scheme") { ++ const base::Value *http = rules->FindKeyOfType("proxies_for_http", base::Value::Type::STRING); ++ if (http == nullptr) ++ return; ++ ++ const base::Value *https = rules->FindKeyOfType("proxies_for_https", base::Value::Type::STRING); ++ if (https == nullptr) ++ return; ++ ++ const base::Value *ftp = rules->FindKeyOfType("proxies_for_ftp", base::Value::Type::STRING); ++ if (ftp == nullptr) ++ return; ++ ++ const base::Value *fallback = rules->FindKeyOfType("fallback_proxies", base::Value::Type::STRING); ++ if (fallback == nullptr) ++ return; ++ ++ proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::PROXY_LIST_PER_SCHEME; ++ proxyConfig.proxy_rules().proxies_for_http.SetFromPacString(http->GetString()); ++ proxyConfig.proxy_rules().proxies_for_https.SetFromPacString(https->GetString()); ++ proxyConfig.proxy_rules().proxies_for_ftp.SetFromPacString(ftp->GetString()); ++ proxyConfig.proxy_rules().fallback_proxies.SetFromPacString(fallback->GetString()); ++ readBypass = true; ++ } else if (t == "direct") { ++ proxyConfig.proxy_rules().type = net::ProxyConfig::ProxyRules::Type::EMPTY; ++ } else if (t == "none") { ++ base::Value::List empty; ++ OnClear(empty); ++ return; ++ } else { ++ // invalid type ++ LOG(WARNING) << "invalid proxy configuration type"; ++ return; ++ } ++ ++ // bypass rules and reverse flag are common to both list types of proxy rules ++ if (readBypass) { ++ const base::Value *bypass_rules = rules->FindKeyOfType("bypass_rules", base::Value::Type::STRING); ++ if (bypass_rules == nullptr) ++ return; ++ ++ const base::Value *reverse_bypass = rules->FindKeyOfType("reverse_bypass", base::Value::Type::BOOLEAN); ++ if (reverse_bypass == nullptr) ++ return; ++ ++ proxyConfig.proxy_rules().bypass_rules.ParseFromString(bypass_rules->GetString()); ++ proxyConfig.proxy_rules().reverse_bypass = reverse_bypass->GetBool(); ++ } ++ ++ apply(proxyConfig); ++} ++ ++void ProxyConfigMessageHandler::apply(const net::ProxyConfig& proxyConfig) { ++ if (proxyConfig.auto_detect()) { ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateAutoDetect(); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); ++ } else if (proxyConfig.has_pac_url()) { ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreatePacScript(proxyConfig.pac_url().spec(), proxyConfig.pac_mandatory()); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); ++ } else if (proxyConfig.proxy_rules().type == net::ProxyConfig::ProxyRules::Type::EMPTY) { ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateDirect(); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); ++ } else { ++ auto proxyRulesAsString = proxyConfig.proxy_rules().ToString(); ++ auto bypassRulesAsString = proxyConfig.proxy_rules().bypass_rules.ToString(); ++ ++ // fixed servers ++ const base::Value::Dict cfg = ProxyConfigDictionary::CreateFixedServers(proxyRulesAsString, ++ bypassRulesAsString, proxyConfig.proxy_rules().reverse_bypass); ++ pref_service_->SetDict(proxy_config::prefs::kProxy, cfg.Clone()); ++ } ++ pref_service_->CommitPendingWrite(); ++ ++ base::Value::List empty; ++ OnEnableNotifyUIWithState(empty); ++} ++ ++} // namespace ++ ++ProxyConfigUI::ProxyConfigUI(content::WebUI* web_ui) : WebUIController(web_ui) { ++ Profile* profile = Profile::FromWebUI(web_ui); ++ ++ web_ui->AddMessageHandler(std::make_unique(profile)); ++ ++ // Set up the chrome://proxy/ source. ++ content::WebUIDataSource::Add(profile, CreateProxyConfigHTMLSource()); ++} +diff --git a/chrome/browser/ui/webui/proxy_config_ui.h b/chrome/browser/ui/webui/proxy_config_ui.h +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/ui/webui/proxy_config_ui.h +@@ -0,0 +1,31 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++#ifndef CHROME_BROWSER_UI_WEBUI_PROXY_CONFIG_UI_H_ ++#define CHROME_BROWSER_UI_WEBUI_PROXY_CONFIG_UI_H_ ++ ++#include "content/public/browser/web_ui_controller.h" ++ ++// The WebUI for chrome://proxy/. ++class ProxyConfigUI : public content::WebUIController { ++ public: ++ ProxyConfigUI(const ProxyConfigUI&) = delete; ++ ProxyConfigUI& operator=(const ProxyConfigUI&) = delete; ++ explicit ProxyConfigUI(content::WebUI* web_ui); ++}; ++ ++#endif // CHROME_BROWSER_UI_WEBUI_PROXY_CONFIG_UI_H_ +diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc +--- a/chrome/common/webui_url_constants.cc ++++ b/chrome/common/webui_url_constants.cc +@@ -47,6 +47,8 @@ const char kChromeUICertificateViewerHost[] = "view-cert"; + const char kChromeUICertificateViewerURL[] = "chrome://view-cert/"; + const char kChromeUIChromeSigninHost[] = "chrome-signin"; + const char kChromeUIChromeSigninURL[] = "chrome://chrome-signin/"; ++const char kChromeUIProxyConfigHost[] = "proxy"; ++const char kChromeUIProxyConfigURL[] = "chrome://proxy/"; + const char kChromeUIChromeURLsHost[] = "chrome-urls"; + const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/"; + const char kChromeUIComponentsHost[] = "components"; +@@ -439,6 +441,7 @@ bool IsSystemWebUIHost(base::StringPiece host) { + kChromeUILockScreenNetworkHost, + kChromeUILockScreenStartReauthHost, + kChromeUIMobileSetupHost, ++ kChromeUIProxyConfigHost, + kChromeUIMultiDeviceSetupHost, + kChromeUINetworkHost, + kChromeUINotificationTesterHost, +@@ -704,6 +707,7 @@ const char* const kChromeHostURLs[] = { + #if !BUILDFLAG(IS_ANDROID) + #if !BUILDFLAG(IS_CHROMEOS_ASH) + kChromeUIAppLauncherPageHost, ++ kChromeUIProxyConfigHost, + #endif + kChromeUIBookmarksHost, + kChromeUIDownloadsHost, +diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h +--- a/chrome/common/webui_url_constants.h ++++ b/chrome/common/webui_url_constants.h +@@ -134,6 +134,8 @@ extern const char kChromeUIMetricsInternalsHost[]; + extern const char kChromeUINTPTilesInternalsHost[]; + extern const char kChromeUINaClHost[]; + extern const char kChromeUINetExportHost[]; ++extern const char kChromeUIProxyConfigHost[]; ++extern const char kChromeUIProxyConfigURL[]; + extern const char kChromeUINetInternalsHost[]; + extern const char kChromeUINetInternalsURL[]; + extern const char kChromeUINewTabHost[]; +diff --git a/components/proxy_config/pref_proxy_config_tracker_impl.cc b/components/proxy_config/pref_proxy_config_tracker_impl.cc +--- a/components/proxy_config/pref_proxy_config_tracker_impl.cc ++++ b/components/proxy_config/pref_proxy_config_tracker_impl.cc +@@ -380,6 +380,7 @@ bool PrefProxyConfigTrackerImpl::PrefConfigToNetConfig( + if (proxy_dict.GetBypassList(&proxy_bypass)) { + proxy_config.proxy_rules().bypass_rules.ParseFromString(proxy_bypass); + } ++ proxy_config.proxy_rules().reverse_bypass = proxy_dict.HasReverseBypass(); + *config = net::ProxyConfigWithAnnotation( + proxy_config, kSettingsProxyConfigTrafficAnnotation); + return true; +diff --git a/components/proxy_config/proxy_config_dictionary.cc b/components/proxy_config/proxy_config_dictionary.cc +--- a/components/proxy_config/proxy_config_dictionary.cc ++++ b/components/proxy_config/proxy_config_dictionary.cc +@@ -30,6 +30,8 @@ const char kProxyPacMandatory[] = "pac_mandatory"; + // String containing proxy bypass rules. For a specification of the + // expected syntax see net::ProxyBypassRules::ParseFromString(). + const char kProxyBypassList[] = "bypass_list"; ++// Boolean telling whether to reverse the meaning of the bypass list. ++const char kProxyReverseBypass[] = "reverse_bypass"; + + } // namespace + +@@ -76,6 +78,14 @@ bool ProxyConfigDictionary::HasBypassList() const { + return dict_.Find(kProxyBypassList); + } + ++bool ProxyConfigDictionary::HasReverseBypass() const { ++ const base::Value* value = dict_.Find(kProxyReverseBypass); ++ if (!value || !value->is_bool()) { ++ return false; ++ } ++ return value->GetBool(); ++} ++ + const base::Value::Dict& ProxyConfigDictionary::GetDictionary() const { + return dict_; + } +@@ -83,13 +93,13 @@ const base::Value::Dict& ProxyConfigDictionary::GetDictionary() const { + // static + base::Value::Dict ProxyConfigDictionary::CreateDirect() { + return CreateDictionary(ProxyPrefs::MODE_DIRECT, std::string(), false, +- std::string(), std::string()); ++ std::string(), std::string(), false); + } + + // static + base::Value::Dict ProxyConfigDictionary::CreateAutoDetect() { + return CreateDictionary(ProxyPrefs::MODE_AUTO_DETECT, std::string(), false, +- std::string(), std::string()); ++ std::string(), std::string(), false); + } + + // static +@@ -97,16 +107,17 @@ base::Value::Dict ProxyConfigDictionary::CreatePacScript( + const std::string& pac_url, + bool pac_mandatory) { + return CreateDictionary(ProxyPrefs::MODE_PAC_SCRIPT, pac_url, pac_mandatory, +- std::string(), std::string()); ++ std::string(), std::string(), false); + } + + // static + base::Value::Dict ProxyConfigDictionary::CreateFixedServers( + const std::string& proxy_server, +- const std::string& bypass_list) { ++ const std::string& bypass_list, ++ bool reverse_bypass) { + if (!proxy_server.empty()) { + return CreateDictionary(ProxyPrefs::MODE_FIXED_SERVERS, std::string(), +- false, proxy_server, bypass_list); ++ false, proxy_server, bypass_list, reverse_bypass); + } else { + return CreateDirect(); + } +@@ -115,7 +126,7 @@ base::Value::Dict ProxyConfigDictionary::CreateFixedServers( + // static + base::Value::Dict ProxyConfigDictionary::CreateSystem() { + return CreateDictionary(ProxyPrefs::MODE_SYSTEM, std::string(), false, +- std::string(), std::string()); ++ std::string(), std::string(), false); + } + + // static +@@ -124,7 +135,8 @@ base::Value::Dict ProxyConfigDictionary::CreateDictionary( + const std::string& pac_url, + bool pac_mandatory, + const std::string& proxy_server, +- const std::string& bypass_list) { ++ const std::string& bypass_list, ++ bool reverse_bypass) { + base::Value::Dict dict; + dict.Set(kProxyMode, base::Value(ProxyModeToString(mode))); + if (!pac_url.empty()) { +@@ -133,8 +145,10 @@ base::Value::Dict ProxyConfigDictionary::CreateDictionary( + } + if (!proxy_server.empty()) + dict.Set(kProxyServer, base::Value(proxy_server)); +- if (!bypass_list.empty()) ++ if (!bypass_list.empty()) { + dict.Set(kProxyBypassList, base::Value(bypass_list)); ++ dict.Set(kProxyReverseBypass, base::Value(reverse_bypass)); ++ } + return dict; + } + +diff --git a/components/proxy_config/proxy_config_dictionary.h b/components/proxy_config/proxy_config_dictionary.h +--- a/components/proxy_config/proxy_config_dictionary.h ++++ b/components/proxy_config/proxy_config_dictionary.h +@@ -42,6 +42,7 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { + bool GetProxyServer(std::string* out) const; + bool GetBypassList(std::string* out) const; + bool HasBypassList() const; ++ bool HasReverseBypass() const; + + const base::Value::Dict& GetDictionary() const; + +@@ -50,7 +51,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { + static base::Value::Dict CreatePacScript(const std::string& pac_url, + bool pac_mandatory); + static base::Value::Dict CreateFixedServers(const std::string& proxy_server, +- const std::string& bypass_list); ++ const std::string& bypass_list, ++ bool reverse_bypass); + static base::Value::Dict CreateSystem(); + + // Encodes the proxy server as "=://". +@@ -66,7 +68,8 @@ class PROXY_CONFIG_EXPORT ProxyConfigDictionary { + const std::string& pac_url, + bool pac_mandatory, + const std::string& proxy_server, +- const std::string& bypass_list); ++ const std::string& bypass_list, ++ bool reverse_bypass); + + base::Value::Dict dict_; + }; +diff --git a/components/proxy_config/proxy_policy_handler.cc b/components/proxy_config/proxy_policy_handler.cc +--- a/components/proxy_config/proxy_policy_handler.cc ++++ b/components/proxy_config/proxy_policy_handler.cc +@@ -263,7 +263,7 @@ void ProxyPolicyHandler::ApplyPolicySettings(const PolicyMap& policies, + set_proxy_pref_value(ProxyConfigDictionary::CreateFixedServers( + server->GetString(), bypass_list && bypass_list->is_string() + ? bypass_list->GetString() +- : std::string())); ++ : std::string(), false)); + } + break; + } +diff --git a/net/proxy_resolution/proxy_config.cc b/net/proxy_resolution/proxy_config.cc +--- a/net/proxy_resolution/proxy_config.cc ++++ b/net/proxy_resolution/proxy_config.cc +@@ -109,7 +109,7 @@ void ProxyConfig::ProxyRules::ParseFromString(const std::string& proxy_rules) { + &single_proxies, + ProxyServer::SCHEME_HTTP); + type = Type::PROXY_LIST; +- return; ++ continue; + } + + // Trim whitespace off the url scheme. +@@ -140,6 +140,56 @@ void ProxyConfig::ProxyRules::ParseFromString(const std::string& proxy_rules) { + } + } + ++std::string ProxyConfig::ProxyRules::ToString() const { ++ if (type == Type::EMPTY) { ++ return ""; ++ } ++ ++ // special case: a single proxy servers list specified ++ if (type == Type::PROXY_LIST) { ++ std::string proxy_list; ++ for (const ProxyServer& proxy_server : ++ single_proxies.GetAll()) { ++ proxy_list += ProxyServerToProxyUri(proxy_server) + ";"; ++ } ++ // remove last semicolon ++ if (proxy_list.length() != 0 ) { ++ proxy_list.pop_back(); ++ } ++ return proxy_list; ++ } ++ ++ if (type != Type::PROXY_LIST_PER_SCHEME) { ++ NOTREACHED(); ++ // Unexpected LIST with fallback, or other type values ++ return ""; ++ } ++ ++ // start to build a per-scheme list ++ std::string list; ++ for (const ProxyServer& proxy_server : ++ proxies_for_http.GetAll()) { ++ list += "http=" + ProxyServerToProxyUri(proxy_server) + ";"; ++ } ++ for (const ProxyServer& proxy_server : ++ proxies_for_https.GetAll()) { ++ list += "https=" + ProxyServerToProxyUri(proxy_server) + ";"; ++ } ++ for (const ProxyServer& proxy_server : ++ proxies_for_ftp.GetAll()) { ++ list += "ftp=" + ProxyServerToProxyUri(proxy_server) + ";"; ++ } ++ for (const ProxyServer& proxy_server : ++ fallback_proxies.GetAll()) { ++ list += "socks=" + ProxyServerToProxyUri(proxy_server) + ";"; ++ } ++ if (list.length() != 0 ) { ++ // remove last semicolon ++ list.pop_back(); ++ } ++ return list; ++} ++ + const ProxyList* ProxyConfig::ProxyRules::MapUrlSchemeToProxyList( + const std::string& url_scheme) const { + const ProxyList* proxy_server_list = const_cast(this)-> +diff --git a/net/proxy_resolution/proxy_config.h b/net/proxy_resolution/proxy_config.h +--- a/net/proxy_resolution/proxy_config.h ++++ b/net/proxy_resolution/proxy_config.h +@@ -103,6 +103,9 @@ class NET_EXPORT ProxyConfig { + // and use socks4://foopy2 for all other + // URLs. + void ParseFromString(const std::string& proxy_rules); ++ // Returns the proxy rules in a format that can be parsed by ParseFromString; ++ // all information except bypass rules is used. ++ std::string ToString() const; + + // Returns one of {&proxies_for_http, &proxies_for_https, &proxies_for_ftp, + // &fallback_proxies}, or NULL if there is no proxy to use. +-- +2.25.1 diff --git a/bromite/build/patches/Add-an-always-incognito-mode.patch b/bromite/build/patches/Add-an-always-incognito-mode.patch new file mode 100644 index 00000000..b2dd4d11 --- /dev/null +++ b/bromite/build/patches/Add-an-always-incognito-mode.patch @@ -0,0 +1,2041 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sat, 2 Oct 2021 13:20:36 +0200 +Subject: Add an always-incognito mode + +Add a preference that causes all new tabs and all clicked links to launch in incognito. +Make sure initial incognito status is correctly recognized. +Enable incognito custom tabs and fix crashes for incognito/custom tab intents +Use a native flag to correctly start new tabs on app startup + +Add history, recents, offlinepages and send to home screen support for always incognito. +History, recent tabs and offline pages require the INCOGNITO_TAB_HISTORY_ENABLED +flag turned on. +IncognitoPlaceholder is also deactivated, both in the phone and tablet version. +The relative tests are also present. + +based on the original work by Ryan Archer +Major contributions by uazo. +See also: https://github.com/bromite/bromite/pull/1427 + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/android/chrome_java_resources.gni | 1 + + chrome/android/chrome_java_sources.gni | 2 + + .../java/res/xml/incognito_preferences.xml | 37 ++++ + .../java/res/xml/privacy_preferences.xml | 5 + + .../AlwaysIncognitoLinkInterceptor.java | 53 ++++++ + .../chrome/browser/ChromeTabbedActivity.java | 9 +- + .../chrome/browser/app/ChromeActivity.java | 4 + + .../AppMenuPropertiesDelegateImpl.java | 26 ++- + .../ChromeContextMenuPopulator.java | 7 +- + .../CustomTabActivityLifecycleUmaTracker.java | 25 --- + .../CustomTabAppMenuPropertiesDelegate.java | 4 + + .../CustomTabIntentDataProvider.java | 5 +- + .../browser/download/DownloadUtils.java | 16 +- + .../browser/history/HistoryManager.java | 18 +- + .../chrome/browser/history/HistoryPage.java | 16 ++ + .../native_page/NativePageFactory.java | 4 +- + .../chrome/browser/ntp/RecentTabsManager.java | 28 ++- + .../privacy/settings/IncognitoSettings.java | 160 ++++++++++++++++++ + .../browser/settings/SettingsActivity.java | 4 + + .../HistoricalTabModelObserver.java | 6 +- + .../tab/tab_restore/HistoricalTabSaver.java | 2 +- + .../tab_restore/HistoricalTabSaverImpl.java | 17 +- + .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +- + .../browser/tabmodel/ChromeTabCreator.java | 5 +- + .../tabmodel/TabModelSelectorImpl.java | 3 + + .../browser/tabmodel/TabPersistentStore.java | 9 + + .../browser/toolbar/ToolbarManager.java | 4 +- + .../webapps/WebappIntentDataProvider.java | 14 ++ + chrome/browser/about_flags.cc | 4 + + .../browser/android/historical_tab_saver.cc | 22 ++- + .../chrome_autocomplete_provider_client.cc | 7 + + .../chrome_autocomplete_provider_client.h | 1 + + .../host_content_settings_map_factory.cc | 20 ++- + chrome/browser/flag_descriptions.cc | 6 + + chrome/browser/flag_descriptions.h | 3 + + .../flags/android/chrome_feature_list.cc | 4 +- + chrome/browser/history/history_tab_helper.cc | 18 ++ + chrome/browser/history/history_tab_helper.h | 10 +- + .../android/offline_page_bridge.cc | 11 +- + .../android/offline_page_model_factory.cc | 20 ++- + .../android/request_coordinator_factory.cc | 27 ++- + .../offline_page_model_factory.h | 1 + + .../offline_pages/recent_tab_helper.cc | 19 ++- + .../browser/offline_pages/recent_tab_helper.h | 3 + + .../request_coordinator_factory.h | 4 +- + chrome/browser/prefs/browser_prefs.cc | 5 + + .../browser/ui/android/native_page/BUILD.gn | 2 + + .../browser/ui/native_page/NativePage.java | 12 +- + .../strings/android_chrome_strings.grd | 31 ++++ + .../browser/toolbar/LocationBarModel.java | 7 +- + chrome/browser/ui/messages/android/BUILD.gn | 1 + + .../snackbar/INeedSnackbarManager.java | 27 +++ + chrome/common/pref_names.cc | 6 + + chrome/common/pref_names.h | 6 + + .../browser/content_settings_pref_provider.cc | 6 +- + .../browser/content_settings_pref_provider.h | 2 + + .../core/browser/host_content_settings_map.cc | 4 +- + .../core/browser/host_content_settings_map.h | 3 + + .../core/offline_page_feature.cc | 3 + + .../offline_pages/core/offline_page_feature.h | 1 + + .../browser/autocomplete_provider_client.cc | 4 + + .../browser/autocomplete_provider_client.h | 1 + + .../omnibox/browser/base_search_provider.cc | 2 +- + components/omnibox/browser/search_provider.cc | 4 +- + .../host_content_settings_map_factory.cc | 1 + + 65 files changed, 719 insertions(+), 77 deletions(-) + create mode 100644 chrome/android/java/res/xml/incognito_preferences.xml + create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java + create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java + create mode 100644 chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/INeedSnackbarManager.java + +diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni +--- a/chrome/android/chrome_java_resources.gni ++++ b/chrome/android/chrome_java_resources.gni +@@ -652,6 +652,7 @@ chrome_java_resources = [ + "java/res/xml/main_preferences.xml", + "java/res/xml/manage_sync_preferences.xml", + "java/res/xml/phone_as_a_security_key_accessory_filter.xml", ++ "java/res/xml/incognito_preferences.xml", + "java/res/xml/privacy_preferences.xml", + "java/res/xml/search_widget_info.xml", + "java/res/xml/tracing_preferences.xml", +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 +@@ -3,6 +3,7 @@ + # found in the LICENSE file. + + chrome_java_sources = [ ++ "java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java", + "java/src/com/google/android/apps/chrome/appwidget/bookmarks/BookmarkThumbnailWidgetProvider.java", + "java/src/org/chromium/chrome/browser/ActivityTabProvider.java", + "java/src/org/chromium/chrome/browser/ActivityUtils.java", +@@ -914,6 +915,7 @@ chrome_java_sources = [ + "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoLockSettings.java", + "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", + "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", ++ "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java", + "java/src/org/chromium/chrome/browser/provider/BaseColumns.java", + "java/src/org/chromium/chrome/browser/provider/BookmarkColumns.java", + "java/src/org/chromium/chrome/browser/provider/ChromeBrowserProviderImpl.java", +diff --git a/chrome/android/java/res/xml/incognito_preferences.xml b/chrome/android/java/res/xml/incognito_preferences.xml +new file mode 100644 +--- /dev/null ++++ b/chrome/android/java/res/xml/incognito_preferences.xml +@@ -0,0 +1,37 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ +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 ++++ b/chrome/android/java/res/xml/privacy_preferences.xml +@@ -40,6 +40,11 @@ found in the LICENSE file. + android:key="secure_dns" + android:title="@string/settings_secure_dns_title" + android:fragment="org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings"/> ++ + + throw new IllegalStateException( + "Attempting to access TabCreator before initialization"); + } ++ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ incognito = true; ++ } + return mTabCreatorManagerSupplier.get().getTabCreator(incognito); + } + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +@@ -34,6 +34,7 @@ import org.chromium.base.supplier.ObservableSupplier; + import org.chromium.base.supplier.OneshotSupplier; + import org.chromium.chrome.R; + import org.chromium.chrome.browser.ActivityTabProvider; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.banners.AppMenuVerbiage; + import org.chromium.chrome.browser.bookmarks.BookmarkFeatures; + import org.chromium.chrome.browser.bookmarks.BookmarkModel; +@@ -99,6 +100,10 @@ import java.util.ArrayList; + import java.util.List; + import java.util.Map; + ++import org.chromium.components.prefs.PrefService; ++import org.chromium.components.user_prefs.UserPrefs; ++import org.chromium.chrome.browser.preferences.Pref; ++ + /** + * Base implementation of {@link AppMenuPropertiesDelegate} that handles hiding and showing menu + * items based on activity state. +@@ -560,6 +565,13 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + } + + private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { ++ boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); ++ if (always_incognito) { ++ final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id); ++ if (newTabOption != null) ++ newTabOption.setVisible(false); ++ } ++ + // We have to iterate all menu items since same menu item ID may be associated with more + // than one menu items. + boolean isOverviewModeMenu = menuGroup == MenuGroup.OVERVIEW_MODE_MENU; +@@ -636,7 +648,15 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + } + + if (item.getItemId() == R.id.recent_tabs_menu_id) { +- item.setVisible(!isIncognito); ++ if (always_incognito) { ++ PrefService prefService = ++ UserPrefs.get(Profile.getLastUsedRegularProfile()); ++ boolean historyEnabledInIncognito = ++ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); ++ item.setVisible(historyEnabledInIncognito); ++ } ++ else ++ item.setVisible(!isIncognito); + } + if (item.getItemId() == R.id.menu_group_tabs) { + item.setVisible(isMenuGroupTabsVisible); +@@ -876,7 +896,9 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + // is not persisted when adding to the homescreen. + // * If creating shortcuts it not supported by the current home screen. + return WebappsUtils.isAddToHomeIntentSupported() && !isChromeScheme && !isFileScheme +- && !isContentScheme && !isIncognito && !url.isEmpty(); ++ && !isContentScheme && !url.isEmpty() ++ && (!isIncognito || ++ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); + } + + /** +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +@@ -30,6 +30,7 @@ import org.chromium.base.ContextUtils; + import org.chromium.base.metrics.RecordHistogram; + import org.chromium.base.supplier.Supplier; + import org.chromium.chrome.R; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator; + import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item; + import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ListItemType; +@@ -364,6 +365,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { + boolean hasSaveImage = false; + mShowEphemeralTabNewLabel = null; + ++ boolean always_incognito = ++ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); ++ + List> groupedItems = new ArrayList<>(); + + if (mParams.isAnchor()) { +@@ -382,6 +386,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { + linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP)); + } + } ++ + if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) { + linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB)); + } +@@ -406,7 +411,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { + } + } + if (FirstRunStatus.getFirstRunFlowComplete()) { +- if (!mItemDelegate.isIncognito() ++ if ((always_incognito || !mItemDelegate.isIncognito()) + && UrlUtilities.isDownloadableScheme(mParams.getLinkUrl())) { + linkGroup.add(createListItem(Item.SAVE_LINK_AS)); + } +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java +@@ -68,31 +68,6 @@ public class CustomTabActivityLifecycleUmaTracker + private boolean mIsInitialResume = true; + + private void recordIncognitoLaunchReason() { +- IncognitoCustomTabIntentDataProvider incognitoProvider = +- (IncognitoCustomTabIntentDataProvider) mIntentDataProvider; +- +- @IntentHandler.IncognitoCCTCallerId +- int incognitoCCTCallerId = incognitoProvider.getFeatureIdForMetricsCollection(); +- RecordHistogram.recordEnumeratedHistogram("CustomTabs.IncognitoCCTCallerId", +- incognitoCCTCallerId, IntentHandler.IncognitoCCTCallerId.NUM_ENTRIES); +- +- // Record which 1P app launched Incognito CCT. +- if (incognitoCCTCallerId == IntentHandler.IncognitoCCTCallerId.GOOGLE_APPS) { +- String sendersPackageName = incognitoProvider.getSendersPackageName(); +- @IntentHandler.ExternalAppId +- int externalId = IntentHandler.mapPackageToExternalAppId(sendersPackageName); +- if (externalId != IntentHandler.ExternalAppId.OTHER) { +- RecordHistogram.recordEnumeratedHistogram("CustomTabs.ClientAppId.Incognito", +- externalId, IntentHandler.ExternalAppId.NUM_ENTRIES); +- } else { +- // Using package name didn't give any meaningful insight on who launched the +- // Incognito CCT, falling back to check if they provided EXTRA_APPLICATION_ID. +- externalId = +- IntentHandler.determineExternalIntentSource(incognitoProvider.getIntent()); +- RecordHistogram.recordEnumeratedHistogram("CustomTabs.ClientAppId.Incognito", +- externalId, IntentHandler.ExternalAppId.NUM_ENTRIES); +- } +- } + } + + private void recordUserAction() { +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +@@ -21,6 +21,7 @@ import org.chromium.base.ContextUtils; + import org.chromium.base.supplier.ObservableSupplier; + import org.chromium.chrome.R; + import org.chromium.chrome.browser.ActivityTabProvider; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.DefaultBrowserInfo; + import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; + import org.chromium.chrome.browser.app.appmenu.DividerLineMenuItemViewBinder; +@@ -176,6 +177,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat + downloadItemVisible = false; + openInChromeItemVisible = false; + } ++ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ downloadItemVisible = true; ++ } + + boolean isChromeScheme = url.getScheme().equals(UrlConstants.CHROME_SCHEME) + || url.getScheme().equals(UrlConstants.CHROME_NATIVE_SCHEME); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +@@ -49,6 +49,9 @@ import org.chromium.components.embedder_support.util.UrlConstants; + import org.chromium.components.version_info.VersionInfo; + import org.chromium.device.mojom.ScreenOrientationLockType; + ++import org.chromium.base.ContextUtils; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++ + import java.lang.annotation.Retention; + import java.lang.annotation.RetentionPolicy; + import java.util.ArrayList; +@@ -855,7 +858,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid + + @Override + public boolean isIncognito() { +- return false; ++ return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); + } + + @Nullable +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +@@ -34,6 +34,7 @@ import org.chromium.base.annotations.NativeMethods; + import org.chromium.base.metrics.RecordHistogram; + import org.chromium.base.metrics.RecordUserAction; + import org.chromium.chrome.R; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.ChromeTabbedActivity; + import org.chromium.chrome.browser.IntentHandler; + import org.chromium.chrome.browser.app.download.home.DownloadActivity; +@@ -74,6 +75,10 @@ import org.chromium.url.GURL; + + import java.io.File; + ++import org.chromium.components.prefs.PrefService; ++import org.chromium.components.user_prefs.UserPrefs; ++import org.chromium.chrome.browser.preferences.Pref; ++ + /** + * A class containing some utility static methods. + */ +@@ -318,7 +323,16 @@ public class DownloadUtils { + // Offline pages isn't supported in Incognito. This should be checked before calling + // OfflinePageBridge.getForProfile because OfflinePageBridge instance will not be found + // for incognito profile. +- if (tab.isIncognito()) return false; ++ boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); ++ if (always_incognito) { ++ PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); ++ boolean historyEnabledInIncognito = ++ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); ++ if (historyEnabledInIncognito == false) ++ return false; ++ } else { ++ if (tab.isIncognito()) return false; ++ } + + // Check if the page url is supported for saving. Only HTTP and HTTPS pages are allowed. + if (!OfflinePageBridge.canSavePage(tab.getUrl())) return false; +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java +@@ -35,6 +35,7 @@ import com.google.android.material.tabs.TabLayout.OnTabSelectedListener; + import org.chromium.base.metrics.RecordHistogram; + import org.chromium.base.metrics.RecordUserAction; + import org.chromium.base.supplier.ObservableSupplier; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.base.supplier.ObservableSupplierImpl; + import org.chromium.base.supplier.Supplier; + import org.chromium.chrome.R; +@@ -77,6 +78,12 @@ import java.io.Serializable; + import java.util.List; + import java.util.concurrent.atomic.AtomicReference; + ++import org.chromium.chrome.browser.profiles.Profile; ++import org.chromium.base.ContextUtils; ++import org.chromium.components.prefs.PrefService; ++import org.chromium.components.user_prefs.UserPrefs; ++import org.chromium.chrome.browser.preferences.Pref; ++ + /** + * Combines and manages the different UI components of browsing history. + */ +@@ -551,7 +558,16 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve + return mRootView; + } + +- private boolean shouldShowIncognitoPlaceholder() { ++ public boolean isIncognito() { return mIsIncognito; } ++ ++ public boolean shouldShowIncognitoPlaceholder() { ++ if (mIsIncognito && ++ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); ++ boolean historyEnabledInIncognito = ++ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); ++ if (historyEnabledInIncognito) return false; ++ } + return mIsIncognito + && ChromeFeatureList.isEnabled( + ChromeFeatureList.UPDATE_HISTORY_ENTRY_POINTS_IN_INCOGNITO); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java +@@ -11,6 +11,7 @@ import androidx.annotation.VisibleForTesting; + + import org.chromium.base.supplier.Supplier; + import org.chromium.chrome.R; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.history_clusters.HistoryClustersConstants; + import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.tab.Tab; +@@ -19,6 +20,12 @@ import org.chromium.chrome.browser.ui.native_page.BasicNativePage; + import org.chromium.chrome.browser.ui.native_page.NativePageHost; + import org.chromium.components.embedder_support.util.UrlConstants; + ++import org.chromium.chrome.browser.profiles.Profile; ++import org.chromium.base.ContextUtils; ++import org.chromium.components.prefs.PrefService; ++import org.chromium.components.user_prefs.UserPrefs; ++import org.chromium.chrome.browser.preferences.Pref; ++ + /** + * Native page for managing browsing history. + */ +@@ -41,6 +48,15 @@ public class HistoryPage extends BasicNativePage { + boolean isIncognito, Supplier tabSupplier, String url) { + super(host); + ++ if (isIncognito && ++ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); ++ boolean historyEnabledInIncognito = ++ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED); ++ if (historyEnabledInIncognito == true) isIncognito = false; ++ } ++ ++ + Uri uri = Uri.parse(url); + assert uri.getHost().equals(UrlConstants.HISTORY_HOST); + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +@@ -15,6 +15,7 @@ import org.chromium.base.jank_tracker.JankTracker; + import org.chromium.base.supplier.BooleanSupplier; + import org.chromium.base.supplier.DestroyableObservableSupplier; + import org.chromium.base.supplier.Supplier; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.app.ChromeActivity; + import org.chromium.chrome.browser.app.download.home.DownloadPage; + import org.chromium.chrome.browser.bookmarks.BookmarkPage; +@@ -251,7 +252,8 @@ public class NativePageFactory { + String url, NativePage candidatePage, Tab tab, boolean isIncognito) { + NativePage page; + +- switch (NativePage.nativePageType(url, candidatePage, isIncognito)) { ++ boolean isAlwaysIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); ++ switch (NativePage.nativePageType(url, candidatePage, isIncognito, isAlwaysIncognito)) { + case NativePageType.NONE: + return null; + case NativePageType.CANDIDATE: +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java +@@ -21,6 +21,15 @@ import org.chromium.chrome.browser.ui.favicon.FaviconHelper; + import org.chromium.chrome.browser.ui.favicon.FaviconHelper.FaviconImageCallback; + import org.chromium.url.GURL; + ++import android.content.Intent; ++import android.provider.Browser; ++import android.net.Uri; ++import org.chromium.base.ContextUtils; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++import org.chromium.chrome.browser.IntentHandler; ++import org.chromium.ui.mojom.WindowOpenDisposition; ++import org.chromium.components.embedder_support.util.UrlUtilities; ++ + import java.util.HashMap; + import java.util.List; + import java.util.Map; +@@ -78,7 +87,8 @@ public class RecentTabsManager { + */ + public RecentTabsManager(Tab tab, TabModelSelector tabModelSelector, Profile profile, + Context context, Runnable showHistoryManager) { +- mProfile = profile; ++ mProfile = profile.getOriginalProfile(); ++ profile = mProfile; + mActiveTab = tab; + mTabModelSelector = tabModelSelector; + mShowHistoryManager = showHistoryManager; +@@ -210,6 +220,22 @@ public class RecentTabsManager { + */ + public void openRecentlyClosedTab(RecentlyClosedTab tab, int windowDisposition) { + if (mIsDestroyed) return; ++ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ // allow only http/https urls ++ if (!UrlUtilities.isHttpOrHttps(tab.getUrl())) return; ++ ++ Context context = ContextUtils.getApplicationContext(); ++ Intent intent = new Intent(Intent.ACTION_VIEW, ++ Uri.parse(tab.getUrl().getSpec())); ++ intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); ++ if (windowDisposition != WindowOpenDisposition.CURRENT_TAB) { ++ intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true); ++ } ++ intent.setPackage(context.getPackageName()); ++ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ++ IntentHandler.startActivityForTrustedIntent(intent); ++ return; ++ } + mTabSessionIdsRestored.put(tab.getSessionId(), true); + RecordUserAction.record("MobileRecentTabManagerRecentTabOpened"); + // Window disposition will select which tab to open. +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java +new file mode 100644 +--- /dev/null ++++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java +@@ -0,0 +1,160 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++package org.chromium.chrome.browser.privacy.settings; ++ ++import android.os.Bundle; ++import android.content.Context; ++import android.content.Intent; ++import android.provider.Browser; ++import android.net.Uri; ++import android.view.Menu; ++import android.view.MenuInflater; ++import android.view.MenuItem; ++ ++import androidx.preference.Preference; ++import androidx.preference.PreferenceFragmentCompat; ++import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; ++ ++import org.chromium.chrome.R; ++import org.chromium.chrome.browser.preferences.Pref; ++import org.chromium.chrome.browser.profiles.Profile; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; ++import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager; ++import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; ++import org.chromium.chrome.browser.ApplicationLifetime; ++import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; ++import org.chromium.components.browser_ui.settings.SettingsUtils; ++import org.chromium.components.prefs.PrefService; ++import org.chromium.components.user_prefs.UserPrefs; ++ ++/** ++ * Fragment to keep track of the all the always incognito related preferences. ++ */ ++public class IncognitoSettings ++ extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener, ++ INeedSnackbarManager { ++ private SnackbarManager mSnackbarManager; ++ private Snackbar mSnackbar; ++ ++ private static final String PREF_ALWAYS_INCOGNITO = "always_incognito"; ++ private static final String PREF_INCOGNITO_TAB_HISTORY = "incognito_history"; ++ private static final String PREF_INCOGNITO_SAVE_SITE_SETTING = "incognito_save_site_setting"; ++ ++ private final PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile()); ++ ++ @Override ++ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { ++ PrivacyPreferencesManagerImpl privacyPrefManager = ++ PrivacyPreferencesManagerImpl.getInstance(); ++ SettingsUtils.addPreferencesFromResource(this, R.xml.incognito_preferences); ++ getActivity().setTitle(R.string.incognito_settings_title); ++ ++ setHasOptionsMenu(true); ++ ++ updatePreferences(); ++ } ++ ++ @Override ++ public void onResume() { ++ super.onResume(); ++ updatePreferences(); ++ } ++ ++ public void updatePreferences() { ++ ChromeSwitchPreference alwaysIncognitoPref = ++ (ChromeSwitchPreference) findPreference(PREF_ALWAYS_INCOGNITO); ++ alwaysIncognitoPref.setChecked( ++ prefService.getBoolean(Pref.ALWAYS_INCOGNITO_ENABLED)); ++ alwaysIncognitoPref.setOnPreferenceChangeListener(this); ++ ++ mSnackbar = Snackbar.make(getActivity().getString(R.string.ui_relaunch_notice), ++ new SnackbarManager.SnackbarController() { ++ @Override ++ public void onDismissNoAction(Object actionData) { } ++ ++ @Override ++ public void onAction(Object actionData) { ++ ApplicationLifetime.terminate(true); ++ } ++ }, Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_UNKNOWN) ++ .setSingleLine(false) ++ .setAction(getActivity().getString(R.string.relaunch), ++ /*actionData*/null) ++ .setDuration(/*durationMs*/70000); ++ ++ ChromeSwitchPreference historyInIncognitoPref = ++ (ChromeSwitchPreference) findPreference(PREF_INCOGNITO_TAB_HISTORY); ++ historyInIncognitoPref.setChecked( ++ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED)); ++ historyInIncognitoPref.setOnPreferenceChangeListener(this); ++ ++ ChromeSwitchPreference saveSiteSettingsPref = ++ (ChromeSwitchPreference) findPreference(PREF_INCOGNITO_SAVE_SITE_SETTING); ++ saveSiteSettingsPref.setChecked( ++ prefService.getBoolean(Pref.INCOGNITO_SAVE_SITE_SETTING_ENABLED)); ++ saveSiteSettingsPref.setOnPreferenceChangeListener(this); ++ } ++ ++ @Override ++ public boolean onPreferenceChange(Preference preference, Object newValue) { ++ String key = preference.getKey(); ++ if (PREF_ALWAYS_INCOGNITO.equals(key)) { ++ AlwaysIncognitoLinkInterceptor.setAlwaysIncognito((boolean) newValue); ++ } else if (PREF_INCOGNITO_TAB_HISTORY.equals(key)) { ++ prefService.setBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED, (boolean) newValue); ++ } else if (PREF_INCOGNITO_SAVE_SITE_SETTING.equals(key)) { ++ prefService.setBoolean(Pref.INCOGNITO_SAVE_SITE_SETTING_ENABLED, (boolean) newValue); ++ } ++ if (!mSnackbarManager.isShowing()) { ++ mSnackbarManager.showSnackbar(mSnackbar); ++ } ++ return true; ++ } ++ ++ @Override ++ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { ++ menu.clear(); ++ MenuItem help = ++ menu.add(Menu.NONE, R.id.menu_id_targeted_help, Menu.NONE, R.string.menu_help); ++ help.setIcon(VectorDrawableCompat.create( ++ getResources(), R.drawable.ic_help_and_feedback, getActivity().getTheme())); ++ } ++ ++ @Override ++ public boolean onOptionsItemSelected(MenuItem item) { ++ if (item.getItemId() == R.id.menu_id_targeted_help) { ++ Context context = getContext(); ++ ++ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/bromite/bromite/wiki/AlwaysIncognito")); ++ // Let Chromium know that this intent is from Chromium, so that it does not close the app when ++ // the user presses 'back' button. ++ intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); ++ intent.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true); ++ intent.setPackage(context.getPackageName()); ++ context.startActivity(intent); ++ return true; ++ } ++ return false; ++ } ++ ++ @Override ++ public void setSnackbarManager(SnackbarManager manager) { ++ mSnackbarManager = manager; ++ } ++} +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +@@ -58,6 +58,7 @@ import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.profiles.ProfileManagerUtils; + import org.chromium.chrome.browser.search_engines.settings.SearchEngineSettings; + import org.chromium.chrome.browser.site_settings.ChromeSiteSettingsDelegate; ++import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager; + import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; + import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarManageable; + import org.chromium.components.browser_ui.accessibility.AccessibilitySettings; +@@ -254,6 +255,9 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity + if (fragment instanceof AdPersonalizationRemovedFragment) { + ((AdPersonalizationRemovedFragment) fragment).setSnackbarManager(getSnackbarManager()); + } ++ if (fragment instanceof INeedSnackbarManager) { ++ ((INeedSnackbarManager)fragment).setSnackbarManager(mSnackbarManager); ++ } + } + + @Override +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabModelObserver.java +@@ -14,6 +14,8 @@ import java.util.ArrayList; + import java.util.HashMap; + import java.util.List; + ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++ + /** + * A tab model observer for managing bulk closures. + */ +@@ -41,7 +43,8 @@ public class HistoricalTabModelObserver implements TabModelObserver { + if (tabs.isEmpty()) return; + + if (tabs.size() == 1) { +- mHistoricalTabSaver.createHistoricalTab(tabs.get(0)); ++ boolean is_always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); ++ mHistoricalTabSaver.createHistoricalTab(tabs.get(0), is_always_incognito); + return; + } + +@@ -72,7 +75,6 @@ public class HistoricalTabModelObserver implements TabModelObserver { + entries.add(historicalGroup); + idToGroup.put(groupId, historicalGroup); + } +- + mHistoricalTabSaver.createHistoricalBulkClosure(entries); + } + } +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaver.java +@@ -16,7 +16,7 @@ public interface HistoricalTabSaver { + * Creates a Tab entry in TabRestoreService. + * @param tab The {@link Tab} to create an entry for. + */ +- void createHistoricalTab(Tab tab); ++ void createHistoricalTab(Tab tab, boolean is_always_incognito); + + /** + * Creates a Group or Tab entry in TabRestoreService. +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java +@@ -27,6 +27,8 @@ import java.util.Arrays; + import java.util.Collections; + import java.util.List; + ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++ + /** + * Creates historical entries in TabRestoreService. + */ +@@ -60,10 +62,10 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { + + // HistoricalTabSaver implementation. + @Override +- public void createHistoricalTab(Tab tab) { ++ public void createHistoricalTab(Tab tab, boolean is_always_incognito) { + if (!shouldSave(tab)) return; + +- createHistoricalTabInternal(tab); ++ createHistoricalTabInternal(tab, is_always_incognito); + } + + @Override +@@ -115,7 +117,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { + + // If there is only a single valid tab remaining save it individually. + if (validEntries.size() == 1 && validEntries.get(0).isSingleTab()) { +- createHistoricalTabInternal(allTabs.get(0)); ++ createHistoricalTabInternal(allTabs.get(0), false); + return; + } + +@@ -140,11 +142,12 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { + CollectionUtil.integerListToIntArray(savedStateVersions)); + } + +- private void createHistoricalTabInternal(Tab tab) { ++ private void createHistoricalTabInternal(Tab tab, boolean is_always_incognito) { + RecordHistogram.recordEnumeratedHistogram("Tabs.RecentlyClosed.HistoricalSaverCloseType", + HistoricalSaverCloseType.TAB, HistoricalSaverCloseType.COUNT); + HistoricalTabSaverImplJni.get().createHistoricalTab( +- tab, getWebContentsState(tab).buffer(), getWebContentsState(tab).version()); ++ tab, getWebContentsState(tab).buffer(), getWebContentsState(tab).version(), ++ is_always_incognito); + } + + /** +@@ -152,7 +155,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { + * internal Chrome scheme, about:blank, or a native page and it cannot be incognito. + */ + private boolean shouldSave(Tab tab) { +- if (tab.isIncognito()) return false; ++ if (tab.isIncognito() && !AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) return false; + + // {@link GURL#getScheme()} is not available in unit tests. + if (mIgnoreUrlSchemesForTesting) return true; +@@ -225,7 +228,7 @@ public class HistoricalTabSaverImpl implements HistoricalTabSaver { + + @NativeMethods + interface Natives { +- void createHistoricalTab(Tab tab, ByteBuffer state, int savedStateVersion); ++ void createHistoricalTab(Tab tab, ByteBuffer state, int savedStateVersion, boolean is_always_incognito); + void createHistoricalGroup(TabModel model, String title, Tab[] tabs, + ByteBuffer[] byteBuffers, int[] savedStationsVersions); + void createHistoricalBulkClosure(TabModel model, int[] groupIds, String[] titles, +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +@@ -122,6 +122,8 @@ import org.chromium.components.webapps.bottomsheet.PwaBottomSheetControllerFacto + import org.chromium.content_public.browser.WebContents; + import org.chromium.ui.base.ActivityWindowAndroid; + import org.chromium.ui.base.DeviceFormFactor; ++import org.chromium.base.ContextUtils; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.ui.base.IntentRequestTracker; + import org.chromium.ui.modaldialog.ModalDialogManager; + +@@ -482,7 +484,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { + mAppMenuCoordinator == null ? null : mAppMenuCoordinator.getAppMenuHandler(); + mEmptyBackgroundViewWrapper = + new EmptyBackgroundViewWrapper(mTabModelSelectorSupplier.get(), +- mTabCreatorManagerSupplier.get().getTabCreator(false), mActivity, ++ mTabCreatorManagerSupplier.get().getTabCreator(AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()), mActivity, + appMenuHandler, mSnackbarManagerSupplier.get(), mLayoutManagerSupplier); + mEmptyBackgroundViewWrapper.initialize(); + } +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +@@ -41,6 +41,10 @@ import org.chromium.ui.base.PageTransition; + import org.chromium.ui.base.WindowAndroid; + import org.chromium.url.GURL; + ++import org.chromium.base.ContextUtils; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++import org.chromium.chrome.browser.tab.TabObserver; ++ + /** + * This class creates various kinds of new tabs and adds them to the right {@link TabModel}. + */ +@@ -312,7 +316,6 @@ public class ChromeTabCreator extends TabCreator { + // TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome. + public Tab launchUrlFromExternalApp( + LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) { +- assert !mIncognito; + // Don't re-use tabs for intents from Chrome. Note that this can be spoofed so shouldn't be + // relied on for anything security sensitive. + boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName()); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java +@@ -10,6 +10,7 @@ import androidx.annotation.Nullable; + import androidx.annotation.VisibleForTesting; + + import org.chromium.base.supplier.Supplier; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; + import org.chromium.chrome.browser.flags.ActivityType; + import org.chromium.chrome.browser.ntp.RecentlyClosedBridge; +@@ -109,6 +110,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod + public void onNativeLibraryReady(TabContentManager tabContentProvider) { + assert mTabContentManager == null : "onNativeLibraryReady called twice!"; + ++ AlwaysIncognitoLinkInterceptor.migrateSettingToNative(); ++ + ChromeTabCreator regularTabCreator = + (ChromeTabCreator) getTabCreatorManager().getTabCreator(false); + ChromeTabCreator incognitoTabCreator = +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +@@ -58,6 +58,8 @@ import org.chromium.content_public.browser.LoadUrlParams; + import org.chromium.content_public.browser.UiThreadTaskTraits; + import org.chromium.url.GURL; + ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++ + import java.io.BufferedInputStream; + import java.io.ByteArrayInputStream; + import java.io.ByteArrayOutputStream; +@@ -757,6 +759,13 @@ public class TabPersistentStore { + } + } + } ++ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ if (!isIncognito) { ++ Log.w(TAG, "Failed to restore tab: not in incognito mode."); ++ return; ++ } ++ } ++ + TabModel model = mTabModelSelector.getModel(isIncognito); + + if (model.isIncognito() != isIncognito) { +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +@@ -38,6 +38,7 @@ import org.chromium.base.supplier.OneshotSupplier; + import org.chromium.base.supplier.Supplier; + import org.chromium.chrome.R; + import org.chromium.chrome.browser.ActivityTabProvider; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; + import org.chromium.chrome.browser.IntentHandler; + import org.chromium.chrome.browser.app.tab_activity_glue.TabReparentingController; + import org.chromium.chrome.browser.app.tabmodel.TabWindowManagerSingleton; +@@ -523,7 +524,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve + return ret; + } + }, +- SearchEngineLogoUtils.getInstance()); ++ SearchEngineLogoUtils.getInstance(), ++ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()); + mControlContainer = controlContainer; + assert mControlContainer != null; + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java +@@ -32,6 +32,9 @@ import org.chromium.chrome.browser.flags.ActivityType; + import org.chromium.components.browser_ui.widget.TintedDrawable; + import org.chromium.device.mojom.ScreenOrientationLockType; + ++import org.chromium.base.ContextUtils; ++import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; ++ + /** + * Stores info about a web app. + */ +@@ -45,6 +48,8 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider + private final Intent mIntent; + private final ColorProviderImpl mColorProvider; + ++ private boolean mIsIncognito = false; ++ + /** + * Returns the toolbar color to use if a custom color is not specified by the webapp. + */ +@@ -67,6 +72,10 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider + mWebappExtras = webappExtras; + mWebApkExtras = webApkExtras; + mActivityType = (webApkExtras != null) ? ActivityType.WEB_APK : ActivityType.WEBAPP; ++ ++ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) { ++ mIsIncognito = true; ++ } + } + + @Override +@@ -155,6 +164,11 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider + return mWebApkExtras; + } + ++ @Override ++ public boolean isIncognito() { ++ return mIsIncognito; ++ } ++ + @Override + public @ScreenOrientationLockType.EnumType int getDefaultOrientation() { + return mWebappExtras.orientation; +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -4837,6 +4837,10 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kOfflinePagesLivePageSharingName, + flag_descriptions::kOfflinePagesLivePageSharingDescription, kOsAndroid, + FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesLivePageSharingFeature)}, ++ {"offline-pages-auto-save", ++ flag_descriptions::kOfflinePagesAutoSaveFeatureName, ++ flag_descriptions::kOfflinePagesAutoSaveFeatureDescription, kOsAndroid, ++ FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesAutoSaveFeature)}, + {"query-tiles", flag_descriptions::kQueryTilesName, + flag_descriptions::kQueryTilesDescription, kOsAndroid, + FEATURE_WITH_PARAMS_VALUE_TYPE(query_tiles::features::kQueryTiles, +diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/android/historical_tab_saver.cc +--- a/chrome/browser/android/historical_tab_saver.cc ++++ b/chrome/browser/android/historical_tab_saver.cc +@@ -26,6 +26,11 @@ + #include "components/sessions/core/tab_restore_service.h" + #include "content/public/browser/web_contents.h" + ++#include "chrome/common/pref_names.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" ++#include "historical_tab_saver.h" ++ + using base::android::JavaParamRef; + using base::android::ScopedJavaLocalRef; + +@@ -38,7 +43,8 @@ constexpr int kInvalidGroupId = -1; + + void CreateHistoricalTab( + TabAndroid* tab_android, +- WebContentsStateByteBuffer web_contents_state_byte_buffer) { ++ WebContentsStateByteBuffer web_contents_state_byte_buffer, ++ bool is_always_incognito) { + if (!tab_android) { + return; + } +@@ -49,9 +55,14 @@ void CreateHistoricalTab( + return; + } + ++ auto* profile = Profile::FromBrowserContext(scoped_web_contents->web_contents()->GetBrowserContext()); ++ if (is_always_incognito) { ++ if (profile->GetOriginalProfile()->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) ++ profile = profile->GetOriginalProfile(); ++ } ++ + sessions::TabRestoreService* service = +- TabRestoreServiceFactory::GetForProfile(Profile::FromBrowserContext( +- scoped_web_contents->web_contents()->GetBrowserContext())); ++ TabRestoreServiceFactory::GetForProfile(profile); + if (!service) { + return; + } +@@ -243,14 +254,15 @@ static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab( + JNIEnv* env, + const JavaParamRef& jtab_android, + const JavaParamRef& state, +- jint saved_state_version) { ++ jint saved_state_version, ++ jboolean is_always_incognito) { + void* data = env->GetDirectBufferAddress(state); + int size = env->GetDirectBufferCapacity(state); + + WebContentsStateByteBuffer web_contents_state = + WebContentsStateByteBuffer(data, size, (int)saved_state_version); + CreateHistoricalTab(TabAndroid::GetNativeTab(env, jtab_android), +- std::move(web_contents_state)); ++ std::move(web_contents_state), is_always_incognito); + } + + // static +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 +@@ -310,6 +310,13 @@ signin::IdentityManager* ChromeAutocompleteProviderClient::GetIdentityManager() + return IdentityManagerFactory::GetForProfile(profile_); + } + ++bool ChromeAutocompleteProviderClient::IsAlwaysIncognitoEnabled() const { ++ if (profile_->GetPrefs()->GetBoolean(prefs::kAlwaysIncognitoEnabled)) { ++ return true; ++ } ++ return false; ++} ++ + bool ChromeAutocompleteProviderClient::IsOffTheRecord() const { + return profile_->IsOffTheRecord(); + } +diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h +--- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h ++++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.h +@@ -80,6 +80,7 @@ class ChromeAutocompleteProviderClient : public AutocompleteProviderClient { + const override; + signin::IdentityManager* GetIdentityManager() const override; + bool IsOffTheRecord() const override; ++ bool IsAlwaysIncognitoEnabled() const override; + bool SearchSuggestEnabled() const override; + bool AllowDeletingBrowserHistory() const override; + bool IsPersonalizedUrlDataCollectionActive() const override; +diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.cc b/chrome/browser/content_settings/host_content_settings_map_factory.cc +--- a/chrome/browser/content_settings/host_content_settings_map_factory.cc ++++ b/chrome/browser/content_settings/host_content_settings_map_factory.cc +@@ -15,6 +15,7 @@ + #include "chrome/browser/profiles/profile.h" + #include "chrome/browser/search_engines/template_url_service_factory.h" + #include "chrome/common/buildflags.h" ++#include "chrome/common/pref_names.h" + #include "components/content_settings/core/browser/content_settings_pref_provider.h" + #include "components/content_settings/core/browser/host_content_settings_map.h" + #include "components/permissions/features.h" +@@ -95,9 +96,23 @@ scoped_refptr + if (profile->IsOffTheRecord() && !profile->IsGuestSession()) + GetForProfile(original_profile); + ++ bool always_incognito_enabled = false; ++ bool force_save_site_settings = false; ++ ++ PrefService* prefService = original_profile->GetPrefs(); ++ if (prefService->GetBoolean(prefs::kAlwaysIncognitoEnabled)) { ++ always_incognito_enabled = true; ++ } ++ ++ if (prefService->GetBoolean(prefs::kIncognitoSaveSiteSettingEnabled)) { ++ profile = original_profile; ++ force_save_site_settings = true; ++ } ++ + scoped_refptr settings_map(new HostContentSettingsMap( + profile->GetPrefs(), +- profile->IsOffTheRecord() || profile->IsGuestSession(), ++ !force_save_site_settings && (profile->IsOffTheRecord() || profile->IsGuestSession()), ++ force_save_site_settings, + /*store_last_modified=*/true, + profile->ShouldRestoreOldSessionCookies())); + +@@ -107,6 +122,9 @@ scoped_refptr + HostContentSettingsMap::WEBUI_ALLOWLIST_PROVIDER, + std::move(allowlist_provider)); + ++ if (always_incognito_enabled) ++ return settings_map; ++ + if (base::FeatureList::IsEnabled( + permissions::features::kOneTimeGeolocationPermission)) { + auto one_time_geolocation_provider = +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -3907,6 +3907,12 @@ const char kOfflinePagesLivePageSharingDescription[] = + "Enables to share current loaded page as offline page by saving as MHTML " + "first."; + ++const char kOfflinePagesAutoSaveFeatureName[] = ++ "Enables autosave of offline page"; ++const char kOfflinePagesAutoSaveFeatureDescription[] = ++ "Enables autosave of offline page, as automatic switching in case " ++ "the device goes offline."; ++ + const char kPageInfoHistoryName[] = "Page info history"; + const char kPageInfoHistoryDescription[] = + "Enable a history sub page to the page info menu, and a button to forget " +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -2227,6 +2227,9 @@ extern const char kNotificationPermissionRationaleDescription[]; + extern const char kOfflinePagesLivePageSharingName[]; + extern const char kOfflinePagesLivePageSharingDescription[]; + ++extern const char kOfflinePagesAutoSaveFeatureName[]; ++extern const char kOfflinePagesAutoSaveFeatureDescription[]; ++ + extern const char kPageInfoHistoryName[]; + extern const char kPageInfoHistoryDescription[]; + +diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc +--- a/chrome/browser/flags/android/chrome_feature_list.cc ++++ b/chrome/browser/flags/android/chrome_feature_list.cc +@@ -561,8 +561,8 @@ BASE_FEATURE(kCCTNewDownloadTab, + BASE_FEATURE(kCCTIncognito, "CCTIncognito", base::FEATURE_ENABLED_BY_DEFAULT); + + BASE_FEATURE(kCCTIncognitoAvailableToThirdParty, +- "CCTIncognitoAvailableToThirdParty", +- base::FEATURE_DISABLED_BY_DEFAULT); ++ "CCTIncognitoAvailableToThirdParty", // must be enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite + + BASE_FEATURE(kCCTPackageNameRecording, + "CCTPackageNameRecording", +diff --git a/chrome/browser/history/history_tab_helper.cc b/chrome/browser/history/history_tab_helper.cc +--- a/chrome/browser/history/history_tab_helper.cc ++++ b/chrome/browser/history/history_tab_helper.cc +@@ -38,6 +38,9 @@ + #include "chrome/browser/ui/android/tab_model/tab_model_list.h" + #include "components/feed/core/v2/public/feed_api.h" + #include "components/feed/core/v2/public/feed_service.h" ++#include "chrome/common/pref_names.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" + #else + #include "chrome/browser/ui/browser.h" + #include "chrome/browser/ui/browser_finder.h" +@@ -459,6 +462,13 @@ void HistoryTabHelper::TitleWasSet(NavigationEntry* entry) { + history::HistoryService* HistoryTabHelper::GetHistoryService() { + Profile* profile = + Profile::FromBrowserContext(web_contents()->GetBrowserContext()); ++ ++#if BUILDFLAG(IS_ANDROID) ++ if (profile->GetOriginalProfile()->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) { ++ return HistoryServiceFactory::GetForProfile(profile, ServiceAccessType::IMPLICIT_ACCESS); ++ } ++#endif ++ + if (profile->IsOffTheRecord()) + return nullptr; + +@@ -466,6 +476,14 @@ history::HistoryService* HistoryTabHelper::GetHistoryService() { + profile, ServiceAccessType::IMPLICIT_ACCESS); + } + ++// static ++void HistoryTabHelper::RegisterProfilePrefs(PrefRegistrySimple* registry) { ++ registry->RegisterBooleanPref(prefs::kIncognitoTabHistoryEnabled, ++ /*default_value=*/false); ++ registry->RegisterBooleanPref(prefs::kIncognitoSaveSiteSettingEnabled, ++ /*default_value=*/false); ++} ++ + void HistoryTabHelper::WebContentsDestroyed() { + translate_observation_.Reset(); + +diff --git a/chrome/browser/history/history_tab_helper.h b/chrome/browser/history/history_tab_helper.h +--- a/chrome/browser/history/history_tab_helper.h ++++ b/chrome/browser/history/history_tab_helper.h +@@ -12,6 +12,8 @@ + #include "components/translate/core/browser/translate_driver.h" + #include "content/public/browser/web_contents_observer.h" + #include "content/public/browser/web_contents_user_data.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" + + namespace history { + struct HistoryAddPageArgs; +@@ -51,6 +53,11 @@ class HistoryTabHelper + force_eligible_tab_for_testing_ = force; + } + ++ static void RegisterProfilePrefs(PrefRegistrySimple* registry); ++ ++ // Helper function to return the history service. May return null. ++ history::HistoryService* GetHistoryService(); ++ + private: + explicit HistoryTabHelper(content::WebContents* web_contents); + friend class content::WebContentsUserData; +@@ -83,9 +90,6 @@ class HistoryTabHelper + void OnLanguageDetermined( + const translate::LanguageDetectionDetails& details) override; + +- // Helper function to return the history service. May return null. +- history::HistoryService* GetHistoryService(); +- + // Returns true if our observed web contents is an eligible tab. + bool IsEligibleTab(const history::HistoryAddPageArgs& add_page_args) const; + +diff --git a/chrome/browser/offline_pages/android/offline_page_bridge.cc b/chrome/browser/offline_pages/android/offline_page_bridge.cc +--- a/chrome/browser/offline_pages/android/offline_page_bridge.cc ++++ b/chrome/browser/offline_pages/android/offline_page_bridge.cc +@@ -47,6 +47,9 @@ + #include "content/public/browser/web_contents.h" + #include "net/base/filename_util.h" + #include "url/android/gurl_android.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" ++#include "chrome/common/pref_names.h" + + using base::android::ConvertJavaStringToUTF8; + using base::android::ConvertUTF16ToJavaString; +@@ -785,9 +788,15 @@ void OfflinePageBridge::GetPageByOfflineIdDone( + } + + if (offline_page_model_->IsArchiveInInternalDir(offline_page->file_path)) { ++ bool is_trusted = true; ++ // in always incognito, never trust input file (show file name in url) ++ ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key_); ++ if (profile_key->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled)) ++ is_trusted = false; ++ + ValidateFileCallback(launch_location, j_callback_obj, + offline_page->offline_id, offline_page->url, +- offline_page->file_path, true /* is_trusted*/); ++ offline_page->file_path, is_trusted); + return; + } + +diff --git a/chrome/browser/offline_pages/android/offline_page_model_factory.cc b/chrome/browser/offline_pages/android/offline_page_model_factory.cc +--- a/chrome/browser/offline_pages/android/offline_page_model_factory.cc ++++ b/chrome/browser/offline_pages/android/offline_page_model_factory.cc +@@ -24,6 +24,9 @@ + #include "components/keyed_service/core/simple_dependency_manager.h" + #include "components/offline_pages/core/model/offline_page_model_taskified.h" + #include "components/offline_pages/core/offline_page_metadata_store.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" ++#include "chrome/common/pref_names.h" + + namespace offline_pages { + +@@ -54,13 +57,15 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( + scoped_refptr background_task_runner = + base::ThreadPool::CreateSequencedTaskRunner({base::MayBlock()}); + ++ ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key)->GetOriginalKey(); ++ + base::FilePath store_path = +- key->GetPath().Append(chrome::kOfflinePageMetadataDirname); ++ profile_key->GetPath().Append(chrome::kOfflinePageMetadataDirname); + std::unique_ptr metadata_store( + new OfflinePageMetadataStore(background_task_runner, store_path)); + + base::FilePath persistent_archives_dir = +- key->GetPath().Append(chrome::kOfflinePageArchivesDirname); ++ profile_key->GetPath().Append(chrome::kOfflinePageArchivesDirname); + // If base::PathService::Get returns false, the temporary_archives_dir will be + // empty, and no temporary pages will be saved during this chrome lifecycle. + base::FilePath temporary_archives_dir; +@@ -69,7 +74,6 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( + temporary_archives_dir.Append(chrome::kOfflinePageArchivesDirname); + } + +- ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key); + auto archive_manager = std::make_unique( + temporary_archives_dir, persistent_archives_dir, + DownloadPrefs::GetDefaultDownloadDirectory(), background_task_runner, +@@ -87,4 +91,14 @@ std::unique_ptr OfflinePageModelFactory::BuildServiceInstanceFor( + return model; + } + ++SimpleFactoryKey* OfflinePageModelFactory::GetKeyToUse( ++ SimpleFactoryKey* key) const { ++ ProfileKey* profile_key = ProfileKey::FromSimpleFactoryKey(key); ++ if (profile_key->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled) == false) { ++ return SimpleKeyedServiceFactory::GetKeyToUse(key); ++ } ++ ++ return profile_key->GetOriginalKey(); ++} ++ + } // namespace offline_pages +diff --git a/chrome/browser/offline_pages/android/request_coordinator_factory.cc b/chrome/browser/offline_pages/android/request_coordinator_factory.cc +--- a/chrome/browser/offline_pages/android/request_coordinator_factory.cc ++++ b/chrome/browser/offline_pages/android/request_coordinator_factory.cc +@@ -19,6 +19,7 @@ + #include "chrome/browser/ui/android/tab_model/tab_model.h" + #include "chrome/browser/ui/android/tab_model/tab_model_list.h" + #include "chrome/common/chrome_constants.h" ++#include "components/keyed_service/content/browser_context_dependency_manager.h" + #include "components/offline_pages/core/background/offliner.h" + #include "components/offline_pages/core/background/offliner_policy.h" + #include "components/offline_pages/core/background/request_coordinator.h" +@@ -28,6 +29,11 @@ + #include "components/offline_pages/core/offline_page_feature.h" + #include "content/public/browser/web_contents.h" + ++#include "chrome/browser/profiles/incognito_helpers.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" ++#include "chrome/common/pref_names.h" ++ + namespace network { + class NetworkQualityTracker; + } +@@ -61,7 +67,8 @@ class ActiveTabInfo : public RequestCoordinator::ActiveTabInfo { + }; + + RequestCoordinatorFactory::RequestCoordinatorFactory() +- : ProfileKeyedServiceFactory("OfflineRequestCoordinator") { ++ : BrowserContextKeyedServiceFactory("OfflineRequestCoordinator", ++ BrowserContextDependencyManager::GetInstance()) { + // Depends on OfflinePageModelFactory in SimpleDependencyManager. + } + +@@ -79,6 +86,12 @@ RequestCoordinator* RequestCoordinatorFactory::GetForBrowserContext( + + KeyedService* RequestCoordinatorFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { ++ if (context->IsOffTheRecord() && ++ Profile::FromBrowserContext(context)->GetOriginalProfile() ++ ->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled) == false) { ++ // do not track history in incognito mode if preference is disabled ++ return nullptr; ++ } + std::unique_ptr policy(new OfflinerPolicy()); + std::unique_ptr offliner; + OfflinePageModel* model = +@@ -111,4 +124,16 @@ KeyedService* RequestCoordinatorFactory::BuildServiceInstanceFor( + return request_coordinator; + } + ++content::BrowserContext* ++RequestCoordinatorFactory::GetBrowserContextToUse( ++ content::BrowserContext* context) const { ++ if (Profile::FromBrowserContext(context)->GetOriginalProfile() ++ ->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled) == false) { ++ return BrowserContextKeyedServiceFactory::GetBrowserContextToUse(context); ++ } ++ ++ return chrome::GetBrowserContextRedirectedInIncognito(context); ++} ++ ++ + } // namespace offline_pages +diff --git a/chrome/browser/offline_pages/offline_page_model_factory.h b/chrome/browser/offline_pages/offline_page_model_factory.h +--- a/chrome/browser/offline_pages/offline_page_model_factory.h ++++ b/chrome/browser/offline_pages/offline_page_model_factory.h +@@ -48,6 +48,7 @@ class OfflinePageModelFactory : public SimpleKeyedServiceFactory { + + std::unique_ptr BuildServiceInstanceFor( + SimpleFactoryKey* key) const override; ++ SimpleFactoryKey* GetKeyToUse(SimpleFactoryKey* key) const override; + }; + + } // namespace offline_pages +diff --git a/chrome/browser/offline_pages/recent_tab_helper.cc b/chrome/browser/offline_pages/recent_tab_helper.cc +--- a/chrome/browser/offline_pages/recent_tab_helper.cc ++++ b/chrome/browser/offline_pages/recent_tab_helper.cc +@@ -28,6 +28,11 @@ + #include "content/public/browser/navigation_entry.h" + #include "content/public/browser/navigation_handle.h" + ++#include "chrome/browser/profiles/profile.h" ++#include "components/prefs/pref_registry_simple.h" ++#include "components/prefs/pref_service.h" ++#include "chrome/common/pref_names.h" ++ + namespace { + class DefaultRecentTabHelperDelegate + : public offline_pages::RecentTabHelper::Delegate { +@@ -180,6 +185,14 @@ bool RecentTabHelper::EnsureInitialized() { + // WebContents with its origin as well. + snapshots_enabled_ = !tab_id_.empty() && + !web_contents()->GetBrowserContext()->IsOffTheRecord(); ++ if (!tab_id_.empty() && web_contents()->GetBrowserContext()->IsOffTheRecord()) { ++ if (Profile::FromBrowserContext(web_contents()->GetBrowserContext()) ++ ->GetOriginalProfile() ++ ->GetPrefs()->GetBoolean(prefs::kIncognitoTabHistoryEnabled) == true) { ++ snapshots_enabled_ = true; ++ incognito_tab_history_enabled_ = true; ++ } ++ } + + if (snapshots_enabled_) { + page_model_ = OfflinePageModelFactory::GetForBrowserContext( +@@ -456,7 +469,11 @@ void RecentTabHelper::ContinueSnapshotWithIdsToPurge( + void RecentTabHelper::ContinueSnapshotAfterPurge( + SnapshotProgressInfo* snapshot_info, + OfflinePageModel::DeletePageResult result) { +- if (result != OfflinePageModel::DeletePageResult::SUCCESS) { ++ // remove snapshot save of recent tab if always incognito mode is active ++ // so recents tab list is empty at every startup ++ // the user can choose to disable the feature ++ if (incognito_tab_history_enabled_ || !base::FeatureList::IsEnabled(offline_pages::kOfflinePagesAutoSaveFeature) ++ || result != OfflinePageModel::DeletePageResult::SUCCESS) { + ReportSnapshotCompleted(snapshot_info, false); + return; + } +diff --git a/chrome/browser/offline_pages/recent_tab_helper.h b/chrome/browser/offline_pages/recent_tab_helper.h +--- a/chrome/browser/offline_pages/recent_tab_helper.h ++++ b/chrome/browser/offline_pages/recent_tab_helper.h +@@ -145,6 +145,9 @@ class RecentTabHelper + // Not page-specific. + bool snapshots_enabled_ = false; + ++ // If true, tab history in incognito mode is enabled ++ bool incognito_tab_history_enabled_ = false; ++ + // Snapshot progress information for an ongoing snapshot requested by + // downloads. Null if there's no ongoing request. + std::unique_ptr downloads_ongoing_snapshot_info_; +diff --git a/chrome/browser/offline_pages/request_coordinator_factory.h b/chrome/browser/offline_pages/request_coordinator_factory.h +--- a/chrome/browser/offline_pages/request_coordinator_factory.h ++++ b/chrome/browser/offline_pages/request_coordinator_factory.h +@@ -18,7 +18,7 @@ namespace offline_pages { + class RequestCoordinator; + + // A factory to create one unique RequestCoordinator. +-class RequestCoordinatorFactory : public ProfileKeyedServiceFactory { ++class RequestCoordinatorFactory : public BrowserContextKeyedServiceFactory { + public: + static RequestCoordinatorFactory* GetInstance(); + static RequestCoordinator* GetForBrowserContext( +@@ -36,6 +36,8 @@ class RequestCoordinatorFactory : public ProfileKeyedServiceFactory { + + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* context) const override; ++ content::BrowserContext* GetBrowserContextToUse( ++ content::BrowserContext* context) const override; + }; + + } // namespace offline_pages +diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc +--- a/chrome/browser/prefs/browser_prefs.cc ++++ b/chrome/browser/prefs/browser_prefs.cc +@@ -229,6 +229,7 @@ + #include "components/feed/core/shared_prefs/pref_names.h" + + #if BUILDFLAG(IS_ANDROID) ++#include "chrome/browser/history/history_tab_helper.h" + #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" +@@ -1390,6 +1391,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + usage_stats::UsageStatsBridge::RegisterProfilePrefs(registry); + variations::VariationsService::RegisterProfilePrefs(registry); + video_tutorials::RegisterPrefs(registry); ++ // register incognito pref ++ registry->RegisterBooleanPref(prefs::kAlwaysIncognitoEnabled, ++ /*default_value=*/false); ++ HistoryTabHelper::RegisterProfilePrefs(registry); + #else // BUILDFLAG(IS_ANDROID) + AppShortcutManager::RegisterProfilePrefs(registry); + browser_sync::ForeignSessionHandler::RegisterProfilePrefs(registry); +diff --git a/chrome/browser/ui/android/native_page/BUILD.gn b/chrome/browser/ui/android/native_page/BUILD.gn +--- a/chrome/browser/ui/android/native_page/BUILD.gn ++++ b/chrome/browser/ui/android/native_page/BUILD.gn +@@ -28,7 +28,9 @@ robolectric_library("junit") { + + deps = [ + ":java", ++ "//base:base_java", + "//base:base_junit_test_support", + "//third_party/junit", ++ "//components/embedder_support/android:util_java", + ] + } +diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/browser/ui/native_page/NativePage.java b/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/browser/ui/native_page/NativePage.java +--- a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/browser/ui/native_page/NativePage.java ++++ b/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/browser/ui/native_page/NativePage.java +@@ -16,6 +16,8 @@ import org.chromium.url.GURL; + import java.lang.annotation.Retention; + import java.lang.annotation.RetentionPolicy; + ++import org.chromium.base.ContextUtils; ++ + /** + * An interface for pages that will be using Android views instead of html/rendered Web content. + */ +@@ -130,12 +132,12 @@ public interface NativePage { + */ + @Deprecated // Use GURL-variant instead. + public static boolean isNativePageUrl(String url, boolean isIncognito) { +- return nativePageType(url, null, isIncognito) != NativePageType.NONE; ++ return nativePageType(url, null, isIncognito, false) != NativePageType.NONE; + } + + public static boolean isNativePageUrl(GURL url, boolean isIncognito) { + return url != null +- && nativePageType(url.getSpec(), null, isIncognito) != NativePageType.NONE; ++ && nativePageType(url.getSpec(), null, isIncognito, false) != NativePageType.NONE; + } + + /** +@@ -146,7 +148,8 @@ public interface NativePage { + */ + // TODO(crbug/783819) - Convert to using GURL. + public static @NativePageType int nativePageType( +- String url, NativePage candidatePage, boolean isIncognito) { ++ String url, NativePage candidatePage, boolean isIncognito, ++ boolean isAlwaysIncognito) { + if (url == null) return NativePageType.NONE; + + Uri uri = Uri.parse(url); +@@ -168,7 +171,8 @@ public interface NativePage { + return NativePageType.DOWNLOADS; + } else if (UrlConstants.HISTORY_HOST.equals(host)) { + return NativePageType.HISTORY; +- } else if (UrlConstants.RECENT_TABS_HOST.equals(host) && !isIncognito) { ++ } else if (UrlConstants.RECENT_TABS_HOST.equals(host) && ++ (!isIncognito || isAlwaysIncognito)) { + return NativePageType.RECENT_TABS; + } else if (UrlConstants.EXPLORE_HOST.equals(host)) { + return NativePageType.EXPLORE; +diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd +--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd ++++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd +@@ -1151,6 +1151,37 @@ Your Google account may have other forms of browsing history like searches and a + + Clears history from all synced devices. + ++ ++ ++ Incognito mode ++ ++ ++ Incognito navigation settings ++ ++ ++ Always open links in incognito ++ ++ ++ Opens links in incognito tabs when you click on new tab or on a link ++ ++ ++ Relaunch ++ ++ ++ Your changes will take effect the next time you relaunch Bromite. ++ ++ ++ Enable history ++ ++ ++ Record history even in incognito mode ++ ++ ++ Remember site settings ++ ++ ++ Remember site settings changes in incognito mode ++ + + <link1>Search history</link1> and <link2>other forms of activity</link2> may be saved in your Google Account when you’re signed in. You can delete them anytime. + +diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java ++++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +@@ -178,6 +178,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + protected GURL mVisibleGurl = GURL.emptyGURL(); + protected String mFormattedFullUrl; + protected String mUrlForDisplay; ++ private boolean mIsAlwaysIncognito; + + /** + * Default constructor for this class. +@@ -192,7 +193,8 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + public LocationBarModel(Context context, NewTabPageDelegate newTabPageDelegate, + @NonNull UrlFormatter urlFormatter, @NonNull ProfileProvider profileProvider, + @NonNull OfflineStatus offlineStatus, +- @NonNull SearchEngineLogoUtils searchEngineLogoUtils) { ++ @NonNull SearchEngineLogoUtils searchEngineLogoUtils, ++ boolean isAlwaysIncognito) { + mContext = context; + mNtpDelegate = newTabPageDelegate; + mUrlFormatter = urlFormatter; +@@ -200,6 +202,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + mOfflineStatus = offlineStatus; + mPrimaryColor = ChromeColors.getDefaultThemeColor(context, false); + mSearchEngineLogoUtils = searchEngineLogoUtils; ++ mIsAlwaysIncognito = isAlwaysIncognito; + } + + /** +@@ -207,7 +210,7 @@ public class LocationBarModel implements ToolbarDataProvider, LocationBarDataPro + */ + public void initializeWithNative() { + mOptimizationsEnabled = +- ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_SCROLL_OPTIMIZATIONS); ++ ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_SCROLL_OPTIMIZATIONS) && !mIsAlwaysIncognito; + mLastUsedNonOTRProfile = Profile.getLastUsedRegularProfile(); + mNativeLocationBarModelAndroid = LocationBarModelJni.get().init(LocationBarModel.this); + +diff --git a/chrome/browser/ui/messages/android/BUILD.gn b/chrome/browser/ui/messages/android/BUILD.gn +--- a/chrome/browser/ui/messages/android/BUILD.gn ++++ b/chrome/browser/ui/messages/android/BUILD.gn +@@ -24,6 +24,7 @@ android_resources("java_resources") { + android_library("java") { + sources = [ + "java/src/org/chromium/chrome/browser/ui/messages/infobar/SimpleConfirmInfoBarBuilder.java", ++ "java/src/org/chromium/chrome/browser/ui/messages/snackbar/INeedSnackbarManager.java", + "java/src/org/chromium/chrome/browser/ui/messages/snackbar/Snackbar.java", + "java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarCollection.java", + "java/src/org/chromium/chrome/browser/ui/messages/snackbar/SnackbarManager.java", +diff --git a/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/INeedSnackbarManager.java b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/INeedSnackbarManager.java +new file mode 100644 +--- /dev/null ++++ b/chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/INeedSnackbarManager.java +@@ -0,0 +1,27 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++package org.chromium.chrome.browser.ui.messages.snackbar; ++ ++import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; ++ ++/** ++ * An interface that allows using snackbars in the settings ++ */ ++public interface INeedSnackbarManager { ++ void setSnackbarManager(SnackbarManager manager); ++} +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 +@@ -3458,6 +3458,12 @@ const char kShowCaretBrowsingDialog[] = + const char kLacrosLaunchSwitch[] = "lacros_launch_switch"; + #endif + ++#if BUILDFLAG(IS_ANDROID) ++const char kAlwaysIncognitoEnabled[] = "always_incognito_enabled"; ++const char kIncognitoTabHistoryEnabled[] = "incognito_tab_history_enabled"; ++const char kIncognitoSaveSiteSettingEnabled[] = "incognito_site_setting_enabled"; ++#endif ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + // String enum pref determining what should happen when a user who authenticates + // via a security token is removing this token. "IGNORE" - nothing happens +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 +@@ -1219,6 +1219,8 @@ extern const char kDiscountConsentShowInterestIn[]; + + #if BUILDFLAG(IS_ANDROID) + extern const char kWebXRImmersiveArEnabled[]; ++extern const char kAlwaysIncognitoEnabled[]; ++extern const char kIncognitoSaveSiteSettingEnabled[]; + #endif + + #if !BUILDFLAG(IS_ANDROID) +@@ -1256,6 +1258,10 @@ extern const char kPrivacyGuideViewed[]; + + extern const char kCorsNonWildcardRequestHeadersSupport[]; + ++#if BUILDFLAG(IS_ANDROID) ++extern const char kIncognitoTabHistoryEnabled[]; ++#endif ++ + extern const char kOriginAgentClusterDefaultEnabled[]; + + extern const char kForceMajorVersionToMinorPositionInUserAgent[]; +diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc +--- a/components/content_settings/core/browser/content_settings_pref_provider.cc ++++ b/components/content_settings/core/browser/content_settings_pref_provider.cc +@@ -122,10 +122,12 @@ void PrefProvider::RegisterProfilePrefs( + + PrefProvider::PrefProvider(PrefService* prefs, + bool off_the_record, ++ bool force_save_site_settings, + bool store_last_modified, + bool restore_session) + : prefs_(prefs), + off_the_record_(off_the_record), ++ force_save_site_settings_(force_save_site_settings), + store_last_modified_(store_last_modified), + clock_(base::DefaultClock::GetInstance()) { + TRACE_EVENT_BEGIN("startup", "PrefProvider::PrefProvider"); +@@ -159,7 +161,9 @@ PrefProvider::PrefProvider(PrefService* prefs, + content_settings_prefs_.insert(std::make_pair( + info->type(), std::make_unique( + info->type(), prefs_, &pref_change_registrar_, +- info->pref_name(), off_the_record_, restore_session, ++ info->pref_name(), ++ off_the_record_ || (!content_type_info && force_save_site_settings_), ++ restore_session, + base::BindRepeating(&PrefProvider::Notify, + base::Unretained(this))))); + } +diff --git a/components/content_settings/core/browser/content_settings_pref_provider.h b/components/content_settings/core/browser/content_settings_pref_provider.h +--- a/components/content_settings/core/browser/content_settings_pref_provider.h ++++ b/components/content_settings/core/browser/content_settings_pref_provider.h +@@ -37,6 +37,7 @@ class PrefProvider : public UserModifiableProvider { + + PrefProvider(PrefService* prefs, + bool off_the_record, ++ bool force_save_site_settings, + bool store_last_modified, + bool restore_session); + +@@ -88,6 +89,7 @@ class PrefProvider : public UserModifiableProvider { + raw_ptr prefs_; + + const bool off_the_record_; ++ const bool force_save_site_settings_; + + bool store_last_modified_; + +diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc +--- a/components/content_settings/core/browser/host_content_settings_map.cc ++++ b/components/content_settings/core/browser/host_content_settings_map.cc +@@ -243,6 +243,7 @@ const char* ContentSettingToString(ContentSetting setting) { + HostContentSettingsMap::HostContentSettingsMap( + PrefService* prefs, + bool is_off_the_record, ++ bool force_save_site_settings, + bool store_last_modified, + bool restore_session) + : RefcountedKeyedService(base::ThreadTaskRunnerHandle::Get()), +@@ -251,6 +252,7 @@ HostContentSettingsMap::HostContentSettingsMap( + #endif + prefs_(prefs), + is_off_the_record_(is_off_the_record), ++ force_save_site_settings_(force_save_site_settings), + store_last_modified_(store_last_modified), + allow_invalid_secondary_pattern_for_testing_(false) { + TRACE_EVENT0("startup", "HostContentSettingsMap::HostContentSettingsMap"); +@@ -262,7 +264,7 @@ HostContentSettingsMap::HostContentSettingsMap( + policy_provider->AddObserver(this); + + auto pref_provider_ptr = std::make_unique( +- prefs_, is_off_the_record_, store_last_modified_, restore_session); ++ prefs_, is_off_the_record_, force_save_site_settings_, store_last_modified_, restore_session); + pref_provider_ = pref_provider_ptr.get(); + content_settings_providers_[PREF_PROVIDER] = std::move(pref_provider_ptr); + user_modifiable_providers_.push_back(pref_provider_); +diff --git a/components/content_settings/core/browser/host_content_settings_map.h b/components/content_settings/core/browser/host_content_settings_map.h +--- a/components/content_settings/core/browser/host_content_settings_map.h ++++ b/components/content_settings/core/browser/host_content_settings_map.h +@@ -81,6 +81,7 @@ class HostContentSettingsMap : public content_settings::Observer, + // profile or a guest session. + HostContentSettingsMap(PrefService* prefs, + bool is_off_the_record, ++ bool force_save_site_settings, + bool store_last_modified, + bool restore_session); + +@@ -442,6 +443,8 @@ class HostContentSettingsMap : public content_settings::Observer, + // Whether this settings map is for an incognito or guest session. + bool is_off_the_record_; + ++ bool force_save_site_settings_ = false; ++ + // Whether ContentSettings in the PrefProvider will store a last_modified + // timestamp. + bool store_last_modified_; +diff --git a/components/offline_pages/core/offline_page_feature.cc b/components/offline_pages/core/offline_page_feature.cc +--- a/components/offline_pages/core/offline_page_feature.cc ++++ b/components/offline_pages/core/offline_page_feature.cc +@@ -52,6 +52,9 @@ BASE_FEATURE(kOfflinePagesNetworkStateLikelyUnknown, + "OfflinePagesNetworkStateLikelyUnknown", + base::FEATURE_DISABLED_BY_DEFAULT); + ++const base::Feature kOfflinePagesAutoSaveFeature{ ++ "OfflinePagesAutoSaveEnabled", base::FEATURE_DISABLED_BY_DEFAULT}; ++ + const char kPrefetchingOfflinePagesExperimentsOption[] = "exp"; + + bool IsOfflinePagesCTEnabled() { +diff --git a/components/offline_pages/core/offline_page_feature.h b/components/offline_pages/core/offline_page_feature.h +--- a/components/offline_pages/core/offline_page_feature.h ++++ b/components/offline_pages/core/offline_page_feature.h +@@ -21,6 +21,7 @@ BASE_DECLARE_FEATURE(kOfflinePagesDescriptiveFailStatusFeature); + BASE_DECLARE_FEATURE(kOfflineIndicatorFeature); + BASE_DECLARE_FEATURE(kOnTheFlyMhtmlHashComputationFeature); + BASE_DECLARE_FEATURE(kOfflinePagesNetworkStateLikelyUnknown); ++extern const base::Feature kOfflinePagesAutoSaveFeature; + + // The parameter name used to find the experiment tag for prefetching offline + // pages. +diff --git a/components/omnibox/browser/autocomplete_provider_client.cc b/components/omnibox/browser/autocomplete_provider_client.cc +--- a/components/omnibox/browser/autocomplete_provider_client.cc ++++ b/components/omnibox/browser/autocomplete_provider_client.cc +@@ -29,3 +29,7 @@ base::WeakPtr + AutocompleteProviderClient::GetWeakPtr() { + return nullptr; + } ++ ++bool AutocompleteProviderClient::IsAlwaysIncognitoEnabled() const { ++ return false; ++} +diff --git a/components/omnibox/browser/autocomplete_provider_client.h b/components/omnibox/browser/autocomplete_provider_client.h +--- a/components/omnibox/browser/autocomplete_provider_client.h ++++ b/components/omnibox/browser/autocomplete_provider_client.h +@@ -128,6 +128,7 @@ class AutocompleteProviderClient : public OmniboxAction::Client { + virtual signin::IdentityManager* GetIdentityManager() const = 0; + + virtual bool IsOffTheRecord() const = 0; ++ virtual bool IsAlwaysIncognitoEnabled() const = 0; + virtual bool SearchSuggestEnabled() const = 0; + + // True for almost all users except ones with a specific enterprise policy. +diff --git a/components/omnibox/browser/base_search_provider.cc b/components/omnibox/browser/base_search_provider.cc +--- a/components/omnibox/browser/base_search_provider.cc ++++ b/components/omnibox/browser/base_search_provider.cc +@@ -273,7 +273,7 @@ bool BaseSearchProvider::CanSendZeroSuggestRequest( + } + + // Don't make a suggest request if in incognito mode. +- if (client->IsOffTheRecord()) { ++ if (client->IsOffTheRecord() && client->IsAlwaysIncognitoEnabled() == false) { + return false; + } + +diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc +--- a/components/omnibox/browser/search_provider.cc ++++ b/components/omnibox/browser/search_provider.cc +@@ -832,7 +832,9 @@ bool SearchProvider::IsQuerySuitableForSuggest(bool* query_is_private) const { + // keyword input to a keyword suggest server, if any.) + const TemplateURL* default_url = providers_.GetDefaultProviderURL(); + const TemplateURL* keyword_url = providers_.GetKeywordProviderURL(); +- return !client()->IsOffTheRecord() && client()->SearchSuggestEnabled() && ++ return (client()->IsOffTheRecord() == false || ++ client()->IsAlwaysIncognitoEnabled() == true) && ++ client()->SearchSuggestEnabled() && + ((default_url && !default_url->suggestions_url().empty() && + !*query_is_private) || + (keyword_url && !keyword_url->suggestions_url().empty())); +diff --git a/weblayer/browser/host_content_settings_map_factory.cc b/weblayer/browser/host_content_settings_map_factory.cc +--- a/weblayer/browser/host_content_settings_map_factory.cc ++++ b/weblayer/browser/host_content_settings_map_factory.cc +@@ -45,6 +45,7 @@ HostContentSettingsMapFactory::BuildServiceInstanceFor( + scoped_refptr settings_map = + base::MakeRefCounted( + user_prefs::UserPrefs::Get(context), context->IsOffTheRecord(), ++ /*force_save_site_settings*/false, + /*store_last_modified=*/true, + /*restore_session=*/false); + +-- +2.25.1 diff --git a/bromite/build/patches/Add-bookmark-import-export-actions.patch b/bromite/build/patches/Add-bookmark-import-export-actions.patch new file mode 100644 index 00000000..540aa606 --- /dev/null +++ b/bromite/build/patches/Add-bookmark-import-export-actions.patch @@ -0,0 +1,1698 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Wed, 1 Aug 2018 09:19:40 +0200 +Subject: Add bookmark import/export actions + +Add bookmark import/export actions in bookmarks activity and page +Reduce permissions needed for bookmarks import/export +Completely remove contacts picker permission from the file dialog + +Requires patch: Adds-support-for-writing-URIs.patch + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/android/java/AndroidManifest.xml | 1 - + .../res/menu/bookmark_action_bar_menu.xml | 14 + + .../browser/TabbedModeTabDelegateFactory.java | 5 +- + .../app/bookmarks/BookmarkActivity.java | 31 ++ + .../browser/bookmarks/BookmarkActionBar.java | 12 + + .../browser/bookmarks/BookmarkBridge.java | 278 +++++++++++++++++ + .../browser/bookmarks/BookmarkDelegate.java | 10 + + .../browser/bookmarks/BookmarkManager.java | 22 ++ + .../browser/bookmarks/BookmarkPage.java | 8 +- + .../native_page/NativePageFactory.java | 11 +- + chrome/browser/BUILD.gn | 11 +- + chrome/browser/about_flags.cc | 6 + + .../bookmarks/android/bookmark_bridge.cc | 283 ++++++++++++++++++ + .../bookmarks/android/bookmark_bridge.h | 30 +- + .../browser/bookmarks/bookmark_html_writer.cc | 8 +- + .../dialogs/DownloadLocationCustomView.java | 8 +- + .../DownloadLocationDialogCoordinator.java | 8 +- + chrome/browser/flag_descriptions.cc | 5 + + chrome/browser/flag_descriptions.h | 3 + + .../flags/android/chrome_feature_list.cc | 6 + + .../flags/android/chrome_feature_list.h | 1 + + .../browser/flags/ChromeFeatureList.java | 1 + + chrome/browser/importer/profile_writer.cc | 12 + + chrome/browser/importer/profile_writer.h | 6 + + .../preferences/ChromePreferenceKeys.java | 3 + + .../strings/android_chrome_strings.grd | 18 ++ + chrome/common/BUILD.gn | 3 + + chrome/utility/BUILD.gn | 7 +- + .../utility/importer/bookmark_html_reader.cc | 27 +- + .../utility/importer/bookmark_html_reader.h | 8 + + .../chromium/ui/base/SelectFileDialog.java | 18 +- + .../java/strings/android_ui_strings.grd | 3 + + ui/shell_dialogs/select_file_dialog.h | 2 + + .../select_file_dialog_android.cc | 6 + + ui/shell_dialogs/select_file_dialog_android.h | 2 + + 35 files changed, 848 insertions(+), 29 deletions(-) + +diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml +--- a/chrome/android/java/AndroidManifest.xml ++++ b/chrome/android/java/AndroidManifest.xml +@@ -61,7 +61,6 @@ by a child template that "extends" this file. + + +- + + + +diff --git a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml b/chrome/android/java/res/menu/bookmark_action_bar_menu.xml +--- a/chrome/android/java/res/menu/bookmark_action_bar_menu.xml ++++ b/chrome/android/java/res/menu/bookmark_action_bar_menu.xml +@@ -23,6 +23,20 @@ found in the LICENSE file. + android:visible="false" + app:showAsAction="ifRoom" + app:iconTint="@color/default_icon_color_secondary_tint_list" /> ++ ++ + mShareDelegateSupplier; + private final Supplier mEphemeralTabCoordinatorSupplier; +@@ -74,7 +75,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { + + private NativePageFactory mNativePageFactory; + +- public TabbedModeTabDelegateFactory(Activity activity, ++ public TabbedModeTabDelegateFactory(ChromeActivity activity, + BrowserControlsVisibilityDelegate appBrowserControlsVisibilityDelegate, + Supplier shareDelegateSupplier, + Supplier ephemeralTabCoordinatorSupplier, +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/BookmarkActivity.java +@@ -18,6 +18,11 @@ import org.chromium.chrome.browser.bookmarks.BookmarkManager; + import org.chromium.chrome.browser.bookmarks.BookmarkPage; + import org.chromium.components.bookmarks.BookmarkId; + import org.chromium.components.embedder_support.util.UrlConstants; ++import org.chromium.ui.base.ActivityWindowAndroid; ++import org.chromium.ui.base.IntentRequestTracker; ++ ++import org.chromium.ui.modaldialog.ModalDialogManager; ++import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; + + /** + * The activity that displays the bookmark UI on the phone. It keeps a {@link BookmarkManager} +@@ -29,6 +34,8 @@ public class BookmarkActivity extends SnackbarActivity { + public static final int EDIT_BOOKMARK_REQUEST_CODE = 14; + public static final String INTENT_VISIT_BOOKMARK_ID = "BookmarkEditActivity.VisitBookmarkId"; + ++ private ActivityWindowAndroid mWindowAndroid; ++ + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +@@ -43,8 +50,23 @@ public class BookmarkActivity extends SnackbarActivity { + mBookmarkManager.updateForUrl(url); + setContentView(mBookmarkManager.getView()); + BackPressHelper.create(this, getOnBackPressedDispatcher(), mBookmarkManager::onBackPressed); ++ ++ final boolean listenToActivityState = true; ++ IntentRequestTracker intentRequestTracker = IntentRequestTracker.createFromActivity(this); ++ mWindowAndroid = new ActivityWindowAndroid(this, listenToActivityState, intentRequestTracker); ++ mWindowAndroid.getIntentRequestTracker().restoreInstanceState(savedInstanceState); ++ mBookmarkManager.setWindow(mWindowAndroid, ++ new ModalDialogManager( ++ new AppModalPresenter(this), ModalDialogManager.ModalDialogType.APP)); + } + ++ @Override ++ protected void onSaveInstanceState(Bundle outState) { ++ super.onSaveInstanceState(outState); ++ ++ mWindowAndroid.getIntentRequestTracker().saveInstanceState(outState); ++ } ++ + @Override + protected void onDestroy() { + super.onDestroy(); +@@ -54,6 +76,7 @@ public class BookmarkActivity extends SnackbarActivity { + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); ++ mWindowAndroid.getIntentRequestTracker().onActivityResult(requestCode, resultCode, data); + if (requestCode == EDIT_BOOKMARK_REQUEST_CODE && resultCode == RESULT_OK) { + BookmarkId bookmarkId = BookmarkId.getBookmarkIdFromString( + data.getStringExtra(INTENT_VISIT_BOOKMARK_ID)); +@@ -61,6 +84,14 @@ public class BookmarkActivity extends SnackbarActivity { + } + } + ++ @Override ++ public void onRequestPermissionsResult( ++ int requestCode, String[] permissions, int[] grantResults) { ++ if (mWindowAndroid.handlePermissionResult(requestCode, permissions, grantResults)) ++ return; ++ super.onRequestPermissionsResult(requestCode, permissions, grantResults); ++ } ++ + /** + * @return The {@link BookmarkManager} for testing purposes. + */ +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java +@@ -84,6 +84,12 @@ public class BookmarkActionBar extends SelectableListToolbar + } else if (menuItem.getItemId() == R.id.search_menu_id) { + mDelegate.openSearchUI(); + return true; ++ } else if (menuItem.getItemId() == R.id.import_menu_id) { ++ mDelegate.importBookmarks(); ++ return true; ++ } else if (menuItem.getItemId() == R.id.export_menu_id) { ++ mDelegate.exportBookmarks(); ++ return true; + } + + SelectionDelegate selectionDelegate = mDelegate.getSelectionDelegate(); +@@ -135,6 +141,8 @@ public class BookmarkActionBar extends SelectableListToolbar + void showLoadingUi() { + setTitle(null); + setNavigationButton(NAVIGATION_BUTTON_NONE); ++ getMenu().findItem(R.id.import_menu_id).setVisible(false); ++ getMenu().findItem(R.id.export_menu_id).setVisible(false); + getMenu().findItem(R.id.search_menu_id).setVisible(false); + getMenu().findItem(R.id.edit_menu_id).setVisible(false); + } +@@ -144,6 +152,8 @@ public class BookmarkActionBar extends SelectableListToolbar + super.showNormalView(); + + if (mDelegate == null) { ++ getMenu().findItem(R.id.import_menu_id).setVisible(false); ++ getMenu().findItem(R.id.export_menu_id).setVisible(false); + getMenu().findItem(R.id.search_menu_id).setVisible(false); + getMenu().findItem(R.id.edit_menu_id).setVisible(false); + } +@@ -173,6 +183,8 @@ public class BookmarkActionBar extends SelectableListToolbar + @Override + public void onFolderStateSet(BookmarkId folder) { + mCurrentFolder = mDelegate.getModel().getBookmarkById(folder); ++ getMenu().findItem(R.id.import_menu_id).setVisible(true); ++ getMenu().findItem(R.id.export_menu_id).setVisible(true); + getMenu().findItem(R.id.search_menu_id).setVisible(true); + getMenu().findItem(R.id.edit_menu_id).setVisible(mCurrentFolder.isEditable()); + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +@@ -4,7 +4,20 @@ + + package org.chromium.chrome.browser.bookmarks; + ++import android.app.Activity; ++import android.content.Intent; ++import android.content.Context; ++import android.content.pm.PackageManager; ++import android.content.DialogInterface; ++import android.content.Intent; ++import android.net.Uri; ++import android.content.ContentResolver; ++import android.provider.Browser; ++import android.provider.DocumentsContract; ++import android.Manifest.permission; ++import androidx.appcompat.app.AlertDialog; + import android.os.SystemClock; ++import android.os.Build; + import android.text.TextUtils; + import android.util.Pair; + +@@ -42,6 +55,32 @@ import java.util.HashMap; + import java.util.HashSet; + import java.util.List; + ++import org.chromium.base.ContentUriUtils; ++import org.chromium.chrome.R; ++import org.chromium.chrome.browser.document.ChromeLauncherActivity; ++import org.chromium.chrome.browser.IntentHandler; ++import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; ++import org.chromium.chrome.browser.preferences.SharedPreferencesManager; ++import org.chromium.chrome.browser.flags.ChromeFeatureList; ++import org.chromium.ui.base.PageTransition; ++import org.chromium.ui.base.WindowAndroid; ++import org.chromium.ui.modaldialog.ModalDialogManager; ++ ++import android.view.View; ++import android.view.LayoutInflater; ++import org.chromium.ui.modelutil.PropertyModel; ++import org.chromium.ui.modaldialog.ModalDialogProperties; ++import org.chromium.ui.modaldialog.DialogDismissalCause; ++import org.chromium.chrome.browser.download.DownloadLocationDialogType; ++import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogController; ++import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogCoordinator; ++import org.chromium.chrome.browser.download.dialogs.DownloadLocationCustomView; ++import org.chromium.chrome.browser.download.DirectoryOption; ++import android.content.res.Resources; ++import org.chromium.base.task.AsyncTask; ++ ++import java.io.File; ++ + /** + * Provides the communication channel for Android to fetch and manipulate the + * bookmark model stored in native. +@@ -442,6 +481,209 @@ class BookmarkBridge { + mNativeBookmarkBridge, BookmarkBridge.this, id.getId(), id.getType()); + } + ++ /** ++ * Import bookmarks from a selected file. ++ * @param window The current window of the bookmarks activity or page. ++ */ ++ public void importBookmarks(WindowAndroid window) { ++ assert mIsNativeBookmarkModelLoaded; ++ BookmarkBridgeJni.get().importBookmarks(mNativeBookmarkBridge, BookmarkBridge.this, window); ++ } ++ ++ /** ++ * Export bookmarks to a path selected by the user. ++ * @param window The current window of the bookmarks activity or page. ++ */ ++ public void exportBookmarks(WindowAndroid window, ModalDialogManager modalDialogManager) { ++ assert mIsNativeBookmarkModelLoaded; ++ if (ChromeFeatureList.isEnabled(ChromeFeatureList.BOOKMARKS_EXPORT_USESAF) || ++ Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) ++ exportBookmarksImplUseSaf(window); ++ else ++ exportBookmarksImplUseFile(window, modalDialogManager); ++ } ++ ++ private void exportBookmarksImplUseSaf(WindowAndroid window) { ++ Context context = window.getContext().get(); ++ ++ // standard name for boorkmark file ++ final String standardBoorkmarkName = "bookmarks.html"; ++ ++ // use the fileSelector and saf asking user for the file ++ Intent fileSelector = new Intent(Intent.ACTION_CREATE_DOCUMENT); ++ fileSelector.addCategory(Intent.CATEGORY_OPENABLE); ++ fileSelector.setType("text/html"); ++ fileSelector.putExtra(Intent.EXTRA_TITLE, standardBoorkmarkName); ++ fileSelector.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | ++ Intent.FLAG_GRANT_READ_URI_PERMISSION | ++ Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION); ++ ++ // get last exported uri path, if any ++ SharedPreferencesManager sharedPrefs = SharedPreferencesManager.getInstance(); ++ String bookmarksPath = sharedPrefs.readString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, standardBoorkmarkName); ++ Uri lastSelectedUri = Uri.parse(bookmarksPath); ++ ++ // prepare delegate for file selector ++ DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { ++ @Override ++ public void onClick(DialogInterface dialog, int button) { ++ if (button == AlertDialog.BUTTON_NEGATIVE) { ++ window.showIntent(fileSelector, ++ new WindowAndroid.IntentCallback() { ++ @Override ++ public void onIntentCompleted(int resultCode, Intent data) { ++ if (data == null) return; ++ Uri filePath = data.getData(); ++ doExportBookmarksImpl(window, filePath); ++ } ++ }, ++ null); ++ } else { ++ if (dialog!=null) dialog.dismiss(); ++ doExportBookmarksImpl(window, lastSelectedUri); ++ } ++ } ++ }; ++ ++ // as a workaround for https://issuetracker.google.com/issues/37136466 ++ // ask to overwrite if is a valid uri and the file is present ++ if (DocumentsContract.isDocumentUri(context, lastSelectedUri)) { ++ AsyncTask checkUriTask = new AsyncTask() { ++ boolean uriExists = false; ++ String actualFilePath = null; ++ ++ @Override ++ protected Void doInBackground() { ++ uriExists = ContentUriUtils.contentUriExists(lastSelectedUri.toString()); ++ if (uriExists) { ++ actualFilePath = ContentUriUtils.getFilePathFromContentUri(lastSelectedUri); ++ // get real actual file name on disk ++ if (actualFilePath==null) actualFilePath = lastSelectedUri.toString(); ++ // set file name to last exported file name ++ fileSelector.putExtra(Intent.EXTRA_TITLE, ++ ContentUriUtils.getDisplayName(lastSelectedUri, context, ++ DocumentsContract.Document.COLUMN_DISPLAY_NAME)); ++ } ++ return null; ++ } ++ ++ @Override ++ protected void onPostExecute(Void result) { ++ // check for permissions ++ if (uriExists) { ++ AlertDialog.Builder alert = ++ new AlertDialog.Builder(context, R.style.ThemeOverlay_BrowserUI_AlertDialog); ++ AlertDialog alertDialog = ++ alert.setTitle(R.string.export_bookmarks_alert_title) ++ .setMessage(context.getString(R.string.export_bookmarks_alert_message, actualFilePath)) ++ .setPositiveButton( ++ R.string.export_bookmarks_alert_message_yes, onClickListener) ++ .setNegativeButton(R.string.export_bookmarks_alert_message_no, onClickListener) ++ .create(); ++ alertDialog.getDelegate().setHandleNativeActionModesEnabled(false); ++ ++ // show dialog asking for overwrite ++ alertDialog.show(); ++ return; ++ } else { ++ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE); ++ } ++ } ++ }; ++ checkUriTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); ++ return; ++ } ++ ++ // actually open the file selector ++ onClickListener.onClick(null, AlertDialog.BUTTON_NEGATIVE); ++ } ++ ++ private void doExportBookmarksImpl(WindowAndroid window, Uri filePath) { ++ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver(); ++ // since we want to persist the uri in settings, ask for persistable permissions ++ resolver.takePersistableUriPermission(filePath, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | ++ Intent.FLAG_GRANT_READ_URI_PERMISSION); ++ ++ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, BookmarkBridge.this, ++ window, filePath.toString()); ++ } ++ ++ private void exportBookmarksImplUseFile(WindowAndroid window, ModalDialogManager modalDialogManager) { ++ Context context = window.getContext().get(); ++ ++ // standard name for boorkmark file ++ final String standardBoorkmarkName = "bookmarks.html"; ++ ++ // use the download ui and standard file saving ++ DownloadLocationDialogController controller = new DownloadLocationDialogController() { ++ @Override ++ public void onDownloadLocationDialogComplete(String returnedPath) {} ++ ++ @Override ++ public void onDownloadLocationDialogCanceled() {} ++ }; ++ ++ DownloadLocationDialogCoordinator dialog = new DownloadLocationDialogCoordinator() { ++ @Override ++ protected void onDirectoryOptionsRetrieved(ArrayList dirs) { ++ if (mDialogModel != null) return; ++ ++ // Actually show the dialog. ++ mCustomView = (DownloadLocationCustomView) LayoutInflater.from(context).inflate( ++ R.layout.download_location_dialog, null); ++ mCustomView.initialize(DownloadLocationDialogType.DEFAULT, /*totalBytes*/ 0); ++ mCustomView.setTitle(context.getString(R.string.export_bookmarks_alert_title)); ++ mCustomView.setFileName(standardBoorkmarkName); ++ mCustomView.mDontShowAgain.setVisibility(View.GONE); ++ ++ Resources resources = context.getResources(); ++ mDialogModel = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) ++ .with(ModalDialogProperties.CONTROLLER, this) ++ .with(ModalDialogProperties.CUSTOM_VIEW, mCustomView) ++ .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, resources, ++ R.string.export_bookmarks) ++ .with(ModalDialogProperties.NEGATIVE_BUTTON_TEXT, resources, ++ R.string.cancel) ++ .build(); ++ ++ mModalDialogManager.showDialog(mDialogModel, ModalDialogManager.ModalDialogType.APP); ++ } ++ ++ @Override ++ public void onDismiss(PropertyModel model, int dismissalCause) { ++ switch (dismissalCause) { ++ case DialogDismissalCause.POSITIVE_BUTTON_CLICKED: ++ { ++ String fileName = mCustomView.getFileName(); ++ String directory = mCustomView.getDirectoryOption().location; ++ if (fileName != null && directory != null) { ++ File file = new File(directory, fileName); ++ ++ if (window.hasPermission(permission.WRITE_EXTERNAL_STORAGE)) { ++ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, ++ BookmarkBridge.this, window, file.getPath()); ++ } else { ++ String[] requestPermissions = new String[] {permission.WRITE_EXTERNAL_STORAGE}; ++ window.requestPermissions(requestPermissions, (permissions, grantResults) -> { ++ if (grantResults.length >= 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { ++ BookmarkBridgeJni.get().exportBookmarks(mNativeBookmarkBridge, ++ BookmarkBridge.this, window, file.getPath()); ++ } ++ }); ++ }; ++ } ++ } ++ break; ++ } ++ mDialogModel = null; ++ mCustomView = null; ++ } ++ }; ++ dialog.initialize(controller); ++ dialog.showDialog(context, modalDialogManager, /*totalBytes*/ 0, ++ DownloadLocationDialogType.DEFAULT, /*suggestedPath*/ "", /*isIncognito*/ false); ++ } ++ + /** + * Synchronously gets a list of bookmarks that match the specified search query. + * @param query Keyword used for searching bookmarks. +@@ -990,6 +1232,39 @@ class BookmarkBridge { + depthList.add(depth); + } + ++ @CalledByNative ++ public void bookmarksExported(WindowAndroid window, String bookmarksPath, boolean success) { ++ Uri uri = Uri.parse(bookmarksPath); ++ ++ if (success == false) { ++ ((Activity)window.getContext().get()).runOnUiThread(new Runnable() { ++ public void run() { ++ window.showError(R.string.saving_file_error); ++ } ++ }); ++ } else { ++ SharedPreferencesManager sharedPrefs = SharedPreferencesManager.getInstance(); ++ sharedPrefs.writeString(ChromePreferenceKeys.BOOKMARKS_LAST_EXPORT_URI, bookmarksPath); ++ ++ Context context = ContextUtils.getApplicationContext(); ++ ++ Intent intent = new Intent(Intent.ACTION_VIEW, ++ ContentUriUtils.isContentUri(bookmarksPath) ? ++ Uri.parse(bookmarksPath) : Uri.parse("file://" + bookmarksPath)); ++ intent.putExtra(Browser.EXTRA_APPLICATION_ID, ++ context.getPackageName()); ++ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ++ intent.putExtra(IntentHandler.EXTRA_PAGE_TRANSITION_TYPE, PageTransition.AUTO_BOOKMARK); ++ ++ // If the bookmark manager is shown in a tab on a phone (rather than in a separate ++ // activity) the component name may be null. Send the intent through ++ // ChromeLauncherActivity instead to avoid crashing. See crbug.com/615012. ++ intent.setClass(context, ChromeLauncherActivity.class); ++ ++ IntentHandler.startActivityForTrustedIntent(intent); ++ } ++ } ++ + private static List> createPairsList(int[] left, int[] right) { + List> pairList = new ArrayList>(); + for (int i = 0; i < left.length; i++) { +@@ -1061,6 +1336,9 @@ class BookmarkBridge { + int getChildCount(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type); + void getChildIDs(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, + List bookmarksList); ++ void importBookmarks(long nativeBookmarkBridge, BookmarkBridge caller, WindowAndroid window); ++ void exportBookmarks(long nativeBookmarkBridge, BookmarkBridge caller, WindowAndroid window, ++ String export_path); + BookmarkId getChildAt( + long nativeBookmarkBridge, BookmarkBridge caller, long id, int type, int index); + int getTotalBookmarkCount( +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java +@@ -79,6 +79,16 @@ public interface BookmarkDelegate { + */ + void openSearchUI(); + ++ /** ++ * Imports bookmarks from user-selected file. ++ */ ++ void importBookmarks(); ++ ++ /** ++ * Exports bookmarks to downloads directory. ++ */ ++ void exportBookmarks(); ++ + /** + * Dismisses the search UI. + */ +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java +@@ -36,6 +36,8 @@ import org.chromium.components.browser_ui.util.ConversionUtils; + import org.chromium.components.browser_ui.widget.dragreorder.DragStateDelegate; + import org.chromium.components.browser_ui.widget.selectable_list.SelectableListLayout; + import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar.SearchDelegate; ++import org.chromium.ui.base.ActivityWindowAndroid; ++import org.chromium.ui.modaldialog.ModalDialogManager; + import org.chromium.components.browser_ui.widget.selectable_list.SelectionDelegate; + import org.chromium.components.favicon.LargeIconBridge; + import org.chromium.url.GURL; +@@ -59,6 +61,8 @@ public class BookmarkManager + private ComponentName mOpenBookmarkComponentName; + private ViewGroup mMainView; + private BookmarkModel mBookmarkModel; ++ private ActivityWindowAndroid mWindowAndroid; ++ private ModalDialogManager mModalDialogManager; + private BookmarkUndoController mUndoController; + private final ObserverList mUIObservers = new ObserverList<>(); + private BasicNativePage mNativePage; +@@ -344,6 +348,14 @@ public class BookmarkManager + mNativePage = nativePage; + } + ++ /** ++ * Sets the Android window that is used by further intents created by the bookmark activity. ++ */ ++ public void setWindow(ActivityWindowAndroid window, ModalDialogManager modalDialogManager) { ++ mWindowAndroid = window; ++ mModalDialogManager = modalDialogManager; ++ } ++ + /** + * @return Current URL representing the UI state of bookmark manager. If no state has been shown + * yet in this session, on phone return last used state stored in preference; on tablet +@@ -540,6 +552,16 @@ public class BookmarkManager + } + } + ++ @Override ++ public void importBookmarks() { ++ mBookmarkModel.importBookmarks(mWindowAndroid); ++ } ++ ++ @Override ++ public void exportBookmarks() { ++ mBookmarkModel.exportBookmarks(mWindowAndroid, mModalDialogManager); ++ } ++ + @Override + public void openSearchUI() { + setState(BookmarkUIState.createSearchState()); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java +@@ -13,6 +13,9 @@ import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; + import org.chromium.chrome.browser.ui.native_page.BasicNativePage; + import org.chromium.chrome.browser.ui.native_page.NativePageHost; + import org.chromium.components.embedder_support.util.UrlConstants; ++import org.chromium.chrome.browser.app.ChromeActivity; ++import org.chromium.ui.modaldialog.ModalDialogManager; ++import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; + + /** + * A native page holding a {@link BookmarkManager} on _tablet_. +@@ -29,12 +32,15 @@ public class BookmarkPage extends BasicNativePage { + * @param host A NativePageHost to load urls. + */ + public BookmarkPage(ComponentName componentName, SnackbarManager snackbarManager, +- boolean isIncognito, NativePageHost host) { ++ boolean isIncognito, NativePageHost host, ChromeActivity activity) { + super(host); + + mManager = new BookmarkManager( + host.getContext(), componentName, false, isIncognito, snackbarManager); + mManager.setBasicNativePage(this); ++ mManager.setWindow(activity.getWindowAndroid(), ++ new ModalDialogManager( ++ new AppModalPresenter(activity), ModalDialogManager.ModalDialogType.APP)); + mTitle = host.getContext().getResources().getString(R.string.bookmarks); + + initWithView(mManager.getView()); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +@@ -15,6 +15,7 @@ import org.chromium.base.jank_tracker.JankTracker; + import org.chromium.base.supplier.BooleanSupplier; + import org.chromium.base.supplier.DestroyableObservableSupplier; + import org.chromium.base.supplier.Supplier; ++import org.chromium.chrome.browser.app.ChromeActivity; + import org.chromium.chrome.browser.app.download.home.DownloadPage; + import org.chromium.chrome.browser.bookmarks.BookmarkPage; + import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginSupplier; +@@ -55,7 +56,7 @@ import org.chromium.ui.util.ColorUtils; + * Creates NativePage objects to show chrome-native:// URLs using the native Android view system. + */ + public class NativePageFactory { +- private final Activity mActivity; ++ private final ChromeActivity mActivity; + private final BottomSheetController mBottomSheetController; + private final BrowserControlsManager mBrowserControlsManager; + private final Supplier mCurrentTabSupplier; +@@ -73,7 +74,7 @@ public class NativePageFactory { + + private NativePageBuilder mNativePageBuilder; + +- public NativePageFactory(@NonNull Activity activity, ++ public NativePageFactory(@NonNull ChromeActivity activity, + @NonNull BottomSheetController sheetController, + @NonNull BrowserControlsManager browserControlsManager, + @NonNull Supplier currentTabSupplier, +@@ -124,7 +125,7 @@ public class NativePageFactory { + + @VisibleForTesting + static class NativePageBuilder { +- private final Activity mActivity; ++ private final ChromeActivity mActivity; + private final BottomSheetController mBottomSheetController; + private final Supplier mUma; + private final BrowserControlsManager mBrowserControlsManager; +@@ -138,7 +139,7 @@ public class NativePageFactory { + private final Supplier mToolbarSupplier; + private final CrowButtonDelegate mCrowButtonDelegate; + +- public NativePageBuilder(Activity activity, Supplier uma, ++ public NativePageBuilder(ChromeActivity activity, Supplier uma, + BottomSheetController sheetController, + BrowserControlsManager browserControlsManager, Supplier currentTabSupplier, + Supplier snackbarManagerSupplier, +@@ -177,7 +178,7 @@ public class NativePageFactory { + protected NativePage buildBookmarksPage(Tab tab) { + return new BookmarkPage(mActivity.getComponentName(), mSnackbarManagerSupplier.get(), + mTabModelSelector.isIncognitoSelected(), +- new TabShim(tab, mBrowserControlsManager, mTabModelSelector)); ++ new TabShim(tab, mBrowserControlsManager, mTabModelSelector), mActivity); + } + + protected NativePage buildDownloadsPage(Tab tab) { +diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn +--- a/chrome/browser/BUILD.gn ++++ b/chrome/browser/BUILD.gn +@@ -1887,6 +1887,13 @@ static_library("browser") { + ] + } + ++ if (is_android) { ++ sources += [ ++ "importer/profile_writer.cc", ++ "importer/profile_writer.h", ++ ] ++ } ++ + configs += [ + "//build/config/compiler:wexit_time_destructors", + "//build/config:precompiled_headers", +@@ -2904,6 +2911,8 @@ static_library("browser") { + "autofill/manual_filling_controller.h", + "autofill/manual_filling_controller_impl.cc", + "autofill/manual_filling_controller_impl.h", ++ "bookmarks/bookmark_html_writer.cc", ++ "bookmarks/bookmark_html_writer.h", + "autofill/manual_filling_utils.cc", + "autofill/manual_filling_utils.h", + "autofill/manual_filling_view_interface.h", +@@ -3583,8 +3592,6 @@ static_library("browser") { + "badging/badge_manager_factory.h", + "banners/app_banner_manager_desktop.cc", + "banners/app_banner_manager_desktop.h", +- "bookmarks/bookmark_html_writer.cc", +- "bookmarks/bookmark_html_writer.h", + "bookmarks/url_and_id.h", + "cart/cart_db.cc", + "cart/cart_db.h", +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -9039,6 +9039,12 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(features::kRequestDesktopSiteExceptions)}, + #endif + ++ {"export-bookmarks-use-saf", ++ flag_descriptions::kBookmarksExportUseSafName, ++ flag_descriptions::kBookmarksExportUseSafDescription, kOsAndroid, ++ FEATURE_VALUE_TYPE( ++ chrome::android::kBookmarksExportUseSaf)}, ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + {"snooping-protection", flag_descriptions::kSnoopingProtectionName, + flag_descriptions::kSnoopingProtectionDescription, kOsCrOS, +diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc +--- a/chrome/browser/bookmarks/android/bookmark_bridge.cc ++++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc +@@ -60,6 +60,25 @@ + #include "content/public/browser/browser_thread.h" + #include "content/public/browser/web_contents.h" + ++#include "base/android/content_uri_utils.h" ++#include "base/android/path_utils.h" ++#include "base/strings/utf_string_conversions.h" ++#include "chrome/utility/importer/bookmark_html_reader.h" ++#include "chrome/browser/bookmarks/bookmark_html_writer.h" ++#include "chrome/browser/importer/profile_writer.h" ++#include "chrome/browser/platform_util.h" ++#include "chrome/browser/ui/chrome_select_file_policy.h" ++#include "chrome/common/importer/imported_bookmark_entry.h" ++#include "chrome/common/importer/importer_data_types.h" ++#include "chrome/common/url_constants.h" ++#include "components/favicon_base/favicon_usage_data.h" ++#include "components/search_engines/template_url.h" ++#include "components/url_formatter/url_fixer.h" ++#include "ui/android/window_android.h" ++#include "base/task/task_traits.h" ++#include "base/task/thread_pool.h" ++#include "content/public/browser/browser_task_traits.h" ++ + using base::android::AttachCurrentThread; + using base::android::ConvertUTF16ToJavaString; + using base::android::ConvertUTF8ToJavaString; +@@ -77,8 +96,92 @@ using bookmarks::android::JavaBookmarkIdGetType; + using content::BrowserThread; + using power_bookmarks::PowerBookmarkMeta; + ++namespace internal { ++ ++// Returns true if |url| has a valid scheme that we allow to import. We ++// filter out the URL with a unsupported scheme. ++bool CanImportURL(const GURL& url) { ++ // The URL is not valid. ++ if (!url.is_valid()) ++ return false; ++ ++ // Filter out the URLs with unsupported schemes. ++ const char* const kInvalidSchemes[] = {"wyciwyg", "place"}; ++ for (size_t i = 0; i < std::size(kInvalidSchemes); ++i) { ++ if (url.SchemeIs(kInvalidSchemes[i])) ++ return false; ++ } ++ ++ // Check if |url| is about:blank. ++ if (url == url::kAboutBlankURL) ++ return true; ++ ++ // If |url| starts with chrome:// or about:, check if it's one of the URLs ++ // that we support. ++ if (url.SchemeIs(content::kChromeUIScheme) || ++ url.SchemeIs(url::kAboutScheme)) { ++ if (url.host_piece() == chrome::kChromeUIAboutHost) ++ return true; ++ ++ GURL fixed_url(url_formatter::FixupURL(url.spec(), std::string())); ++ for (size_t i = 0; i < chrome::kNumberOfChromeHostURLs; ++i) { ++ if (fixed_url.DomainIs(chrome::kChromeHostURLs[i])) ++ return true; ++ } ++ ++ for (size_t i = 0; i < chrome::kNumberOfChromeDebugURLs; ++i) { ++ if (fixed_url == chrome::kChromeDebugURLs[i]) ++ return true; ++ } ++ ++ // If url has either chrome:// or about: schemes but wasn't found in the ++ // above lists, it means we don't support it, so we don't allow the user ++ // to import it. ++ return false; ++ } ++ ++ // Otherwise, we assume the url has a valid (importable) scheme. ++ return true; ++} ++ ++} // internal ++ + namespace { + ++class FileBookmarksExportObserver: public BookmarksExportObserver { ++ public: ++ FileBookmarksExportObserver( ++ const JavaParamRef& obj, ++ ui::WindowAndroid* window, ++ const std::string& export_path) : ++ obj_(ScopedJavaGlobalRef(obj)), ++ window_(window), ++ export_path_(export_path) {} ++ ++ void OnExportFinished(Result result) override { ++ if (result == Result::kSuccess) { ++ LOG(INFO) << "Bookmarks exported successfully to " << export_path_; ++ } else if (result == Result::kCouldNotCreateFile) { ++ LOG(ERROR) << "Bookmarks export: could not create file " << export_path_; ++ } else if (result == Result::kCouldNotWriteHeader) { ++ LOG(ERROR) << "Bookmarks export: could not write header"; ++ } else if (result == Result::kCouldNotWriteNodes) { ++ LOG(ERROR) << "Bookmarks export: could not write nodes"; ++ } ++ ++ JNIEnv* env = AttachCurrentThread(); ++ Java_BookmarkBridge_bookmarksExported(env, obj_, window_->GetJavaObject(), ++ ConvertUTF8ToJavaString(env, export_path_), ++ result == Result::kSuccess); ++ delete this; ++ } ++ ++ private: ++ const ScopedJavaGlobalRef obj_; ++ ui::WindowAndroid* window_; ++ const std::string export_path_; ++}; ++ + class BookmarkTitleComparer { + public: + explicit BookmarkTitleComparer(BookmarkBridge* bookmark_bridge, +@@ -164,6 +267,10 @@ BookmarkBridge::~BookmarkBridge() { + if (partner_bookmarks_shim_) + partner_bookmarks_shim_->RemoveObserver(this); + reading_list_manager_->RemoveObserver(this); ++ // There may be pending file dialogs, we need to tell them that we've gone ++ // away so they don't try and call back to us. ++ if (select_file_dialog_) ++ select_file_dialog_->ListenerDestroyed(); + } + + void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef&) { +@@ -574,6 +681,182 @@ jint BookmarkBridge::GetTotalBookmarkCount( + return count; + } + ++void BookmarkBridge::ImportBookmarks(JNIEnv* env, ++ const JavaParamRef& obj, ++ const JavaParamRef& java_window) { ++ DCHECK(IsLoaded()); ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ ++ ui::WindowAndroid* window = ++ ui::WindowAndroid::FromJavaWindowAndroid(java_window); ++ CHECK(window); ++ ++ select_file_dialog_ = ui::SelectFileDialog::Create( ++ this, std::make_unique(nullptr)); ++ ++ //NOTE: extension and description are not used on Android, thus not set ++ ui::SelectFileDialog::FileTypeInfo file_type_info; ++ ++ const std::vector v_accept_types = { u"text/html" }; ++ ++ // Android needs the original MIME types and an additional capture value. ++ std::pair, bool> accept_types = ++ std::make_pair(v_accept_types, /* use_media_capture */ false); ++ ++ select_file_dialog_->SelectFile( ++ ui::SelectFileDialog::SELECT_OPEN_FILE, ++ std::u16string(), ++ export_path_, ++ &file_type_info, ++ 0, ++ base::FilePath::StringType(), ++ window, ++ &accept_types ++ ); ++} ++ ++void BookmarkBridge::ExportBookmarks(JNIEnv* env, ++ const JavaParamRef& obj, ++ const JavaParamRef& java_window, ++ const JavaParamRef& j_export_path) { ++ DCHECK(IsLoaded()); ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ ++ ui::WindowAndroid* window = ++ ui::WindowAndroid::FromJavaWindowAndroid(java_window); ++ CHECK(window); ++ ++ std::u16string export_path = ++ base::android::ConvertJavaStringToUTF16(env, j_export_path); ++ ++ export_path_ = base::FilePath::FromUTF16Unsafe(export_path); ++ ++ if (export_path_.empty()) { ++ if (!base::android::GetDownloadsDirectory(&export_path_)) { ++ LOG(ERROR) << "Could not retrieve downloads directory for bookmarks export"; ++ return; ++ } ++ export_path_ = export_path_.Append(FILE_PATH_LITERAL("bookmarks.html")); ++ } ++ ++ observer_ = new FileBookmarksExportObserver(obj, window, export_path_.MaybeAsASCII()); ++ bookmark_html_writer::WriteBookmarks(profile_, export_path_, observer_); ++} ++ ++// Attempts to create a TemplateURL from the provided data. |title| is optional. ++// If TemplateURL creation fails, returns null. ++std::unique_ptr CreateTemplateURL(const std::u16string& url, ++ const std::u16string& keyword, ++ const std::u16string& title) { ++ if (url.empty() || keyword.empty()) ++ return nullptr; ++ TemplateURLData data; ++ data.SetKeyword(keyword); ++ // We set short name by using the title if it exists. ++ // Otherwise, we use the shortcut. ++ data.SetShortName(title.empty() ? keyword : title); ++ data.SetURL(TemplateURLRef::DisplayURLToURLRef(url)); ++ return std::make_unique(data); ++} ++ ++void BookmarkBridge::FileSelected(const base::FilePath& path, int index, ++ void* params) { ++ base::ThreadPool::PostTaskAndReplyWithResult( ++ FROM_HERE, {base::TaskPriority::BEST_EFFORT, base::MayBlock()}, ++ base::BindOnce(&BookmarkBridge::FileSelectedImpl, ++ base::Unretained(this), ++ path), ++ base::BindOnce(&BookmarkBridge::FileSelectedImplOnUIThread, ++ base::Unretained(this), ++ path)); ++} ++ ++const std::string BookmarkBridge::FileSelectedImpl(const base::FilePath& path) { ++ base::File file; ++ if (path.IsContentUri()) { ++ file = base::OpenContentUriForRead(path); ++ } else { ++ file.Initialize(path, base::File::FLAG_OPEN | base::File::FLAG_READ); ++ } ++ if (!file.IsValid()) { ++ select_file_dialog_->ShowToast("Cannot open bookmarks file for import"); ++ return ""; ++ } ++ ++ auto fileLength = file.GetLength(); ++ if (-1 == fileLength) { ++ select_file_dialog_->ShowToast("Cannot read bookmarks file length"); ++ return ""; ++ } ++ ++ if (fileLength > 10 * 1024 * 1024) { ++ select_file_dialog_->ShowToast("Bookmark file is bigger than 10MB"); ++ return ""; ++ } ++ ++ std::vector buffer(fileLength); ++ if (-1 == file.ReadAtCurrentPos(buffer.data(), fileLength)) { ++ select_file_dialog_->ShowToast("Could not read bookmarks file"); ++ return ""; ++ } ++ ++ if (buffer.empty()) { ++ select_file_dialog_->ShowToast("Empty bookmarks file"); ++ return ""; ++ } ++ ++ std::string contents(buffer.begin(), buffer.end()); ++ return contents; ++} ++ ++void BookmarkBridge::FileSelectedImplOnUIThread(const base::FilePath& path, ++ const std::string& contents) { ++ if (contents.empty()) ++ return; ++ ++ // the following import logic comes from BookmarksFileImporter class ++ std::vector bookmarks; ++ std::vector search_engines; ++ favicon_base::FaviconUsageDataList favicons; ++ ++ bookmark_html_reader::ImportBookmarksFile( ++ base::RepeatingCallback(), ++ base::BindRepeating(internal::CanImportURL), ++ contents, ++ &bookmarks, ++ &search_engines, ++ &favicons); ++ ++ auto *writer = new ProfileWriter(profile_); ++ ++ if (!bookmarks.empty()) { ++ // adding bookmarks will begin extensive changes to the model ++ writer->AddBookmarksWithModel(bookmark_model_, bookmarks, u"Imported"); ++ } ++ if (!search_engines.empty()) { ++ TemplateURLService::OwnedTemplateURLVector owned_template_urls; ++ for (const auto& search_engine : search_engines) { ++ std::unique_ptr owned_template_url = CreateTemplateURL( ++ search_engine.url, search_engine.keyword, search_engine.display_name); ++ if (owned_template_url) ++ owned_template_urls.push_back(std::move(owned_template_url)); ++ } ++ writer->AddKeywords(std::move(owned_template_urls), false); ++ } ++ ++ std::stringstream message; ++ message << "Imported " << bookmarks.size() << " bookmarks and " << ++ search_engines.size() << " search engines from " << path.MaybeAsASCII(); ++ auto result = message.str(); ++ ++ select_file_dialog_->ShowToast(result); ++ ++ LOG(INFO) << result; ++} ++ ++void BookmarkBridge::FileSelectionCanceled(void* params) { ++} ++ + void BookmarkBridge::SetBookmarkTitle(JNIEnv* env, + const JavaParamRef& obj, + jlong id, +diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h +--- a/chrome/browser/bookmarks/android/bookmark_bridge.h ++++ b/chrome/browser/bookmarks/android/bookmark_bridge.h +@@ -18,6 +18,7 @@ + #include "base/scoped_observation.h" + #include "base/strings/utf_string_conversions.h" + #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h" ++#include "chrome/browser/bookmarks/bookmark_html_writer.h" + #include "chrome/browser/profiles/profile.h" + #include "chrome/browser/profiles/profile_observer.h" + #include "chrome/browser/reading_list/android/reading_list_manager.h" +@@ -27,6 +28,9 @@ + #include "components/prefs/pref_change_registrar.h" + #include "url/android/gurl_android.h" + ++#include "components/search_engines/template_url.h" ++#include "ui/shell_dialogs/select_file_dialog.h" ++ + namespace bookmarks { + class BookmarkModel; + class ManagedBookmarkService; +@@ -42,7 +46,8 @@ class Profile; + class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + public PartnerBookmarksShim::Observer, + public ReadingListManager::Observer, +- public ProfileObserver { ++ public ProfileObserver, ++ public ui::SelectFileDialog::Listener { + public: + BookmarkBridge(JNIEnv* env, + const base::android::JavaRef& obj, +@@ -62,6 +67,12 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + bool IsDoingExtensiveChanges(JNIEnv* env, + const base::android::JavaParamRef& obj); + ++ // SelectFileDialog::Listener implementation. ++ void FileSelected(const base::FilePath& path, ++ int index, ++ void* params) override; ++ void FileSelectionCanceled(void* params) override; ++ + jboolean IsEditBookmarksEnabled(JNIEnv* env); + + void LoadEmptyPartnerBookmarkShimForTesting( +@@ -159,6 +170,15 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + jlong id, + jint type); + ++ void ImportBookmarks(JNIEnv* env, ++ const base::android::JavaParamRef& obj, ++ const base::android::JavaParamRef& java_window); ++ ++ void ExportBookmarks(JNIEnv* env, ++ const base::android::JavaParamRef& obj, ++ const base::android::JavaParamRef& java_window, ++ const base::android::JavaParamRef& j_export_path); ++ + void SetBookmarkTitle(JNIEnv* env, + const base::android::JavaParamRef& obj, + jlong id, +@@ -372,12 +392,16 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + void DestroyJavaObject(); + + raw_ptr profile_; ++ base::FilePath export_path_; ++ BookmarksExportObserver* observer_; // weak ++ + JavaObjectWeakGlobalRef weak_java_ref_; + raw_ptr bookmark_model_; // weak + raw_ptr managed_bookmark_service_; // weak + std::unique_ptr + grouped_bookmark_actions_; + PrefChangeRegistrar pref_change_registrar_; ++ scoped_refptr select_file_dialog_; + + // Information about the Partner bookmarks (must check for IsLoaded()). + // This is owned by profile. +@@ -389,6 +413,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + // Observes the profile destruction and creation. + base::ScopedObservation profile_observation_{this}; + ++ const std::string FileSelectedImpl(const base::FilePath& path); ++ void FileSelectedImplOnUIThread(const base::FilePath& path, ++ const std::string& contents); ++ + // A means of accessing metadata about bookmarks. + raw_ptr opt_guide_; + +diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc +--- a/chrome/browser/bookmarks/bookmark_html_writer.cc ++++ b/chrome/browser/bookmarks/bookmark_html_writer.cc +@@ -27,6 +27,7 @@ + #include "base/task/thread_pool.h" + #include "base/time/time.h" + #include "base/values.h" ++#include "base/android/content_uri_utils.h" + #include "chrome/browser/bookmarks/bookmark_model_factory.h" + #include "chrome/browser/favicon/favicon_service_factory.h" + #include "chrome/browser/profiles/profile.h" +@@ -234,7 +235,12 @@ class Writer : public base::RefCountedThreadSafe { + // Opens the file, returning true on success. + bool OpenFile() { + int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE; +- file_ = std::make_unique(path_, flags); ++ if (path_.IsContentUri()) { ++ file_ = std::make_unique(base::OpenContentUriForWrite(path_)); ++ } else { ++ file_ = std::make_unique(path_, flags); ++ } ++ + if (!file_->IsValid()) { + PLOG(ERROR) << "Could not create " << path_; + return false; +diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +--- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java ++++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +@@ -49,7 +49,7 @@ public class DownloadLocationCustomView + private TextView mFileSize; + private Spinner mFileLocation; + private TextView mLocationAvailableSpace; +- private CheckBox mDontShowAgain; ++ public CheckBox mDontShowAgain; + private @DownloadLocationDialogType int mDialogType; + private long mTotalBytes; + +@@ -72,7 +72,7 @@ public class DownloadLocationCustomView + mDontShowAgain = findViewById(R.id.show_again_checkbox); + } + +- void initialize(@DownloadLocationDialogType int dialogType, long totalBytes) { ++ public void initialize(@DownloadLocationDialogType int dialogType, long totalBytes) { + // TODO(xingliu): Remove this function, currently used by smart suggestion. + mDialogType = dialogType; + mTotalBytes = totalBytes; +@@ -125,7 +125,7 @@ public class DownloadLocationCustomView + * @return The text that the user inputted as the name of the file. + */ + @Nullable +- String getFileName() { ++ public String getFileName() { + if (mFileName == null || mFileName.getText() == null) return null; + return mFileName.getText().toString(); + } +@@ -134,7 +134,7 @@ public class DownloadLocationCustomView + * @return The file path based on what the user selected as the location of the file. + */ + @Nullable +- DirectoryOption getDirectoryOption() { ++ public DirectoryOption getDirectoryOption() { + if (mFileLocation == null) return null; + DirectoryOption selected = (DirectoryOption) mFileLocation.getSelectedItem(); + return selected; +diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java +--- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java ++++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java +@@ -36,12 +36,12 @@ import java.util.ArrayList; + public class DownloadLocationDialogCoordinator implements ModalDialogProperties.Controller { + @NonNull + private DownloadLocationDialogController mController; +- private PropertyModel mDialogModel; ++ protected PropertyModel mDialogModel; + private PropertyModel mDownloadLocationDialogModel; + private PropertyModelChangeProcessor + mPropertyModelChangeProcessor; +- private DownloadLocationCustomView mCustomView; +- private ModalDialogManager mModalDialogManager; ++ protected DownloadLocationCustomView mCustomView; ++ protected ModalDialogManager mModalDialogManager; + private long mTotalBytes; + private @DownloadLocationDialogType int mDialogType; + private String mSuggestedPath; +@@ -130,7 +130,7 @@ public class DownloadLocationDialogCoordinator implements ModalDialogProperties. + * Called after retrieved the download directory options. + * @param dirs An list of available download directories. + */ +- private void onDirectoryOptionsRetrieved(ArrayList dirs) { ++ protected void onDirectoryOptionsRetrieved(ArrayList dirs) { + // Already showing the dialog. + if (mDialogModel != null) return; + +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -6836,6 +6836,11 @@ const char kVcControlsUiDescription[] = + + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + ++const char kBookmarksExportUseSafName[] = "Use saf for bookmarks export"; ++const char kBookmarksExportUseSafDescription[] = ++ "When enabled user can choose where save the exported bookmarks " ++ "file."; ++ + // ============================================================================ + // Don't just add flags to the end, put them in the right section in + // alphabetical order just like the header file. +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -3942,6 +3942,9 @@ extern const char kDisableLacrosTtsSupportDescription[]; + extern const char kVcControlsUiName[]; + extern const char kVcControlsUiDescription[]; + ++extern const char kBookmarksExportUseSafName[]; ++extern const char kBookmarksExportUseSafDescription[]; ++ + // ============================================================================ + // Don't just add flags to the end, put them in the right section in + // alphabetical order. See top instructions for more. +diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc +--- a/chrome/browser/flags/android/chrome_feature_list.cc ++++ b/chrome/browser/flags/android/chrome_feature_list.cc +@@ -181,6 +181,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kCastDeviceFilter, + &kClearOmniboxFocusAfterNavigation, + &kCloseTabSuggestions, ++ &kBookmarksExportUseSaf, + &kCriticalPersistedTabData, + &kCommerceCoupons, + &kCCTBackgroundTab, +@@ -1114,6 +1115,11 @@ BASE_FEATURE(kWebApkTrampolineOnInitialIntent, + "WebApkTrampolineOnInitialIntent", + base::FEATURE_ENABLED_BY_DEFAULT); + ++// disabled by default because of an issue on Android 6.0 ++BASE_FEATURE(kBookmarksExportUseSaf, ++ "BookmarksExportUseSaf", ++ base::FEATURE_DISABLED_BY_DEFAULT); ++ + static jboolean JNI_ChromeFeatureList_IsEnabled( + JNIEnv* env, + const JavaParamRef& jfeature_name) { +diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h +--- a/chrome/browser/flags/android/chrome_feature_list.h ++++ b/chrome/browser/flags/android/chrome_feature_list.h +@@ -161,6 +161,7 @@ BASE_DECLARE_FEATURE(kDiscoverFeedMultiColumn); + BASE_DECLARE_FEATURE(kTabStripRedesign); + BASE_DECLARE_FEATURE(kTabSwitcherOnReturn); + BASE_DECLARE_FEATURE(kTabToGTSAnimation); ++BASE_DECLARE_FEATURE(kBookmarksExportUseSaf); + BASE_DECLARE_FEATURE(kTestDefaultDisabled); + BASE_DECLARE_FEATURE(kTestDefaultEnabled); + BASE_DECLARE_FEATURE(kToolbarMicIphAndroid); +diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java ++++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +@@ -620,6 +620,7 @@ public abstract class ChromeFeatureList { + public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID = + "UseLibunwindstackNativeUnwinderAndroid"; + public static final String VOICE_SEARCH_AUDIO_CAPTURE_POLICY = "VoiceSearchAudioCapturePolicy"; ++ public static final String BOOKMARKS_EXPORT_USESAF = "BookmarksExportUseSaf"; + public static final String VOICE_BUTTON_IN_TOP_TOOLBAR = "VoiceButtonInTopToolbar"; + public static final String VR_BROWSING_FEEDBACK = "VrBrowsingFeedback"; + public static final String WEB_FEED = "WebFeed"; +diff --git a/chrome/browser/importer/profile_writer.cc b/chrome/browser/importer/profile_writer.cc +--- a/chrome/browser/importer/profile_writer.cc ++++ b/chrome/browser/importer/profile_writer.cc +@@ -106,12 +106,14 @@ void ProfileWriter::AddHistoryPage(const history::URLRows& page, + HistoryServiceFactory::GetForProfile(profile_, + ServiceAccessType::EXPLICIT_ACCESS) + ->AddPagesWithDetails(page, visit_source); ++#if !BUILDFLAG(IS_ANDROID) + // Measure the size of the history page after Auto Import on first run. + if (first_run::IsChromeFirstRun() && + visit_source == history::SOURCE_IE_IMPORTED) { + UMA_HISTOGRAM_COUNTS_1M("Import.ImportedHistorySize.AutoImportFromIE", + page.size()); + } ++#endif + } + + void ProfileWriter::AddHomepage(const GURL& home_page) { +@@ -132,6 +134,16 @@ void ProfileWriter::AddBookmarks( + return; + + BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_); ++ AddBookmarksWithModel(model, bookmarks, top_level_folder_name); ++} ++ ++void ProfileWriter::AddBookmarksWithModel( ++ BookmarkModel* model, ++ const std::vector& bookmarks, ++ const std::u16string& top_level_folder_name) { ++ if (bookmarks.empty()) ++ return; ++ + DCHECK(model->loaded()); + + // If the bookmark bar is currently empty, we should import directly to it. +diff --git a/chrome/browser/importer/profile_writer.h b/chrome/browser/importer/profile_writer.h +--- a/chrome/browser/importer/profile_writer.h ++++ b/chrome/browser/importer/profile_writer.h +@@ -11,6 +11,7 @@ + #include "base/memory/raw_ptr.h" + #include "base/memory/ref_counted.h" + #include "build/build_config.h" ++#include "components/bookmarks/browser/bookmark_model.h" + #include "components/favicon_base/favicon_usage_data.h" + #include "components/history/core/browser/history_types.h" + #include "components/search_engines/template_url_service.h" +@@ -71,6 +72,11 @@ class ProfileWriter : public base::RefCountedThreadSafe { + virtual void AddBookmarks(const std::vector& bookmarks, + const std::u16string& top_level_folder_name); + ++ virtual void AddBookmarksWithModel( ++ bookmarks::BookmarkModel* model, ++ const std::vector& bookmarks, ++ const std::u16string& top_level_folder_name); ++ + virtual void AddFavicons(const favicon_base::FaviconUsageDataList& favicons); + + // Adds the TemplateURLs in |template_urls| to the local store. +diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java ++++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +@@ -113,6 +113,8 @@ public final class ChromePreferenceKeys { + public static final String BOOKMARKS_LAST_USED_URL = "enhanced_bookmark_last_used_url"; + public static final String BOOKMARKS_LAST_USED_PARENT = + "enhanced_bookmark_last_used_parent_folder"; ++ public static final String BOOKMARKS_LAST_EXPORT_URI = ++ "Chrome.Bookmarks.Last_Export_Uri"; + + /** + * Whether Chrome is set as the default browser. +@@ -1049,6 +1051,7 @@ public final class ChromePreferenceKeys { + AUTOFILL_ASSISTANT_PROACTIVE_HELP_ENABLED, + APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE, + APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO, ++ BOOKMARKS_LAST_EXPORT_URI, + APPLICATION_OVERRIDE_LANGUAGE, + BLUETOOTH_NOTIFICATION_IDS, + CHROME_SURVEY_DOWNLOAD_ATTEMPTS.pattern(), +diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd +--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd ++++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd +@@ -243,6 +243,24 @@ CHAR_LIMIT guidelines: + + Sites + ++ ++ Import ++ ++ ++ Export ++ ++ ++ Export bookmarks to file ++ ++ ++ Do you want to overwrite %s? ++ ++ ++ Yes ++ ++ ++ Choose another file ++ + + Virtual Reality + +diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn +--- a/chrome/common/BUILD.gn ++++ b/chrome/common/BUILD.gn +@@ -401,6 +401,9 @@ static_library("common_lib") { + sources += [ + "media/chrome_media_drm_bridge_client.cc", + "media/chrome_media_drm_bridge_client.h", ++ ## Bromite dependencies for bookmark import functionality ++ "importer/imported_bookmark_entry.cc", ++ "importer/imported_bookmark_entry.h", + ] + } else { + # Non-Android. +diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn +--- a/chrome/utility/BUILD.gn ++++ b/chrome/utility/BUILD.gn +@@ -89,8 +89,6 @@ static_library("utility") { + + if (!is_android) { + sources += [ +- "importer/bookmark_html_reader.cc", +- "importer/bookmark_html_reader.h", + "importer/bookmarks_file_importer.cc", + "importer/bookmarks_file_importer.h", + "importer/external_process_importer_bridge.cc", +@@ -215,6 +213,11 @@ static_library("utility") { + ] + } + ++ sources += [ ++ "importer/bookmark_html_reader.cc", ++ "importer/bookmark_html_reader.h", ++ ] ++ + if (use_nss_certs) { + sources += [ + "importer/nss_decryptor_system_nss.cc", +diff --git a/chrome/utility/importer/bookmark_html_reader.cc b/chrome/utility/importer/bookmark_html_reader.cc +--- a/chrome/utility/importer/bookmark_html_reader.cc ++++ b/chrome/utility/importer/bookmark_html_reader.cc +@@ -17,7 +17,9 @@ + #include "base/strings/utf_string_conversions.h" + #include "base/time/time.h" + #include "chrome/common/importer/imported_bookmark_entry.h" ++#if !BUILDFLAG(IS_ANDROID) + #include "chrome/utility/importer/favicon_reencode.h" ++#endif + #include "components/search_engines/search_terms_data.h" + #include "components/search_engines/template_url.h" + #include "net/base/data_url.h" +@@ -55,6 +57,7 @@ bool GetAttribute(const std::string& attribute_list, + return true; + } + ++#if !BUILDFLAG(IS_ANDROID) + // Given the URL of a page and a favicon data URL, adds an appropriate record + // to the given favicon usage vector. + void DataURLToFaviconUsage(const GURL& link_url, +@@ -85,6 +88,7 @@ void DataURLToFaviconUsage(const GURL& link_url, + + favicons->push_back(usage); + } ++#endif + + } // namespace + +@@ -105,14 +109,28 @@ static std::string stripDt(const std::string& lineDt) { + } + + void ImportBookmarksFile( +- base::RepeatingCallback cancellation_callback, +- base::RepeatingCallback valid_url_callback, ++ const base::RepeatingCallback cancellation_callback, ++ const base::RepeatingCallback valid_url_callback, + const base::FilePath& file_path, + std::vector* bookmarks, + std::vector* search_engines, + favicon_base::FaviconUsageDataList* favicons) { + std::string content; +- base::ReadFileToString(file_path, &content); ++ if (!base::ReadFileToString(file_path, &content)) { ++ LOG(ERROR) << "Could not directly read bookmarks import file"; ++ return; ++ } ++ ++ ImportBookmarksFile(cancellation_callback, valid_url_callback, content, bookmarks, search_engines, favicons); ++} ++ ++void ImportBookmarksFile( ++ base::RepeatingCallback cancellation_callback, ++ base::RepeatingCallback valid_url_callback, ++ const std::string& content, ++ std::vector* bookmarks, ++ std::vector* search_engines, ++ favicon_base::FaviconUsageDataList* favicons) { + std::vector lines = base::SplitString( + content, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); + +@@ -125,6 +143,7 @@ void ImportBookmarksFile( + std::vector path; + size_t toolbar_folder_index = 0; + std::string charset = "UTF-8"; // If no charset is specified, assume utf-8. ++ + for (size_t i = 0; + i < lines.size() && + (cancellation_callback.is_null() || !cancellation_callback.Run()); +@@ -217,10 +236,12 @@ void ImportBookmarksFile( + } + bookmarks->push_back(entry); + ++#if !BUILDFLAG(IS_ANDROID) + // Save the favicon. DataURLToFaviconUsage will handle the case where + // there is no favicon. + if (favicons) + DataURLToFaviconUsage(url, favicon, favicons); ++#endif + + continue; + } +diff --git a/chrome/utility/importer/bookmark_html_reader.h b/chrome/utility/importer/bookmark_html_reader.h +--- a/chrome/utility/importer/bookmark_html_reader.h ++++ b/chrome/utility/importer/bookmark_html_reader.h +@@ -50,6 +50,14 @@ void ImportBookmarksFile( + std::vector* search_engines, + favicon_base::FaviconUsageDataList* favicons); + ++void ImportBookmarksFile( ++ const base::RepeatingCallback cancellation_callback, ++ const base::RepeatingCallback valid_url_callback, ++ const std::string& content, ++ std::vector* bookmarks, ++ std::vector* search_engines, ++ favicon_base::FaviconUsageDataList* favicons); ++ + // Returns true if |url| should be imported as a search engine, i.e. because it + // has replacement terms. Chrome treats such bookmarks as search engines rather + // than true bookmarks. +diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java +--- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java ++++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java +@@ -41,6 +41,7 @@ import org.chromium.base.task.AsyncTask; + import org.chromium.base.task.PostTask; + import org.chromium.base.task.TaskTraits; + import org.chromium.ui.R; ++import org.chromium.ui.widget.Toast; + import org.chromium.ui.UiUtils; + import org.chromium.ui.permissions.PermissionConstants; + +@@ -64,6 +65,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + private static final String TAG = "SelectFileDialog"; + private static final String IMAGE_TYPE = "image"; + private static final String VIDEO_TYPE = "video"; ++ private static final String HTML_TYPE = "html"; + private static final String AUDIO_TYPE = "audio"; + private static final String ALL_TYPES = "*/*"; + +@@ -258,6 +260,11 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + mFileTypes = fileTypes; + } + ++ @CalledByNative ++ private void showToast(String message) { ++ Toast.makeText(ContextUtils.getApplicationContext(), message, Toast.LENGTH_LONG).show(); ++ } ++ + /** + * Creates and starts an intent based on the passed fileTypes and capture value. + * @param fileTypes MIME types requested (i.e. "image/*") +@@ -284,7 +291,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + List missingPermissions = new ArrayList<>(); + String storagePermission = Manifest.permission.READ_EXTERNAL_STORAGE; + boolean shouldUsePhotoPicker = shouldUsePhotoPicker(); +- if (shouldUsePhotoPicker) { ++ if (shouldUsePhotoPicker || shouldShowHtmlTypes()) { + if (BuildInfo.isAtLeastT()) { + if (!window.hasPermission(PermissionConstants.READ_MEDIA_IMAGES) + && shouldShowImageTypes()) { +@@ -325,7 +332,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + } + + // TODO(finnur): Remove once we figure out the cause of crbug.com/950024. +- if (shouldUsePhotoPicker) { ++ if (shouldUsePhotoPicker || shouldShowHtmlTypes()) { + if (permissions.length != requestPermissions.length) { + throw new RuntimeException( + String.format("Permissions arrays misaligned: %d != %d", +@@ -339,7 +346,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + } + } + +- if (shouldUsePhotoPicker) { ++ if (shouldUsePhotoPicker || shouldShowHtmlTypes()) { + if (permissions[i].equals(storagePermission) + || permissions[i].equals(PermissionConstants.READ_MEDIA_IMAGES) + || permissions[i].equals( +@@ -544,6 +551,7 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + } + if (!mimeTypes.contains(mimeType)) mimeTypes.add(mimeType); + } ++ if (mimeTypes.size() == 0) return null; + return mimeTypes; + } + +@@ -872,6 +880,10 @@ public class SelectFileDialog implements WindowAndroid.IntentCallback, PhotoPick + return countAcceptTypesFor(superType) == mFileTypes.size(); + } + ++ private boolean shouldShowHtmlTypes() { ++ return countAcceptTypesFor(HTML_TYPE) > 0; ++ } ++ + /** + * Checks whether the list of accepted types effectively describes only a single + * type, which might be wildcard. For example: +diff --git a/ui/android/java/strings/android_ui_strings.grd b/ui/android/java/strings/android_ui_strings.grd +--- a/ui/android/java/strings/android_ui_strings.grd ++++ b/ui/android/java/strings/android_ui_strings.grd +@@ -181,6 +181,9 @@ + + Unable to open the photo picker + ++ ++ Failed to save selected file ++ + + + +diff --git a/ui/shell_dialogs/select_file_dialog.h b/ui/shell_dialogs/select_file_dialog.h +--- a/ui/shell_dialogs/select_file_dialog.h ++++ b/ui/shell_dialogs/select_file_dialog.h +@@ -210,6 +210,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDialog + const GURL* caller = nullptr); + bool HasMultipleFileTypeChoices(); + ++ virtual void ShowToast(const std::string& message) = 0; ++ + protected: + friend class base::RefCountedThreadSafe; + +diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/select_file_dialog_android.cc +--- a/ui/shell_dialogs/select_file_dialog_android.cc ++++ b/ui/shell_dialogs/select_file_dialog_android.cc +@@ -142,6 +142,12 @@ void SelectFileDialogImpl::SelectFileImpl( + owning_window->GetJavaObject()); + } + ++void SelectFileDialogImpl::ShowToast(const std::string& message) { ++ JNIEnv* env = base::android::AttachCurrentThread(); ++ ++ Java_SelectFileDialog_showToast(env, java_object_, base::android::ConvertUTF8ToJavaString(env, message)); ++} ++ + SelectFileDialogImpl::~SelectFileDialogImpl() { + } + +diff --git a/ui/shell_dialogs/select_file_dialog_android.h b/ui/shell_dialogs/select_file_dialog_android.h +--- a/ui/shell_dialogs/select_file_dialog_android.h ++++ b/ui/shell_dialogs/select_file_dialog_android.h +@@ -58,6 +58,8 @@ class SelectFileDialogImpl : public SelectFileDialog { + void* params, + const GURL* caller) override; + ++ void ShowToast(const std::string& message) override; ++ + protected: + ~SelectFileDialogImpl() override; + +-- +2.25.1 diff --git a/bromite/build/patches/Add-custom-tab-intents-privacy-option.patch b/bromite/build/patches/Add-custom-tab-intents-privacy-option.patch new file mode 100644 index 00000000..c188fbaf --- /dev/null +++ b/bromite/build/patches/Add-custom-tab-intents-privacy-option.patch @@ -0,0 +1,222 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Wed, 29 Aug 2018 11:03:44 +0200 +Subject: Add custom tab intents privacy option + +Add custom tab intents privacy option and force +open external links in incognito flag. + +Flags are mutually exclusive. + +See also: https://github.com/bromite/bromite/issues/1474 + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../java/res/xml/privacy_preferences.xml | 10 ++++++++ + .../browser/LaunchIntentDispatcher.java | 22 +++++++++++++++++ + .../IncognitoCustomTabIntentDataProvider.java | 6 +++++ + .../privacy/settings/PrivacySettings.java | 24 +++++++++++++++++++ + .../chrome/browser/tab/TabAssociatedApp.java | 6 ++++- + .../strings/android_chrome_strings.grd | 15 ++++++++++++ + 6 files changed, 82 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 ++++ b/chrome/android/java/res/xml/privacy_preferences.xml +@@ -58,6 +58,16 @@ found in the LICENSE file. + android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings" + android:key="do_not_track" + android:title="@string/do_not_track_title"/> ++ ++ + <resetlink>reset sync

+ Show original + ++ ++ ++ Allow custom tab intents ++ ++ ++ Allow applications to open custom tab intents, similar to webview. ++ ++ ++ ++ ++ Open external links in incognito ++ ++ ++ Force the opening of all external links in incognito mode ++ + + + +-- +2.25.1 diff --git a/bromite/build/patches/Add-exit-menu-item.patch b/bromite/build/patches/Add-exit-menu-item.patch new file mode 100644 index 00000000..1454b425 --- /dev/null +++ b/bromite/build/patches/Add-exit-menu-item.patch @@ -0,0 +1,133 @@ +From: Serg +Date: Tue, 31 Jan 2017 22:12:27 -0500 +Subject: Add exit menu item + +Corrected Exit functionality + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/android/java/res/menu/main_menu.xml | 6 ++++++ + .../org/chromium/chrome/browser/ApplicationLifetime.java | 2 ++ + .../org/chromium/chrome/browser/ChromeTabbedActivity.java | 4 ++++ + .../src/org/chromium/chrome/browser/app/ChromeActivity.java | 6 ++++++ + .../chrome/browser/init/ChromeLifetimeController.java | 6 +++++- + .../browser/ui/android/strings/android_chrome_strings.grd | 3 +++ + 6 files changed, 26 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 +@@ -161,6 +161,9 @@ found in the LICENSE file. + ++ + + + +@@ -190,6 +193,9 @@ found in the LICENSE file. + ++ + + + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java +@@ -6,6 +6,7 @@ package org.chromium.chrome.browser; + + import org.chromium.base.ObserverList; + import org.chromium.base.annotations.CalledByNative; ++import org.chromium.chrome.browser.incognito.IncognitoNotificationManager; + + /** + * Watches for when Chrome is told to restart itself. +@@ -42,6 +43,7 @@ public class ApplicationLifetime { + + @CalledByNative + public static void terminate(boolean restart) { ++ IncognitoNotificationManager.dismissIncognitoNotification(); + for (Observer observer : sObservers) { + observer.onTerminate(restart); + } +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 +@@ -224,6 +224,8 @@ import java.util.HashSet; + import java.util.List; + import java.util.Locale; + ++import org.chromium.chrome.browser.ApplicationLifetime; ++ + /** + * This is the main activity for ChromeMobile when not running in document mode. All the tabs + * are accessible via a chrome specific tab switching UI. +@@ -2188,6 +2190,8 @@ public class ChromeTabbedActivity extends ChromeActivity + return true; + } + ++ if (id == R.id.exit_id) { ++ ApplicationLifetime.terminate(false); ++ return true; ++ } ++ + if (id == R.id.update_menu_id) { + UpdateMenuItemHelper.getInstance().onMenuItemClicked(this); + return true; +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java +@@ -82,7 +82,11 @@ class ChromeLifetimeController implements ApplicationLifetime.Observer, + + // Kick off a timer to kill the process after a delay, which fires only if the Activities + // take too long to be finished. +- mHandler.postDelayed(mRestartRunnable, WATCHDOG_DELAY_MS); ++ if (restart) { ++ mHandler.postDelayed(mRestartRunnable, WATCHDOG_DELAY_MS); ++ } else { ++ fireBrowserRestartActivityIntent(); ++ } + } + + @Override +diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd +--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd ++++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd +@@ -3470,6 +3470,9 @@ To change this setting, <resetlink>reset sync

+ Dark theme + ++ ++ Exit ++ + + Appearance + +-- +2.25.1 diff --git a/bromite/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch b/bromite/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch new file mode 100644 index 00000000..9ea09477 --- /dev/null +++ b/bromite/build/patches/Add-flag-for-omnibox-autocomplete-filtering.patch @@ -0,0 +1,140 @@ +From: Blaise +Date: Sat, 22 Aug 2020 08:52:40 -0500 +Subject: Add flag for omnibox autocomplete filtering + +Adds a flag that restricts whether search history, clipboard, bookmarks +and internal chrome:// pages will be used for the autocomplete results. + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 22 ++++++++++++++++++- + .../browser/autocomplete_controller.cc | 11 ++++++++++ + .../omnibox/browser/history_url_provider.cc | 3 +++ + components/omnibox/browser/search_provider.cc | 4 ++++ + components/url_formatter/url_fixer.cc | 4 ++++ + 5 files changed, 43 insertions(+), 1 deletion(-) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -525,6 +525,22 @@ const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = { + #endif // BUILDFLAG(IS_ANDROID) + + #if BUILDFLAG(IS_ANDROID) ++const FeatureEntry::Choice kOmniboxAutocompleteFiltering[] = { ++ {flags_ui::kGenericExperimentChoiceDefault, "", ""}, ++ {"Search suggestions only", ++ "omnibox-autocomplete-filtering", ++ "search"}, ++ {"Search suggestions and bookmarks", ++ "omnibox-autocomplete-filtering", ++ "search-bookmarks"}, ++ {"Search suggestions and internal chrome pages", ++ "omnibox-autocomplete-filtering", ++ "search-chrome"}, ++ {"Search suggestions, bookmarks, and internal chrome pages", ++ "omnibox-autocomplete-filtering", ++ "search-bookmarks-chrome"}, ++}; ++ + const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNone[] = { + {"mode", "always-none"}}; + const FeatureEntry::FeatureParam kAdaptiveButton_AlwaysNewTab[] = { +@@ -4371,7 +4387,11 @@ const FeatureEntry kFeatureEntries[] = { + kOsMac | kOsLinux | kOsWin, + FEATURE_VALUE_TYPE(features::kSystemNotifications)}, + #endif // BUILDFLAG(ENABLE_SYSTEM_NOTIFICATIONS) && !BUILDFLAG(IS_CHROMEOS_ASH) +-#if BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(IS_ANDROID) // Bromite autocomplete filtering ++ {"omnibox-autocomplete-filtering", ++ "Omnibox Autocomplete Filtering", ++ "Restrict omnibox autocomplete results to a combination of search suggestions (if enabled), bookmarks, and internal chrome pages.", ++ kOsAll, MULTI_VALUE_TYPE(kOmniboxAutocompleteFiltering)}, + {"adaptive-button-in-top-toolbar", + flag_descriptions::kAdaptiveButtonInTopToolbarName, + flag_descriptions::kAdaptiveButtonInTopToolbarDescription, kOsAndroid, +diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc +--- a/components/omnibox/browser/autocomplete_controller.cc ++++ b/components/omnibox/browser/autocomplete_controller.cc +@@ -15,6 +15,8 @@ + + #include "base/bind.h" + #include "base/check_op.h" ++#include "base/containers/contains.h" ++#include "base/command_line.h" + #include "base/feature_list.h" + #include "base/format_macros.h" + #include "base/metrics/histogram_functions.h" +@@ -338,6 +340,15 @@ AutocompleteController::AutocompleteController( + is_cros_launcher_(is_cros_launcher), + search_service_worker_signal_sent_(false), + template_url_service_(provider_client_->GetTemplateURLService()) { ++ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) { ++ const std::string flag_value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering"); ++ provider_types &= AutocompleteProvider::TYPE_KEYWORD | AutocompleteProvider::TYPE_SEARCH | ++ AutocompleteProvider::TYPE_HISTORY_URL | AutocompleteProvider::TYPE_BOOKMARK | AutocompleteProvider::TYPE_BUILTIN; ++ if (!base::Contains(flag_value, "bookmarks")) ++ provider_types &= ~AutocompleteProvider::TYPE_BOOKMARK; ++ if (!base::Contains(flag_value, "chrome")) ++ provider_types &= ~AutocompleteProvider::TYPE_BUILTIN; ++ } + provider_types &= ~OmniboxFieldTrial::GetDisabledProviderTypes(); + + if (OmniboxFieldTrial::kAutocompleteStabilityAsyncProvidersFirst.Get()) { +diff --git a/components/omnibox/browser/history_url_provider.cc b/components/omnibox/browser/history_url_provider.cc +--- a/components/omnibox/browser/history_url_provider.cc ++++ b/components/omnibox/browser/history_url_provider.cc +@@ -475,6 +475,9 @@ void HistoryURLProvider::Start(const AutocompleteInput& input, + if (fixed_up_input.type() != metrics::OmniboxInputType::QUERY) + matches_.push_back(what_you_typed_match); + ++ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) ++ return; ++ + // We'll need the history service to run both passes, so try to obtain it. + history::HistoryService* const history_service = + client()->GetHistoryService(); +diff --git a/components/omnibox/browser/search_provider.cc b/components/omnibox/browser/search_provider.cc +--- a/components/omnibox/browser/search_provider.cc ++++ b/components/omnibox/browser/search_provider.cc +@@ -12,6 +12,7 @@ + #include "base/base64.h" + #include "base/bind.h" + #include "base/callback.h" ++#include "base/command_line.h" + #include "base/feature_list.h" + #include "base/i18n/break_iterator.h" + #include "base/i18n/case_conversion.h" +@@ -677,6 +678,9 @@ void SearchProvider::Run(bool query_is_private) { + } + + void SearchProvider::DoHistoryQuery(bool minimal_changes) { ++ if (base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering")) ++ return; ++ + // The history query results are synchronous, so if minimal_changes is true, + // we still have the last results and don't need to do anything. + if (minimal_changes) +diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc +--- a/components/url_formatter/url_fixer.cc ++++ b/components/url_formatter/url_fixer.cc +@@ -7,6 +7,8 @@ + #include + + #include "base/check_op.h" ++#include "base/containers/contains.h" ++#include "base/command_line.h" + #include "base/files/file_path.h" + #include "base/files/file_util.h" + #include "base/i18n/char_iterator.h" +@@ -608,6 +610,8 @@ GURL FixupURL(const std::string& text, const std::string& desired_tld) { + + FixupHost(trimmed, parts.host, parts.scheme.is_valid(), desired_tld, &url); + if (chrome_url && !parts.host.is_valid()) ++ if (!base::CommandLine::ForCurrentProcess()->HasSwitch("omnibox-autocomplete-filtering") || ++ base::Contains(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("omnibox-autocomplete-filtering"), "chrome")) + url.append(kChromeUIDefaultHost); + FixupPort(trimmed, parts.port, &url); + FixupPath(trimmed, parts.path, &url); +-- +2.25.1 diff --git a/bromite/build/patches/Add-flag-for-save-data-header.patch b/bromite/build/patches/Add-flag-for-save-data-header.patch new file mode 100644 index 00000000..14aafb4e --- /dev/null +++ b/bromite/build/patches/Add-flag-for-save-data-header.patch @@ -0,0 +1,112 @@ +From: Wengling Chen +Date: Mon, 1 Feb 2021 19:18:55 +0200 +Subject: Add flag for save-data-header + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 5 ++++- + chrome/browser/flag_descriptions.cc | 4 ++++ + chrome/browser/flag_descriptions.h | 3 +++ + .../browser/loader/browser_initiated_resource_request.cc | 8 ++++++++ + services/network/public/cpp/features.cc | 5 +++++ + services/network/public/cpp/features.h | 2 +- + 6 files changed, 25 insertions(+), 2 deletions(-) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -4981,7 +4981,10 @@ const FeatureEntry kFeatureEntries[] = { + {"force-text-direction", flag_descriptions::kForceTextDirectionName, + flag_descriptions::kForceTextDirectionDescription, kOsAll, + MULTI_VALUE_TYPE(kForceTextDirectionChoices)}, +-#if BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(IS_ANDROID) // Bromite save data header ++ {"enable-save-data-header", flag_descriptions::kEnableSaveDataHeaderName, ++ flag_descriptions::kEnableSaveDataHeaderDescription, kOsAndroid, ++ FEATURE_VALUE_TYPE(network::features::kEnableSaveDataHeader)}, + {"force-update-menu-type", flag_descriptions::kUpdateMenuTypeName, + flag_descriptions::kUpdateMenuTypeDescription, kOsAndroid, + MULTI_VALUE_TYPE(kForceUpdateMenuTypeChoices)}, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -1261,6 +1261,10 @@ const char kDeprecateAltBasedSixPackDescription[] = + "Show deprecation notifications and disable functionality for Alt based " + "six pack deprecations. The Search based versions continue to work."; + ++const char kEnableSaveDataHeaderName[] = "Enable save-data header"; ++const char kEnableSaveDataHeaderDescription[] = ++ "Enable save-data header without enabling Data Saver."; ++ + const char kExperimentalAccessibilityLanguageDetectionName[] = + "Experimental accessibility language detection"; + const char kExperimentalAccessibilityLanguageDetectionDescription[] = +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -662,6 +662,9 @@ extern const char kDeprecateAltClickDescription[]; + extern const char kDeprecateAltBasedSixPackName[]; + extern const char kDeprecateAltBasedSixPackDescription[]; + ++extern const char kEnableSaveDataHeaderName[]; ++extern const char kEnableSaveDataHeaderDescription[]; ++ + extern const char kMemlogName[]; + extern const char kMemlogDescription[]; + extern const char kMemlogModeMinimal[]; +diff --git a/content/browser/loader/browser_initiated_resource_request.cc b/content/browser/loader/browser_initiated_resource_request.cc +--- a/content/browser/loader/browser_initiated_resource_request.cc ++++ b/content/browser/loader/browser_initiated_resource_request.cc +@@ -4,6 +4,9 @@ + + #include "content/browser/loader/browser_initiated_resource_request.h" + ++#include "base/feature_list.h" ++#include "services/network/public/cpp/features.h" ++ + #include "content/public/browser/browser_context.h" + #include "content/public/browser/browser_thread.h" + #include "content/public/browser/content_browser_client.h" +@@ -37,8 +40,13 @@ void UpdateAdditionalHeadersForBrowserInitiatedRequest( + // Save-Data was previously included in hints for workers, thus we cannot + // remove it for the time being. If you're reading this, consider building + // permissions policies for workers and/or deprecating this inclusion. ++ bool setHeader = false; + if (is_for_worker_script && + GetContentClient()->browser()->IsDataSaverEnabled(browser_context)) { ++ setHeader = true; ++ } ++ setHeader |= base::FeatureList::IsEnabled(network::features::kEnableSaveDataHeader); ++ if (setHeader) { + if (should_update_existing_headers) { + headers->RemoveHeader("Save-Data"); + } +diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc +--- a/services/network/public/cpp/features.cc ++++ b/services/network/public/cpp/features.cc +@@ -20,6 +20,11 @@ BASE_FEATURE(kExpectCTReporting, + "ExpectCTReporting", + base::FEATURE_ENABLED_BY_DEFAULT); + ++// Enable save-data header separately (without enabled data reduction service). ++BASE_FEATURE(kEnableSaveDataHeader, ++ "EnableSaveDataHeader", ++ base::FEATURE_DISABLED_BY_DEFAULT); ++ + BASE_FEATURE(kNetworkErrorLogging, + "NetworkErrorLogging", + base::FEATURE_ENABLED_BY_DEFAULT); +diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h +--- a/services/network/public/cpp/features.h ++++ b/services/network/public/cpp/features.h +@@ -50,7 +50,7 @@ extern const base::FeatureParam + kTrustTokenOperationsRequiringOriginTrial; + COMPONENT_EXPORT(NETWORK_CPP) + extern const base::FeatureParam kPlatformProvidedTrustTokenIssuance; +- ++COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kEnableSaveDataHeader); + COMPONENT_EXPORT(NETWORK_CPP) + BASE_DECLARE_FEATURE(kWebSocketReassembleShortMessages); + +-- +2.25.1 diff --git a/bromite/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch b/bromite/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch new file mode 100644 index 00000000..cbff4376 --- /dev/null +++ b/bromite/build/patches/Add-flag-to-configure-maximum-connections-per-host.patch @@ -0,0 +1,158 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sun, 8 Jul 2018 22:42:04 +0200 +Subject: Add flag to configure maximum connections per host + +With the introduction of this flag it is possible to increase the maximum +allowed connections per host; this can however be detrimental to devices +with limited CPU/memory resources and it is disabled by default. + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 8 ++++++++ + chrome/browser/flag_descriptions.cc | 4 ++++ + chrome/browser/flag_descriptions.h | 3 +++ + .../common/network_features.cc | 3 +++ + .../common/network_features.h | 4 ++++ + .../common/network_switch_list.h | 4 ++++ + .../spoof_checks/top_domains/BUILD.gn | 1 + + net/socket/client_socket_pool_manager.cc | 17 +++++++++++++++++ + 8 files changed, 44 insertions(+) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -1040,6 +1040,11 @@ const FeatureEntry::Choice kForceColorProfileChoices[] = { + switches::kForceDisplayColorProfile, "hdr10"}, + }; + ++const FeatureEntry::Choice kMaxConnectionsPerHostChoices[] = { ++ {features::kMaxConnectionsPerHostChoiceDefault, "", ""}, ++ {features::kMaxConnectionsPerHostChoice15, switches::kMaxConnectionsPerHost, "15"}, ++}; ++ + const FeatureEntry::Choice kMemlogModeChoices[] = { + {flags_ui::kGenericExperimentChoiceDisabled, "", ""}, + {flag_descriptions::kMemlogModeMinimal, heap_profiling::kMemlogMode, +@@ -4884,6 +4889,9 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kAndroidPictureInPictureAPIName, + flag_descriptions::kAndroidPictureInPictureAPIDescription, kOsAndroid, + FEATURE_VALUE_TYPE(media::kPictureInPictureAPI)}, ++ {"max-connections-per-host", flag_descriptions::kMaxConnectionsPerHostName, ++ flag_descriptions::kMaxConnectionsPerHostDescription, kOsAll, ++ MULTI_VALUE_TYPE(kMaxConnectionsPerHostChoices)}, + {"reengagement-notification", + flag_descriptions::kReengagementNotificationName, + flag_descriptions::kReengagementNotificationDescription, kOsAndroid, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -1875,6 +1875,10 @@ const char kUnthrottledNestedTimeoutDescription[] = + "websites abusing the API will still eventually have their setTimeouts " + "clamped."; + ++const char kMaxConnectionsPerHostName[] = "Maximum connections per host"; ++const char kMaxConnectionsPerHostDescription[] = ++ "Customize maximum allowed connections per host."; ++ + const char kMediaRouterCastAllowAllIPsName[] = + "Connect to Cast devices on all IP addresses"; + const char kMediaRouterCastAllowAllIPsDescription[] = +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -1050,6 +1050,9 @@ extern const char kLogJsConsoleMessagesDescription[]; + extern const char kUnthrottledNestedTimeoutName[]; + extern const char kUnthrottledNestedTimeoutDescription[]; + ++extern const char kMaxConnectionsPerHostName[]; ++extern const char kMaxConnectionsPerHostDescription[]; ++ + extern const char kMediaRouterCastAllowAllIPsName[]; + extern const char kMediaRouterCastAllowAllIPsDescription[]; + +diff --git a/components/network_session_configurator/common/network_features.cc b/components/network_session_configurator/common/network_features.cc +--- a/components/network_session_configurator/common/network_features.cc ++++ b/components/network_session_configurator/common/network_features.cc +@@ -8,4 +8,7 @@ + + namespace features { + ++const char kMaxConnectionsPerHostChoiceDefault[] = "6", ++ kMaxConnectionsPerHostChoice15[] = "15"; ++ + } // namespace features +diff --git a/components/network_session_configurator/common/network_features.h b/components/network_session_configurator/common/network_features.h +--- a/components/network_session_configurator/common/network_features.h ++++ b/components/network_session_configurator/common/network_features.h +@@ -10,6 +10,10 @@ + + namespace features { + ++NETWORK_SESSION_CONFIGURATOR_EXPORT extern const char kMaxConnectionsPerHostChoiceDefault[], ++ kMaxConnectionsPerHostChoice6[], ++ kMaxConnectionsPerHostChoice15[]; ++ + } // namespace features + + #endif // COMPONENTS_NETWORK_SESSION_CONFIGURATOR_COMMON_NETWORK_FEATURES_H_ +diff --git a/components/network_session_configurator/common/network_switch_list.h b/components/network_session_configurator/common/network_switch_list.h +--- a/components/network_session_configurator/common/network_switch_list.h ++++ b/components/network_session_configurator/common/network_switch_list.h +@@ -19,6 +19,10 @@ NETWORK_SWITCH(kEnableUserAlternateProtocolPorts, + // Enables the QUIC protocol. This is a temporary testing flag. + NETWORK_SWITCH(kEnableQuic, "enable-quic") + ++// Allows specifying a higher number of maximum connections per host ++// (15 instead of 6, mirroring the value Mozilla uses). ++NETWORK_SWITCH(kMaxConnectionsPerHost, "max-connections-per-host") ++ + // Ignores certificate-related errors. + NETWORK_SWITCH(kIgnoreCertificateErrors, "ignore-certificate-errors") + +diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/components/url_formatter/spoof_checks/top_domains/BUILD.gn +--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn ++++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn +@@ -89,6 +89,7 @@ executable("make_top_domain_list_variables") { + "//base:i18n", + "//components/url_formatter/spoof_checks/common_words:common", + "//third_party/icu", ++ "//components/network_session_configurator/common" + ] + if (is_ios) { + frameworks = [ "UIKit.framework" ] +diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc +--- a/net/socket/client_socket_pool_manager.cc ++++ b/net/socket/client_socket_pool_manager.cc +@@ -19,6 +19,10 @@ + #include "net/socket/client_socket_handle.h" + #include "net/socket/client_socket_pool.h" + #include "net/socket/connect_job.h" ++#include "components/network_session_configurator/common/network_switches.h" ++ ++#include "base/command_line.h" ++#include "base/strings/string_number_conversions.h" + #include "net/ssl/ssl_config.h" + #include "third_party/abseil-cpp/absl/types/optional.h" + #include "url/gurl.h" +@@ -172,6 +176,19 @@ void ClientSocketPoolManager::set_max_sockets_per_pool( + int ClientSocketPoolManager::max_sockets_per_group( + HttpNetworkSession::SocketPoolType pool_type) { + DCHECK_LT(pool_type, HttpNetworkSession::NUM_SOCKET_POOL_TYPES); ++ ++ if (pool_type == HttpNetworkSession::NORMAL_SOCKET_POOL) { ++ int maxConnectionsPerHost = 0; ++ auto value = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switches::kMaxConnectionsPerHost); ++ if (!value.empty() && !base::StringToInt(value, &maxConnectionsPerHost)) { ++ LOG(DFATAL) << "--" << switches::kMaxConnectionsPerHost << " only accepts integers as arguments (\"" << value << "\" is invalid)"; ++ } ++ if (maxConnectionsPerHost != 0) { ++ return maxConnectionsPerHost; ++ } ++ // fallthrough for default value ++ } ++ + return g_max_sockets_per_group[pool_type]; + } + +-- +2.25.1 diff --git a/bromite/build/patches/Add-flag-to-control-video-playback-resume-feature.patch b/bromite/build/patches/Add-flag-to-control-video-playback-resume-feature.patch new file mode 100644 index 00000000..2910990c --- /dev/null +++ b/bromite/build/patches/Add-flag-to-control-video-playback-resume-feature.patch @@ -0,0 +1,76 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Thu, 25 Oct 2018 23:13:34 +0200 +Subject: Add flag to control video playback resume feature + +Disable it by default on Android as it is everywhere else + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 4 ++++ + chrome/browser/flag_descriptions.cc | 5 +++++ + chrome/browser/flag_descriptions.h | 3 +++ + media/base/media_switches.cc | 8 ++------ + 4 files changed, 14 insertions(+), 6 deletions(-) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -3661,6 +3661,10 @@ const FeatureEntry kFeatureEntries[] = { + SINGLE_VALUE_TYPE(extensions::switches::kExtensionsOnChromeURLs)}, + #endif // ENABLE_EXTENSIONS + #if BUILDFLAG(IS_ANDROID) ++ {"resume-background-video", ++ flag_descriptions::kResumeBackgroundVideoName, ++ flag_descriptions::kResumeBackgroundVideoDescription, kOsAll, ++ FEATURE_VALUE_TYPE(media::kResumeBackgroundVideo)}, + {"osk-resizes-visual-viewport-by-default", + flag_descriptions::kEnableOskResizesVisualViewportByDefaultName, + flag_descriptions::kEnableOskResizesVisualViewportByDefaultDescription, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -1363,6 +1363,11 @@ const char kEnablePenetratingImageSelectionDescription[] = + "Enables image options to be surfaced in the context menu for nodes " + "covered by transparent overlays."; + ++const char kResumeBackgroundVideoName[] = "Resume background video."; ++const char kResumeBackgroundVideoDescription[] = ++ "Resume background video playback when tab re-gains focus; additionally, " ++ "it will pause video playback every single time you switch tabs."; ++ + const char kEnablePixelCanvasRecordingName[] = "Enable pixel canvas recording"; + const char kEnablePixelCanvasRecordingDescription[] = + "Pixel canvas recording allows the compositor to raster contents aligned " +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -744,6 +744,9 @@ extern const char kEnablePortalsDescription[]; + extern const char kEnablePortalsCrossOriginName[]; + extern const char kEnablePortalsCrossOriginDescription[]; + ++extern const char kResumeBackgroundVideoName[]; ++extern const char kResumeBackgroundVideoDescription[]; ++ + extern const char kEnablePixelCanvasRecordingName[]; + extern const char kEnablePixelCanvasRecordingDescription[]; + +diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc +--- a/media/base/media_switches.cc ++++ b/media/base/media_switches.cc +@@ -302,12 +302,8 @@ BASE_FEATURE(kPreloadMetadataLazyLoad, + // Let videos be resumed via remote controls (for example, the notification) + // when in background. + BASE_FEATURE(kResumeBackgroundVideo, +- "resume-background-video", +-#if BUILDFLAG(IS_ANDROID) +- base::FEATURE_ENABLED_BY_DEFAULT +-#else +- base::FEATURE_DISABLED_BY_DEFAULT +-#endif ++ "resume-background-video", // disabled by default ++ base::FEATURE_DISABLED_BY_DEFAULT // in Bromite + ); + + // When enabled, MediaCapabilities will check with GPU Video Accelerator +-- +2.25.1 diff --git a/bromite/build/patches/Add-flag-to-disable-IPv6-probes.patch b/bromite/build/patches/Add-flag-to-disable-IPv6-probes.patch new file mode 100644 index 00000000..e0bf9c84 --- /dev/null +++ b/bromite/build/patches/Add-flag-to-disable-IPv6-probes.patch @@ -0,0 +1,155 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sun, 18 Nov 2018 13:06:49 +0100 +Subject: Add flag to disable IPv6 probes + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 4 ++++ + chrome/browser/flag_descriptions.cc | 4 ++++ + chrome/browser/flag_descriptions.h | 3 +++ + components/subresource_filter/tools/BUILD.gn | 6 ++++++ + .../url_formatter/spoof_checks/top_domains/BUILD.gn | 3 ++- + net/dns/host_resolver_manager.cc | 9 ++++++++- + services/network/public/cpp/features.cc | 5 +++++ + services/network/public/cpp/features.h | 1 + + 8 files changed, 33 insertions(+), 2 deletions(-) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -6036,6 +6036,10 @@ const FeatureEntry kFeatureEntries[] = { + {"enable-reader-mode-in-cct", flag_descriptions::kReaderModeInCCTName, + flag_descriptions::kReaderModeInCCTDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kReaderModeInCCT)}, ++ {"ipv6-probing", ++ flag_descriptions::kIPv6ProbingName, ++ flag_descriptions::kIPv6ProbingDescription, kOsAll, ++ FEATURE_VALUE_TYPE(network::features::kIPv6Probing)}, + #endif // BUILDFLAG(IS_ANDROID) + + {"shopping-list", commerce::flag_descriptions::kShoppingListName, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -3578,6 +3578,10 @@ const char kCCTRealTimeEngagementSignalsDescription[] = + "Enables sending real-time engagement signals (e.g. scroll) through " + "CustomTabsCallback."; + ++const char kIPv6ProbingName[] = "Enable IPv6 probing."; ++const char kIPv6ProbingDescription[] = ++ "Send IPv6 probes to a RIPE DNS address to verify IPv6 connectivity."; ++ + const char kChimeAlwaysShowNotificationDescription[] = + "A debug flag to always show Chime notification after receiving a payload."; + const char kChimeAlwaysShowNotificationName[] = +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -807,6 +807,9 @@ extern const char kEnableWasmLazyCompilationName[]; + extern const char kEnableWasmLazyCompilationDescription[]; + + extern const char kEnableWasmTieringName[]; ++extern const char kIPv6ProbingName[]; ++extern const char kIPv6ProbingDescription[]; ++ + extern const char kEnableWasmTieringDescription[]; + + extern const char kEvDetailsInPageInfoName[]; +diff --git a/components/subresource_filter/tools/BUILD.gn b/components/subresource_filter/tools/BUILD.gn +--- a/components/subresource_filter/tools/BUILD.gn ++++ b/components/subresource_filter/tools/BUILD.gn +@@ -50,6 +50,8 @@ if (!is_ios) { + deps = [ + ":tools_lib", + "//base", ++ "//components/network_session_configurator/common", ++ "//services/network/public/cpp" + ] + } + +@@ -61,6 +63,8 @@ if (!is_ios) { + ":tools_lib", + "../core/common", + "//base", ++ "//components/network_session_configurator/common", ++ "//services/network/public/cpp", + ] + } + +@@ -70,6 +74,8 @@ if (!is_ios) { + "ruleset_converter:support", + "//base", + "//third_party/protobuf:protobuf_lite", ++ "//components/network_session_configurator/common", ++ "//services/network/public/cpp" + ] + } + +diff --git a/components/url_formatter/spoof_checks/top_domains/BUILD.gn b/components/url_formatter/spoof_checks/top_domains/BUILD.gn +--- a/components/url_formatter/spoof_checks/top_domains/BUILD.gn ++++ b/components/url_formatter/spoof_checks/top_domains/BUILD.gn +@@ -89,7 +89,8 @@ executable("make_top_domain_list_variables") { + "//base:i18n", + "//components/url_formatter/spoof_checks/common_words:common", + "//third_party/icu", +- "//components/network_session_configurator/common" ++ "//components/network_session_configurator/common", ++ "//services/network/public/cpp", + ] + if (is_ios) { + frameworks = [ "UIKit.framework" ] +diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc +--- a/net/dns/host_resolver_manager.cc ++++ b/net/dns/host_resolver_manager.cc +@@ -104,6 +104,7 @@ + #include "net/log/net_log_event_type.h" + #include "net/log/net_log_source.h" + #include "net/log/net_log_source_type.h" ++#include "services/network/public/cpp/features.h" + #include "net/log/net_log_with_source.h" + #include "net/socket/client_socket_factory.h" + #include "net/socket/datagram_client_socket.h" +@@ -3727,8 +3728,14 @@ bool HostResolverManager::IsIPv6Reachable(const NetLogWithSource& net_log) { + if (last_ipv6_probe_time_.is_null() || + (tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() > + kIPv6ProbePeriodMs) { +- SetLastIPv6ProbeResult( ++ ++ if (!base::FeatureList::IsEnabled(network::features::kIPv6Probing)) { ++ // pretend IPv6 connectivy probe is successful when probing is disabled ++ SetLastIPv6ProbeResult(true); ++ } else { ++ SetLastIPv6ProbeResult( + IsGloballyReachable(IPAddress(kIPv6ProbeAddress), net_log)); ++ } + cached = false; + } + net_log.AddEvent( +diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc +--- a/services/network/public/cpp/features.cc ++++ b/services/network/public/cpp/features.cc +@@ -38,6 +38,11 @@ BASE_FEATURE(kThrottleDelayable, + "ThrottleDelayable", + base::FEATURE_ENABLED_BY_DEFAULT); + ++// Enable IPv6 ping probes to RIPE DNS. ++BASE_FEATURE(kIPv6Probing, ++ "IPv6Probing", ++ base::FEATURE_ENABLED_BY_DEFAULT); ++ + // When kPriorityRequestsDelayableOnSlowConnections is enabled, HTTP + // requests fetched from a SPDY/QUIC/H2 proxies can be delayed by the + // ResourceScheduler just as HTTP/1.1 resources are. However, requests from such +diff --git a/services/network/public/cpp/features.h b/services/network/public/cpp/features.h +--- a/services/network/public/cpp/features.h ++++ b/services/network/public/cpp/features.h +@@ -17,6 +17,7 @@ COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kExpectCTReporting); + COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kNetworkErrorLogging); + COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kReporting); + COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kThrottleDelayable); ++COMPONENT_EXPORT(NETWORK_CPP) BASE_DECLARE_FEATURE(kIPv6Probing); + COMPONENT_EXPORT(NETWORK_CPP) + BASE_DECLARE_FEATURE(kDelayRequestsOnMultiplexedConnections); + COMPONENT_EXPORT(NETWORK_CPP) +-- +2.25.1 diff --git a/bromite/build/patches/Add-flag-to-disable-external-intent-requests.patch b/bromite/build/patches/Add-flag-to-disable-external-intent-requests.patch new file mode 100644 index 00000000..7c29ed67 --- /dev/null +++ b/bromite/build/patches/Add-flag-to-disable-external-intent-requests.patch @@ -0,0 +1,58 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Tue, 25 May 2021 19:46:14 +0200 +Subject: Add flag to disable external intent requests + +Adds a new flag that allows to control the switch with same name; +when flag is disabled no external intent will ever be allowed, for any URL. + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 3 +++ + chrome/browser/flag_descriptions.cc | 6 ++++++ + chrome/browser/flag_descriptions.h | 3 +++ + 3 files changed, 12 insertions(+) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -3621,6 +3621,9 @@ const FeatureEntry kFeatureEntries[] = { + {"ui-disable-partial-swap", flag_descriptions::kUiPartialSwapName, + flag_descriptions::kUiPartialSwapDescription, kOsAll, + SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)}, ++ {"disable-external-intent-requests", flag_descriptions::kDisableExternalIntentRequestsName, ++ flag_descriptions::kDisableExternalIntentRequestsDescription, kOsAll, ++ SINGLE_DISABLE_VALUE_TYPE("disable-external-intent-requests")}, + {"disable-webrtc-hw-decoding", flag_descriptions::kWebrtcHwDecodingName, + flag_descriptions::kWebrtcHwDecodingDescription, kOsAndroid | kOsCrOS, + SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWDecoding)}, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -3966,6 +3966,12 @@ const char kPhotoPickerVideoSupportName[] = "Photo Picker Video Support"; + const char kPhotoPickerVideoSupportDescription[] = + "Enables video files to be shown in the Photo Picker dialog"; + ++const char kDisableExternalIntentRequestsName[] = ++ "Never forward URL requests to external intents"; ++const char kDisableExternalIntentRequestsDescription[] = ++ "URL requests will never" ++ "allow for redirecting to an external intent."; ++ + const char kQueryTilesName[] = "Show query tiles"; + const char kQueryTilesDescription[] = "Shows query tiles in Chrome"; + const char kQueryTilesNTPName[] = "Show query tiles in NTP"; +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -2274,6 +2274,9 @@ extern const char kQueryTilesNTPDescription[]; + extern const char kQueryTilesOnStartName[]; + extern const char kQueryTilesOnStartDescription[]; + extern const char kQueryTilesSingleTierName[]; ++extern const char kDisableExternalIntentRequestsName[]; ++extern const char kDisableExternalIntentRequestsDescription[]; ++ + extern const char kQueryTilesSingleTierDescription[]; + extern const char kQueryTilesEnableQueryEditingName[]; + extern const char kQueryTilesEnableQueryEditingDescription[]; +-- +2.25.1 diff --git a/bromite/build/patches/Add-flag-to-disable-vibration.patch b/bromite/build/patches/Add-flag-to-disable-vibration.patch new file mode 100644 index 00000000..5ed4c84b --- /dev/null +++ b/bromite/build/patches/Add-flag-to-disable-vibration.patch @@ -0,0 +1,156 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sun, 27 Jun 2021 17:35:39 +0200 +Subject: Add flag to disable vibration + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 4 ++++ + chrome/browser/flag_descriptions.cc | 3 +++ + chrome/browser/flag_descriptions.h | 2 ++ + content/child/runtime_features.cc | 1 + + content/public/common/content_features.cc | 5 +++++ + content/public/common/content_features.h | 2 ++ + third_party/blink/public/platform/web_runtime_features.h | 1 + + .../blink/renderer/modules/vibration/vibration_controller.cc | 3 +++ + .../blink/renderer/platform/exported/web_runtime_features.cc | 4 ++++ + .../blink/renderer/platform/runtime_enabled_features.json5 | 4 ++++ + 10 files changed, 29 insertions(+) + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -7467,6 +7467,10 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(features::kNewMacNotificationAPI)}, + #endif + ++ {"enable-vibration", flag_descriptions::kEnableVibrationName, ++ flag_descriptions::kEnableVibrationDescription, kOsAll, ++ FEATURE_VALUE_TYPE(features::kVibration)}, ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + {"exo-gamepad-vibration", flag_descriptions::kExoGamepadVibrationName, + flag_descriptions::kExoGamepadVibrationDescription, kOsCrOS, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -6463,6 +6463,9 @@ extern const char kLacrosScreenCoordinatesDescription[]; + + #endif // #if BUILDFLAG(IS_CHROMEOS_LACROS) + ++const char kEnableVibrationName[] = "Vibration"; ++const char kEnableVibrationDescription[] = "Enable vibration API; an user gesture will still be needed."; ++ + #if BUILDFLAG(IS_CHROMEOS) + const char kAllowDefaultWebAppMigrationForChromeOsManagedUsersName[] = + "Allow default web app migration for ChromeOS managed users"; +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -3938,6 +3938,8 @@ extern const char kWebUITabStripTabDragIntegrationName[]; + extern const char kWebUITabStripTabDragIntegrationDescription[]; + #endif // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP) && BUILDFLAG(IS_CHROMEOS_ASH) + ++extern const char kEnableVibrationName[]; ++extern const char kEnableVibrationDescription[]; + #if defined(TOOLKIT_VIEWS) || BUILDFLAG(IS_ANDROID) + + extern const char kAutofillCreditCardUploadName[]; +diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc +--- a/content/child/runtime_features.cc ++++ b/content/child/runtime_features.cc +@@ -101,6 +101,7 @@ void SetRuntimeFeatureDefaultsForPlatform( + #if BUILDFLAG(IS_ANDROID) + if (command_line.HasSwitch(switches::kDisableMediaSessionAPI)) + WebRuntimeFeatures::EnableMediaSession(false); ++ WebRuntimeFeatures::EnableVibration(base::FeatureList::IsEnabled(features::kVibration)); + #endif + + #if BUILDFLAG(IS_ANDROID) +diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc +--- a/content/public/common/content_features.cc ++++ b/content/public/common/content_features.cc +@@ -130,6 +130,11 @@ BASE_FEATURE(kBackForwardCacheMemoryControls, + #endif + ); + ++// Enables vibration; an user gesture will still be required if enabled. ++BASE_FEATURE(kVibration, ++ "Vibration", ++ base::FEATURE_DISABLED_BY_DEFAULT); ++ + // When this feature is enabled, private network requests initiated from + // non-secure contexts in the `public` address space are blocked. + // +diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h +--- a/content/public/common/content_features.h ++++ b/content/public/common/content_features.h +@@ -322,6 +322,8 @@ CONTENT_EXPORT extern const base::FeatureParam + kCompositorLockTimeout; + + #endif // BUILDFLAG(IS_ANDROID) ++CONTENT_EXPORT BASE_DECLARE_FEATURE(kVibration); ++ + + #if BUILDFLAG(IS_MAC) + CONTENT_EXPORT BASE_DECLARE_FEATURE(kDeviceMonitorMac); +diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h +--- a/third_party/blink/public/platform/web_runtime_features.h ++++ b/third_party/blink/public/platform/web_runtime_features.h +@@ -70,6 +70,7 @@ class BLINK_PLATFORM_EXPORT WebRuntimeFeatures : public WebRuntimeFeaturesBase { + static void EnableFingerprintingCanvasMeasureTextNoise(bool); + static void EnableFingerprintingCanvasImageDataNoise(bool); + static void EnableFluentScrollbars(bool); ++ static void EnableVibration(bool); + + WebRuntimeFeatures() = delete; + }; +diff --git a/third_party/blink/renderer/modules/vibration/vibration_controller.cc b/third_party/blink/renderer/modules/vibration/vibration_controller.cc +--- a/third_party/blink/renderer/modules/vibration/vibration_controller.cc ++++ b/third_party/blink/renderer/modules/vibration/vibration_controller.cc +@@ -29,6 +29,7 @@ + #include "third_party/blink/renderer/core/frame/local_frame.h" + #include "third_party/blink/renderer/core/frame/navigator.h" + #include "third_party/blink/renderer/core/page/page.h" ++#include "third_party/blink/renderer/platform/runtime_enabled_features.h" + + // Maximum number of entries in a vibration pattern. + const unsigned kVibrationPatternLengthMax = 99; +@@ -152,6 +153,8 @@ bool VibrationController::vibrate(Navigator& navigator, + // reference to |window| or |navigator| was retained in another window. + if (!navigator.DomWindow()) + return false; ++ if (!RuntimeEnabledFeatures::VibrationEnabled()) ++ return false; + return From(navigator).Vibrate(pattern); + } + +diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc +--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc ++++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc +@@ -52,6 +52,10 @@ void WebRuntimeFeatures::EnableTestOnlyFeatures(bool enable) { + RuntimeEnabledFeatures::SetTestFeaturesEnabled(enable); + } + ++void WebRuntimeFeatures::EnableVibration(bool enable) { ++ RuntimeEnabledFeatures::SetVibrationEnabled(enable); ++} ++ + void WebRuntimeFeatures::EnableOriginTrialControlledFeatures(bool enable) { + RuntimeEnabledFeatures::SetOriginTrialControlledFeaturesEnabled(enable); + } +diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 +--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 ++++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 +@@ -1827,6 +1827,10 @@ + name: "OrientationEvent", + status: {"Android": "stable"}, + }, ++ { ++ name: "Vibration", ++ status: "stable", ++ }, + { + name: "OriginIsolationHeader", + status: "stable", +-- +2.25.1 diff --git a/bromite/build/patches/Add-lifetime-options-for-permissions.patch b/bromite/build/patches/Add-lifetime-options-for-permissions.patch new file mode 100644 index 00000000..7cf564ee --- /dev/null +++ b/bromite/build/patches/Add-lifetime-options-for-permissions.patch @@ -0,0 +1,1382 @@ +From: uazo +Date: Fri, 8 Apr 2022 11:04:04 +0000 +Subject: Add lifetime options for permissions + +Indicate the session mode for content-settings by using the constraint `content_settings::SessionModel` as +UserSession when setting the value, and also make use of an expiration time value. +This is used in Chromium for `ClientHints` but it is generally possible to use this functionality when a +specific value needs to be persisted by origin. +All content settings of this type are not saved on disk (except for the `Forever` option), allowing user to +reset the status each time application is restarted. + +There are 4 main areas affected to introduce the functionality: +* components/content_settings + A new `content_settings::LifetimeMode` enum value is defined to specify the user's + choice (Always, OnlyThisTime, UntilOriginClosed, UntilBrowserClosed). + Enumeration is also generated for java by adding it in `content_settings_enums_javagen` (gn). + This is mainly used in `content_settings_utils.cc` to create a specialised `content_settings::ContentSettingConstraints` + that is then used in `SetContentSettingDefaultScope()` by `PermissionContextBase::UpdateContentSetting`. + Existing Chromium data structures do not provide a specific property to define a choice which is instead encoded through + the `ContentSettingConstraints`; this approach is already used in other parts of the Chromium codebase so it is not + novel here. + Therefore, `content_settings::GetConstraintSessionExpiration()` and `content_settings::IsConstraintSessionExpiration()` + manage the lifetime modes of the session content-settings. + The modificaiton also adds the session pattern to the ContentSettingPatternSource so that it is available for the UI. +* components/permissions + Lifetime support is added to the permissions; most of the changes are caused by the fact that it is necessary to report + the value selected by the user from the Java UI managed by `components/browser_ui` up to + `PermissionContextBase::UpdateContentSetting()`, without necessarily having to modify all requests that are not + related to geolocation/camera/microphone. The approach used is a new + `PermissionRequest::PermissionDecidedCallbackWithLifetime` used by an overload of + `PermissionContextBase::CreatePermissionRequest` so that options are present only for the specific content-settings + (see `PermissionDialogModel.java`). + For other permissions no behaviour is changed (see `PermissionDialogDelegate::Accept`); for geolocation it was + necessary to act directly in the specific context, because, unlike microphone/camera, the content-setting value is + inserted in its specific method (`FinishNotifyPermissionSet`, that calls the callback), even if the class always + derives from `PermissionContextBase`. +* components/page_info + Some changes needed to see in the summary of the `page_info` the text "(only this session)" + (aka `page_info_android_permission_session_permission`) through adding a new property "is_user_session" in + `PageInfoPermissionEntry` (Java). +* components/browser_ui + Changes to the Settings UI to show "(only this session)" in the specific content-setting. + The same view is used both in the settings and in the page_info. + +For the management of `UntilOriginClosed` the logic used by flag `kOneTimeGeolocationPermission` was used; this flag +is active only in the desktop (files `last_tab_standing_tracker_*`). It is a class that manages a list of the active +origins and allows to perform operations when all the tabs relating to that origin have been closed, in this case +deleting the session content settings of `UntilOriginClosed`. + +See also: https://github.com/bromite/bromite/issues/1549 + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../permissions/last_tab_standing_tracker.cc | 33 +++++++- + .../permissions/last_tab_standing_tracker.h | 4 +- + .../last_tab_standing_tracker_factory.cc | 2 +- + ...hrome_browser_main_extra_parts_profiles.cc | 5 +- + chrome/browser/ui/tab_helpers.cc | 1 + + .../site_settings/PermissionInfo.java | 14 +++- + .../site_settings/SingleWebsiteSettings.java | 10 +++ + .../WebsitePreferenceBridge.java | 6 +- + .../android/website_preference_bridge.cc | 7 +- + .../strings/android/browser_ui_strings.grd | 5 ++ + components/content_settings/android/BUILD.gn | 1 + + .../core/browser/content_settings_utils.cc | 29 +++++++ + .../core/browser/content_settings_utils.h | 6 ++ + .../common/content_settings_constraints.h | 11 +++ + .../page_info/PageInfoController.java | 4 +- + .../PermissionParamsListBuilder.java | 13 ++- + .../android/page_info_controller_android.cc | 10 ++- + components/page_info/page_info.cc | 2 + + components/page_info/page_info.h | 1 + + .../permissions/PermissionDialogDelegate.java | 13 +++ + .../permissions/PermissionDialogModel.java | 81 ++++++++++++++++++- + .../permission_dialog_delegate.cc | 19 +++++ + .../permission_dialog_delegate.h | 1 + + .../permission_prompt_android.cc | 8 ++ + .../permission_prompt_android.h | 2 + + .../android/permissions_android_strings.grd | 17 ++++ + .../geolocation_permission_context_android.cc | 35 ++++++-- + .../geolocation_permission_context_android.h | 13 ++- + .../permissions/permission_context_base.cc | 49 ++++++++++- + .../permissions/permission_context_base.h | 24 +++++- + components/permissions/permission_prompt.h | 3 +- + components/permissions/permission_request.cc | 34 +++++++- + components/permissions/permission_request.h | 17 +++- + .../permissions/permission_request_manager.cc | 37 ++++++--- + .../permissions/permission_request_manager.h | 11 ++- + 35 files changed, 472 insertions(+), 56 deletions(-) + +diff --git a/chrome/browser/permissions/last_tab_standing_tracker.cc b/chrome/browser/permissions/last_tab_standing_tracker.cc +--- a/chrome/browser/permissions/last_tab_standing_tracker.cc ++++ b/chrome/browser/permissions/last_tab_standing_tracker.cc +@@ -7,9 +7,35 @@ + #include "base/observer_list.h" + #include "chrome/browser/profiles/profile.h" + #include "url/gurl.h" ++#include "components/content_settings/core/browser/host_content_settings_map.h" ++#include "components/content_settings/core/common/content_settings_utils.h" ++#include "components/permissions/permissions_client.h" + +-LastTabStandingTracker::LastTabStandingTracker() = default; ++namespace { ++ // Remove all sessions content setting by origin and type ++ void RemoveSessionSettings(HostContentSettingsMap* content_settings, ++ const url::Origin& origin, ++ ContentSettingsType type) { ++ ContentSettingsForOneType session_settings; ++ content_settings->GetSettingsForOneType( ++ type, &session_settings, ++ content_settings::SessionModel::UserSession); + ++ GURL url = origin.GetURL(); ++ for (ContentSettingPatternSource& entry : session_settings) { ++ if (content_settings::IsConstraintSessionExpiration(entry, ++ content_settings::LifetimeMode::UntilOriginClosed) && ++ entry.primary_pattern.Matches(url)) { ++ content_settings->SetWebsiteSettingCustomScope( ++ entry.primary_pattern, entry.secondary_pattern, ++ type, base::Value()); ++ } ++ } ++ } ++} ++ ++LastTabStandingTracker::LastTabStandingTracker(content::BrowserContext* context) ++ : context_(context) {} + LastTabStandingTracker::~LastTabStandingTracker() = default; + + void LastTabStandingTracker::Shutdown() { +@@ -55,5 +81,10 @@ void LastTabStandingTracker::WebContentsUnloadedOrigin( + tab_counter_.erase(origin); + for (auto& observer : observer_list_) + observer.OnLastPageFromOriginClosed(origin); ++ HostContentSettingsMap* content_settings = ++ permissions::PermissionsClient::Get()->GetSettingsMap(context_); ++ RemoveSessionSettings(content_settings, origin, ContentSettingsType::GEOLOCATION); ++ RemoveSessionSettings(content_settings, origin, ContentSettingsType::MEDIASTREAM_MIC); ++ RemoveSessionSettings(content_settings, origin, ContentSettingsType::MEDIASTREAM_CAMERA); + } + } +diff --git a/chrome/browser/permissions/last_tab_standing_tracker.h b/chrome/browser/permissions/last_tab_standing_tracker.h +--- a/chrome/browser/permissions/last_tab_standing_tracker.h ++++ b/chrome/browser/permissions/last_tab_standing_tracker.h +@@ -9,6 +9,7 @@ + + #include "base/observer_list.h" + #include "chrome/browser/permissions/last_tab_standing_tracker_observer.h" ++#include "chrome/browser/profiles/profile.h" + #include "components/keyed_service/core/keyed_service.h" + #include "url/origin.h" + +@@ -16,7 +17,7 @@ + // all tabs of a particular origin have been closed or navigated away from. + class LastTabStandingTracker : public KeyedService { + public: +- LastTabStandingTracker(); ++ explicit LastTabStandingTracker(content::BrowserContext* context); + ~LastTabStandingTracker() override; + + LastTabStandingTracker(const LastTabStandingTracker&) = delete; +@@ -33,6 +34,7 @@ class LastTabStandingTracker : public KeyedService { + base::ObserverList observer_list_; + // Tracks how many tabs of a particular origin are open at any given time. + std::map tab_counter_; ++ raw_ptr context_; + }; + + #endif // CHROME_BROWSER_PERMISSIONS_LAST_TAB_STANDING_TRACKER_H_ +diff --git a/chrome/browser/permissions/last_tab_standing_tracker_factory.cc b/chrome/browser/permissions/last_tab_standing_tracker_factory.cc +--- a/chrome/browser/permissions/last_tab_standing_tracker_factory.cc ++++ b/chrome/browser/permissions/last_tab_standing_tracker_factory.cc +@@ -31,5 +31,5 @@ bool LastTabStandingTrackerFactory::ServiceIsCreatedWithBrowserContext() const { + + KeyedService* LastTabStandingTrackerFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { +- return new LastTabStandingTracker(); ++ return new LastTabStandingTracker(context); + } +diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc ++++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +@@ -411,10 +411,7 @@ void ChromeBrowserMainExtraPartsProfiles:: + LacrosFirstRunServiceFactory::GetInstance(); + #endif + LanguageModelManagerFactory::GetInstance(); +- if (base::FeatureList::IsEnabled( +- permissions::features::kOneTimeGeolocationPermission)) { +- LastTabStandingTrackerFactory::GetInstance(); +- } ++ LastTabStandingTrackerFactory::GetInstance(); + login_detection::LoginDetectionKeyedServiceFactory::GetInstance(); + #if !BUILDFLAG(IS_ANDROID) + LoginUIServiceFactory::GetInstance(); +diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc +--- a/chrome/browser/ui/tab_helpers.cc ++++ b/chrome/browser/ui/tab_helpers.cc +@@ -491,6 +491,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { + PolicyAuditorBridge::CreateForWebContents(web_contents); + PluginObserverAndroid::CreateForWebContents(web_contents); + video_tutorials::VideoTutorialTabHelper::CreateForWebContents(web_contents); ++ LastTabStandingTrackerTabHelper::CreateForWebContents(web_contents); + #else + if (accuracy_tips::AccuracyWebContentsObserver::IsEnabled(web_contents)) { + accuracy_tips::AccuracyWebContentsObserver::CreateForWebContents( +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/PermissionInfo.java +@@ -9,6 +9,7 @@ import androidx.annotation.Nullable; + import org.chromium.components.content_settings.ContentSettingValues; + import org.chromium.components.content_settings.ContentSettingsType; + import org.chromium.content_public.browser.BrowserContextHandle; ++import org.chromium.components.content_settings.SessionModel; + + import java.io.Serializable; + +@@ -20,19 +21,30 @@ public class PermissionInfo implements Serializable { + private final String mEmbedder; + private final String mOrigin; + private final @ContentSettingsType int mContentSettingsType; ++ private final @SessionModel int mSessionModel; + + public PermissionInfo(@ContentSettingsType int type, String origin, String embedder) { + this(type, origin, embedder, false); + } + ++ public PermissionInfo(@ContentSettingsType int type, String origin, String embedder, boolean isEmbargoed) { ++ this(type, origin, embedder, isEmbargoed, 0); ++ } ++ + public PermissionInfo( +- @ContentSettingsType int type, String origin, String embedder, boolean isEmbargoed) { ++ @ContentSettingsType int type, String origin, String embedder, boolean isEmbargoed, ++ @SessionModel int sessionModel) { + assert WebsitePermissionsFetcher.getPermissionsType(type) + == WebsitePermissionsFetcher.WebsitePermissionsType.PERMISSION_INFO; + mOrigin = origin; + mEmbedder = embedder; + mContentSettingsType = type; + mIsEmbargoed = isEmbargoed; ++ mSessionModel = sessionModel; ++ } ++ ++ public @SessionModel int getSessionModel() { ++ return mSessionModel; + } + + public @ContentSettingsType int getContentSettingsType() { +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +@@ -35,6 +35,7 @@ import org.chromium.components.browser_ui.settings.SettingsUtils; + import org.chromium.components.browser_ui.settings.TextMessagePreference; + import org.chromium.components.content_settings.ContentSettingValues; + import org.chromium.components.content_settings.ContentSettingsType; ++import org.chromium.components.content_settings.SessionModel; + import org.chromium.components.embedder_support.util.Origin; + import org.chromium.content_public.browser.BrowserContextHandle; + import org.chromium.content_public.browser.ContentFeatureList; +@@ -539,6 +540,11 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment + } + } + ++ private boolean isSessionPermission(@ContentSettingsType int type) { ++ return mSite.getPermissionInfo(type) != null && ++ mSite.getPermissionInfo(type).getSessionModel() == SessionModel.USER_SESSION; ++ } ++ + private void setUpClearDataPreference() { + ClearWebsiteStorage preference = findPreference(PREF_CLEAR_DATA); + long usage = mSite.getTotalUsage(); +@@ -963,6 +969,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment + if (contentType == mHighlightedPermission) { + switchPreference.setBackgroundColor(mHighlightColor); + } ++ if (isSessionPermission(contentType)) { ++ switchPreference.setSummary(switchPreference.getSummary() + " " + ++ getString(R.string.page_info_android_permission_session_permission)); ++ } + } + + /** +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +@@ -9,6 +9,7 @@ import org.chromium.base.annotations.CalledByNative; + import org.chromium.base.annotations.NativeMethods; + import org.chromium.components.content_settings.ContentSettingValues; + import org.chromium.components.content_settings.ContentSettingsType; ++import org.chromium.components.content_settings.SessionModel; + import org.chromium.components.location.LocationUtils; + import org.chromium.content_public.browser.BrowserContextHandle; + import org.chromium.url.GURL; +@@ -55,7 +56,8 @@ public class WebsitePreferenceBridge { + + @CalledByNative + private static void insertPermissionInfoIntoList(@ContentSettingsType int type, +- ArrayList list, String origin, String embedder, boolean isEmbargoed) { ++ ArrayList list, String origin, String embedder, boolean isEmbargoed, ++ @SessionModel int sessionModel) { + if (type == ContentSettingsType.MEDIASTREAM_CAMERA + || type == ContentSettingsType.MEDIASTREAM_MIC) { + for (PermissionInfo info : list) { +@@ -64,7 +66,7 @@ public class WebsitePreferenceBridge { + } + } + } +- list.add(new PermissionInfo(type, origin, embedder, isEmbargoed)); ++ list.add(new PermissionInfo(type, origin, embedder, isEmbargoed, sessionModel)); + } + + @CalledByNative +diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc +--- a/components/browser_ui/site_settings/android/website_preference_bridge.cc ++++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc +@@ -122,7 +122,8 @@ typedef void (*InfoListInsertionFunction)( + const base::android::JavaRef&, + const base::android::JavaRef&, + const base::android::JavaRef&, +- jboolean); ++ jboolean, ++ JniIntWrapper); + + void GetOrigins(JNIEnv* env, + const JavaParamRef& jbrowser_context_handle, +@@ -164,7 +165,7 @@ void GetOrigins(JNIEnv* env, + seen_origins.push_back(origin); + insertionFunc(env, static_cast(content_type), list, + ConvertOriginToJavaString(env, origin), jembedder, +- /*is_embargoed=*/false); ++ /*is_embargoed=*/false, static_cast(settings_it.metadata.session_model)); + } + + // Add any origins which have a default content setting value (thus skipped +@@ -186,7 +187,7 @@ void GetOrigins(JNIEnv* env, + seen_origins.push_back(origin); + insertionFunc(env, static_cast(content_type), list, + ConvertOriginToJavaString(env, origin), jembedder, +- /*is_embargoed=*/true); ++ /*is_embargoed=*/true, 0); + } + } + } +diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd +--- a/components/browser_ui/strings/android/browser_ui_strings.grd ++++ b/components/browser_ui/strings/android/browser_ui_strings.grd +@@ -608,6 +608,11 @@ + + URL truncated + ++ ++ (only this session) ++ ++ + + Ad personalization + +diff --git a/components/content_settings/android/BUILD.gn b/components/content_settings/android/BUILD.gn +--- a/components/content_settings/android/BUILD.gn ++++ b/components/content_settings/android/BUILD.gn +@@ -58,6 +58,7 @@ java_cpp_enum("content_settings_enums_javagen") { + "../core/common/content_settings_types.h", + "../core/common/cookie_controls_enforcement.h", + "../core/common/cookie_controls_status.h", ++ "../core/common/content_settings_constraints.h", + ] + visibility = [ ":*" ] # Depend on through :content_settings_enums_java + } +diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc +--- a/components/content_settings/core/browser/content_settings_utils.cc ++++ b/components/content_settings/core/browser/content_settings_utils.cc +@@ -189,6 +189,35 @@ base::Time GetConstraintExpiration(const base::TimeDelta duration) { + return base::Time::Now() + duration; + } + ++ContentSettingConstraints GetConstraintSessionExpiration(LifetimeMode lifetime_mode) { ++ if (lifetime_mode == LifetimeMode::OnlyThisTime) { ++ // note: this content settings will be discarded immediately ++ // 1h is used as a magic constant to identify the one-time lifetime mode ++ return {base::Time() + base::Hours(1), content_settings::SessionModel::UserSession}; ++ } else if (lifetime_mode == LifetimeMode::UntilOriginClosed) { ++ return {base::Time::Now() + base::Hours(24), content_settings::SessionModel::UserSession}; ++ } else { ++ return {base::Time(), content_settings::SessionModel::UserSession}; ++ } ++} ++ ++bool IsConstraintSessionExpiration(const ContentSettingPatternSource& source, ++ LifetimeMode lifetime_mode) { ++ if (source.metadata.session_model != content_settings::SessionModel::UserSession) ++ return false; ++ ++ LifetimeMode type; ++ if (source.metadata.expiration == base::Time()) { ++ type = LifetimeMode::UntilBrowserClosed; ++ } else if (source.metadata.expiration == (base::Time() + base::Hours(1))) { ++ type = LifetimeMode::OnlyThisTime; ++ } else { ++ type = LifetimeMode::UntilOriginClosed; ++ } ++ ++ return lifetime_mode == type; ++} ++ + bool CanTrackLastVisit(ContentSettingsType type) { + #if BUILDFLAG(IS_ANDROID) + // The notification provider on Android does not support last visit tracking. +diff --git a/components/content_settings/core/browser/content_settings_utils.h b/components/content_settings/core/browser/content_settings_utils.h +--- a/components/content_settings/core/browser/content_settings_utils.h ++++ b/components/content_settings/core/browser/content_settings_utils.h +@@ -76,6 +76,12 @@ base::Time GetConstraintExpiration(const base::TimeDelta duration); + // Returns whether the given type supports tracking last_visit timestamps. + bool CanTrackLastVisit(ContentSettingsType type); + ++ContentSettingConstraints GetConstraintSessionExpiration(LifetimeMode lifetime_mode); ++ ++bool IsConstraintSessionExpiration( ++ const ContentSettingPatternSource& source, ++ LifetimeMode lifetime_mode); ++ + // Get a timestamp with week-precision. + base::Time GetCoarseTime(base::Time time); + +diff --git a/components/content_settings/core/common/content_settings_constraints.h b/components/content_settings/core/common/content_settings_constraints.h +--- a/components/content_settings/core/common/content_settings_constraints.h ++++ b/components/content_settings/core/common/content_settings_constraints.h +@@ -18,6 +18,8 @@ namespace content_settings { + // regardless of expiry date, if set. + // OneTime: Settings will persist for the current "tab session", meaning + // until the last tab from the origin is closed. ++// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.content_settings ++// GENERATED_JAVA_CLASS_NAME_OVERRIDE: SessionModel + enum class SessionModel { + Durable = 0, + UserSession = 1, +@@ -25,6 +27,15 @@ enum class SessionModel { + kMaxValue = OneTime, + }; + ++// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.content_settings ++// GENERATED_JAVA_CLASS_NAME_OVERRIDE: LifetimeMode ++enum class LifetimeMode { ++ Always = 99, ++ OnlyThisTime = 1, ++ UntilOriginClosed = 2, ++ UntilBrowserClosed = 0, ++}; ++ + // Constraints to be applied when setting a content setting. + struct ContentSettingConstraints { + // Specification of an |expiration| provides an upper bound on the time a +diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java +--- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java ++++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoController.java +@@ -360,9 +360,9 @@ public class PageInfoController implements PageInfoMainController, ModalDialogPr + */ + @CalledByNative + private void addPermissionSection(String name, String nameMidSentence, int type, +- @ContentSettingValues int currentSettingValue) { ++ @ContentSettingValues int currentSettingValue, boolean is_user_session) { + mPermissionParamsListBuilder.addPermissionEntry( +- name, nameMidSentence, type, currentSettingValue); ++ name, nameMidSentence, type, currentSettingValue, is_user_session); + } + + /** +diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java +--- a/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java ++++ b/components/page_info/android/java/src/org/chromium/components/page_info/PermissionParamsListBuilder.java +@@ -44,8 +44,9 @@ public class PermissionParamsListBuilder { + } + + public void addPermissionEntry( +- String name, String nameMidSentence, int type, @ContentSettingValues int value) { +- mEntries.add(new PageInfoPermissionEntry(name, nameMidSentence, type, value)); ++ String name, String nameMidSentence, int type, @ContentSettingValues int value, ++ boolean is_user_session) { ++ mEntries.add(new PageInfoPermissionEntry(name, nameMidSentence, type, value, is_user_session)); + } + + public void clearPermissionEntries() { +@@ -86,6 +87,10 @@ public class PermissionParamsListBuilder { + permissionParams.warningTextResource = + R.string.page_info_android_permission_blocked; + } ++ if (permission.is_user_session) { ++ permissionParams.warningTextResource = ++ R.string.page_info_android_permission_session_permission; ++ } + } + } + +@@ -124,13 +129,15 @@ public class PermissionParamsListBuilder { + public final String nameMidSentence; + public final int type; + public final @ContentSettingValues int setting; ++ public final boolean is_user_session; + + PageInfoPermissionEntry( +- String name, String nameMidSentence, int type, @ContentSettingValues int setting) { ++ String name, String nameMidSentence, int type, @ContentSettingValues int setting, boolean is_user_session) { + this.name = name; + this.nameMidSentence = nameMidSentence; + this.type = type; + this.setting = setting; ++ this.is_user_session = is_user_session; + } + + @Override +diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc +--- a/components/page_info/android/page_info_controller_android.cc ++++ b/components/page_info/android/page_info_controller_android.cc +@@ -171,6 +171,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( + + std::map + user_specified_settings_to_display; ++ std::map ++ user_specified_settings_is_user_session; + + for (const auto& permission : permission_info_list) { + if (base::Contains(permissions_to_display, permission.type)) { +@@ -179,6 +181,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( + if (setting_to_display) { + user_specified_settings_to_display[permission.type] = + *setting_to_display; ++ user_specified_settings_is_user_session[permission.type] = ++ permission.is_user_session; + } + } + } +@@ -195,7 +199,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( + ConvertUTF16ToJavaString(env, setting_title), + ConvertUTF16ToJavaString(env, setting_title_mid_sentence), + static_cast(permission), +- static_cast(user_specified_settings_to_display[permission])); ++ static_cast(user_specified_settings_to_display[permission]), ++ user_specified_settings_is_user_session[permission]); + } + } + +@@ -208,7 +213,8 @@ void PageInfoControllerAndroid::SetPermissionInfo( + env, controller_jobject_, ConvertUTF16ToJavaString(env, object_title), + ConvertUTF16ToJavaString(env, object_title), + static_cast(chosen_object->ui_info.content_settings_type), +- static_cast(CONTENT_SETTING_ALLOW)); ++ static_cast(CONTENT_SETTING_ALLOW), ++ /* is_user_session */ false); + } + + Java_PageInfoController_updatePermissionDisplay(env, controller_jobject_); +diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc +--- a/components/page_info/page_info.cc ++++ b/components/page_info/page_info.cc +@@ -1189,6 +1189,8 @@ void PageInfo::PresentSitePermissions() { + permission_info.source = info.source; + permission_info.is_one_time = (info.metadata.session_model == + content_settings::SessionModel::OneTime); ++ permission_info.is_user_session = ++ (info.metadata.session_model == content_settings::SessionModel::UserSession); + + if (info.primary_pattern == ContentSettingsPattern::Wildcard() && + info.secondary_pattern == ContentSettingsPattern::Wildcard()) { +diff --git a/components/page_info/page_info.h b/components/page_info/page_info.h +--- a/components/page_info/page_info.h ++++ b/components/page_info/page_info.h +@@ -180,6 +180,7 @@ class PageInfo : private content_settings::CookieControlsView { + content_settings::SettingSource source = + content_settings::SETTING_SOURCE_NONE; + bool is_one_time = false; ++ bool is_user_session = false; + }; + + // Creates a PageInfo for the passed |url| using the given |ssl| status +diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java +--- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java ++++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogDelegate.java +@@ -8,6 +8,7 @@ import org.chromium.base.annotations.CalledByNative; + import org.chromium.base.annotations.JNINamespace; + import org.chromium.base.annotations.NativeMethods; + import org.chromium.ui.base.WindowAndroid; ++import org.chromium.components.content_settings.LifetimeMode; + + /** + * Delegate class for modal permission dialogs. Contains all of the data displayed in a prompt, +@@ -43,6 +44,9 @@ public class PermissionDialogDelegate { + /** The {@link ContentSettingsType}s requested in this dialog. */ + private int[] mContentSettingsTypes; + ++ /** Lifetime option selected by the user. */ ++ private int mSelectedLifetimeOption = LifetimeMode.ALWAYS; ++ + public WindowAndroid getWindow() { + return mWindow; + } +@@ -72,6 +76,15 @@ public class PermissionDialogDelegate { + PermissionDialogDelegateJni.get().accept(mNativeDelegatePtr, PermissionDialogDelegate.this); + } + ++ public void setSelectedLifetimeOption(int idx) { ++ mSelectedLifetimeOption = idx; ++ } ++ ++ @CalledByNative ++ public int getSelectedLifetimeOption() { ++ return mSelectedLifetimeOption; ++ } ++ + public void onCancel() { + assert mNativeDelegatePtr != 0; + PermissionDialogDelegateJni.get().cancel(mNativeDelegatePtr, PermissionDialogDelegate.this); +diff --git a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModel.java b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModel.java +--- a/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModel.java ++++ b/components/permissions/android/java/src/org/chromium/components/permissions/PermissionDialogModel.java +@@ -16,6 +16,17 @@ import org.chromium.ui.LayoutInflaterUtils; + import org.chromium.ui.modaldialog.ModalDialogProperties; + import org.chromium.ui.modelutil.PropertyModel; + ++import java.util.Arrays; ++import java.util.List; ++import android.view.ViewGroup.LayoutParams; ++import android.widget.LinearLayout; ++import android.widget.RadioButton; ++import android.widget.RadioGroup; ++import org.chromium.base.ApiCompatibilityUtils; ++import org.chromium.ui.base.ViewUtils; ++import org.chromium.components.content_settings.ContentSettingsType; ++import org.chromium.components.content_settings.LifetimeMode; ++ + /** + * This class creates the model for permission dialog. + */ +@@ -34,7 +45,7 @@ class PermissionDialogModel { + TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds( + messageTextView, delegate.getDrawableId(), 0, 0, 0); + +- return new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) ++ PropertyModel pm = new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS) + .with(ModalDialogProperties.CONTROLLER, controller) + .with(ModalDialogProperties.CUSTOM_VIEW, customView) + .with(ModalDialogProperties.POSITIVE_BUTTON_TEXT, delegate.getPrimaryButtonText()) +@@ -43,6 +54,74 @@ class PermissionDialogModel { + .with(ModalDialogProperties.FILTER_TOUCH_FOR_SECURITY, true) + .with(ModalDialogProperties.TOUCH_FILTERED_CALLBACK, touchFilteredCallback) + .build(); ++ ++ int[] types = delegate.getContentSettingsTypes(); ++ if (contains(types, ContentSettingsType.GEOLOCATION) || ++ contains(types, ContentSettingsType.MEDIASTREAM_MIC) || ++ contains(types, ContentSettingsType.MEDIASTREAM_CAMERA)) ++ { ++ LinearLayout layout = (LinearLayout) customView; ++ ++ // Create a text label before the lifetime selector. ++ TextView lifetimeOptionsText = new TextView(context); ++ lifetimeOptionsText.setText(context.getString( ++ org.chromium.components.permissions.R.string.session_permissions_title)); ++ ApiCompatibilityUtils.setTextAppearance( ++ lifetimeOptionsText, R.style.TextAppearance_TextMedium_Primary); ++ ++ LinearLayout.LayoutParams lifetimeOptionsTextLayoutParams = ++ new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); ++ lifetimeOptionsTextLayoutParams.setMargins(0, 0, 0, ViewUtils.dpToPx(context, 8)); ++ lifetimeOptionsText.setLayoutParams(lifetimeOptionsTextLayoutParams); ++ layout.addView(lifetimeOptionsText); ++ ++ // Create radio buttons with lifetime options. ++ RadioGroup radioGroup = new RadioGroup(context); ++ ++ RadioButton radioButon = new RadioButton(context); ++ radioButon.setText(context.getString( ++ org.chromium.components.permissions.R.string.session_permissions_only_this_this)); ++ radioButon.setId(LifetimeMode.ONLY_THIS_TIME); ++ radioGroup.addView(radioButon); ++ ++ radioButon = new RadioButton(context); ++ radioButon.setText(context.getString( ++ org.chromium.components.permissions.R.string.session_permissions_until_page_close)); ++ radioButon.setId(LifetimeMode.UNTIL_ORIGIN_CLOSED); ++ radioGroup.addView(radioButon); ++ ++ radioButon = new RadioButton(context); ++ radioButon.setText(context.getString( ++ org.chromium.components.permissions.R.string.session_permissions_until_browser_close)); ++ radioButon.setId(LifetimeMode.UNTIL_BROWSER_CLOSED); ++ radioGroup.addView(radioButon); ++ ++ radioButon = new RadioButton(context); ++ radioButon.setText(context.getString( ++ org.chromium.components.permissions.R.string.session_permissions_forever)); ++ radioButon.setId(LifetimeMode.ALWAYS); ++ radioGroup.addView(radioButon); ++ ++ radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { ++ @Override ++ public void onCheckedChanged(RadioGroup group, int checkedId) { ++ delegate.setSelectedLifetimeOption(checkedId); ++ } ++ }); ++ radioGroup.check(1); ++ layout.addView(radioGroup); ++ } ++ ++ return pm; ++ } ++ ++ private static boolean contains(final int[] array, final int key) { ++ int length = array.length; ++ for(int i = 0; i < length; i++) { ++ if (array[i] == key) ++ return true; ++ } ++ return false; + } + + private static View loadDialogView(Context context) { +diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +--- a/components/permissions/android/permission_prompt/permission_dialog_delegate.cc ++++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.cc +@@ -67,6 +67,11 @@ void PermissionDialogJavaDelegate::DismissDialog() { + Java_PermissionDialogDelegate_dismissFromNative(env, j_delegate_); + } + ++int PermissionDialogJavaDelegate::GetSelectedLifetimeOption() { ++ JNIEnv* env = base::android::AttachCurrentThread(); ++ return Java_PermissionDialogDelegate_getSelectedLifetimeOption(env, j_delegate_); ++} ++ + // static + void PermissionDialogDelegate::Create( + content::WebContents* web_contents, +@@ -95,12 +100,26 @@ PermissionDialogDelegate* PermissionDialogDelegate::CreateForTesting( + void PermissionDialogDelegate::Accept(JNIEnv* env, + const JavaParamRef& obj) { + DCHECK(permission_prompt_); ++ content_settings::LifetimeMode lifetimeOption = ++ static_cast( ++ java_delegate_->GetSelectedLifetimeOption()); ++ if (lifetimeOption != content_settings::LifetimeMode::Always) { ++ permission_prompt_->AcceptThisTime(lifetimeOption); ++ return; ++ } + permission_prompt_->Accept(); + } + + void PermissionDialogDelegate::Cancel(JNIEnv* env, + const JavaParamRef& obj) { + DCHECK(permission_prompt_); ++ content_settings::LifetimeMode lifetimeOption = ++ static_cast( ++ java_delegate_->GetSelectedLifetimeOption()); ++ if (lifetimeOption != content_settings::LifetimeMode::Always) { ++ permission_prompt_->DenyThisTime(lifetimeOption); ++ return; ++ } + permission_prompt_->Deny(); + } + +diff --git a/components/permissions/android/permission_prompt/permission_dialog_delegate.h b/components/permissions/android/permission_prompt/permission_dialog_delegate.h +--- a/components/permissions/android/permission_prompt/permission_dialog_delegate.h ++++ b/components/permissions/android/permission_prompt/permission_dialog_delegate.h +@@ -35,6 +35,7 @@ class PermissionDialogJavaDelegate { + PermissionDialogDelegate* owner); + virtual void CreateDialog(); + virtual void DismissDialog(); ++ virtual int GetSelectedLifetimeOption(); + + private: + base::android::ScopedJavaGlobalRef j_delegate_; +diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.cc b/components/permissions/android/permission_prompt/permission_prompt_android.cc +--- a/components/permissions/android/permission_prompt/permission_prompt_android.cc ++++ b/components/permissions/android/permission_prompt/permission_prompt_android.cc +@@ -41,6 +41,14 @@ void PermissionPromptAndroid::Accept() { + delegate_->Accept(); + } + ++void PermissionPromptAndroid::AcceptThisTime(content_settings::LifetimeMode lifetimeOption) { ++ delegate_->AcceptThisTime(lifetimeOption); ++} ++ ++void PermissionPromptAndroid::DenyThisTime(content_settings::LifetimeMode lifetimeOption) { ++ delegate_->DenyThisTime(lifetimeOption); ++} ++ + void PermissionPromptAndroid::Deny() { + delegate_->Deny(); + } +diff --git a/components/permissions/android/permission_prompt/permission_prompt_android.h b/components/permissions/android/permission_prompt/permission_prompt_android.h +--- a/components/permissions/android/permission_prompt/permission_prompt_android.h ++++ b/components/permissions/android/permission_prompt/permission_prompt_android.h +@@ -43,7 +43,9 @@ class PermissionPromptAndroid : public PermissionPrompt { + + void Closing(); + void Accept(); ++ void AcceptThisTime(content_settings::LifetimeMode lifetimeOption); + void Deny(); ++ void DenyThisTime(content_settings::LifetimeMode lifetimeOption); + void SetManageClicked(); + void SetLearnMoreClicked(); + bool ShouldCurrentRequestUseQuietUI(); +diff --git a/components/permissions/android/permissions_android_strings.grd b/components/permissions/android/permissions_android_strings.grd +--- a/components/permissions/android/permissions_android_strings.grd ++++ b/components/permissions/android/permissions_android_strings.grd +@@ -264,6 +264,23 @@ + Unknown or unsupported device (%1$sA1:B2:C3:D4:E5:F6) + + ++ ++ ++ Remeber my decision ++ ++ ++ Only this time ++ ++ ++ Until all pages of this origin are closed ++ ++ ++ Until Bromite is closed ++ ++ ++ Forever ++ ++ + + + %1$sitem_name (%2$sitem id) +diff --git a/components/permissions/contexts/geolocation_permission_context_android.cc b/components/permissions/contexts/geolocation_permission_context_android.cc +--- a/components/permissions/contexts/geolocation_permission_context_android.cc ++++ b/components/permissions/contexts/geolocation_permission_context_android.cc +@@ -153,6 +153,19 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + ContentSetting content_setting, + bool is_one_time) { + DCHECK(!is_one_time); ++ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, ++ std::move(callback), persist, content_setting, is_one_time, ++ content_settings::LifetimeMode::Always); ++} ++ ++void GeolocationPermissionContextAndroid::NotifyPermissionSetWithLifetime( ++ const PermissionRequestID& id, ++ const GURL& requesting_origin, ++ const GURL& embedding_origin, ++ BrowserPermissionCallback callback, ++ bool persist, ++ ContentSetting content_setting, ++ bool is_one_time, content_settings::LifetimeMode lifetime_option) { + bool is_default_search = IsRequestingOriginDSE(requesting_origin); + if (content_setting == CONTENT_SETTING_ALLOW && + !location_settings_->IsSystemLocationSettingEnabled()) { +@@ -165,7 +178,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + if (IsInLocationSettingsBackOff(is_default_search)) { + FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, + std::move(callback), false /* persist */, +- CONTENT_SETTING_BLOCK); ++ CONTENT_SETTING_BLOCK, ++ is_one_time, lifetime_option); + LogLocationSettingsMetric( + kLocationSettingsSuppressMetricBase, is_default_search, + LocationSettingsBackOffLevel(is_default_search)); +@@ -190,7 +204,8 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + !location_settings_dialog_callback_.is_null()) { + FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, + std::move(callback), false /* persist */, +- CONTENT_SETTING_BLOCK); ++ CONTENT_SETTING_BLOCK, ++ is_one_time, lifetime_option); + // This case should be very rare, so just pretend it was a denied prompt + // for metrics purposes. + LogLocationSettingsMetric( +@@ -207,12 +222,13 @@ void GeolocationPermissionContextAndroid::NotifyPermissionSet( + base::BindOnce( + &GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown, + weak_factory_.GetWeakPtr(), requesting_origin, embedding_origin, +- persist, content_setting)); ++ persist, content_setting, is_one_time, lifetime_option)); + return; + } + + FinishNotifyPermissionSet(id, requesting_origin, embedding_origin, +- std::move(callback), persist, content_setting); ++ std::move(callback), persist, content_setting, ++ is_one_time, lifetime_option); + } + + PermissionResult +@@ -379,6 +395,7 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( + const GURL& embedding_origin, + bool persist, + ContentSetting content_setting, ++ bool is_one_time, content_settings::LifetimeMode lifetime_option, + LocationSettingsDialogOutcome prompt_outcome) { + bool is_default_search = IsRequestingOriginDSE(requesting_origin); + if (prompt_outcome == GRANTED) { +@@ -402,7 +419,8 @@ void GeolocationPermissionContextAndroid::OnLocationSettingsDialogShown( + + FinishNotifyPermissionSet( + location_settings_dialog_request_id_, requesting_origin, embedding_origin, +- std::move(location_settings_dialog_callback_), persist, content_setting); ++ std::move(location_settings_dialog_callback_), persist, content_setting, ++ is_one_time, lifetime_option); + + location_settings_dialog_request_id_ = + PermissionRequestID(0, 0, PermissionRequestID::RequestLocalId()); +@@ -414,10 +432,11 @@ void GeolocationPermissionContextAndroid::FinishNotifyPermissionSet( + const GURL& embedding_origin, + BrowserPermissionCallback callback, + bool persist, +- ContentSetting content_setting) { +- GeolocationPermissionContext::NotifyPermissionSet( ++ ContentSetting content_setting, ++ bool is_one_time, content_settings::LifetimeMode lifetime_option) { ++ GeolocationPermissionContext::NotifyPermissionSetWithLifetime( + id, requesting_origin, embedding_origin, std::move(callback), persist, +- content_setting, /*is_one_time=*/false); ++ content_setting, is_one_time, lifetime_option); + } + + void GeolocationPermissionContextAndroid::SetLocationSettingsForTesting( +diff --git a/components/permissions/contexts/geolocation_permission_context_android.h b/components/permissions/contexts/geolocation_permission_context_android.h +--- a/components/permissions/contexts/geolocation_permission_context_android.h ++++ b/components/permissions/contexts/geolocation_permission_context_android.h +@@ -87,6 +87,14 @@ class GeolocationPermissionContextAndroid + bool persist, + ContentSetting content_setting, + bool is_one_time) override; ++ void NotifyPermissionSetWithLifetime(const PermissionRequestID& id, ++ const GURL& requesting_origin, ++ const GURL& embedding_origin, ++ BrowserPermissionCallback callback, ++ bool persist, ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option) override; + PermissionResult UpdatePermissionStatusWithDeviceStatus( + PermissionResult result, + const GURL& requesting_origin, +@@ -129,6 +137,7 @@ class GeolocationPermissionContextAndroid + const GURL& embedding_origin, + bool persist, + ContentSetting content_setting, ++ bool is_one_time, content_settings::LifetimeMode lifetime_option, + LocationSettingsDialogOutcome prompt_outcome); + + void FinishNotifyPermissionSet(const PermissionRequestID& id, +@@ -136,7 +145,9 @@ class GeolocationPermissionContextAndroid + const GURL& embedding_origin, + BrowserPermissionCallback callback, + bool persist, +- ContentSetting content_setting); ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option); + + std::unique_ptr location_settings_; + +diff --git a/components/permissions/permission_context_base.cc b/components/permissions/permission_context_base.cc +--- a/components/permissions/permission_context_base.cc ++++ b/components/permissions/permission_context_base.cc +@@ -226,6 +226,20 @@ PermissionContextBase::CreatePermissionRequest( + std::move(delete_callback)); + } + ++std::unique_ptr ++PermissionContextBase::CreatePermissionRequest( ++ const GURL& request_origin, ++ ContentSettingsType content_settings_type, ++ bool has_gesture, ++ content::WebContents* web_contents, ++ PermissionRequest::PermissionDecidedCallbackWithLifetime permission_decided_callback, ++ base::OnceClosure delete_callback) const { ++ return std::make_unique( ++ request_origin, ContentSettingsTypeToRequestType(content_settings_type), ++ has_gesture, std::move(permission_decided_callback), ++ std::move(delete_callback)); ++} ++ + PermissionResult PermissionContextBase::GetPermissionStatus( + content::RenderFrameHost* render_frame_host, + const GURL& requesting_origin, +@@ -405,7 +419,8 @@ void PermissionContextBase::PermissionDecided( + const GURL& embedding_origin, + BrowserPermissionCallback callback, + ContentSetting content_setting, +- bool is_one_time) { ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option) { + DCHECK(content_setting == CONTENT_SETTING_ALLOW || + content_setting == CONTENT_SETTING_BLOCK || + content_setting == CONTENT_SETTING_DEFAULT); +@@ -413,9 +428,9 @@ void PermissionContextBase::PermissionDecided( + content_setting); + + bool persist = content_setting != CONTENT_SETTING_DEFAULT; +- NotifyPermissionSet(id, requesting_origin, embedding_origin, ++ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, + std::move(callback), persist, content_setting, +- is_one_time); ++ is_one_time, lifetime_option); + } + + content::BrowserContext* PermissionContextBase::browser_context() const { +@@ -465,11 +480,26 @@ void PermissionContextBase::NotifyPermissionSet( + bool persist, + ContentSetting content_setting, + bool is_one_time) { ++ DCHECK(is_one_time == false); ++ NotifyPermissionSetWithLifetime(id, requesting_origin, embedding_origin, std::move(callback), ++ persist, content_setting, is_one_time, ++ content_settings::LifetimeMode::Always); ++} ++ ++void PermissionContextBase::NotifyPermissionSetWithLifetime( ++ const PermissionRequestID& id, ++ const GURL& requesting_origin, ++ const GURL& embedding_origin, ++ BrowserPermissionCallback callback, ++ bool persist, ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + if (persist) { + UpdateContentSetting(requesting_origin, embedding_origin, content_setting, +- is_one_time); ++ is_one_time, lifetime_option); + } + + UpdateTabContext(id, requesting_origin, +@@ -490,6 +520,15 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, + const GURL& embedding_origin, + ContentSetting content_setting, + bool is_one_time) { ++ UpdateContentSetting(requesting_origin, embedding_origin, content_setting, ++ is_one_time, content_settings::LifetimeMode::Always); ++} ++ ++void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, ++ const GURL& embedding_origin, ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option) { + DCHECK_EQ(requesting_origin, requesting_origin.DeprecatedGetOriginAsURL()); + DCHECK_EQ(embedding_origin, embedding_origin.DeprecatedGetOriginAsURL()); + DCHECK(content_setting == CONTENT_SETTING_ALLOW || +@@ -498,6 +537,8 @@ void PermissionContextBase::UpdateContentSetting(const GURL& requesting_origin, + content_settings::ContentSettingConstraints constraints = { + base::Time(), is_one_time ? content_settings::SessionModel::OneTime + : content_settings::SessionModel::Durable}; ++ if (is_one_time) ++ constraints = content_settings::GetConstraintSessionExpiration(lifetime_option); + + #if !BUILDFLAG(IS_ANDROID) + if (base::FeatureList::IsEnabled( +diff --git a/components/permissions/permission_context_base.h b/components/permissions/permission_context_base.h +--- a/components/permissions/permission_context_base.h ++++ b/components/permissions/permission_context_base.h +@@ -139,6 +139,14 @@ class PermissionContextBase : public content_settings::Observer { + + // Updates stored content setting if persist is set, updates tab indicators + // and runs the callback to finish the request. ++ virtual void NotifyPermissionSetWithLifetime(const PermissionRequestID& id, ++ const GURL& requesting_origin, ++ const GURL& embedding_origin, ++ BrowserPermissionCallback callback, ++ bool persist, ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option); + virtual void NotifyPermissionSet(const PermissionRequestID& id, + const GURL& requesting_origin, + const GURL& embedding_origin, +@@ -159,6 +167,11 @@ class PermissionContextBase : public content_settings::Observer { + // Store the decided permission as a content setting. + // virtual since the permission might be stored with different restrictions + // (for example for desktop notifications). ++ void UpdateContentSetting(const GURL& requesting_origin, ++ const GURL& embedding_origin, ++ ContentSetting content_setting, ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option); + virtual void UpdateContentSetting(const GURL& requesting_origin, + const GURL& embedding_origin, + ContentSetting content_setting, +@@ -191,6 +204,14 @@ class PermissionContextBase : public content_settings::Observer { + PermissionRequest::PermissionDecidedCallback permission_decided_callback, + base::OnceClosure delete_callback) const; + ++ virtual std::unique_ptr CreatePermissionRequest( ++ const GURL& request_origin, ++ ContentSettingsType content_settings_type, ++ bool has_gesture, ++ content::WebContents* web_contents, ++ PermissionRequest::PermissionDecidedCallbackWithLifetime permission_decided_callback, ++ base::OnceClosure delete_callback) const; ++ + ContentSettingsType content_settings_type() const { + return content_settings_type_; + } +@@ -217,7 +238,8 @@ class PermissionContextBase : public content_settings::Observer { + const GURL& embedding_origin, + BrowserPermissionCallback callback, + ContentSetting content_setting, +- bool is_one_time); ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option); + + raw_ptr browser_context_; + const ContentSettingsType content_settings_type_; +diff --git a/components/permissions/permission_prompt.h b/components/permissions/permission_prompt.h +--- a/components/permissions/permission_prompt.h ++++ b/components/permissions/permission_prompt.h +@@ -59,8 +59,9 @@ class PermissionPrompt { + virtual GURL GetEmbeddingOrigin() const = 0; + + virtual void Accept() = 0; +- virtual void AcceptThisTime() = 0; ++ virtual void AcceptThisTime(content_settings::LifetimeMode lifetime_option) = 0; + virtual void Deny() = 0; ++ virtual void DenyThisTime(content_settings::LifetimeMode lifetime_option) = 0; + virtual void Dismiss() = 0; + virtual void Ignore() = 0; + +diff --git a/components/permissions/permission_request.cc b/components/permissions/permission_request.cc +--- a/components/permissions/permission_request.cc ++++ b/components/permissions/permission_request.cc +@@ -31,6 +31,18 @@ PermissionRequest::PermissionRequest( + permission_decided_callback_(std::move(permission_decided_callback)), + delete_callback_(std::move(delete_callback)) {} + ++PermissionRequest::PermissionRequest( ++ const GURL& requesting_origin, ++ RequestType request_type, ++ bool has_gesture, ++ PermissionDecidedCallbackWithLifetime permission_decided_callback, ++ base::OnceClosure delete_callback) ++ : requesting_origin_(requesting_origin), ++ request_type_(request_type), ++ has_gesture_(has_gesture), ++ permission_decided_callback_withlifetime_(std::move(permission_decided_callback)), ++ delete_callback_(std::move(delete_callback)) {} ++ + PermissionRequest::~PermissionRequest() { + DCHECK(delete_callback_.is_null()); + } +@@ -235,17 +247,35 @@ std::u16string PermissionRequest::GetMessageTextFragment() const { + } + #endif + +-void PermissionRequest::PermissionGranted(bool is_one_time) { ++void PermissionRequest::PermissionGranted(bool is_one_time, ++ content_settings::LifetimeMode lifetime_option) { ++ if (permission_decided_callback_withlifetime_) { ++ std::move(permission_decided_callback_withlifetime_) ++ .Run(CONTENT_SETTING_ALLOW, is_one_time, lifetime_option); ++ return; ++ } + std::move(permission_decided_callback_) + .Run(CONTENT_SETTING_ALLOW, is_one_time); + } + +-void PermissionRequest::PermissionDenied() { ++void PermissionRequest::PermissionDenied(bool is_one_time, ++ content_settings::LifetimeMode lifetime_option) { ++ if (permission_decided_callback_withlifetime_) { ++ std::move(permission_decided_callback_withlifetime_) ++ .Run(CONTENT_SETTING_BLOCK, is_one_time, lifetime_option); ++ return; ++ } + std::move(permission_decided_callback_) + .Run(CONTENT_SETTING_BLOCK, /*is_one_time=*/false); + } + + void PermissionRequest::Cancelled() { ++ if (permission_decided_callback_withlifetime_) { ++ std::move(permission_decided_callback_withlifetime_) ++ .Run(CONTENT_SETTING_DEFAULT, false, ++ content_settings::LifetimeMode::Always); ++ return; ++ } + std::move(permission_decided_callback_) + .Run(CONTENT_SETTING_DEFAULT, /*is_one_time=*/false); + } +diff --git a/components/permissions/permission_request.h b/components/permissions/permission_request.h +--- a/components/permissions/permission_request.h ++++ b/components/permissions/permission_request.h +@@ -39,6 +39,10 @@ class PermissionRequest { + using PermissionDecidedCallback = + base::OnceCallback; + ++ using PermissionDecidedCallbackWithLifetime = ++ base::OnceCallback; ++ + // `permission_decided_callback` is called when the permission request is + // resolved by the user (see comment on PermissionDecidedCallback above). + // `delete_callback` is called when the permission request is no longer needed +@@ -54,6 +58,12 @@ class PermissionRequest { + PermissionDecidedCallback permission_decided_callback, + base::OnceClosure delete_callback); + ++ PermissionRequest(const GURL& requesting_origin, ++ RequestType request_type, ++ bool has_gesture, ++ PermissionDecidedCallbackWithLifetime permission_decided_callback, ++ base::OnceClosure delete_callback); ++ + PermissionRequest(const PermissionRequest&) = delete; + PermissionRequest& operator=(const PermissionRequest&) = delete; + +@@ -106,10 +116,10 @@ class PermissionRequest { + // If |is_one_time| is true the permission will last until all tabs of + // |origin| are closed or navigated away from, and then the permission will + // automatically expire after 1 day. +- void PermissionGranted(bool is_one_time); ++ void PermissionGranted(bool is_one_time, content_settings::LifetimeMode lifetime_option); + + // Called when the user has denied the requested permission. +- void PermissionDenied(); ++ void PermissionDenied(bool is_one_time, content_settings::LifetimeMode lifetime_option); + + // Called when the user has cancelled the permission request. This + // corresponds to a denial, but is segregated in case the context needs to +@@ -147,6 +157,9 @@ class PermissionRequest { + // Called once a decision is made about the permission. + PermissionDecidedCallback permission_decided_callback_; + ++ // Called once a decision is made about the permission (with lifetime option). ++ PermissionDecidedCallbackWithLifetime permission_decided_callback_withlifetime_; ++ + // Called when the request is no longer in use so it can be deleted by the + // caller. + base::OnceClosure delete_callback_; +diff --git a/components/permissions/permission_request_manager.cc b/components/permissions/permission_request_manager.cc +--- a/components/permissions/permission_request_manager.cc ++++ b/components/permissions/permission_request_manager.cc +@@ -148,7 +148,7 @@ void PermissionRequestManager::AddRequest( + + if (base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDenyPermissionPrompts)) { +- request->PermissionDenied(); ++ request->PermissionDenied(/*is_one_time*/false, content_settings::LifetimeMode::Always); + request->RequestFinished(); + return; + } +@@ -224,7 +224,7 @@ void PermissionRequestManager::AddRequest( + if (auto_approval_origin) { + if (url::Origin::Create(request->requesting_origin()) == + auto_approval_origin.value()) { +- request->PermissionGranted(/*is_one_time=*/false); ++ request->PermissionGranted(/*is_one_time=*/false, content_settings::LifetimeMode::Always); + } + request->RequestFinished(); + return; +@@ -541,14 +541,15 @@ void PermissionRequestManager::Accept() { + (*requests_iter)->request_type(), + PermissionAction::GRANTED); + PermissionGrantedIncludingDuplicates(*requests_iter, +- /*is_one_time=*/false); ++ /*is_one_time=*/false, ++ content_settings::LifetimeMode::Always); + } + + NotifyRequestDecided(PermissionAction::GRANTED); + FinalizeCurrentRequests(PermissionAction::GRANTED); + } + +-void PermissionRequestManager::AcceptThisTime() { ++void PermissionRequestManager::AcceptThisTime(content_settings::LifetimeMode mode) { + if (ignore_callbacks_from_prompt_) + return; + DCHECK(view_); +@@ -559,7 +560,8 @@ void PermissionRequestManager::AcceptThisTime() { + (*requests_iter)->request_type(), + PermissionAction::GRANTED_ONCE); + PermissionGrantedIncludingDuplicates(*requests_iter, +- /*is_one_time=*/true); ++ /*is_one_time=*/true, ++ mode); + } + + NotifyRequestDecided(PermissionAction::GRANTED_ONCE); +@@ -567,6 +569,15 @@ void PermissionRequestManager::AcceptThisTime() { + } + + void PermissionRequestManager::Deny() { ++ Deny_(/*is_one_time*/ false, content_settings::LifetimeMode::Always); ++} ++ ++void PermissionRequestManager::DenyThisTime(content_settings::LifetimeMode mode) { ++ Deny_(/*is_one_time*/ true, mode); ++} ++ ++void PermissionRequestManager::Deny_(bool is_one_time, ++ content_settings::LifetimeMode lifetime_option) { + if (ignore_callbacks_from_prompt_) + return; + DCHECK(view_); +@@ -589,7 +600,7 @@ void PermissionRequestManager::Deny() { + StorePermissionActionForUMA((*requests_iter)->requesting_origin(), + (*requests_iter)->request_type(), + PermissionAction::DENIED); +- PermissionDeniedIncludingDuplicates(*requests_iter); ++ PermissionDeniedIncludingDuplicates(*requests_iter, is_one_time, lifetime_option); + } + + NotifyRequestDecided(PermissionAction::DENIED); +@@ -967,25 +978,25 @@ PermissionRequest* PermissionRequestManager::GetExistingRequest( + + void PermissionRequestManager::PermissionGrantedIncludingDuplicates( + PermissionRequest* request, +- bool is_one_time) { ++ bool is_one_time, content_settings::LifetimeMode lifetime_option) { + DCHECK_EQ(1ul, base::STLCount(requests_, request) + + pending_permission_requests_.Count(request)) + << "Only requests in [pending_permission_]requests_ can have duplicates"; +- request->PermissionGranted(is_one_time); ++ request->PermissionGranted(is_one_time, lifetime_option); + auto range = duplicate_requests_.equal_range(request); + for (auto it = range.first; it != range.second; ++it) +- it->second->PermissionGranted(is_one_time); ++ it->second->PermissionGranted(is_one_time, lifetime_option); + } + + void PermissionRequestManager::PermissionDeniedIncludingDuplicates( +- PermissionRequest* request) { ++ PermissionRequest* request, bool is_one_time, content_settings::LifetimeMode lifetime_option) { + DCHECK_EQ(1ul, base::STLCount(requests_, request) + + pending_permission_requests_.Count(request)) + << "Only requests in [pending_permission_]requests_ can have duplicates"; +- request->PermissionDenied(); ++ request->PermissionDenied(is_one_time, lifetime_option); + auto range = duplicate_requests_.equal_range(request); + for (auto it = range.first; it != range.second; ++it) +- it->second->PermissionDenied(); ++ it->second->PermissionDenied(is_one_time, lifetime_option); + } + + void PermissionRequestManager::CancelledIncludingDuplicates( +@@ -1187,7 +1198,7 @@ void PermissionRequestManager::LogWarningToConsole(const char* message) { + void PermissionRequestManager::DoAutoResponseForTesting() { + switch (auto_response_for_test_) { + case ACCEPT_ONCE: +- AcceptThisTime(); ++ AcceptThisTime(content_settings::LifetimeMode::Always); + break; + case ACCEPT_ALL: + Accept(); +diff --git a/components/permissions/permission_request_manager.h b/components/permissions/permission_request_manager.h +--- a/components/permissions/permission_request_manager.h ++++ b/components/permissions/permission_request_manager.h +@@ -141,8 +141,10 @@ class PermissionRequestManager + GURL GetRequestingOrigin() const override; + GURL GetEmbeddingOrigin() const override; + void Accept() override; +- void AcceptThisTime() override; ++ void AcceptThisTime(content_settings::LifetimeMode lifetime_option) override; + void Deny() override; ++ void Deny_(bool is_one_time, content_settings::LifetimeMode lifetime_option); ++ void DenyThisTime(content_settings::LifetimeMode lifetime_option) override; + void Dismiss() override; + void Ignore() override; + bool WasCurrentRequestAlreadyDisplayed() override; +@@ -303,9 +305,12 @@ class PermissionRequestManager + + // Calls PermissionGranted on a request and all its duplicates. + void PermissionGrantedIncludingDuplicates(PermissionRequest* request, +- bool is_one_time); ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option); + // Calls PermissionDenied on a request and all its duplicates. +- void PermissionDeniedIncludingDuplicates(PermissionRequest* request); ++ void PermissionDeniedIncludingDuplicates(PermissionRequest* request, ++ bool is_one_time, ++ content_settings::LifetimeMode lifetime_option); + // Calls Cancelled on a request and all its duplicates. + void CancelledIncludingDuplicates(PermissionRequest* request); + // Calls RequestFinished on a request and all its duplicates. +-- +2.25.1 diff --git a/bromite/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/bromite/build/patches/Add-menu-item-to-bookmark-all-tabs.patch new file mode 100644 index 00000000..6660250a --- /dev/null +++ b/bromite/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -0,0 +1,699 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Thu, 18 Feb 2021 21:22:52 +0100 +Subject: Add menu item to bookmark all tabs + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/android/java/res/menu/main_menu.xml | 7 +++ + .../chrome/browser/ChromeTabbedActivity.java | 24 ++++++++ + .../browser/bookmarks/BookmarkBridge.java | 61 +++++++++++++++++++ + .../browser/bookmarks/BookmarkUtils.java | 4 ++ + .../bookmarks/android/bookmark_bridge.cc | 17 ++++++ + .../bookmarks/android/bookmark_bridge.h | 4 ++ + .../browser/bookmarks/bookmark_html_writer.cc | 8 ++- + .../bookmarks/chrome_bookmark_client.cc | 2 + + .../dialogs/DownloadLocationCustomView.java | 4 +- + .../strings/android_chrome_strings.grd | 3 + + components/bookmark_bar_strings.grdp | 6 ++ + .../bookmarks/browser/bookmark_codec.cc | 24 ++++++-- + components/bookmarks/browser/bookmark_codec.h | 7 ++- + .../browser/bookmark_load_details.cc | 4 ++ + .../bookmarks/browser/bookmark_load_details.h | 2 + + .../bookmarks/browser/bookmark_model.cc | 3 +- + components/bookmarks/browser/bookmark_model.h | 7 +++ + components/bookmarks/browser/bookmark_node.cc | 15 +++++ + components/bookmarks/browser/bookmark_node.h | 5 ++ + components/bookmarks/browser/model_loader.cc | 3 +- + .../bookmark_specifics_conversions.cc | 1 + + 21 files changed, 201 insertions(+), 10 deletions(-) + +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 +@@ -66,6 +66,10 @@ found in the LICENSE file. + ++ + +@@ -184,6 +188,9 @@ found in the LICENSE file. + ++ + +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 +@@ -77,6 +77,7 @@ import org.chromium.chrome.browser.back_press.MinimizeAppAndCloseTabBackPressHan + import org.chromium.chrome.browser.bookmarks.BookmarkUtils; + import org.chromium.chrome.browser.browserservices.intents.WebappConstants; + import org.chromium.chrome.browser.compositor.CompositorViewHolder; ++import org.chromium.chrome.browser.bookmarks.BookmarkModel; + import org.chromium.chrome.browser.compositor.layouts.Layout; + import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome; + import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChromePhone; +@@ -2203,6 +2204,8 @@ public class ChromeTabbedActivity extends ChromeActivity getTabModelSelector().closeAllTabs(), /*isIncognito=*/false); + RecordUserAction.record("MobileMenuCloseAllTabs"); ++ } else if (id == R.id.bookmark_all_tabs_menu_id) { ++ bookmarkAllTabs(); + } else if (id == R.id.close_all_incognito_tabs_menu_id) { + // Close only incognito tabs + CloseAllTabsDialog.show(this, getModalDialogManagerSupplier(), +@@ -2255,6 +2258,27 @@ public class ChromeTabbedActivity extends ChromeActivity { ++ for (int i = 0; i < tabModel.getCount(); i++) { ++ Tab tab = tabModel.getTabAt(i); ++ if (tab.isNativePage()) { ++ continue; ++ } ++ bookmarkModel.addToTabsCollection(this, tab); ++ } ++ bookmarkModel.finishedAddingToTabsCollection(this, getSnackbarManager()); ++ }); ++ } ++ + private void recordLauncherShortcutAction(boolean isIncognito) { + if (isIncognito) { + RecordUserAction.record("Android.LauncherShortcut.NewIncognitoTab"); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +@@ -29,6 +29,7 @@ import com.google.common.primitives.UnsignedLongs; + import com.google.protobuf.InvalidProtocolBufferException; + + import org.chromium.base.ContextUtils; ++import org.chromium.base.Log; + import org.chromium.base.ObserverList; + import org.chromium.base.ThreadUtils; + import org.chromium.base.annotations.CalledByNative; +@@ -40,6 +41,10 @@ import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim; + import org.chromium.chrome.browser.profiles.Profile; + import org.chromium.chrome.browser.read_later.ReadingListUtils; + import org.chromium.chrome.browser.tab.Tab; ++import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar; ++import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager; ++import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController; ++import org.chromium.chrome.R; + import org.chromium.components.bookmarks.BookmarkId; + import org.chromium.components.bookmarks.BookmarkItem; + import org.chromium.components.bookmarks.BookmarkType; +@@ -86,6 +91,8 @@ import java.io.File; + * bookmark model stored in native. + */ + class BookmarkBridge { ++ private static final String TAG = "BookmarkBridge"; ++ + private final Profile mProfile; + private boolean mIsDestroyed; + private boolean mIsDoingExtensiveChanges; +@@ -393,6 +400,16 @@ class BookmarkBridge { + mNativeBookmarkBridge, BookmarkBridge.this); + } + ++ /** ++ * @return The BookmarkId for the Tabs collecction folder node ++ */ ++ public BookmarkId getTabsCollectionFolderId() { ++ ThreadUtils.assertOnUiThread(); ++ assert mIsNativeBookmarkModelLoaded; ++ return BookmarkBridgeJni.get().getTabsCollectionFolderId( ++ mNativeBookmarkBridge, BookmarkBridge.this); ++ } ++ + /** + * @return Id representing the special "other" folder from bookmark model. + */ +@@ -1030,6 +1047,49 @@ class BookmarkBridge { + mNativeBookmarkBridge, BookmarkBridge.this, title, url); + } + ++ // Used to bookmark all tabs in a specific folder, created if not existing ++ public BookmarkId addToTabsCollection(Context context, Tab tab) { ++ BookmarkId parent = getTabsCollectionFolderId(); ++ BookmarkId existingId = getUserBookmarkIdForTab(tab); ++ if (existingId != null && existingId.getId() != BookmarkId.INVALID_ID) { ++ BookmarkId existingBookmarkId = new BookmarkId(existingId.getId(), BookmarkType.NORMAL); ++ BookmarkItem existingBookmark = getBookmarkById(existingBookmarkId); ++ if (parent.equals(existingBookmark.getParentId())) { ++ // bookmark already exists in the tabs collection folder ++ return existingBookmarkId; ++ } ++ } ++ BookmarkId bookmarkId = ++ addBookmark(parent, getChildCount(parent), tab.getTitle(), tab.getUrl()); ++ ++ if (bookmarkId == null) { ++ Log.e(TAG, ++ "Failed to add bookmarks: parentTypeAndId %s", parent); ++ } ++ return bookmarkId; ++ } ++ ++ public void finishedAddingToTabsCollection(Activity activity, SnackbarManager snackbarManager) { ++ BookmarkId parent = getTabsCollectionFolderId(); ++ ++ BookmarkItem bookmarkItem = getBookmarkById(parent); ++ String folderName; ++ if (bookmarkItem != null) { ++ folderName = bookmarkItem.getTitle(); ++ } else { ++ folderName = ""; ++ } ++ SnackbarController snackbarController = new SnackbarController() { ++ @Override ++ public void onAction(Object actionData) { ++ } ++ }; ++ Snackbar snackbar = Snackbar.make(folderName, snackbarController, Snackbar.TYPE_ACTION, ++ Snackbar.UMA_BOOKMARK_ADDED) ++ .setTemplateText(activity.getString(R.string.bookmark_page_saved_folder)); ++ snackbarManager.showSnackbar(snackbar); ++ } ++ + /** + * @param url The URL of the reading list item. + * @return The reading list item with the URL, or null if no such reading list item. +@@ -1327,6 +1387,7 @@ class BookmarkBridge { + void getAllFoldersWithDepths(long nativeBookmarkBridge, BookmarkBridge caller, + List folderList, List depthList); + BookmarkId getRootFolderId(long nativeBookmarkBridge, BookmarkBridge caller); ++ BookmarkId getTabsCollectionFolderId(long nativeBookmarkBridge, BookmarkBridge caller); + BookmarkId getMobileFolderId(long nativeBookmarkBridge, BookmarkBridge caller); + BookmarkId getOtherFolderId(long nativeBookmarkBridge, BookmarkBridge caller); + BookmarkId getDesktopFolderId(long nativeBookmarkBridge, BookmarkBridge caller); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUtils.java +@@ -648,6 +648,7 @@ public class BookmarkUtils { + List topLevelFolders = new ArrayList<>(); + BookmarkId desktopNodeId = bookmarkModel.getDesktopFolderId(); + BookmarkId mobileNodeId = bookmarkModel.getMobileFolderId(); ++ BookmarkId tabsCollectionNodeId = bookmarkModel.getTabsCollectionFolderId(); + BookmarkId othersNodeId = bookmarkModel.getOtherFolderId(); + + List specialFoldersIds = +@@ -673,6 +674,9 @@ public class BookmarkUtils { + if (bookmarkModel.isFolderVisible(mobileNodeId)) { + topLevelFolders.add(mobileNodeId); + } ++ if (bookmarkModel.isFolderVisible(tabsCollectionNodeId)) { ++ topLevelFolders.add(tabsCollectionNodeId); ++ } + if (bookmarkModel.isFolderVisible(desktopNodeId)) { + topLevelFolders.add(desktopNodeId); + } +diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.cc b/chrome/browser/bookmarks/android/bookmark_bridge.cc +--- a/chrome/browser/bookmarks/android/bookmark_bridge.cc ++++ b/chrome/browser/bookmarks/android/bookmark_bridge.cc +@@ -437,6 +437,11 @@ void BookmarkBridge::GetTopLevelFolderIDs( + top_level_folders.push_back(node.get()); + } + ++ for (const auto& node : bookmark_model_->tabs_collection_node()->children()) { ++ if (node->is_folder()) ++ top_level_folders.push_back(node.get()); ++ } ++ + for (const auto& node : bookmark_model_->bookmark_bar_node()->children()) { + if (node->is_folder()) + top_level_folders.push_back(node.get()); +@@ -484,6 +489,7 @@ void BookmarkBridge::GetAllFoldersWithDepths( + // Vector to temporarily contain all child bookmarks at same level for sorting + std::vector bookmarks = { + bookmark_model_->mobile_node(), ++ bookmark_model_->tabs_collection_node(), + bookmark_model_->bookmark_bar_node(), + bookmark_model_->other_node(), + }; +@@ -536,6 +542,17 @@ ScopedJavaLocalRef BookmarkBridge::GetMobileFolderId( + return folder_id_obj; + } + ++ScopedJavaLocalRef BookmarkBridge::GetTabsCollectionFolderId( ++ JNIEnv* env, ++ const JavaParamRef& obj) { ++ DCHECK_CURRENTLY_ON(BrowserThread::UI); ++ const BookmarkNode* tabs_collection_node = bookmark_model_->tabs_collection_node(); ++ ScopedJavaLocalRef folder_id_obj = ++ JavaBookmarkIdCreateBookmarkId( ++ env, tabs_collection_node->id(), GetBookmarkType(tabs_collection_node)); ++ return folder_id_obj; ++} ++ + ScopedJavaLocalRef BookmarkBridge::GetOtherFolderId( + JNIEnv* env, + const JavaParamRef& obj) { +diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser/bookmarks/android/bookmark_bridge.h +--- a/chrome/browser/bookmarks/android/bookmark_bridge.h ++++ b/chrome/browser/bookmarks/android/bookmark_bridge.h +@@ -121,6 +121,10 @@ class BookmarkBridge : public bookmarks::BaseBookmarkModelObserver, + JNIEnv* env, + const base::android::JavaParamRef& obj); + ++ base::android::ScopedJavaLocalRef GetTabsCollectionFolderId( ++ JNIEnv* env, ++ const base::android::JavaParamRef& obj); ++ + base::android::ScopedJavaLocalRef GetOtherFolderId( + JNIEnv* env, + const base::android::JavaParamRef& obj); +diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc +--- a/chrome/browser/bookmarks/bookmark_html_writer.cc ++++ b/chrome/browser/bookmarks/bookmark_html_writer.cc +@@ -190,6 +190,8 @@ class Writer : public base::RefCountedThreadSafe { + roots->FindDictKey(BookmarkCodec::kOtherBookmarkFolderNameKey); + base::Value* mobile_folder_value = + roots->FindDictKey(BookmarkCodec::kMobileBookmarkFolderNameKey); ++ base::Value* tabs_collection_value = ++ roots->FindDictKey(BookmarkCodec::kTabsBookmarkFolderNameKey); + DCHECK(root_folder_value); + DCHECK(other_folder_value); + DCHECK(mobile_folder_value); +@@ -201,7 +203,9 @@ class Writer : public base::RefCountedThreadSafe { + !WriteNode(*static_cast(other_folder_value), + BookmarkNode::OTHER_NODE) || + !WriteNode(*static_cast(mobile_folder_value), +- BookmarkNode::MOBILE)) { ++ BookmarkNode::MOBILE) || ++ !WriteNode(*static_cast(tabs_collection_value), ++ BookmarkNode::TABS_COLLECTION)) { + NotifyOnFinish(BookmarksExportObserver::Result::kCouldNotWriteNodes); + return; + } +@@ -466,6 +470,8 @@ void BookmarkFaviconFetcher::ExportBookmarks() { + BookmarkModelFactory::GetForBrowserContext(profile_)->other_node()); + ExtractUrls( + BookmarkModelFactory::GetForBrowserContext(profile_)->mobile_node()); ++ ExtractUrls( ++ BookmarkModelFactory::GetForBrowserContext(profile_)->tabs_collection_node()); + if (!bookmark_urls_.empty()) + FetchNextFavicon(); + else +diff --git a/chrome/browser/bookmarks/chrome_bookmark_client.cc b/chrome/browser/bookmarks/chrome_bookmark_client.cc +--- a/chrome/browser/bookmarks/chrome_bookmark_client.cc ++++ b/chrome/browser/bookmarks/chrome_bookmark_client.cc +@@ -144,6 +144,8 @@ bool ChromeBookmarkClient::IsPermanentNodeVisibleWhenEmpty( + return !is_mobile; + case bookmarks::BookmarkNode::MOBILE: + return is_mobile; ++ case bookmarks::BookmarkNode::TABS_COLLECTION: ++ return is_mobile; + } + + return false; +diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +--- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java ++++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java +@@ -79,7 +79,7 @@ public class DownloadLocationCustomView + mDirectoryAdapter.update(); + } + +- void setTitle(CharSequence title) { ++ public void setTitle(CharSequence title) { + mTitle.setText(title); + } + +@@ -87,7 +87,7 @@ public class DownloadLocationCustomView + mSubtitleView.setText(subtitle); + } + +- void setFileName(CharSequence fileName) { ++ public void setFileName(CharSequence fileName) { + mFileName.setText(fileName); + } + +diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd +--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd ++++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd +@@ -3606,6 +3606,9 @@ To change this setting, <resetlink>reset sync

+ Track prices + ++ ++ Bookmark all tabs ++ + + Get image descriptions + +diff --git a/components/bookmark_bar_strings.grdp b/components/bookmark_bar_strings.grdp +--- a/components/bookmark_bar_strings.grdp ++++ b/components/bookmark_bar_strings.grdp +@@ -20,6 +20,9 @@ + + Mobile bookmarks + ++ ++ Tabs collection ++ + + Other bookmarks + +@@ -34,6 +37,9 @@ + + Mobile Bookmarks + ++ ++ Tabs Collection ++ + + Other Bookmarks + +diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmarks/browser/bookmark_codec.cc +--- a/components/bookmarks/browser/bookmark_codec.cc ++++ b/components/bookmarks/browser/bookmark_codec.cc +@@ -35,6 +35,7 @@ const char BookmarkCodec::kBookmarkBarFolderNameKey[] = "bookmark_bar"; + const char BookmarkCodec::kOtherBookmarkFolderNameKey[] = "other"; + // The value is left as 'synced' for historical reasons. + const char BookmarkCodec::kMobileBookmarkFolderNameKey[] = "synced"; ++const char BookmarkCodec::kTabsBookmarkFolderNameKey[] = "tabs"; + const char BookmarkCodec::kVersionKey[] = "version"; + const char BookmarkCodec::kChecksumKey[] = "checksum"; + const char BookmarkCodec::kIdKey[] = "id"; +@@ -78,7 +79,8 @@ BookmarkCodec::~BookmarkCodec() = default; + base::Value BookmarkCodec::Encode(BookmarkModel* model, + std::string sync_metadata_str) { + return Encode(model->bookmark_bar_node(), model->other_node(), +- model->mobile_node(), model->root_node()->GetMetaInfoMap(), ++ model->mobile_node(), model->tabs_collection_node(), ++ model->root_node()->GetMetaInfoMap(), + model->root_node()->GetUnsyncedMetaInfoMap(), + std::move(sync_metadata_str)); + } +@@ -87,6 +89,7 @@ base::Value BookmarkCodec::Encode( + const BookmarkNode* bookmark_bar_node, + const BookmarkNode* other_folder_node, + const BookmarkNode* mobile_folder_node, ++ const BookmarkNode* tabs_folder_node, + const BookmarkNode::MetaInfoMap* model_meta_info_map, + const BookmarkNode::MetaInfoMap* model_unsynced_meta_info_map, + std::string sync_metadata_str) { +@@ -109,6 +112,7 @@ base::Value BookmarkCodec::Encode( + roots.SetKey(kBookmarkBarFolderNameKey, EncodeNode(bookmark_bar_node)); + roots.SetKey(kOtherBookmarkFolderNameKey, EncodeNode(other_folder_node)); + roots.SetKey(kMobileBookmarkFolderNameKey, EncodeNode(mobile_folder_node)); ++ roots.SetKey(kTabsBookmarkFolderNameKey, EncodeNode(tabs_folder_node)); + if (model_meta_info_map) + roots.SetKey(kMetaInfo, EncodeMetaInfo(*model_meta_info_map)); + if (model_unsynced_meta_info_map) { +@@ -130,6 +134,7 @@ bool BookmarkCodec::Decode(const base::Value& value, + BookmarkNode* bb_node, + BookmarkNode* other_folder_node, + BookmarkNode* mobile_folder_node, ++ BookmarkNode* tabs_folder_node, + int64_t* max_id, + std::string* sync_metadata_str) { + ids_.clear(); +@@ -137,7 +142,8 @@ bool BookmarkCodec::Decode(const base::Value& value, + base::GUID::ParseLowercase(BookmarkNode::kBookmarkBarNodeGuid), + base::GUID::ParseLowercase(BookmarkNode::kOtherBookmarksNodeGuid), + base::GUID::ParseLowercase(BookmarkNode::kMobileBookmarksNodeGuid), +- base::GUID::ParseLowercase(BookmarkNode::kManagedNodeGuid)}; ++ base::GUID::ParseLowercase(BookmarkNode::kManagedNodeGuid), ++ base::GUID::ParseLowercase(BookmarkNode::kTabsCollectionBookmarksNodeGuid)}; + ids_reassigned_ = false; + guids_reassigned_ = false; + ids_valid_ = true; +@@ -145,12 +151,13 @@ bool BookmarkCodec::Decode(const base::Value& value, + stored_checksum_.clear(); + InitializeChecksum(); + bool success = DecodeHelper(bb_node, other_folder_node, mobile_folder_node, ++ tabs_folder_node, + value, sync_metadata_str); + FinalizeChecksum(); + // If either the checksums differ or some IDs were missing/not unique, + // reassign IDs. + if (!ids_valid_ || computed_checksum() != stored_checksum()) +- ReassignIDs(bb_node, other_folder_node, mobile_folder_node); ++ ReassignIDs(bb_node, other_folder_node, mobile_folder_node, tabs_folder_node); + *max_id = maximum_id_ + 1; + return success; + } +@@ -207,6 +214,7 @@ base::Value BookmarkCodec::EncodeMetaInfo( + bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, + BookmarkNode* other_folder_node, + BookmarkNode* mobile_folder_node, ++ BookmarkNode* tabs_folder_node, + const base::Value& value, + std::string* sync_metadata_str) { + if (!value.is_dict()) +@@ -238,6 +246,12 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, + return false; + + DecodeNode(*bb_value, nullptr, bb_node); ++ const base::DictionaryValue* tabs_folder_d_value = nullptr; ++ const base::Value* tabs_folder_value = ++ roots->FindDictKey(kTabsBookmarkFolderNameKey); ++ if (tabs_folder_value && tabs_folder_value->GetAsDictionary(&tabs_folder_d_value)) ++ DecodeNode(*tabs_folder_d_value, nullptr, tabs_folder_node); ++ + DecodeNode(*other_folder_value, nullptr, other_folder_node); + DecodeNode(*mobile_folder_value, nullptr, mobile_folder_node); + +@@ -508,11 +522,13 @@ void BookmarkCodec::DecodeMetaInfoHelper( + + void BookmarkCodec::ReassignIDs(BookmarkNode* bb_node, + BookmarkNode* other_node, +- BookmarkNode* mobile_node) { ++ BookmarkNode* mobile_node, ++ BookmarkNode* tabs_folder_node) { + maximum_id_ = 0; + ReassignIDsHelper(bb_node); + ReassignIDsHelper(other_node); + ReassignIDsHelper(mobile_node); ++ ReassignIDsHelper(tabs_folder_node); + ids_reassigned_ = true; + } + +diff --git a/components/bookmarks/browser/bookmark_codec.h b/components/bookmarks/browser/bookmark_codec.h +--- a/components/bookmarks/browser/bookmark_codec.h ++++ b/components/bookmarks/browser/bookmark_codec.h +@@ -49,6 +49,7 @@ class BookmarkCodec { + const BookmarkNode* bookmark_bar_node, + const BookmarkNode* other_folder_node, + const BookmarkNode* mobile_folder_node, ++ const BookmarkNode* tabs_folder_node, + const BookmarkNode::MetaInfoMap* model_meta_info_map, + const BookmarkNode::MetaInfoMap* model_unsynced_meta_info_map, + std::string sync_metadata_str); +@@ -62,6 +63,7 @@ class BookmarkCodec { + BookmarkNode* bb_node, + BookmarkNode* other_folder_node, + BookmarkNode* mobile_folder_node, ++ BookmarkNode* tabs_folder_node, + int64_t* max_node_id, + std::string* sync_metadata_str); + +@@ -113,6 +115,7 @@ class BookmarkCodec { + // Allows the BookmarkClient to read and a write a string blob from the JSON + // file. That string captures the bookmarks sync metadata. + static const char kSyncMetadata[]; ++ static const char kTabsBookmarkFolderNameKey[]; + static const char kDateLastUsed[]; + + // Possible values for kTypeKey. +@@ -130,6 +133,7 @@ class BookmarkCodec { + bool DecodeHelper(BookmarkNode* bb_node, + BookmarkNode* other_folder_node, + BookmarkNode* mobile_folder_node, ++ BookmarkNode* tabs_folder_node, + const base::Value& value, + std::string* sync_metadata_str); + +@@ -141,7 +145,8 @@ class BookmarkCodec { + // Reassigns bookmark IDs for all nodes. + void ReassignIDs(BookmarkNode* bb_node, + BookmarkNode* other_node, +- BookmarkNode* mobile_node); ++ BookmarkNode* mobile_node, ++ BookmarkNode* tabs_folder_node); + + // Helper to recursively reassign IDs. + void ReassignIDsHelper(BookmarkNode* node); +diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/bookmarks/browser/bookmark_load_details.cc +--- a/components/bookmarks/browser/bookmark_load_details.cc ++++ b/components/bookmarks/browser/bookmark_load_details.cc +@@ -37,6 +37,10 @@ BookmarkLoadDetails::BookmarkLoadDetails(BookmarkClient* client) + root_node_->Add(BookmarkPermanentNode::CreateMobileBookmarks( + max_id_++, + client->IsPermanentNodeVisibleWhenEmpty(BookmarkNode::MOBILE)))); ++ tabs_collection_folder_node_ = static_cast( ++ root_node_->Add(BookmarkPermanentNode::CreateTabsCollectionBookmarks( ++ max_id_++, ++ client->IsPermanentNodeVisibleWhenEmpty(BookmarkNode::TABS_COLLECTION)))); + } + + BookmarkLoadDetails::~BookmarkLoadDetails() = default; +diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/bookmarks/browser/bookmark_load_details.h +--- a/components/bookmarks/browser/bookmark_load_details.h ++++ b/components/bookmarks/browser/bookmark_load_details.h +@@ -47,6 +47,7 @@ class BookmarkLoadDetails { + BookmarkPermanentNode* bb_node() { return bb_node_; } + BookmarkPermanentNode* mobile_folder_node() { return mobile_folder_node_; } + BookmarkPermanentNode* other_folder_node() { return other_folder_node_; } ++ BookmarkPermanentNode* tabs_collection_folder_node() { return tabs_collection_folder_node_; } + + TitledUrlIndex* index() { return index_.get(); } + std::unique_ptr owned_index() { return std::move(index_); } +@@ -110,6 +111,7 @@ class BookmarkLoadDetails { + raw_ptr bb_node_ = nullptr; + raw_ptr other_folder_node_ = nullptr; + raw_ptr mobile_folder_node_ = nullptr; ++ BookmarkPermanentNode* tabs_collection_folder_node_ = nullptr; + LoadManagedNodeCallback load_managed_node_callback_; + std::unique_ptr index_; + BookmarkNode::MetaInfoMap model_meta_info_map_; +diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc +--- a/components/bookmarks/browser/bookmark_model.cc ++++ b/components/bookmarks/browser/bookmark_model.cc +@@ -670,7 +670,7 @@ bool BookmarkModel::HasBookmarks() { + bool BookmarkModel::HasNoUserCreatedBookmarksOrFolders() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return bookmark_bar_node_->children().empty() && +- other_node_->children().empty() && mobile_node_->children().empty(); ++ other_node_->children().empty() && mobile_node_->children().empty() && tabs_collection_node_->children().empty(); + } + + bool BookmarkModel::IsBookmarked(const GURL& url) { +@@ -926,6 +926,7 @@ void BookmarkModel::DoneLoading(std::unique_ptr details) { + bookmark_bar_node_ = details->bb_node(); + other_node_ = details->other_folder_node(); + mobile_node_ = details->mobile_folder_node(); ++ tabs_collection_node_ = details->tabs_collection_folder_node(); + + titled_url_index_->SetNodeSorter( + std::make_unique(client_.get())); +diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h +--- a/components/bookmarks/browser/bookmark_model.h ++++ b/components/bookmarks/browser/bookmark_model.h +@@ -122,6 +122,12 @@ class BookmarkModel : public BookmarkUndoProvider, + return mobile_node_; + } + ++ // Returns the 'mobile' node. This is NULL until loaded. ++ const BookmarkNode* tabs_collection_node() const { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ return tabs_collection_node_; ++ } ++ + bool is_root_node(const BookmarkNode* node) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return node == root_; +@@ -445,6 +451,7 @@ class BookmarkModel : public BookmarkUndoProvider, + raw_ptr bookmark_bar_node_ = nullptr; + raw_ptr other_node_ = nullptr; + raw_ptr mobile_node_ = nullptr; ++ raw_ptr tabs_collection_node_ = nullptr; + + // The maximum ID assigned to the bookmark nodes in the model. + int64_t next_node_id_ = 1; +diff --git a/components/bookmarks/browser/bookmark_node.cc b/components/bookmarks/browser/bookmark_node.cc +--- a/components/bookmarks/browser/bookmark_node.cc ++++ b/components/bookmarks/browser/bookmark_node.cc +@@ -60,6 +60,10 @@ const char BookmarkNode::kOtherBookmarksNodeGuid[] = + const char BookmarkNode::kMobileBookmarksNodeGuid[] = + "4cf2e351-0e85-532b-bb37-df045d8f8d0f"; + ++// static ++const char BookmarkNode::kTabsCollectionBookmarksNodeGuid[] = ++ "00000000-0000-4000-a000-000000000006"; ++ + // static + const char BookmarkNode::kManagedNodeGuid[] = + "323123f4-9381-5aee-80e6-ea5fca2f7672"; +@@ -275,6 +279,17 @@ BookmarkPermanentNode::CreateMobileBookmarks(int64_t id, + visible_when_empty)); + } + ++// static ++std::unique_ptr ++BookmarkPermanentNode::CreateTabsCollectionBookmarks(int64_t id, ++ bool visible_when_empty) { ++ // base::WrapUnique() used because the constructor is private. ++ return base::WrapUnique(new BookmarkPermanentNode( ++ id, TABS_COLLECTION, base::GUID::ParseLowercase(kTabsCollectionBookmarksNodeGuid), ++ l10n_util::GetStringUTF16(IDS_BOOKMARK_BAR_TABS_COLLECTION_FOLDER_NAME), ++ visible_when_empty)); ++} ++ + BookmarkPermanentNode::BookmarkPermanentNode(int64_t id, + Type type, + const base::GUID& guid, +diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks/browser/bookmark_node.h +--- a/components/bookmarks/browser/bookmark_node.h ++++ b/components/bookmarks/browser/bookmark_node.h +@@ -35,6 +35,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { + FOLDER, + BOOKMARK_BAR, + OTHER_NODE, ++ TABS_COLLECTION, + MOBILE + }; + +@@ -52,6 +53,7 @@ class BookmarkNode : public ui::TreeNode, public TitledUrlNode { + static const char kBookmarkBarNodeGuid[]; + static const char kOtherBookmarksNodeGuid[]; + static const char kMobileBookmarksNodeGuid[]; ++ static const char kTabsCollectionBookmarksNodeGuid[]; + static const char kManagedNodeGuid[]; + + // A bug in sync caused some problematic GUIDs to be produced. +@@ -270,6 +272,9 @@ class BookmarkPermanentNode : public BookmarkNode { + static std::unique_ptr CreateMobileBookmarks( + int64_t id, + bool visible_when_empty); ++ static std::unique_ptr CreateTabsCollectionBookmarks( ++ int64_t id, ++ bool visible_when_empty); + + // Constructor is private to disallow the construction of permanent nodes + // other than the well-known ones, see factory methods. +diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks/browser/model_loader.cc +--- a/components/bookmarks/browser/model_loader.cc ++++ b/components/bookmarks/browser/model_loader.cc +@@ -58,7 +58,8 @@ void LoadBookmarks(const base::FilePath& path, + std::string sync_metadata_str; + BookmarkCodec codec; + codec.Decode(*root, details->bb_node(), details->other_folder_node(), +- details->mobile_folder_node(), &max_node_id, ++ details->mobile_folder_node(), ++ details->tabs_collection_folder_node(), &max_node_id, + &sync_metadata_str); + details->set_sync_metadata_str(std::move(sync_metadata_str)); + details->set_max_id(std::max(max_node_id, details->max_id())); +diff --git a/components/sync_bookmarks/bookmark_specifics_conversions.cc b/components/sync_bookmarks/bookmark_specifics_conversions.cc +--- a/components/sync_bookmarks/bookmark_specifics_conversions.cc ++++ b/components/sync_bookmarks/bookmark_specifics_conversions.cc +@@ -446,6 +446,7 @@ sync_pb::BookmarkSpecifics::Type GetProtoTypeFromBookmarkNode( + case bookmarks::BookmarkNode::BOOKMARK_BAR: + case bookmarks::BookmarkNode::OTHER_NODE: + case bookmarks::BookmarkNode::MOBILE: ++ case bookmarks::BookmarkNode::TABS_COLLECTION: + DCHECK(node->is_folder()); + return sync_pb::BookmarkSpecifics::FOLDER; + } +-- +2.25.1 diff --git a/bromite/build/patches/Add-menu-item-to-view-source.patch b/bromite/build/patches/Add-menu-item-to-view-source.patch new file mode 100644 index 00000000..e9acf4b9 --- /dev/null +++ b/bromite/build/patches/Add-menu-item-to-view-source.patch @@ -0,0 +1,130 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Mon, 13 Jul 2020 00:37:06 +0200 +Subject: Add menu item to view source + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../android/java/res/menu/custom_tabs_menu.xml | 3 +++ + chrome/android/java/res/menu/main_menu.xml | 3 +++ + .../chrome/browser/ChromeTabbedActivity.java | 2 ++ + .../chrome/browser/app/ChromeActivity.java | 5 +++++ + .../appmenu/AppMenuPropertiesDelegateImpl.java | 18 ++++++++++++++++++ + .../CustomTabAppMenuPropertiesDelegate.java | 1 + + .../android/strings/android_chrome_strings.grd | 4 ++++ + 7 files changed, 36 insertions(+) + +diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml +--- a/chrome/android/java/res/menu/custom_tabs_menu.xml ++++ b/chrome/android/java/res/menu/custom_tabs_menu.xml +@@ -51,6 +51,9 @@ found in the LICENSE file. + ++ + +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 +@@ -108,6 +108,9 @@ found in the LICENSE file. + ++ + +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 +@@ -2229,6 +2229,8 @@ public class ChromeTabbedActivity extends ChromeActivity + return true; + } + ++ if (id == R.id.view_source_id) { ++ currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrl().getSpec())); ++ return true; ++ } ++ + if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) { + boolean usingDesktopUserAgent = + currentTab.getWebContents().getNavigationController().getUseDesktopUserAgent(); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +@@ -543,6 +543,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + isChromeScheme, isFileScheme, isContentScheme, isIncognito, url)); + + updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */, isChromeScheme); ++ updateViewSourceMenuItem(menu, currentTab); + + updateAutoDarkMenuItem(menu, currentTab, isChromeScheme); + +@@ -1242,6 +1243,23 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + stopPriceTrackingMenuItem.setVisible(false); + } + ++ /** ++ * Updates the view source menu item's state. ++ * ++ * @param menu {@link Menu} for view source. ++ * @param currentTab Current tab being displayed. ++ */ ++ protected void updateViewSourceMenuItem( ++ Menu menu, Tab currentTab) { ++ MenuItem viewSourceMenuItem = menu.findItem(R.id.view_source_id); ++ boolean visible = false; ++ if (currentTab != null) { ++ String url = currentTab.getUrl().getSpec(); ++ visible = !url.isEmpty() && !url.startsWith("view-source:"); ++ } ++ viewSourceMenuItem.setVisible(visible); ++ } ++ + /** + * Updates the request desktop site item's state. + * +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +@@ -228,6 +228,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat + + updateRequestDesktopSiteMenuItem( + menu, currentTab, requestDesktopSiteVisible, isChromeScheme); ++ updateViewSourceMenuItem(menu, currentTab); + prepareAddToHomescreenMenuItem(menu, currentTab, addToHomeScreenVisible); + } + } +diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd +--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd ++++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd +@@ -312,6 +312,10 @@ CHAR_LIMIT guidelines: + USB + + ++ ++ View source ++ ++ + + + You and Google +-- +2.25.1 diff --git a/bromite/build/patches/Add-option-to-force-tablet-UI.patch b/bromite/build/patches/Add-option-to-force-tablet-UI.patch new file mode 100644 index 00000000..2e86a4a6 --- /dev/null +++ b/bromite/build/patches/Add-option-to-force-tablet-UI.patch @@ -0,0 +1,252 @@ +From: Wengling Chen +Date: Mon, 1 Feb 2021 19:18:55 +0200 +Subject: Add option to force tablet UI + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++++++++ + .../preferences/ChromePreferenceKeys.java | 1 + + .../LegacyChromePreferenceKeys.java | 1 + + .../omnibox/LocationBarCoordinator.java | 2 +- + .../strings/android_chrome_strings.grd | 6 ++++++ + .../toolbar/top/ToolbarControlContainer.java | 16 ---------------- + components/BUILD.gn | 6 +++--- + .../res/xml/accessibility_preferences.xml | 5 +++++ + .../accessibility/AccessibilitySettings.java | 10 ++++++++++ + .../AccessibilitySettingsDelegate.java | 2 ++ + ui/android/BUILD.gn | 2 ++ + .../chromium/ui/base/DeviceFormFactor.java | 5 +++++ + 12 files changed, 55 insertions(+), 20 deletions(-) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java +@@ -68,6 +68,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting + return new ReaderForAccessibilityDelegate(); + } + ++ private static class ForceTabletUIDelegate implements BooleanPreferenceDelegate { ++ @Override ++ public boolean isEnabled() { ++ return SharedPreferencesManager.getInstance().readBoolean( ++ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false); ++ } ++ ++ @Override ++ public void setEnabled(boolean value) { ++ SharedPreferencesManager.getInstance().writeBoolean( ++ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, value); ++ } ++ } ++ ++ @Override ++ public BooleanPreferenceDelegate getForceTabletUIDelegate() { ++ return new ForceTabletUIDelegate(); ++ } ++ + @Override + public void addExtraPreferences(PreferenceFragmentCompat fragment) { + if (ImageDescriptionsController.getInstance().shouldShowImageDescriptionsMenuItem()) { +diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java ++++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +@@ -430,6 +430,7 @@ public final class ChromePreferenceKeys { + AccessibilityConstants.FONT_USER_SET_FORCE_ENABLE_ZOOM; + + public static final String HISTORY_SHOW_HISTORY_INFO = "history_home_show_info"; ++ public static final String FLAGS_FORCE_TABLET_UI_ENABLED = "force_tablet_ui_enabled"; + + /** Keys used to save settings related to homepage. */ + public static final String HOMEPAGE_CUSTOM_URI = "homepage_custom_uri"; +diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java ++++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +@@ -67,6 +67,7 @@ public class LegacyChromePreferenceKeys { + ChromePreferenceKeys.FLAGS_CACHED_SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT, + ChromePreferenceKeys.FLAGS_CACHED_TAB_GROUPS_ANDROID_ENABLED, + ChromePreferenceKeys.FONT_USER_FONT_SCALE_FACTOR, ++ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, + ChromePreferenceKeys.FONT_USER_SET_FORCE_ENABLE_ZOOM, + ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO, + ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, +diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java ++++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +@@ -376,7 +376,7 @@ public class LocationBarCoordinator implements LocationBar, NativeInitObserver, + // OmniboxSuggestionsDropdownEmbedder implementation + @Override + public boolean isTablet() { +- return DeviceFormFactor.isWindowOnTablet(mWindowAndroid); ++ return DeviceFormFactor.isWindowOnTablet(mWindowAndroid) || isTabletLayout(); + } + + @Override +diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd +--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd ++++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd +@@ -1439,6 +1439,12 @@ Your Google account may have other forms of browsing history like searches and a + + Temporarily links this data to your Google Account when you’re signed in, to protect you across Google apps + ++ ++ Open chromium in Tablet Mode ++ ++ ++ Force Tablet Mode ++ + + + +diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java ++++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +@@ -138,22 +138,6 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con + mToolbarContainer.setPostInitializationDependencies(mToolbar, constraintsSupplier, + tabSupplier, compositorInMotionSupplier, + browserStateBrowserControlsVisibilityDelegate, isVisible); +- +- View toolbarView = findViewById(R.id.toolbar); +- assert toolbarView != null; +- +- if (toolbarView instanceof ToolbarTablet) { +- // On tablet, draw a fake tab strip and toolbar until the compositor is +- // ready to draw the real tab strip. (On phone, the toolbar is made entirely +- // of Android views, which are already initialized.) +- final Drawable backgroundDrawable = +- AppCompatResources.getDrawable(getContext(), R.drawable.toolbar_background) +- .mutate(); +- backgroundDrawable.setTint( +- ChromeColors.getDefaultThemeColor(getContext(), isIncognito)); +- backgroundDrawable.setTintMode(PorterDuff.Mode.MULTIPLY); +- setBackground(backgroundDrawable); +- } + } + + @Override +diff --git a/components/BUILD.gn b/components/BUILD.gn +--- a/components/BUILD.gn ++++ b/components/BUILD.gn +@@ -45,7 +45,7 @@ if (is_ios) { + + # Omit Lacros because it allows //components to depend on //chrome, which in + # turn depends on //extensions. +-if (!is_chromeos_lacros) { ++if (!is_chromeos_lacros && !is_android) { + disallowed_extension_deps_ = [ + # Components should largely not depend on //extensions. Since // extensions + # is not a component target and is linked with //chrome, depending on most +@@ -671,7 +671,7 @@ test("components_unittests") { + # On other platforms, no components should depend on Chrome. + # Since //chrome depends on //extensions, we also only assert_no_deps on + # extensions targets for non-lacros builds. +- if (!is_chromeos_lacros) { ++ if (!is_chromeos_lacros && !is_android) { + assert_no_deps = [ "//chrome/*" ] + assert_no_deps += disallowed_extension_deps_ + } +@@ -950,7 +950,7 @@ if (!is_ios) { + # dependency. On other platforms, no components should depend on Chrome. + # Since //chrome depends on //extensions, we also only assert_no_deps on + # extensions targets for non-lacros builds. +- if (!is_chromeos_lacros) { ++ if (!is_chromeos_lacros && !is_android) { + assert_no_deps = [ "//chrome/*" ] + assert_no_deps += disallowed_extension_deps_ + } +diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +--- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml ++++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +@@ -36,6 +36,11 @@ found in the LICENSE file. + android:summary="@string/accessibility_tab_switcher_summary" + android:title="@string/accessibility_tab_switcher_title" /> + ++ ++ + +diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java ++++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +@@ -30,6 +30,8 @@ public class AccessibilitySettings + public static final String PREF_READER_FOR_ACCESSIBILITY = "reader_for_accessibility"; + public static final String PREF_CAPTIONS = "captions"; + ++ private BooleanPreferenceDelegate mForceTabletUIDelegate; ++ static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; + private TextScalePreference mTextScalePref; + private PageZoomPreference mPageZoomDefaultZoomPref; + private ChromeSwitchPreference mPageZoomAlwaysShowPref; +@@ -105,6 +107,12 @@ public class AccessibilitySettings + getPreferenceScreen().removePreference(readerForAccessibilityPref); + } + ++ ChromeBaseCheckBoxPreference forceTabletUiPref = ++ (ChromeBaseCheckBoxPreference) findPreference(PREF_FORCE_TABLET_UI); ++ mForceTabletUIDelegate = mDelegate.getForceTabletUIDelegate(); ++ forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled()); ++ forceTabletUiPref.setOnPreferenceChangeListener(this); ++ + ChromeBaseCheckBoxPreference accessibilityTabSwitcherPref = + (ChromeBaseCheckBoxPreference) findPreference( + AccessibilityConstants.ACCESSIBILITY_TAB_SWITCHER); +@@ -153,6 +161,8 @@ public class AccessibilitySettings + mFontSizePrefs.setUserFontScaleFactor((Float) newValue); + } else if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) { + mFontSizePrefs.setForceEnableZoomFromUser((Boolean) newValue); ++ } else if (PREF_FORCE_TABLET_UI.equals(preference.getKey())) { ++ mForceTabletUIDelegate.setEnabled((Boolean) newValue); + } else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) { + if (mReaderForAccessibilityDelegate != null) { + mReaderForAccessibilityDelegate.setEnabled((Boolean) newValue); +diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java ++++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java +@@ -44,6 +44,8 @@ public interface AccessibilitySettingsDelegate { + */ + BooleanPreferenceDelegate getReaderForAccessibilityDelegate(); + ++ BooleanPreferenceDelegate getForceTabletUIDelegate(); ++ + /** + * Allows the embedder to add more preferences to the preference screen. + * +diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn +--- a/ui/android/BUILD.gn ++++ b/ui/android/BUILD.gn +@@ -374,6 +374,8 @@ android_library("ui_no_recycler_view_java") { + deps = [ + ":ui_java_resources", + ":ui_utils_java", ++ # dependency for ui_no_recycler_view_java ++ "//chrome/browser/preferences:java", + "//base:base_java", + "//base:jni_java", + "//build/android:build_java", +diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java +--- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java ++++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java +@@ -12,6 +12,8 @@ import androidx.annotation.VisibleForTesting; + import org.chromium.base.ContextUtils; + import org.chromium.base.ThreadUtils; + import org.chromium.base.annotations.CalledByNative; ++import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; ++import org.chromium.chrome.browser.preferences.SharedPreferencesManager; + import org.chromium.ui.R; + import org.chromium.ui.display.DisplayAndroid; + import org.chromium.ui.display.DisplayUtil; +@@ -62,6 +64,9 @@ public class DeviceFormFactor { + * E.g. http://developer.samsung.com/samsung-dex/testing + */ + public static boolean isNonMultiDisplayContextOnTablet(Context context) { ++ if (SharedPreferencesManager.getInstance().readBoolean( ++ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)) ++ return true; + return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET; + } + +-- +2.25.1 diff --git a/bromite/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch b/bromite/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch new file mode 100644 index 00000000..29952c8d --- /dev/null +++ b/bromite/build/patches/Add-option-to-not-persist-tabs-across-sessions.patch @@ -0,0 +1,122 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sat, 7 Sep 2019 15:07:42 +0200 +Subject: Add option to not persist tabs across sessions + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../android/java/res/xml/privacy_preferences.xml | 5 +++++ + .../chrome/browser/ChromeTabbedActivity.java | 5 ++++- + .../privacy/settings/PrivacySettings.java | 16 +++++++++++++++- + .../android/strings/android_chrome_strings.grd | 6 ++++++ + 4 files changed, 30 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 ++++ b/chrome/android/java/res/xml/privacy_preferences.xml +@@ -45,6 +45,11 @@ found in the LICENSE file. + android:title="@string/incognito_settings_title" + android:summary="@string/incognito_settings_summary" + android:fragment="org.chromium.chrome.browser.privacy.settings.IncognitoSettings"/> ++ + <resetlink>reset sync

+ IMAGE + ++ ++ Close all open tabs on exit ++ ++ ++ Don't persist tabs between browsing sessions ++ + + LINK + +-- +2.25.1 diff --git a/bromite/build/patches/Add-option-to-use-home-page-as-NTP.patch b/bromite/build/patches/Add-option-to-use-home-page-as-NTP.patch new file mode 100644 index 00000000..76c8e8b4 --- /dev/null +++ b/bromite/build/patches/Add-option-to-use-home-page-as-NTP.patch @@ -0,0 +1,207 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sat, 20 Nov 2021 15:36:54 +0000 +Subject: Add option to use home page as NTP + +And allow use about:blank as default homepage + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../java/res/xml/homepage_preferences.xml | 5 +++++ + .../chrome/browser/homepage/HomepageManager.java | 16 ++++++++++++++++ + .../homepage/settings/HomepageSettings.java | 12 ++++++++++++ + .../chrome/browser/metrics/LaunchMetrics.java | 1 - + .../browser/tabmodel/ChromeTabCreator.java | 7 +++++++ + .../preferences/ChromePreferenceKeys.java | 1 + + .../preferences/LegacyChromePreferenceKeys.java | 1 + + .../android/strings/android_chrome_strings.grd | 3 +++ + chrome/browser/ui/browser_ui_prefs.cc | 2 ++ + chrome/common/pref_names.cc | 4 ++++ + chrome/common/pref_names.h | 1 + + 11 files changed, 52 insertions(+), 1 deletion(-) + +diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml +--- a/chrome/android/java/res/xml/homepage_preferences.xml ++++ b/chrome/android/java/res/xml/homepage_preferences.xml +@@ -14,6 +14,11 @@ found in the LICENSE file. + android:summaryOn="@string/text_on" + android:summaryOff="@string/text_off" /> + ++ ++ + { ++ mHomepageManager.setPrefNTPIsHomepageEnabled((boolean) newValue); ++ return true; ++ }); ++ + RecordUserAction.record("Settings.Homepage.Opened"); + } + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/LaunchMetrics.java +@@ -103,7 +103,6 @@ public class LaunchMetrics { + boolean showHomeButton, boolean homepageIsNtp, String homepageUrl) { + if (homepageUrl == null) { + homepageUrl = ""; +- assert !showHomeButton : "Homepage should be disabled for a null URL"; + } + LaunchMetricsJni.get().recordHomePageLaunchMetrics( + showHomeButton, homepageIsNtp, homepageUrl); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.ServiceTabLauncher; + import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingDelegateFactory; + import org.chromium.chrome.browser.app.tab_activity_glue.ReparentingTask; + import org.chromium.chrome.browser.compositor.CompositorViewHolder; ++import org.chromium.chrome.browser.homepage.HomepageManager; + import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin; + import org.chromium.chrome.browser.ntp.NewTabPageUtils; + import org.chromium.chrome.browser.tab.RedirectHandlerTabHelper; +@@ -297,6 +298,12 @@ public class ChromeTabCreator extends TabCreator { + * @return the created tab. + */ + public Tab launchUrl(String url, @TabLaunchType int type, Intent intent, long intentTimestamp) { ++ if (!mIncognito && url.equals(UrlConstants.NTP_URL)) { ++ if (HomepageManager.getInstance().getPrefNTPIsHomepageEnabled()) { ++ url = HomepageManager.getInstance().getHomepageUri(); ++ } ++ } ++ + LoadUrlParams loadUrlParams = new LoadUrlParams(url); + loadUrlParams.setIntentReceivedTimestamp(intentTimestamp); + return createNewTab(loadUrlParams, type, null, intent); +diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java ++++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +@@ -441,6 +441,7 @@ public final class ChromePreferenceKeys { + public static final String HOMEPAGE_PARTNER_CUSTOMIZED_DEFAULT_GURL = + "Chrome.Homepage.PartnerCustomizedDefaultGurl"; + ++ public static final String HOMEPAGE_NTP_IS_HOMEPAGE = "newtabpage_is_homepage"; + /** + * Key used to save homepage location set by enterprise policy + */ +diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java ++++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java +@@ -72,6 +72,7 @@ public class LegacyChromePreferenceKeys { + ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI, + ChromePreferenceKeys.HOMEPAGE_ENABLED, + ChromePreferenceKeys.HOMEPAGE_USE_DEFAULT_URI, ++ ChromePreferenceKeys.HOMEPAGE_NTP_IS_HOMEPAGE, + ChromePreferenceKeys.INCOGNITO_SHORTCUT_ADDED, + ChromePreferenceKeys.LATEST_UNSUPPORTED_VERSION, + ChromePreferenceKeys.LEGACY_FIRST_RUN_AND_BACKUP_SIGNIN_COMPLETE, +diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd +--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd ++++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd +@@ -1254,6 +1254,9 @@ Your Google account may have other forms of browsing history like searches and a + + Last hour + ++ ++ Use for new tabs ++ + + Last 24 hours + +diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc +--- a/chrome/browser/ui/browser_ui_prefs.cc ++++ b/chrome/browser/ui/browser_ui_prefs.cc +@@ -65,6 +65,8 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { + GetHomeButtonAndHomePageIsNewTabPageFlags()); + registry->RegisterBooleanPref(prefs::kShowHomeButton, false, + GetHomeButtonAndHomePageIsNewTabPageFlags()); ++ registry->RegisterBooleanPref(prefs::kNewTabPageIsHomePage, false, ++ GetHomeButtonAndHomePageIsNewTabPageFlags()); + + registry->RegisterInt64Pref(prefs::kDefaultBrowserLastDeclined, 0); + bool reset_check_default = false; +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 +@@ -60,6 +60,10 @@ const char kForceEphemeralProfiles[] = "profile.ephemeral_mode"; + // A boolean specifying whether the New Tab page is the home page or not. + const char kHomePageIsNewTabPage[] = "homepage_is_newtabpage"; + ++// A boolean specifying whether opening a new tab should open the Home page ++// instead of the New Tab page. ++const char kNewTabPageIsHomePage[] = "newtabpage_is_homepage"; ++ + // This is the URL of the page to load when opening new tabs. + const char kHomePage[] = "homepage"; + +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 +@@ -388,6 +388,7 @@ extern const char kRestrictedManagedGuestSessionExtensionCleanupExemptList[]; + extern const char kUsedPolicyCertificates[]; + #endif // BUILDFLAG(IS_CHROMEOS) + extern const char kShowHomeButton[]; ++extern const char kNewTabPageIsHomePage[]; + extern const char kSpeechRecognitionFilterProfanities[]; + extern const char kAllowDeletingBrowserHistory[]; + extern const char kForceGoogleSafeSearch[]; +-- +2.25.1 diff --git a/bromite/build/patches/Add-site-engagement-flag.patch b/bromite/build/patches/Add-site-engagement-flag.patch new file mode 100644 index 00000000..704cf6bb --- /dev/null +++ b/bromite/build/patches/Add-site-engagement-flag.patch @@ -0,0 +1,186 @@ +From: uazo +Date: Mon, 2 May 2022 11:48:03 +0000 +Subject: Add site engagement flag + +Enabled by default. + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + chrome/browser/about_flags.cc | 6 ++++ + chrome/browser/flag_descriptions.cc | 5 +++ + chrome/browser/flag_descriptions.h | 3 ++ + .../content/site_engagement_score.cc | 5 +++ + components/site_engagement/core/BUILD.gn | 6 ++++ + components/site_engagement/core/features.cc | 29 ++++++++++++++++ + components/site_engagement/core/features.h | 34 +++++++++++++++++++ + 7 files changed, 88 insertions(+) + create mode 100644 components/site_engagement/core/features.cc + create mode 100644 components/site_engagement/core/features.h + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -142,6 +142,7 @@ + #include "components/segmentation_platform/public/features.h" + #include "components/send_tab_to_self/features.h" + #include "components/services/heap_profiling/public/cpp/switches.h" ++#include "components/site_engagement/core/features.h" + #include "components/shared_highlighting/core/common/shared_highlighting_features.h" + #include "components/signin/core/browser/dice_account_reconcilor_delegate.h" + #include "components/signin/public/base/signin_buildflags.h" +@@ -9174,6 +9175,11 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kSearchReadyOmniboxDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kSearchReadyOmniboxFeature)}, + ++ {"site-engagement", ++ flag_descriptions::kSiteEngagementName, ++ flag_descriptions::kSiteEngagementDescription, kOsAll, ++ FEATURE_VALUE_TYPE(site_engagement::features::kSiteEngagement)}, ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + {"use-multiple-overlays", flag_descriptions::kUseMultipleOverlaysName, + flag_descriptions::kUseMultipleOverlaysDescription, kOsCrOS, +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -3461,6 +3461,11 @@ const char kSkipServiceWorkerFetchHandlerDescription[] = + "Skips starting the service worker and run the fetch handler if the fetch " + "handler is recognized as skippable."; + ++const char kSiteEngagementName[] = ++ "Enable site engagement feature"; ++const char kSiteEngagementDescription[] = ++ "Site Engagement Service provides information about how engaged a user is with a origin; this affects which NTP tiles are automatically created."; ++ + const char kWebSQLAccessName[] = "Allows access to WebSQL APIs"; + const char kWebSQLAccessDescription[] = + "The WebSQL API is enabled by default, but can be disabled here."; +diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h +--- a/chrome/browser/flag_descriptions.h ++++ b/chrome/browser/flag_descriptions.h +@@ -1975,6 +1975,9 @@ extern const char kReduceUserAgentPlatformOsCpuDescription[]; + extern const char kSkipServiceWorkerFetchHandlerName[]; + extern const char kSkipServiceWorkerFetchHandlerDescription[]; + ++extern const char kSiteEngagementName[]; ++extern const char kSiteEngagementDescription[]; ++ + extern const char kWebSQLAccessName[]; + extern const char kWebSQLAccessDescription[]; + +diff --git a/components/site_engagement/content/site_engagement_score.cc b/components/site_engagement/content/site_engagement_score.cc +--- a/components/site_engagement/content/site_engagement_score.cc ++++ b/components/site_engagement/content/site_engagement_score.cc +@@ -17,6 +17,7 @@ + #include "components/content_settings/core/common/content_settings.h" + #include "components/content_settings/core/common/content_settings_types.h" + #include "components/content_settings/core/common/content_settings_utils.h" ++#include "components/site_engagement/core/features.h" + #include "components/site_engagement/content/engagement_type.h" + #include "components/site_engagement/content/site_engagement_metrics.h" + #include "components/variations/variations_associated_data.h" +@@ -275,6 +276,10 @@ void SiteEngagementScore::Commit() { + if (!UpdateScoreDict(*score_dict_)) + return; + ++ if (!base::FeatureList::IsEnabled(features::kSiteEngagement)) { ++ score_dict_.reset(); ++ return; ++ } + settings_map_->SetWebsiteSettingDefaultScope( + origin_, GURL(), ContentSettingsType::SITE_ENGAGEMENT, + base::Value(std::move(*score_dict_))); +diff --git a/components/site_engagement/core/BUILD.gn b/components/site_engagement/core/BUILD.gn +--- a/components/site_engagement/core/BUILD.gn ++++ b/components/site_engagement/core/BUILD.gn +@@ -4,8 +4,14 @@ + + static_library("core") { + sources = [ ++ "features.cc", ++ "features.h", + "pref_names.cc", + "pref_names.h", + "site_engagement_score_provider.h", + ] ++ ++ deps = [ ++ "//base", ++ ] + } +diff --git a/components/site_engagement/core/features.cc b/components/site_engagement/core/features.cc +new file mode 100644 +--- /dev/null ++++ b/components/site_engagement/core/features.cc +@@ -0,0 +1,29 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++#include "components/site_engagement/core/features.h" ++ ++#include "base/feature_list.h" ++ ++namespace site_engagement { ++namespace features { ++ ++const base::Feature kSiteEngagement{"SiteEngagement", ++ base::FEATURE_ENABLED_BY_DEFAULT}; ++ ++} // namespace features ++} // namespace site_engagement +diff --git a/components/site_engagement/core/features.h b/components/site_engagement/core/features.h +new file mode 100644 +--- /dev/null ++++ b/components/site_engagement/core/features.h +@@ -0,0 +1,34 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++#ifndef SITE_ENGAGEMENT_CORE_FEATURES_H_ ++#define SITE_ENGAGEMENT_CORE_FEATURES_H_ ++ ++#include ++ ++#include "base/feature_list.h" ++ ++namespace site_engagement { ++namespace features { ++ ++// Enable site engagement ++extern const base::Feature kSiteEngagement; ++ ++} // namespace features ++} // namespace site_engagement ++ ++#endif // SITE_ENGAGEMENT_CORE_FEATURES_H_ +-- +2.25.1 diff --git a/bromite/build/patches/Add-support-for-ISupportHelpAndFeedback.patch b/bromite/build/patches/Add-support-for-ISupportHelpAndFeedback.patch new file mode 100644 index 00000000..f984e8ab --- /dev/null +++ b/bromite/build/patches/Add-support-for-ISupportHelpAndFeedback.patch @@ -0,0 +1,53 @@ +From: uazo +Date: Mon, 17 May 2021 12:30:12 +0000 +Subject: Add support for ISupportHelpAndFeedback + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../chrome/browser/settings/SettingsActivity.java | 11 ++++++++--- + .../components/browser_ui/settings/SettingsUtils.java | 4 ++++ + 2 files changed, 12 insertions(+), 3 deletions(-) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +@@ -66,6 +66,7 @@ import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerFacto + import org.chromium.components.browser_ui.modaldialog.AppModalPresenter; + import org.chromium.components.browser_ui.settings.FragmentSettingsLauncher; + import org.chromium.components.browser_ui.settings.SettingsLauncher; ++import org.chromium.components.browser_ui.settings.SettingsUtils; + import org.chromium.components.browser_ui.site_settings.SiteSettingsPreferenceFragment; + import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; + import org.chromium.components.browser_ui.widget.displaystyle.ViewResizer; +@@ -329,9 +330,13 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity + finish(); + return true; + } else if (item.getItemId() == R.id.menu_id_general_help) { +- HelpAndFeedbackLauncherImpl.getInstance().show(this, +- getString(R.string.help_context_settings), Profile.getLastUsedRegularProfile(), +- null); ++ if (mainFragment instanceof SettingsUtils.ISupportHelpAndFeedback) { ++ ((SettingsUtils.ISupportHelpAndFeedback)mainFragment).onHelpAndFeebackPressed(); ++ } else { ++ HelpAndFeedbackLauncherImpl.getInstance().show(this, ++ getString(R.string.help_context_settings), Profile.getLastUsedRegularProfile(), ++ null); ++ } + return true; + } + return super.onOptionsItemSelected(item); +diff --git a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java +--- a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java ++++ b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java +@@ -97,4 +97,8 @@ public class SettingsUtils { + ToolbarUtils.setOverflowMenuVisibility(toolbar, visibility); + return true; + } ++ ++ public interface ISupportHelpAndFeedback { ++ void onHelpAndFeebackPressed(); ++ } + } +-- +2.25.1 diff --git a/bromite/build/patches/Add-support-for-writing-URIs.patch b/bromite/build/patches/Add-support-for-writing-URIs.patch new file mode 100644 index 00000000..a09f9464 --- /dev/null +++ b/bromite/build/patches/Add-support-for-writing-URIs.patch @@ -0,0 +1,100 @@ +From: uazo +Date: Tue, 12 Apr 2022 15:58:01 +0000 +Subject: Add support for writing URIs + +Allows native-side URI file writing + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + base/android/content_uri_utils.cc | 10 ++++++ + base/android/content_uri_utils.h | 4 +++ + .../org/chromium/base/ContentUriUtils.java | 33 +++++++++++++++++++ + 3 files changed, 47 insertions(+) + +diff --git a/base/android/content_uri_utils.cc b/base/android/content_uri_utils.cc +--- a/base/android/content_uri_utils.cc ++++ b/base/android/content_uri_utils.cc +@@ -30,6 +30,16 @@ File OpenContentUriForRead(const FilePath& content_uri) { + return File(fd); + } + ++File OpenContentUriForWrite(const FilePath& content_uri) { ++ JNIEnv* env = base::android::AttachCurrentThread(); ++ ScopedJavaLocalRef j_uri = ++ ConvertUTF8ToJavaString(env, content_uri.value()); ++ jint fd = Java_ContentUriUtils_openContentUriForWrite(env, j_uri); ++ if (fd < 0) ++ return File(); ++ return File(fd); ++} ++ + std::string GetContentUriMimeType(const FilePath& content_uri) { + JNIEnv* env = base::android::AttachCurrentThread(); + ScopedJavaLocalRef j_uri = +diff --git a/base/android/content_uri_utils.h b/base/android/content_uri_utils.h +--- a/base/android/content_uri_utils.h ++++ b/base/android/content_uri_utils.h +@@ -18,6 +18,10 @@ namespace base { + // Returns -1 if the URI is invalid. + BASE_EXPORT File OpenContentUriForRead(const FilePath& content_uri); + ++// Opens a content URI for write and returns the file descriptor to the caller. ++// Returns -1 if the URI is invalid. ++BASE_EXPORT File OpenContentUriForWrite(const FilePath& content_uri); ++ + // Check whether a content URI exists. + BASE_EXPORT bool ContentUriExists(const FilePath& content_uri); + +diff --git a/base/android/java/src/org/chromium/base/ContentUriUtils.java b/base/android/java/src/org/chromium/base/ContentUriUtils.java +--- a/base/android/java/src/org/chromium/base/ContentUriUtils.java ++++ b/base/android/java/src/org/chromium/base/ContentUriUtils.java +@@ -23,6 +23,9 @@ import org.chromium.base.annotations.CalledByNative; + import java.io.File; + import java.io.IOException; + ++import android.system.Os; ++import android.content.ContentProviderClient; ++ + /** + * This class provides methods to access content URI schemes. + */ +@@ -89,6 +92,36 @@ public abstract class ContentUriUtils { + return -1; + } + ++ @CalledByNative ++ public static int openContentUriForWrite(String uriString) { ++ try { ++ Uri uri = Uri.parse(uriString); ++ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver(); ++ ContentProviderClient client = resolver.acquireContentProviderClient( ++ uri.getAuthority()); ++ ParcelFileDescriptor pfd = client.openFile(uri, "rw"); ++ int fd = pfd.detachFd(); ++ client.close(); ++ return fd; ++ } catch (Exception e) { ++ Log.e(TAG, "Cannot open intermediate URI", e); ++ } ++ return -1; ++ } ++ ++ public static String getFilePathFromContentUri(Uri uri) { ++ String path = null; ++ try { ++ ContentResolver resolver = ContextUtils.getApplicationContext().getContentResolver(); ++ ParcelFileDescriptor pfd = resolver.openFileDescriptor(uri, "r"); ++ path = Os.readlink("/proc/self/fd/" + pfd.getFd()); ++ pfd.close(); ++ } catch (Exception e) { ++ Log.e(TAG, "Cannot get file path from content URI", e); ++ } ++ return path; ++ } ++ + /** + * Check whether a content URI exists. + * +-- +2.25.1 diff --git a/bromite/build/patches/Add-webGL-site-setting.patch b/bromite/build/patches/Add-webGL-site-setting.patch new file mode 100644 index 00000000..e817de2f --- /dev/null +++ b/bromite/build/patches/Add-webGL-site-setting.patch @@ -0,0 +1,505 @@ +From: uazo +Date: Tue, 3 May 2022 14:44:11 +0000 +Subject: Add webGL site setting + +Do not provide any device information when serving context creation errors. + +Requires patch: Content-settings-infrastructure.patch + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../browser_ui/site_settings/android/BUILD.gn | 3 + + .../BromiteCustomContentSettingImpl.java | 1 + + .../BromiteWebGLContentSetting.java | 85 +++++++++++++++++++ + .../site_settings/SiteSettingsCategory.java | 5 +- + .../strings/android/browser_ui_strings.grd | 1 + + .../browser_ui/strings/android/webgl.grdp | 18 ++++ + components/components_strings.grd | 1 + + .../core/browser/content_settings_registry.cc | 14 +++ + .../core/browser/content_settings_utils.cc | 2 + + .../core/common/content_settings.cc | 4 +- + .../core/common/content_settings.h | 1 + + .../core/common/content_settings.mojom | 1 + + .../common/content_settings_mojom_traits.cc | 3 +- + .../common/content_settings_mojom_traits.h | 5 ++ + .../core/common/content_settings_types.h | 2 + + .../renderer/content_settings_agent_impl.cc | 9 ++ + .../renderer/content_settings_agent_impl.h | 1 + + .../platform/web_content_settings_client.h | 2 + + .../execution_context/execution_context.cc | 23 +++++ + .../execution_context/execution_context.h | 5 ++ + .../webgl/webgl_rendering_context_base.cc | 32 +++---- + .../webgl/webgl_rendering_context_base.h | 2 + + 22 files changed, 197 insertions(+), 23 deletions(-) + create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java + create mode 100644 components/browser_ui/strings/android/webgl.grdp + +diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn +--- a/components/browser_ui/site_settings/android/BUILD.gn ++++ b/components/browser_ui/site_settings/android/BUILD.gn +@@ -92,6 +92,9 @@ android_library("java") { + "java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java", + "java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java", + ] ++ sources += [ ++ "java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java", ++ ] + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] + resources_package = "org.chromium.components.browser_ui.site_settings" + deps = [ +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java +@@ -43,6 +43,7 @@ public abstract class BromiteCustomContentSettingImpl { + + static { + mItemList = new ArrayList(); ++ mItemList.add(new BromiteWebGLContentSetting()); + } + + public static SiteSettingsCategory createFromType( +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java +new file mode 100644 +--- /dev/null ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java +@@ -0,0 +1,85 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++package org.chromium.components.browser_ui.site_settings; ++ ++import org.chromium.components.browser_ui.site_settings.ContentSettingsResources; ++import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory; ++import org.chromium.components.content_settings.ContentSettingValues; ++import org.chromium.components.content_settings.ContentSettingsType; ++import org.chromium.content_public.browser.BrowserContextHandle; ++ ++import androidx.annotation.Nullable; ++import androidx.preference.Preference; ++import androidx.preference.PreferenceScreen; ++ ++import java.util.ArrayList; ++ ++public class BromiteWebGLContentSetting extends BromiteCustomContentSetting { ++ public BromiteWebGLContentSetting() { ++ super(/*contentSettingsType*/ ContentSettingsType.WEBGL, ++ /*siteSettingsCategory*/ SiteSettingsCategory.Type.WEBGL, ++ /*defaultEnabledValue*/ ContentSettingValues.ALLOW, ++ /*defaultDisabledValue*/ ContentSettingValues.BLOCK, ++ /*allowException*/ true, ++ /*preferenceKey*/ "webgl", ++ /*profilePrefKey*/ "webgl"); ++ } ++ ++ @Override ++ public ContentSettingsResources.ResourceItem getResourceItem() { ++ return new ContentSettingsResources.ResourceItem( ++ /*icon*/ R.drawable.web_asset, ++ /*title*/ R.string.webgl_permission_title, ++ /*defaultEnabledValue*/ getDefaultEnabledValue(), ++ /*defaultDisabledValue*/ getDefaultDisabledValue(), ++ /*enabledSummary*/ R.string.website_settings_category_webgl_enabled, ++ /*disabledSummary*/ R.string.website_settings_category_webgl_disabled); ++ } ++ ++ @Override ++ public int getCategorySummary(@Nullable @ContentSettingValues int value) { ++ switch (value) { ++ case ContentSettingValues.ALLOW: ++ return R.string.website_settings_category_webgl_enabled; ++ case ContentSettingValues.BLOCK: ++ return R.string.website_settings_category_webgl_disabled; ++ default: ++ return 0; ++ } ++ } ++ ++ @Override ++ public boolean requiresTriStateContentSetting() { ++ return false; ++ } ++ ++ @Override ++ public boolean showOnlyDescriptions() { ++ return true; ++ } ++ ++ @Override ++ public int getAddExceptionDialogMessage() { ++ return R.string.website_settings_category_webgl_enabled; ++ } ++ ++ @Override ++ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) { ++ return value != ContentSettingValues.BLOCK; ++ } ++} +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java +@@ -44,7 +44,7 @@ public class SiteSettingsCategory { + Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY, + Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE, + Type.FEDERATED_IDENTITY_API, Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT, +- Type.IMAGES}) ++ Type.IMAGES, Type.WEBGL}) + @Retention(RetentionPolicy.SOURCE) + public @interface Type { + // All updates here must also be reflected in {@link #preferenceKey(int) +@@ -79,10 +79,11 @@ public class SiteSettingsCategory { + int AUTOPLAY = 27; + int JAVASCRIPT_JIT = 28; + int IMAGES = 29; ++ int WEBGL = 30; + /** + * Number of handled categories used for calculating array sizes. + */ +- int NUM_ENTRIES = 30; ++ int NUM_ENTRIES = 31; + } + + private final BrowserContextHandle mBrowserContextHandle; +diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd +--- a/components/browser_ui/strings/android/browser_ui_strings.grd ++++ b/components/browser_ui/strings/android/browser_ui_strings.grd +@@ -174,6 +174,7 @@ + + + ++ + + + Got it +diff --git a/components/browser_ui/strings/android/webgl.grdp b/components/browser_ui/strings/android/webgl.grdp +new file mode 100644 +--- /dev/null ++++ b/components/browser_ui/strings/android/webgl.grdp +@@ -0,0 +1,18 @@ ++ ++ ++ ++ Webgl ++ ++ ++ webgl ++ ++ ++ Webgl ++ ++ ++ Enabled ++ ++ ++ Disabled ++ ++ +diff --git a/components/components_strings.grd b/components/components_strings.grd +--- a/components/components_strings.grd ++++ b/components/components_strings.grd +@@ -338,6 +338,7 @@ + + + ++ + + + +diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc +--- a/components/content_settings/core/browser/content_settings_registry.cc ++++ b/components/content_settings/core/browser/content_settings_registry.cc +@@ -669,6 +669,20 @@ void ContentSettingsRegistry::Init() { + ContentSettingsInfo::INHERIT_IN_INCOGNITO, + ContentSettingsInfo::PERSISTENT, + ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); ++ ++ Register(ContentSettingsType::WEBGL, "webgl", CONTENT_SETTING_BLOCK, ++ WebsiteSettingsInfo::SYNCABLE, ++ AllowlistedSchemes(), ++ ValidSettings(CONTENT_SETTING_ALLOW, ++ CONTENT_SETTING_BLOCK), ++ WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, ++ WebsiteSettingsRegistry::PLATFORM_ANDROID, ++ ContentSettingsInfo::INHERIT_IN_INCOGNITO, ++ ContentSettingsInfo::PERSISTENT, ++ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS, ++ /*show_into_info_page*/ true, ++ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBGL, ++ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE); + } + + void ContentSettingsRegistry::Register( +diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc +--- a/components/content_settings/core/browser/content_settings_utils.cc ++++ b/components/content_settings/core/browser/content_settings_utils.cc +@@ -156,6 +156,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map, + std::string timezone; + map->GetTimezoneOverrideValue(timezone); + rules->timezone_override_value = timezone; ++ map->GetSettingsForOneType(ContentSettingsType::WEBGL, ++ &(rules->webgl_rules)); + } + + bool IsMorePermissive(ContentSetting a, ContentSetting b) { +diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc +--- a/components/content_settings/core/common/content_settings.cc ++++ b/components/content_settings/core/common/content_settings.cc +@@ -206,7 +206,8 @@ bool RendererContentSettingRules::IsRendererContentSetting( + content_type == ContentSettingsType::AUTOPLAY || + content_type == ContentSettingsType::MIXEDSCRIPT || + content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT || +- content_type == ContentSettingsType::TIMEZONE_OVERRIDE; ++ content_type == ContentSettingsType::TIMEZONE_OVERRIDE || ++ content_type == ContentSettingsType::WEBGL; + } + + void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL( +@@ -218,6 +219,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL( + FilterRulesForType(auto_dark_content_rules, outermost_main_frame_url); + FilterRulesForType(timezone_override_rules, outermost_main_frame_url); + FilterRulesForType(autoplay_rules, outermost_main_frame_url); ++ FilterRulesForType(webgl_rules, outermost_main_frame_url); + } + + RendererContentSettingRules::RendererContentSettingRules() = default; +diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h +--- a/components/content_settings/core/common/content_settings.h ++++ b/components/content_settings/core/common/content_settings.h +@@ -96,6 +96,7 @@ struct RendererContentSettingRules { + ContentSettingsForOneType auto_dark_content_rules; + ContentSettingsForOneType timezone_override_rules; + std::string timezone_override_value; ++ ContentSettingsForOneType webgl_rules; + }; + + namespace content_settings { +diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom +--- a/components/content_settings/core/common/content_settings.mojom ++++ b/components/content_settings/core/common/content_settings.mojom +@@ -81,4 +81,5 @@ struct RendererContentSettingRules { + array auto_dark_content_rules; + array timezone_override_rules; + string timezone_override_value; ++ array webgl_rules; + }; +diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc +--- a/components/content_settings/core/common/content_settings_mojom_traits.cc ++++ b/components/content_settings/core/common/content_settings_mojom_traits.cc +@@ -105,7 +105,8 @@ bool StructTraitsmixed_content_rules) && + data.ReadAutoDarkContentRules(&out->auto_dark_content_rules) && + data.ReadTimezoneOverrideRules(&out->timezone_override_rules) && +- data.ReadTimezoneOverrideValue(&out->timezone_override_value); ++ data.ReadTimezoneOverrideValue(&out->timezone_override_value) && ++ data.ReadWebglRules(&out->webgl_rules); + } + + } // namespace mojo +diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h +--- a/components/content_settings/core/common/content_settings_mojom_traits.h ++++ b/components/content_settings/core/common/content_settings_mojom_traits.h +@@ -165,6 +165,11 @@ struct StructTraits< + return r.timezone_override_value; + } + ++ static const std::vector& webgl_rules( ++ const RendererContentSettingRules& r) { ++ return r.webgl_rules; ++ } ++ + static bool Read( + content_settings::mojom::RendererContentSettingRulesDataView data, + RendererContentSettingRules* out); +diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h +--- a/components/content_settings/core/common/content_settings_types.h ++++ b/components/content_settings/core/common/content_settings_types.h +@@ -277,6 +277,8 @@ enum class ContentSettingsType : int32_t { + // site instead of the mobile one. + REQUEST_DESKTOP_SITE, + ++ WEBGL, ++ + // Setting to indicate whether browser should allow signing into a website via + // the browser FedCM API. + FEDERATED_IDENTITY_API, +diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc +--- a/components/content_settings/renderer/content_settings_agent_impl.cc ++++ b/components/content_settings/renderer/content_settings_agent_impl.cc +@@ -449,6 +449,15 @@ void ContentSettingsAgentImpl::ClearBlockedContentSettings() { + cached_script_permissions_.clear(); + } + ++bool ContentSettingsAgentImpl::AllowWebgl(bool enabled_per_settings) { ++ if (!content_setting_rules_) ++ return false; ++ blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); ++ return CONTENT_SETTING_ALLOW == GetContentSettingFromRules( ++ content_setting_rules_->webgl_rules, ++ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL()); ++} ++ + bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const { + if (should_allowlist_) + return true; +diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h +--- a/components/content_settings/renderer/content_settings_agent_impl.h ++++ b/components/content_settings/renderer/content_settings_agent_impl.h +@@ -99,6 +99,7 @@ class ContentSettingsAgentImpl + bool AllowAutoplay(bool default_value) override; + bool AllowPopupsAndRedirects(bool default_value) override; + bool ShouldAutoupgradeMixedContent() override; ++ bool AllowWebgl(bool enabled_per_settings) override; + + bool allow_running_insecure_content() const { + return allow_running_insecure_content_; +diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h +--- a/third_party/blink/public/platform/web_content_settings_client.h ++++ b/third_party/blink/public/platform/web_content_settings_client.h +@@ -99,6 +99,8 @@ class WebContentSettingsClient { + return default_value; + } + ++ virtual bool AllowWebgl(bool default_value) { return default_value; } ++ + // Reports that passive mixed content was found at the provided URL. + virtual void PassiveInsecureContentFound(const WebURL&) {} + +diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc +--- a/third_party/blink/renderer/core/execution_context/execution_context.cc ++++ b/third_party/blink/renderer/core/execution_context/execution_context.cc +@@ -65,6 +65,29 @@ + + namespace blink { + ++blink::WebContentSettingsClient* GetContentSettingsClientFor( ++ ExecutionContext* context) { ++ blink::WebContentSettingsClient* settings = nullptr; ++ if (!context) ++ return settings; ++ if (auto* window = blink::DynamicTo(context)) { ++ auto* frame = window->GetFrame(); ++ if (frame) ++ settings = frame->GetContentSettingsClient(); ++ } else if (context->IsWorkerGlobalScope()) { ++ settings = ++ blink::To(context)->ContentSettingsClient(); ++ } ++ return settings; ++} ++ ++bool AllowWebgl(ExecutionContext* context) { ++ blink::WebContentSettingsClient* settings = GetContentSettingsClientFor(context); ++ if (settings) ++ return settings->AllowWebgl(false); ++ return false; ++} ++ + ExecutionContext::ExecutionContext(v8::Isolate* isolate, Agent* agent) + : isolate_(isolate), + security_context_(this), +diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h +--- a/third_party/blink/renderer/core/execution_context/execution_context.h ++++ b/third_party/blink/renderer/core/execution_context/execution_context.h +@@ -96,6 +96,7 @@ class SecurityOrigin; + class ScriptState; + class ScriptWrappable; + class TrustedTypePolicyFactory; ++class WebContentSettingsClient; + + enum ReasonForCallingCanExecuteScripts { + kAboutToExecuteScript, +@@ -104,6 +105,10 @@ enum ReasonForCallingCanExecuteScripts { + + enum ReferrerPolicySource { kPolicySourceHttpHeader, kPolicySourceMetaTag }; + ++CORE_EXPORT bool AllowWebgl(ExecutionContext* context); ++CORE_EXPORT WebContentSettingsClient* GetContentSettingsClientFor( ++ ExecutionContext* context); ++ + // An environment in which script can execute. This class exposes the common + // properties of script execution environments on the web (i.e, common between + // script executing in a window and script executing in a worker), such as: +diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc ++++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +@@ -246,6 +246,13 @@ void WebGLRenderingContextBase::InitializeWebGLContextLimits( + } + } + ++bool WebGLRenderingContextBase::AllowWebglForHost(blink::CanvasRenderingContextHost* host) { ++ if (!host) ++ return false; ++ blink::ExecutionContext* context = host->GetTopExecutionContext(); ++ return blink::AllowWebgl(context); ++} ++ + unsigned WebGLRenderingContextBase::CurrentMaxGLContexts() { + base::AutoLock locker(WebGLContextLimitLock()); + DCHECK(webgl_context_limits_initialized_); +@@ -492,25 +499,6 @@ static String ExtractWebGLContextCreationError( + const Platform::GraphicsInfo& info) { + StringBuilder builder; + builder.Append("Could not create a WebGL context"); +- FormatWebGLStatusString( +- "VENDOR", +- info.vendor_id ? String::Format("0x%04x", info.vendor_id) : "0xffff", +- builder); +- FormatWebGLStatusString( +- "DEVICE", +- info.device_id ? String::Format("0x%04x", info.device_id) : "0xffff", +- builder); +- FormatWebGLStatusString("GL_VENDOR", info.vendor_info, builder); +- FormatWebGLStatusString("GL_RENDERER", info.renderer_info, builder); +- FormatWebGLStatusString("GL_VERSION", info.driver_version, builder); +- FormatWebGLStatusString("Sandboxed", info.sandboxed ? "yes" : "no", builder); +- FormatWebGLStatusString("Optimus", info.optimus ? "yes" : "no", builder); +- FormatWebGLStatusString("AMD switchable", info.amd_switchable ? "yes" : "no", +- builder); +- FormatWebGLStatusString( +- "Reset notification strategy", +- String::Format("0x%04x", info.reset_notification_strategy).Utf8().c_str(), +- builder); + FormatWebGLStatusString("ErrorMessage", info.error_message.Utf8().c_str(), + builder); + builder.Append('.'); +@@ -578,6 +566,12 @@ WebGLRenderingContextBase::CreateWebGraphicsContext3DProvider( + const CanvasContextCreationAttributesCore& attributes, + Platform::ContextType context_type, + Platform::GraphicsInfo* graphics_info) { ++ if (!AllowWebglForHost(host)) { ++ host->HostDispatchEvent(WebGLContextEvent::Create( ++ event_type_names::kWebglcontextcreationerror, ++ "disabled by site settings policy.")); ++ return nullptr; ++ } + if ((context_type == Platform::kWebGL1ContextType && + !host->IsWebGL1Enabled()) || + (context_type == Platform::kWebGL2ContextType && +diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h +--- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h ++++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h +@@ -1920,6 +1920,8 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, + DOMArrayBufferView* pixels, + int64_t offset); + ++ static bool AllowWebglForHost(blink::CanvasRenderingContextHost* host); ++ + // Record Canvas/OffscreenCanvas.RenderingContextDrawnTo at the first draw + // call. + void RecordUKMCanvasDrawnToAtFirstDrawCall(); +-- +2.25.1 diff --git a/bromite/build/patches/Add-webRTC-site-settings.patch b/bromite/build/patches/Add-webRTC-site-settings.patch new file mode 100644 index 00000000..8c7b3246 --- /dev/null +++ b/bromite/build/patches/Add-webRTC-site-settings.patch @@ -0,0 +1,401 @@ +From: uazo +Date: Fri, 6 May 2022 14:27:17 +0000 +Subject: Add webRTC site settings + +Requires patch: Content-settings-infrastructure.patch + +Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../browser_ui/site_settings/android/BUILD.gn | 3 + + .../BromiteCustomContentSettingImpl.java | 1 + + .../BromiteWebRTCContentSetting.java | 86 +++++++++++++++++++ + .../site_settings/SiteSettingsCategory.java | 5 +- + .../strings/android/browser_ui_strings.grd | 1 + + .../browser_ui/strings/android/webrtc.grdp | 18 ++++ + components/components_strings.grd | 1 + + .../core/browser/content_settings_registry.cc | 14 +++ + .../core/browser/content_settings_utils.cc | 2 + + .../core/common/content_settings.cc | 4 +- + .../core/common/content_settings.h | 1 + + .../core/common/content_settings.mojom | 1 + + .../common/content_settings_mojom_traits.cc | 3 +- + .../common/content_settings_mojom_traits.h | 5 ++ + .../core/common/content_settings_types.h | 2 + + .../renderer/content_settings_agent_impl.cc | 9 ++ + .../renderer/content_settings_agent_impl.h | 1 + + .../platform/web_content_settings_client.h | 2 + + .../peer_connection_dependency_factory.cc | 6 ++ + 19 files changed, 161 insertions(+), 4 deletions(-) + create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java + create mode 100644 components/browser_ui/strings/android/webrtc.grdp + +diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn +--- a/components/browser_ui/site_settings/android/BUILD.gn ++++ b/components/browser_ui/site_settings/android/BUILD.gn +@@ -95,6 +95,9 @@ android_library("java") { + sources += [ + "java/src/org/chromium/components/browser_ui/site_settings/BromiteWebGLContentSetting.java", + ] ++ sources += [ ++ "java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java", ++ ] + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] + resources_package = "org.chromium.components.browser_ui.site_settings" + deps = [ +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java +@@ -44,6 +44,7 @@ public abstract class BromiteCustomContentSettingImpl { + static { + mItemList = new ArrayList(); + mItemList.add(new BromiteWebGLContentSetting()); ++ mItemList.add(new BromiteWebRTCContentSetting()); + } + + public static SiteSettingsCategory createFromType( +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java +new file mode 100644 +--- /dev/null ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteWebRTCContentSetting.java +@@ -0,0 +1,86 @@ ++/* ++ This file is part of Bromite. ++ ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. ++ ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ ++ ++package org.chromium.components.browser_ui.site_settings; ++ ++import org.chromium.components.browser_ui.site_settings.ContentSettingsResources; ++import org.chromium.components.browser_ui.site_settings.SiteSettingsCategory; ++import org.chromium.components.content_settings.ContentSettingValues; ++import org.chromium.components.content_settings.ContentSettingsType; ++import org.chromium.content_public.browser.BrowserContextHandle; ++ ++import androidx.annotation.Nullable; ++import androidx.preference.Preference; ++import androidx.preference.PreferenceScreen; ++ ++import java.util.ArrayList; ++ ++public class BromiteWebRTCContentSetting extends BromiteCustomContentSetting { ++ public BromiteWebRTCContentSetting() { ++ super(/*contentSettingsType*/ ContentSettingsType.WEBRTC, ++ /*siteSettingsCategory*/ SiteSettingsCategory.Type.WEBRTC, ++ /*defaultEnabledValue*/ ContentSettingValues.ALLOW, ++ /*defaultDisabledValue*/ ContentSettingValues.BLOCK, ++ /*allowException*/ true, ++ /*preferenceKey*/ "webrtc", ++ /*profilePrefKey*/ "webrtc"); ++ } ++ ++ @Override ++ public ContentSettingsResources.ResourceItem getResourceItem() { ++ return new ContentSettingsResources.ResourceItem( ++ /*icon*/ R.drawable.web_asset, ++ /*title*/ R.string.webrtc_permission_title, ++ /*defaultEnabledValue*/ getDefaultEnabledValue(), ++ /*defaultDisabledValue*/ getDefaultDisabledValue(), ++ /*enabledSummary*/ R.string.website_settings_category_webrtc_enabled, ++ /*disabledSummary*/ R.string.website_settings_category_webrtc_disabled); ++ } ++ ++ @Override ++ public int getCategorySummary(@Nullable @ContentSettingValues int value) { ++ switch (value) { ++ case ContentSettingValues.ALLOW: ++ return R.string.website_settings_category_webrtc_enabled; ++ case ContentSettingValues.BLOCK: ++ return R.string.website_settings_category_webrtc_disabled; ++ default: ++ // this will cause a runtime exception ++ return 0; ++ } ++ } ++ ++ @Override ++ public boolean requiresTriStateContentSetting() { ++ return false; ++ } ++ ++ @Override ++ public boolean showOnlyDescriptions() { ++ return true; ++ } ++ ++ @Override ++ public int getAddExceptionDialogMessage() { ++ return R.string.website_settings_category_webrtc_enabled; ++ } ++ ++ @Override ++ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) { ++ return value != ContentSettingValues.BLOCK; ++ } ++} +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java +--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java +@@ -44,7 +44,7 @@ public class SiteSettingsCategory { + Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY, + Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE, + Type.FEDERATED_IDENTITY_API, Type.TIMEZONE_OVERRIDE, Type.AUTOPLAY, Type.JAVASCRIPT_JIT, +- Type.IMAGES, Type.WEBGL}) ++ Type.IMAGES, Type.WEBGL, Type.WEBRTC}) + @Retention(RetentionPolicy.SOURCE) + public @interface Type { + // All updates here must also be reflected in {@link #preferenceKey(int) +@@ -80,10 +80,11 @@ public class SiteSettingsCategory { + int JAVASCRIPT_JIT = 28; + int IMAGES = 29; + int WEBGL = 30; ++ int WEBRTC = 31; + /** + * Number of handled categories used for calculating array sizes. + */ +- int NUM_ENTRIES = 31; ++ int NUM_ENTRIES = 32; + } + + private final BrowserContextHandle mBrowserContextHandle; +diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd +--- a/components/browser_ui/strings/android/browser_ui_strings.grd ++++ b/components/browser_ui/strings/android/browser_ui_strings.grd +@@ -175,6 +175,7 @@ + + + ++ + + + Got it +diff --git a/components/browser_ui/strings/android/webrtc.grdp b/components/browser_ui/strings/android/webrtc.grdp +new file mode 100644 +--- /dev/null ++++ b/components/browser_ui/strings/android/webrtc.grdp +@@ -0,0 +1,18 @@ ++ ++ ++ ++ WebRTC ++ ++ ++ webRTC ++ ++ ++ WebRTC ++ ++ ++ Enabled ++ ++ ++ Disabled ++ ++ +diff --git a/components/components_strings.grd b/components/components_strings.grd +--- a/components/components_strings.grd ++++ b/components/components_strings.grd +@@ -339,6 +339,7 @@ + + + ++ + + + +diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc +--- a/components/content_settings/core/browser/content_settings_registry.cc ++++ b/components/content_settings/core/browser/content_settings_registry.cc +@@ -683,6 +683,20 @@ void ContentSettingsRegistry::Init() { + /*show_into_info_page*/ true, + /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBGL, + /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBGL_MID_SENTENCE); ++ ++ Register(ContentSettingsType::WEBRTC, "webrtc", CONTENT_SETTING_BLOCK, ++ WebsiteSettingsInfo::SYNCABLE, ++ AllowlistedSchemes(), ++ ValidSettings(CONTENT_SETTING_ALLOW, ++ CONTENT_SETTING_BLOCK), ++ WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, ++ WebsiteSettingsRegistry::PLATFORM_ANDROID, ++ ContentSettingsInfo::INHERIT_IN_INCOGNITO, ++ ContentSettingsInfo::PERSISTENT, ++ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS, ++ /*show_into_info_page*/ true, ++ /*permission_type_ui*/ IDS_SITE_SETTINGS_TYPE_WEBRTC, ++ /*permission_type_ui_mid_sentence*/ IDS_SITE_SETTINGS_TYPE_WEBRTC_MID_SENTENCE); + } + + void ContentSettingsRegistry::Register( +diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc +--- a/components/content_settings/core/browser/content_settings_utils.cc ++++ b/components/content_settings/core/browser/content_settings_utils.cc +@@ -158,6 +158,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map, + rules->timezone_override_value = timezone; + map->GetSettingsForOneType(ContentSettingsType::WEBGL, + &(rules->webgl_rules)); ++ map->GetSettingsForOneType(ContentSettingsType::WEBRTC, ++ &(rules->webrtc_rules)); + } + + bool IsMorePermissive(ContentSetting a, ContentSetting b) { +diff --git a/components/content_settings/core/common/content_settings.cc b/components/content_settings/core/common/content_settings.cc +--- a/components/content_settings/core/common/content_settings.cc ++++ b/components/content_settings/core/common/content_settings.cc +@@ -207,7 +207,8 @@ bool RendererContentSettingRules::IsRendererContentSetting( + content_type == ContentSettingsType::MIXEDSCRIPT || + content_type == ContentSettingsType::AUTO_DARK_WEB_CONTENT || + content_type == ContentSettingsType::TIMEZONE_OVERRIDE || +- content_type == ContentSettingsType::WEBGL; ++ content_type == ContentSettingsType::WEBGL || ++ content_type == ContentSettingsType::WEBRTC; + } + + void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL( +@@ -220,6 +221,7 @@ void RendererContentSettingRules::FilterRulesByOutermostMainFrameURL( + FilterRulesForType(timezone_override_rules, outermost_main_frame_url); + FilterRulesForType(autoplay_rules, outermost_main_frame_url); + FilterRulesForType(webgl_rules, outermost_main_frame_url); ++ FilterRulesForType(webrtc_rules, outermost_main_frame_url); + } + + RendererContentSettingRules::RendererContentSettingRules() = default; +diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h +--- a/components/content_settings/core/common/content_settings.h ++++ b/components/content_settings/core/common/content_settings.h +@@ -97,6 +97,7 @@ struct RendererContentSettingRules { + ContentSettingsForOneType timezone_override_rules; + std::string timezone_override_value; + ContentSettingsForOneType webgl_rules; ++ ContentSettingsForOneType webrtc_rules; + }; + + namespace content_settings { +diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom +--- a/components/content_settings/core/common/content_settings.mojom ++++ b/components/content_settings/core/common/content_settings.mojom +@@ -82,4 +82,5 @@ struct RendererContentSettingRules { + array timezone_override_rules; + string timezone_override_value; + array webgl_rules; ++ array webrtc_rules; + }; +diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc +--- a/components/content_settings/core/common/content_settings_mojom_traits.cc ++++ b/components/content_settings/core/common/content_settings_mojom_traits.cc +@@ -106,7 +106,8 @@ bool StructTraitsauto_dark_content_rules) && + data.ReadTimezoneOverrideRules(&out->timezone_override_rules) && + data.ReadTimezoneOverrideValue(&out->timezone_override_value) && +- data.ReadWebglRules(&out->webgl_rules); ++ data.ReadWebglRules(&out->webgl_rules) && ++ data.ReadWebrtcRules(&out->webrtc_rules); + } + + } // namespace mojo +diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h +--- a/components/content_settings/core/common/content_settings_mojom_traits.h ++++ b/components/content_settings/core/common/content_settings_mojom_traits.h +@@ -170,6 +170,11 @@ struct StructTraits< + return r.webgl_rules; + } + ++ static const std::vector& webrtc_rules( ++ const RendererContentSettingRules& r) { ++ return r.webrtc_rules; ++ } ++ + static bool Read( + content_settings::mojom::RendererContentSettingRulesDataView data, + RendererContentSettingRules* out); +diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h +--- a/components/content_settings/core/common/content_settings_types.h ++++ b/components/content_settings/core/common/content_settings_types.h +@@ -279,6 +279,8 @@ enum class ContentSettingsType : int32_t { + + WEBGL, + ++ WEBRTC, ++ + // Setting to indicate whether browser should allow signing into a website via + // the browser FedCM API. + FEDERATED_IDENTITY_API, +diff --git a/components/content_settings/renderer/content_settings_agent_impl.cc b/components/content_settings/renderer/content_settings_agent_impl.cc +--- a/components/content_settings/renderer/content_settings_agent_impl.cc ++++ b/components/content_settings/renderer/content_settings_agent_impl.cc +@@ -458,6 +458,15 @@ bool ContentSettingsAgentImpl::AllowWebgl(bool enabled_per_settings) { + url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL()); + } + ++bool ContentSettingsAgentImpl::AllowWebRTC(bool enabled_per_settings) { ++ if (!content_setting_rules_) ++ return false; ++ blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); ++ return CONTENT_SETTING_ALLOW == GetContentSettingFromRules( ++ content_setting_rules_->webrtc_rules, ++ url::Origin(frame->GetDocument().GetSecurityOrigin()).GetURL()); ++} ++ + bool ContentSettingsAgentImpl::IsAllowlistedForContentSettings() const { + if (should_allowlist_) + return true; +diff --git a/components/content_settings/renderer/content_settings_agent_impl.h b/components/content_settings/renderer/content_settings_agent_impl.h +--- a/components/content_settings/renderer/content_settings_agent_impl.h ++++ b/components/content_settings/renderer/content_settings_agent_impl.h +@@ -100,6 +100,7 @@ class ContentSettingsAgentImpl + bool AllowPopupsAndRedirects(bool default_value) override; + bool ShouldAutoupgradeMixedContent() override; + bool AllowWebgl(bool enabled_per_settings) override; ++ bool AllowWebRTC(bool enabled_per_settings) override; + + bool allow_running_insecure_content() const { + return allow_running_insecure_content_; +diff --git a/third_party/blink/public/platform/web_content_settings_client.h b/third_party/blink/public/platform/web_content_settings_client.h +--- a/third_party/blink/public/platform/web_content_settings_client.h ++++ b/third_party/blink/public/platform/web_content_settings_client.h +@@ -101,6 +101,8 @@ class WebContentSettingsClient { + + virtual bool AllowWebgl(bool default_value) { return default_value; } + ++ virtual bool AllowWebRTC(bool default_value) { return default_value; } ++ + // Reports that passive mixed content was found at the provided URL. + virtual void PassiveInsecureContentFound(const WebURL&) {} + +diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc ++++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +@@ -33,6 +33,7 @@ + #include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h" + #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" + #include "third_party/blink/public/platform/platform.h" ++#include "third_party/blink/public/platform/web_content_settings_client.h" + #include "third_party/blink/public/platform/web_url.h" + #include "third_party/blink/public/web/modules/mediastream/media_stream_video_source.h" + #include "third_party/blink/public/web/web_document.h" +@@ -765,6 +766,11 @@ PeerConnectionDependencyFactory::CreatePortAllocator( + // origin. + WebRTCIPHandlingPolicy policy = + GetWebRTCIPHandlingPolicy(webrtc_ip_handling_policy); ++ blink::WebContentSettingsClient* settings = web_frame->GetContentSettingsClient(); ++ if (settings && settings->AllowWebRTC(false)) { ++ policy = kDefault; ++ } ++ + switch (policy) { + // TODO(guoweis): specify the flag of disabling local candidate + // collection when webrtc is updated. +-- +2.25.1 diff --git a/bromite/build/patches/Allow-building-without-enable_reporting.patch b/bromite/build/patches/Allow-building-without-enable_reporting.patch new file mode 100644 index 00000000..140c170a --- /dev/null +++ b/bromite/build/patches/Allow-building-without-enable_reporting.patch @@ -0,0 +1,440 @@ +From: Zoraver Kang +Date: Fri, 22 May 2020 22:43:27 -0400 +Subject: Allow building without enable_reporting + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../browser/devtools/protocol/network_handler.cc | 2 ++ + .../cross_origin_embedder_policy_reporter.cc | 7 +++++-- + .../cross_origin_opener_policy_reporter.cc | 16 +++++++--------- + .../browser/network/reporting_service_proxy.cc | 3 +++ + .../renderer_host/render_frame_host_impl.cc | 6 ------ + .../web_package/signed_exchange_reporter.cc | 2 ++ + ...content_switch_dependent_feature_overrides.cc | 1 + + net/reporting/reporting_service.cc | 6 ++++++ + services/network/network_context.h | 4 ++-- + services/network/public/mojom/BUILD.gn | 1 - + .../network/public/mojom/network_context.mojom | 2 ++ + .../blink/renderer/core/frame/local_frame.cc | 3 +++ + .../blink/renderer/core/frame/local_frame.h | 6 +++--- + .../renderer/core/frame/reporting_context.cc | 9 +++++++++ + .../renderer/core/frame/reporting_context.h | 7 +++++-- + 15 files changed, 50 insertions(+), 25 deletions(-) + +diff --git a/content/browser/devtools/protocol/network_handler.cc b/content/browser/devtools/protocol/network_handler.cc +--- a/content/browser/devtools/protocol/network_handler.cc ++++ b/content/browser/devtools/protocol/network_handler.cc +@@ -1291,6 +1291,7 @@ String BuildReportStatus(const net::ReportingReport::Status status) { + } + } + ++#if BUILDFLAG(ENABLE_REPORTING) + std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { + std::vector urls; + base::queue queue; +@@ -1308,6 +1309,7 @@ std::vector ComputeReportingURLs(RenderFrameHostImpl* frame_host) { + } + return urls; + } ++#endif // BUILDFLAG(ENABLE_REPORTING) + + } // namespace + +diff --git a/content/browser/network/cross_origin_embedder_policy_reporter.cc b/content/browser/network/cross_origin_embedder_policy_reporter.cc +--- a/content/browser/network/cross_origin_embedder_policy_reporter.cc ++++ b/content/browser/network/cross_origin_embedder_policy_reporter.cc +@@ -4,6 +4,7 @@ + + #include "content/browser/network/cross_origin_embedder_policy_reporter.h" + ++#include "net/base/features.h" + #include "base/strings/string_piece.h" + #include "base/values.h" + #include "content/public/browser/storage_partition.h" +@@ -95,8 +96,6 @@ void CrossOriginEmbedderPolicyReporter::Clone( + void CrossOriginEmbedderPolicyReporter::QueueAndNotify( + std::initializer_list> body, + bool report_only) { +- const absl::optional& endpoint = +- report_only ? report_only_endpoint_ : endpoint_; + const char* const disposition = report_only ? "reporting" : "enforce"; + if (observer_) { + std::vector list; +@@ -111,6 +110,9 @@ void CrossOriginEmbedderPolicyReporter::QueueAndNotify( + observer_->Notify(blink::mojom::Report::New( + kType, context_url_, blink::mojom::ReportBody::New(std::move(list)))); + } ++#if BUILDFLAG(ENABLE_REPORTING) ++ const absl::optional& endpoint = ++ report_only ? report_only_endpoint_ : endpoint_; + if (endpoint) { + base::Value::Dict body_to_pass; + for (const auto& pair : body) { +@@ -125,6 +127,7 @@ void CrossOriginEmbedderPolicyReporter::QueueAndNotify( + /*user_agent=*/absl::nullopt, std::move(body_to_pass)); + } + } ++#endif + } + + } // namespace content +diff --git a/content/browser/network/cross_origin_opener_policy_reporter.cc b/content/browser/network/cross_origin_opener_policy_reporter.cc +--- a/content/browser/network/cross_origin_opener_policy_reporter.cc ++++ b/content/browser/network/cross_origin_opener_policy_reporter.cc +@@ -18,25 +18,17 @@ + #include "services/network/public/mojom/network_context.mojom.h" + #include "services/network/public/mojom/source_location.mojom.h" + #include "url/origin.h" ++#include "build/build_config.h" + + namespace content { + + namespace { + + // Report attribute names (camelCase): +-constexpr char kColumnNumber[] = "columnNumber"; + constexpr char kDisposition[] = "disposition"; +-constexpr char kEffectivePolicy[] = "effectivePolicy"; +-constexpr char kInitialPopupURL[] = "initialPopupURL"; +-constexpr char kLineNumber[] = "lineNumber"; + constexpr char kNextURL[] = "nextResponseURL"; +-constexpr char kOpeneeURL[] = "openeeURL"; +-constexpr char kOpenerURL[] = "openerURL"; +-constexpr char kOtherDocumentURL[] = "otherDocumentURL"; + constexpr char kPreviousURL[] = "previousResponseURL"; +-constexpr char kProperty[] = "property"; + constexpr char kReferrer[] = "referrer"; +-constexpr char kSourceFile[] = "sourceFile"; + constexpr char kType[] = "type"; + + // Report attribute values: +@@ -45,6 +37,7 @@ constexpr char kDispositionReporting[] = "reporting"; + constexpr char kTypeFromResponse[] = "navigation-from-response"; + constexpr char kTypeToResponse[] = "navigation-to-response"; + ++#if BUILDFLAG(ENABLE_REPORTING) + std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) { + switch (coop_value) { + case network::mojom::CrossOriginOpenerPolicyValue::kUnsafeNone: +@@ -62,6 +55,7 @@ std::string ToString(network::mojom::CrossOriginOpenerPolicyValue coop_value) { + return "restrict-properties-plus-coep"; + } + } ++#endif + + FrameTreeNode* TopLevelOpener(FrameTreeNode* frame) { + FrameTreeNode* opener = +@@ -233,6 +227,7 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport( + network::mojom::SourceLocationPtr source_location, + const std::string& reported_window_url, + const std::string& initial_popup_url) const { ++#if BUILDFLAG(ENABLE_REPORTING) + // Cross-Origin-Opener-Policy-Report-Only is not required to provide + // endpoints. + if (!coop_.report_only_reporting_endpoint) +@@ -280,12 +275,14 @@ void CrossOriginOpenerPolicyReporter::QueueAccessReport( + storage_partition_->GetNetworkContext()->QueueReport( + "coop", endpoint, context_url_, reporting_source_, + network_anonymization_key_, absl::nullopt, std::move(body)); ++#endif + } + + void CrossOriginOpenerPolicyReporter::QueueNavigationReport( + base::Value::Dict body, + const std::string& endpoint, + bool is_report_only) { ++#if BUILDFLAG(ENABLE_REPORTING) + body.Set(kDisposition, + is_report_only ? kDispositionReporting : kDispositionEnforce); + body.Set(kEffectivePolicy, +@@ -294,6 +291,7 @@ void CrossOriginOpenerPolicyReporter::QueueNavigationReport( + "coop", endpoint, context_url_, reporting_source_, + network_anonymization_key_, + /*user_agent=*/absl::nullopt, std::move(body)); ++#endif + } + + } // namespace content +diff --git a/content/browser/network/reporting_service_proxy.cc b/content/browser/network/reporting_service_proxy.cc +--- a/content/browser/network/reporting_service_proxy.cc ++++ b/content/browser/network/reporting_service_proxy.cc +@@ -11,6 +11,7 @@ + #include "base/memory/ref_counted.h" + #include "base/unguessable_token.h" + #include "base/values.h" ++#include "net/base/features.h" + #include "content/browser/service_worker/service_worker_host.h" + #include "content/browser/worker_host/dedicated_worker_host.h" + #include "content/browser/worker_host/shared_worker_host.h" +@@ -174,12 +175,14 @@ class ReportingServiceProxyImpl : public blink::mojom::ReportingServiceProxy { + const std::string& group, + const std::string& type, + base::Value::Dict body) { ++#if BUILDFLAG(ENABLE_REPORTING) + auto* rph = RenderProcessHost::FromID(render_process_id_); + if (!rph) + return; + rph->GetStoragePartition()->GetNetworkContext()->QueueReport( + type, group, url, reporting_source_, network_anonymization_key_, + /*user_agent=*/absl::nullopt, std::move(body)); ++#endif + } + + const int render_process_id_; +diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc +--- a/content/browser/renderer_host/render_frame_host_impl.cc ++++ b/content/browser/renderer_host/render_frame_host_impl.cc +@@ -12373,12 +12373,6 @@ void RenderFrameHostImpl::MaybeGenerateCrashReport( + base::Value::Dict body; + if (!reason.empty()) + body.Set("reason", reason); +- +- // Send the crash report to the Reporting API. +- GetProcess()->GetStoragePartition()->GetNetworkContext()->QueueReport( +- /*type=*/"crash", /*group=*/"default", last_committed_url_, +- GetReportingSource(), isolation_info_.network_anonymization_key(), +- absl::nullopt /* user_agent */, std::move(body)); + } + + void RenderFrameHostImpl::SendCommitNavigation( +diff --git a/content/browser/web_package/signed_exchange_reporter.cc b/content/browser/web_package/signed_exchange_reporter.cc +--- a/content/browser/web_package/signed_exchange_reporter.cc ++++ b/content/browser/web_package/signed_exchange_reporter.cc +@@ -127,6 +127,7 @@ bool ShouldDowngradeReport(const char* result_string, + void ReportResult(int frame_tree_node_id, + network::mojom::SignedExchangeReportPtr report, + const net::NetworkAnonymizationKey& network_isolation_key) { ++#if BUILDFLAG(ENABLE_REPORTING) + FrameTreeNode* frame_tree_node = + FrameTreeNode::GloballyFindByID(frame_tree_node_id); + if (!frame_tree_node) +@@ -141,6 +142,7 @@ void ReportResult(int frame_tree_node_id, + DCHECK(partition); + partition->GetNetworkContext()->QueueSignedExchangeReport( + std::move(report), network_isolation_key); ++#endif + } + + } // namespace +diff --git a/content/public/common/content_switch_dependent_feature_overrides.cc b/content/public/common/content_switch_dependent_feature_overrides.cc +--- a/content/public/common/content_switch_dependent_feature_overrides.cc ++++ b/content/public/common/content_switch_dependent_feature_overrides.cc +@@ -8,6 +8,7 @@ + #include "content/public/common/content_features.h" + #include "content/public/common/content_switches.h" + #include "net/base/features.h" ++#include "net/net_buildflags.h" + #include "services/network/public/cpp/features.h" + #include "services/network/public/cpp/network_switches.h" + #include "third_party/blink/public/common/features.h" +diff --git a/net/reporting/reporting_service.cc b/net/reporting/reporting_service.cc +--- a/net/reporting/reporting_service.cc ++++ b/net/reporting/reporting_service.cc +@@ -211,6 +211,12 @@ class ReportingServiceImpl : public ReportingService { + base::Value::Dict body, + int depth, + base::TimeTicks queued_ticks) { ++#if BUILDFLAG(ENABLE_REPORTING) ++ if ((true)) ++ return; ++#else ++#error Attempting to build with enable_reporting ++#endif + DCHECK(initialized_); + context_->cache()->AddReport( + reporting_source, network_anonymization_key, sanitized_url, user_agent, +diff --git a/services/network/network_context.h b/services/network/network_context.h +--- a/services/network/network_context.h ++++ b/services/network/network_context.h +@@ -461,10 +461,10 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext + const absl::optional& reporting_source, + const net::NetworkAnonymizationKey& network_anonymization_key, + const absl::optional& user_agent, +- base::Value::Dict body) override; ++ base::Value::Dict body); + void QueueSignedExchangeReport( + mojom::SignedExchangeReportPtr report, +- const net::NetworkAnonymizationKey& network_anonymization_key) override; ++ const net::NetworkAnonymizationKey& network_anonymization_key); + void AddDomainReliabilityContextForTesting( + const url::Origin& origin, + const GURL& upload_url, +diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn +--- a/services/network/public/mojom/BUILD.gn ++++ b/services/network/public/mojom/BUILD.gn +@@ -1120,7 +1120,6 @@ mojom("mojom") { + export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" + export_header_blink = "third_party/blink/public/platform/web_common.h" + if (enable_reporting) { +- enabled_features += [ "enable_reporting" ] + } + } + +diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom +--- a/services/network/public/mojom/network_context.mojom ++++ b/services/network/public/mojom/network_context.mojom +@@ -1064,6 +1064,7 @@ interface NetworkContext { + // provided |network_isolation_key|. + // + // Spec: https://w3c.github.io/reporting/#concept-reports ++ [EnableIf=enable_reporting] + QueueReport(string type, + string group, + url.mojom.Url url, +@@ -1077,6 +1078,7 @@ interface NetworkContext { + // Note that this queued report will never be delivered if no reporting + // endpoint matching is registered for with the provided + // |network_isolation_key|. ++ [EnableIf=enable_reporting] + QueueSignedExchangeReport(SignedExchangeReport report, + NetworkAnonymizationKey network_anonymization_key); + +diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc +--- a/third_party/blink/renderer/core/frame/local_frame.cc ++++ b/third_party/blink/renderer/core/frame/local_frame.cc +@@ -40,6 +40,7 @@ + #include "build/build_config.h" + #include "mojo/public/cpp/bindings/self_owned_receiver.h" + #include "mojo/public/cpp/system/message_pipe.h" ++#include "net/net_buildflags.h" + #include "services/data_decoder/public/mojom/resource_snapshot_for_web_bundle.mojom-blink.h" + #include "services/network/public/cpp/features.h" + #include "services/network/public/mojom/content_security_policy.mojom-blink.h" +@@ -2307,9 +2308,11 @@ const base::UnguessableToken& LocalFrame::GetAgentClusterId() const { + return base::UnguessableToken::Null(); + } + ++#if BUILDFLAG(ENABLE_REPORTING) + mojom::blink::ReportingServiceProxy* LocalFrame::GetReportingService() { + return mojo_handler_->ReportingService(); + } ++#endif + + // static + void LocalFrame::NotifyUserActivation( +diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h +--- a/third_party/blink/renderer/core/frame/local_frame.h ++++ b/third_party/blink/renderer/core/frame/local_frame.h +@@ -35,9 +35,9 @@ + #include "base/time/default_tick_clock.h" + #include "base/time/time.h" + #include "base/unguessable_token.h" +-#include "build/build_config.h" + #include "mojo/public/cpp/bindings/pending_associated_receiver.h" + #include "mojo/public/cpp/bindings/pending_receiver.h" ++#include "net/net_buildflags.h" + #include "services/device/public/mojom/device_posture_provider.mojom-blink-forward.h" + #include "services/network/public/mojom/fetch_api.mojom-blink-forward.h" + #include "third_party/blink/public/common/frame/frame_ad_evidence.h" +@@ -593,9 +593,9 @@ class CORE_EXPORT LocalFrame final + } + + SmoothScrollSequencer& GetSmoothScrollSequencer(); +- ++#if BUILDFLAG(ENABLE_REPORTING) + mojom::blink::ReportingServiceProxy* GetReportingService(); +- ++#endif + // Returns the frame host ptr. The interface returned is backed by an + // associated interface with the legacy Chrome IPC channel. + mojom::blink::LocalFrameHost& GetLocalFrameHostRemote() const; +diff --git a/third_party/blink/renderer/core/frame/reporting_context.cc b/third_party/blink/renderer/core/frame/reporting_context.cc +--- a/third_party/blink/renderer/core/frame/reporting_context.cc ++++ b/third_party/blink/renderer/core/frame/reporting_context.cc +@@ -4,6 +4,7 @@ + + #include "third_party/blink/renderer/core/frame/reporting_context.h" + ++#include "net/net_buildflags.h" + #include "third_party/blink/public/common/browser_interface_broker_proxy.h" + #include "third_party/blink/public/platform/platform.h" + #include "third_party/blink/public/platform/task_type.h" +@@ -53,7 +54,9 @@ const char ReportingContext::kSupplementName[] = "ReportingContext"; + ReportingContext::ReportingContext(ExecutionContext& context) + : Supplement(context), + execution_context_(context), ++#if BUILDFLAG(ENABLE_REPORTING) + reporting_service_(&context), ++#endif + receiver_(this, &context) {} + + // static +@@ -117,7 +120,9 @@ void ReportingContext::Trace(Visitor* visitor) const { + visitor->Trace(observers_); + visitor->Trace(report_buffer_); + visitor->Trace(execution_context_); ++#if BUILDFLAG(ENABLE_REPORTING) + visitor->Trace(reporting_service_); ++#endif + visitor->Trace(receiver_); + Supplement::Trace(visitor); + } +@@ -139,6 +144,7 @@ void ReportingContext::CountReport(Report* report) { + UseCounter::Count(execution_context_, feature); + } + ++#if BUILDFLAG(ENABLE_REPORTING) + const HeapMojoRemote& + ReportingContext::GetReportingService() const { + if (!reporting_service_.is_bound()) { +@@ -148,6 +154,7 @@ ReportingContext::GetReportingService() const { + } + return reporting_service_; + } ++#endif + + void ReportingContext::NotifyInternal(Report* report) { + // Buffer the report. +@@ -170,6 +177,7 @@ void ReportingContext::NotifyInternal(Report* report) { + + void ReportingContext::SendToReportingAPI(Report* report, + const String& endpoint) const { ++#if BUILDFLAG(ENABLE_REPORTING) + const String& type = report->type(); + if (!(type == ReportType::kCSPViolation || type == ReportType::kDeprecation || + type == ReportType::kPermissionsPolicyViolation || +@@ -227,6 +235,7 @@ void ReportingContext::SendToReportingAPI(Report* report, + url, endpoint, body->featureId(), body->disposition(), body->message(), + body->sourceFile(), line_number, column_number); + } ++#endif + } + + } // namespace blink +diff --git a/third_party/blink/renderer/core/frame/reporting_context.h b/third_party/blink/renderer/core/frame/reporting_context.h +--- a/third_party/blink/renderer/core/frame/reporting_context.h ++++ b/third_party/blink/renderer/core/frame/reporting_context.h +@@ -5,6 +5,7 @@ + #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_REPORTING_CONTEXT_H_ + #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_REPORTING_CONTEXT_H_ + ++#include "net/net_buildflags.h" + #include "third_party/blink/public/mojom/frame/reporting_observer.mojom-blink.h" + #include "third_party/blink/public/mojom/reporting/reporting.mojom-blink.h" + #include "third_party/blink/renderer/core/core_export.h" +@@ -55,10 +56,10 @@ class CORE_EXPORT ReportingContext : public GarbageCollected, + private: + // Counts the use of a report type via UseCounter. + void CountReport(Report*); +- ++#if BUILDFLAG(ENABLE_REPORTING) + const HeapMojoRemote& + GetReportingService() const; +- ++#endif + void NotifyInternal(Report* report); + // Send |report| via the Reporting API to |endpoint|. + void SendToReportingAPI(Report* report, const String& endpoint) const; +@@ -69,8 +70,10 @@ class CORE_EXPORT ReportingContext : public GarbageCollected, + + // This is declared mutable so that the service endpoint can be cached by + // const methods. ++#if BUILDFLAG(ENABLE_REPORTING) + mutable HeapMojoRemote + reporting_service_; ++#endif + + HeapMojoReceiver receiver_; + }; +-- +2.25.1 diff --git a/bromite/build/patches/Allow-building-without-supervised-users.patch b/bromite/build/patches/Allow-building-without-supervised-users.patch new file mode 100644 index 00000000..f0af2d7d --- /dev/null +++ b/bromite/build/patches/Allow-building-without-supervised-users.patch @@ -0,0 +1,53 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Mon, 21 Feb 2022 01:24:11 +0100 +Subject: Allow building without supervised users + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../browser/supervised_user/ChildAccountService.java | 11 ----------- + .../child_accounts/child_account_service_android.cc | 9 --------- + 2 files changed, 20 deletions(-) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java b/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/supervised_user/ChildAccountService.java +@@ -31,21 +31,10 @@ public class ChildAccountService { + ThreadUtils.assertOnUiThread(); + final Activity activity = windowAndroid.getActivity().get(); + if (activity == null) { +- PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> { +- ChildAccountServiceJni.get().onReauthenticationFailed(nativeOnFailureCallback); +- }); + return; + } + Account account = AccountUtils.createAccountFromName(accountName); + AccountManagerFacadeProvider.getInstance().updateCredentials(account, activity, success -> { +- if (!success) { +- ChildAccountServiceJni.get().onReauthenticationFailed(nativeOnFailureCallback); +- } + }); + } +- +- @NativeMethods +- interface Natives { +- void onReauthenticationFailed(long onFailureCallbackPtr); +- } + } +diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc b/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc +--- a/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc ++++ b/chrome/browser/supervised_user/child_accounts/child_account_service_android.cc +@@ -39,12 +39,3 @@ void ReauthenticateChildAccount( + env, window_android->GetJavaObject(), ConvertUTF8ToJavaString(env, email), + reinterpret_cast(callback_copy.release())); + } +- +-void JNI_ChildAccountService_OnReauthenticationFailed(JNIEnv* env, +- jlong jcallbackPtr) { +- // Cast the pointer value back to a Callback and take ownership of it. +- std::unique_ptr> callback( +- reinterpret_cast*>(jcallbackPtr)); +- +- callback->Run(); +-} +-- +2.25.1 diff --git a/bromite/build/patches/Allow-playing-audio-in-background.patch b/bromite/build/patches/Allow-playing-audio-in-background.patch new file mode 100644 index 00000000..3d211b33 --- /dev/null +++ b/bromite/build/patches/Allow-playing-audio-in-background.patch @@ -0,0 +1,54 @@ +From: AlexeyBarabash +Date: Thu, 2 Nov 2017 18:21:16 +0200 +Subject: Allow playing audio in background + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../renderer/platform/media/web_media_player_impl.cc | 12 +++++++++++- + .../renderer/platform/media/web_media_player_impl.h | 3 +++ + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc +--- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc ++++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc +@@ -1226,6 +1226,12 @@ bool WebMediaPlayerImpl::HasAudio() const { + return pipeline_metadata_.has_audio; + } + ++bool WebMediaPlayerImpl::HasVideoNonEmptySize() const { ++ DCHECK(main_task_runner_->BelongsToCurrentThread()); ++ ++ return pipeline_metadata_.has_video && pipeline_metadata_.natural_size.width() != 0 && pipeline_metadata_.natural_size.height() != 0; ++} ++ + void WebMediaPlayerImpl::EnabledAudioTracksChanged( + const WebVector& enabledTrackIds) { + DCHECK(main_task_runner_->BelongsToCurrentThread()); +@@ -3627,7 +3633,11 @@ bool WebMediaPlayerImpl::ShouldPausePlaybackWhenHidden() const { + // Audio only stream is allowed to play when in background. + // TODO: We should check IsBackgroundOptimizationCandidate here. But we need + // to move the logic of checking video frames out of that function. +- if (!HasVideo()) ++ ++ //pipeline_metadata_.has_video is true for MediaPlayerRenderer, ++ //see media/base/pipeline_metadata.h. This is a workaround to allow audio ++ //streams be played in background. ++ if (!HasVideoNonEmptySize()) + return false; + + if (using_media_player_renderer_ && +diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.h b/third_party/blink/renderer/platform/media/web_media_player_impl.h +--- a/third_party/blink/renderer/platform/media/web_media_player_impl.h ++++ b/third_party/blink/renderer/platform/media/web_media_player_impl.h +@@ -195,6 +195,9 @@ class PLATFORM_EXPORT WebMediaPlayerImpl + bool HasVideo() const override; + bool HasAudio() const override; + ++ // True is has video and it's frame size is not zero ++ bool HasVideoNonEmptySize() const; ++ + void EnabledAudioTracksChanged( + const WebVector& enabledTrackIds) override; + void SelectedVideoTrackChanged( +-- +2.25.1 diff --git a/bromite/build/patches/Always-use-new-tab-page-for-default-home-page.patch b/bromite/build/patches/Always-use-new-tab-page-for-default-home-page.patch new file mode 100644 index 00000000..dd23ca8b --- /dev/null +++ b/bromite/build/patches/Always-use-new-tab-page-for-default-home-page.patch @@ -0,0 +1,27 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Wed, 27 Jun 2018 11:02:38 +0200 +Subject: Always use new tab page for default home page + +Ignore any partner-provided home page. + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../org/chromium/chrome/browser/homepage/HomepageManager.java | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepageManager.java +@@ -147,10 +147,6 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat + * if the homepage button is force enabled via flag. + */ + public static String getDefaultHomepageUri() { +- if (PartnerBrowserCustomizations.getInstance().isHomepageProviderAvailableAndEnabled()) { +- return PartnerBrowserCustomizations.getInstance().getHomePageUrl().getSpec(); +- } +- + String homepagePartnerDefaultUri; + String homepagePartnerDefaultGurlSerialized = + SharedPreferencesManager.getInstance().readString( +-- +2.25.1 diff --git a/bromite/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch b/bromite/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch new file mode 100644 index 00000000..c7bdae5a --- /dev/null +++ b/bromite/build/patches/AudioBuffer-AnalyserNode-fp-mitigations.patch @@ -0,0 +1,63 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Sun, 25 Mar 2018 21:49:37 +0200 +Subject: AudioBuffer, AnalyserNode: fp mitigations + +Truncate base latency precision to two digits + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../blink/renderer/modules/webaudio/analyser_node.idl | 8 ++++---- + .../blink/renderer/modules/webaudio/audio_buffer.idl | 6 ------ + .../blink/renderer/modules/webaudio/audio_context.cc | 4 +++- + 3 files changed, 7 insertions(+), 11 deletions(-) + +diff --git a/third_party/blink/renderer/modules/webaudio/analyser_node.idl b/third_party/blink/renderer/modules/webaudio/analyser_node.idl +--- a/third_party/blink/renderer/modules/webaudio/analyser_node.idl ++++ b/third_party/blink/renderer/modules/webaudio/analyser_node.idl +@@ -40,10 +40,10 @@ + + // Copies the current frequency data into the passed array. + // If the array has fewer elements than the frequencyBinCount, the excess elements will be dropped. +- [HighEntropy, Measure] void getFloatFrequencyData(Float32Array array); +- [HighEntropy, Measure] void getByteFrequencyData(Uint8Array array); ++ //[HighEntropy, Measure] void getFloatFrequencyData(Float32Array array); ++ //[HighEntropy, Measure] void getByteFrequencyData(Uint8Array array); + + // Real-time waveform data +- [HighEntropy, Measure] void getFloatTimeDomainData(Float32Array array); +- [HighEntropy, Measure] void getByteTimeDomainData(Uint8Array array); ++ //[HighEntropy, Measure] void getFloatTimeDomainData(Float32Array array); ++ //[HighEntropy, Measure] void getByteTimeDomainData(Uint8Array array); + }; +diff --git a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl +--- a/third_party/blink/renderer/modules/webaudio/audio_buffer.idl ++++ b/third_party/blink/renderer/modules/webaudio/audio_buffer.idl +@@ -37,12 +37,6 @@ + + // Channel access + readonly attribute unsigned long numberOfChannels; +- [HighEntropy=Direct, Measure, RaisesException] Float32Array getChannelData( +- unsigned long channelIndex); +- [HighEntropy, Measure, RaisesException] void copyFromChannel( +- Float32Array destination, +- unsigned long channelNumber, +- optional unsigned long bufferOffset = 0); + [RaisesException] void copyToChannel( + Float32Array source, + unsigned long channelNumber, +diff --git a/third_party/blink/renderer/modules/webaudio/audio_context.cc b/third_party/blink/renderer/modules/webaudio/audio_context.cc +--- a/third_party/blink/renderer/modules/webaudio/audio_context.cc ++++ b/third_party/blink/renderer/modules/webaudio/audio_context.cc +@@ -508,7 +508,9 @@ double AudioContext::baseLatency() const { + DCHECK(IsMainThread()); + DCHECK(destination()); + +- return base_latency_; ++ // remove precision past two decimal digits ++ int l = base_latency_ * 100; ++ return double(l)/100; + } + + double AudioContext::outputLatency() const { +-- +2.25.1 diff --git a/bromite/build/patches/Automated-domain-substitution.patch b/bromite/build/patches/Automated-domain-substitution.patch new file mode 100644 index 00000000..831d52c9 --- /dev/null +++ b/bromite/build/patches/Automated-domain-substitution.patch @@ -0,0 +1,42721 @@ +From: csagan5 <32685696+csagan5@users.noreply.github.com> +Date: Fri, 21 Aug 2020 13:41:07 +0200 +Subject: Automated domain substitution + +License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html +--- + .../cts_config/webview_cts_gcs_path.json | 30 +- + android_webview/tools/record_netlog.py | 6 +- + .../tools/remove_preinstalled_webview.py | 2 +- + android_webview/tools/update_cts.py | 6 +- + ash/accelerators/accelerator_notifications.cc | 2 +- + ash/ash_strings.grd | 28 +- + ash/assistant/assistant_setup_controller.cc | 2 +- + ash/assistant/util/deep_link_util.cc | 16 +- + ash/components/phonehub/url_constants.cc | 2 +- + ash/constants/url_constants.cc | 6 +- + .../fake_device_metadata_http_fetcher.cc | 2 +- + .../fast_pair/device_metadata_fetcher.cc | 2 +- + .../fast_pair/footprints_fetcher_impl.cc | 4 +- + .../ui/fast_pair/fast_pair_presenter_impl.cc | 4 +- + .../device_sync/cryptauth_client_impl.cc | 8 +- + ash/services/ime/constants.cc | 2 +- + ash/system/eche/eche_tray.cc | 2 +- + ...pcie_peripheral_notification_controller.cc | 2 +- + .../usb_peripheral_notification_controller.cc | 4 +- + .../test_wallpaper_controller_client.cc | 2 +- + .../camera_app_ui/camera_app_untrusted_ui.cc | 2 +- + .../resources/js/lib/analytics.js | 14 +- + .../resources/strings/camera_strings.grd | 2 +- + .../quick_unlock/pin_keyboard_icons.html | 2 +- + ash/webui/diagnostics_ui/diagnostics_ui.cc | 2 +- + ash/webui/eche_app_ui/eche_alert_generator.cc | 2 +- + .../help_app_kids_magazine_untrusted_ui.cc | 2 +- + ash/webui/media_app_ui/media_app_guest_ui.cc | 2 +- + .../backend/help_content_provider.cc | 4 +- + .../resources/confirmation_page.js | 2 +- + .../os_feedback_ui/resources/fake_data.js | 16 +- + .../resources/feedback_constants.js | 6 +- + .../os_feedback_ui/resources/search_page.js | 2 +- + .../personalization_app_ui.cc | 2 +- + .../projector_app/projector_xhr_sender.cc | 10 +- + .../projector_app/projector_xhr_sender.h | 2 +- + .../projector_app/untrusted_projector_ui.cc | 12 +- + .../scanning/resources/scanning_app.html | 2 +- + ash/webui/scanning/resources/scanning_app.js | 2 +- + ...boarding_enter_rsu_wp_disable_code_page.js | 2 +- + base/android/resource_exclusions.gni | 2 +- + base/debug/debugger_posix.cc | 4 +- + base/debug/stack_trace_posix.cc | 2 +- + base/functional/callback.h | 8 +- + base/ios/device_util.mm | 2 +- + base/memory/raw_ptr.cc | 2 +- + base/memory/raw_ptr_asan_service.cc | 2 +- + build/android/gradle/generate_gradle.py | 2 +- + .../android/gyp/assert_static_initializers.py | 2 +- + build/android/gyp/lint.py | 2 +- + build/android/gyp/proguard.py | 4 +- + build/android/gyp/util/diff_utils.py | 4 +- + build/android/gyp/util/protoresources.py | 2 +- + .../android/incremental_install/installer.py | 2 +- + build/android/resource_sizes.py | 2 +- + build/android/test_wrapper/logdog_wrapper.py | 2 +- + build/apple/tweak_info_plist.py | 6 +- + build/config/android/rules.gni | 2 +- + build/config/chrome_build.gni | 2 +- + build/config/chromeos/args.gni | 4 +- + build/config/chromeos/rules.gni | 6 +- + build/config/compiler/compiler.gni | 4 +- + build/config/locales.gni | 2 +- + build/config/nacl/rules.gni | 2 +- + build/config/ozone.gni | 2 +- + build/config/sanitizers/sanitizers.gni | 2 +- + build/config/win/control_flow_guard.gni | 2 +- + build/fuchsia/binary_size_differ.py | 2 +- + build/fuchsia/binary_sizes.py | 2 +- + build/fuchsia/pkg_repo.py | 2 +- + build/linux/install-chromeos-fonts.py | 2 +- + .../linux/sysroot_scripts/install-sysroot.py | 2 +- + build/mac_toolchain.py | 2 +- + build/nocompile.gni | 2 +- + build/toolchain/cros_toolchain.gni | 2 +- + build/toolchain/gcc_toolchain.gni | 2 +- + .../lib/common/perf_tests_results_helper.py | 2 +- + build/util/lib/results/result_sink.py | 2 +- + build/whitespace_file.txt | 2 +- + buildtools/README.txt | 4 +- + buildtools/clang_format/README.txt | 6 +- + .../javatest_manifest_config_delta.json | 12 +- + .../manifest/maps_go_manifest_config.json | 10 +- + chrome/app/chromium_strings.grd | 24 +- + chrome/app/generated_resources.grd | 304 +-- + chrome/app/google_chrome_strings.grd | 24 +- + chrome/app/resources/locale_settings.grd | 10 +- + chrome/browser/about_flags.cc | 4 +- + .../browser/android/explore_sites/url_util.cc | 2 +- + .../android/webapk/webapk_installer.cc | 4 +- + .../app_service/webapk/webapk_install_task.cc | 2 +- + .../apps/digital_goods/digital_goods_ash.cc | 2 +- + .../digital_goods_factory_impl.cc | 2 +- + .../apps/platform_apps/install_chrome_app.cc | 2 +- + .../ash/android_sms/android_sms_urls.cc | 16 +- + chrome/browser/ash/app_mode/fake_cws.cc | 2 +- + .../auth/arc_background_auth_code_fetcher.cc | 2 +- + .../arc/auth/arc_robot_auth_code_fetcher.cc | 2 +- + .../arc/input_overlay/ui/input_menu_view.cc | 2 +- + .../browser/ash/assistant/assistant_util.cc | 4 +- + .../ash/attestation/attestation_ca_client.cc | 8 +- + chrome/browser/ash/borealis/borealis_util.cc | 2 +- + .../ash/child_accounts/child_user_service.cc | 2 +- + chrome/browser/ash/crostini/crostini_util.cc | 2 +- + .../customization/customization_document.cc | 2 +- + .../enhanced_network_tts_constants.cc | 2 +- + .../file_manager/file_manager_string_util.cc | 14 +- + .../ash/file_manager/open_with_browser.cc | 8 +- + chrome/browser/ash/hats/hats_dialog.cc | 2 +- + .../assistive_suggester_client_filter.cc | 24 +- + .../ash/input_method/ime_rules_config.h | 14 +- + .../easy_unlock/easy_unlock_key_names.cc | 2 +- + .../ash/login/gaia_reauth_token_fetcher.cc | 2 +- + .../ash/login/marketing_backend_connector.cc | 4 +- + .../connectivity/target_fido_controller.cc | 4 +- + .../login/saml/password_sync_token_fetcher.cc | 2 +- + .../recommend_apps_fetcher_impl.cc | 4 +- + .../default_user_image/default_user_images.cc | 2 +- + .../arc_dns_resolution_routine.cc | 6 +- + .../dns_latency_routine.cc | 2 +- + .../dns_resolution_routine.cc | 2 +- + .../network_diagnostics_util.cc | 14 +- + .../video_conferencing_routine.cc | 4 +- + .../ash/plugin_vm/plugin_vm_diagnostics.cc | 4 +- + .../plugin_vm/plugin_vm_license_checker.cc | 4 +- + .../browser/ash/plugin_vm/plugin_vm_util.cc | 6 +- + .../account_status_check_fetcher.cc | 6 +- + .../powerwash_requirements_checker.cc | 2 +- + .../device_command_start_crd_session_job.cc | 6 +- + .../policy/uploading/heartbeat_scheduler.cc | 4 +- + chrome/browser/ash/u2f_notification.cc | 2 +- + .../wallpaper_handlers/wallpaper_handlers.cc | 16 +- + .../ash/web_applications/terminal_source.cc | 4 +- + .../autofill/autofill_gstatic_reader.cc | 4 +- + .../apc_onboarding_coordinator.cc | 2 +- + .../browser_switcher_service.cc | 2 +- + chrome/browser/cart/cart_discount_fetcher.cc | 2 +- + .../cart/cart_discount_link_fetcher.cc | 2 +- + chrome/browser/cart/cart_service.cc | 24 +- + chrome/browser/cart/fetch_discount_worker.cc | 2 +- + .../cart_domain_cart_url_mapping.json | 2 +- + .../resources/cart_domain_name_mapping.json | 2 +- + .../browser/chrome_browser_application_mac.mm | 2 +- + .../browser/chrome_content_browser_client.cc | 4 +- + .../file_manager/private_api_misc.cc | 2 +- + .../dlp/dlp_clipboard_bubble_constants.h | 2 +- + chrome/browser/devtools/url_constants.cc | 4 +- + .../mixed_content_download_blocking.cc | 2 +- + .../commands/mac_key_rotation_command.cc | 2 +- + .../management_service/rotate_util.cc | 2 +- + .../file_system/signin_dialog_delegate.cc | 2 +- + .../connectors/service_provider_config.cc | 4 +- + .../extension_request_notification.cc | 4 +- + .../enterprise/signals/signals_utils.cc | 4 +- + ...e_js_error_report_processor_nonchromeos.cc | 4 +- + .../cryptotoken_private_api.cc | 8 +- + .../enterprise_platform_keys_api.cc | 2 +- + .../identity_launch_web_auth_flow_function.cc | 2 +- + .../chrome_management_api_delegate.cc | 2 +- + .../api/platform_keys/platform_keys_api.cc | 2 +- + .../chrome_extension_browser_constants.cc | 4 +- + .../extensions/external_pref_loader.cc | 2 +- + chrome/browser/extensions/install_signer.cc | 2 +- + .../chrome_extension_downloader_factory.cc | 2 +- + .../updater/chrome_update_client_config.cc | 2 +- + chrome/browser/flag_descriptions.cc | 18 +- + .../k_anonymity_service_urls.h | 4 +- + .../lacros/lacros_startup_infobar_delegate.cc | 4 +- + .../service_discovery_client_mac.mm | 4 +- + .../long_screenshots_tab_service.cc | 2 +- + .../access_code/access_code_cast_constants.cc | 4 +- + .../cast/cast_media_route_provider.cc | 6 +- + .../dial/dial_media_route_provider.cc | 18 +- + .../media/webrtc/webrtc_event_log_uploader.cc | 2 +- + .../media/webrtc/webrtc_log_uploader.cc | 2 +- + .../nacl_host/nacl_infobar_delegate.cc | 2 +- + .../client/nearby_share_client_impl.cc | 4 +- + .../instantmessaging/constants.h | 4 +- + .../network_traversal_ice_config_fetcher.cc | 12 +- + .../tachyon_ice_config_fetcher.cc | 12 +- + .../modules/drive/drive_service.cc | 8 +- + .../modules/photos/photos_service.cc | 8 +- + .../obsolete_system/obsolete_system_linux.cc | 2 +- + ...rvice_worker_page_load_metrics_observer.cc | 2 +- + .../quiet_permission_prompt_model_android.cc | 2 +- + .../extension_key_permissions_service.cc | 2 +- + .../extension_platform_keys_service.cc | 2 +- + .../browser/policy/safe_search_policy_test.h | 2 +- + .../chrome_prefetch_service_delegate.cc | 6 +- + .../prefetch_proxy/prefetch_proxy_params.cc | 6 +- + .../privacy_sandbox_service.cc | 24 +- + .../profiles/profile_avatar_downloader.cc | 2 +- + .../push_messaging_constants.cc | 2 +- + .../push_messaging_service_impl.cc | 2 +- + .../browser/resources/about_sys/about_sys.js | 2 +- + .../browsing_topics_internals.html | 4 +- + .../resources/chromeos/about_os_credits.html | 6 +- + .../dictation/macros/list_commands_macro.js | 2 +- + .../magnifier/magnifier.js | 2 +- + .../chromevox/background/command_handler.js | 8 +- + .../chromevox/options/options.css | 2 +- + .../tools/webstore_extension_util.py | 10 +- + .../chromevox_manifest.json.jinja2 | 8 +- + .../common/tutorial/chromevox_tutorial.js | 6 +- + .../accessibility/select_to_speak/options.css | 2 +- + .../select_to_speak/options.html | 2 +- + .../select_to_speak/select_to_speak.js | 8 +- + .../select_to_speak_manifest.json.jinja2 | 8 +- + .../switch_access/switch_access.js | 2 +- + .../switch_access_manifest.json.jinja2 | 4 +- + .../add_supervision/add_supervision_ui.js | 16 +- + .../chromeos/arc_support/background.js | 12 +- + .../chromeos/arc_support/playstore.js | 6 +- + .../assistant_optin/assistant_related_info.js | 4 +- + .../assistant_optin/assistant_value_prop.js | 2 +- + .../connectivity_diagnostics/manifest.json | 4 +- + .../resources/chromeos/echo/manifest.json | 122 +- + .../edu_coexistence/edu_coexistence_ui.js | 2 +- + .../chromeos/emoji_picker/icons.html | 2 +- + .../resources/chromeos/emulator/icons.html | 2 +- + .../input_method/google_xkb_manifest.json | 8 +- + .../resources/chromeos/login/debug/debug.js | 10 +- + .../screens/common/arc_terms_of_service.js | 4 +- + .../screens/common/consolidated_consent.js | 2 +- + .../screens/common/marketing_opt_in.html | 2 +- + .../login/screens/login/offline_login.html | 2 +- + .../login/screens/login/offline_login.js | 2 +- + .../browser_tabs_metadata_form.js | 2 +- + .../parent_access/parent_access_ui.js | 8 +- + .../browser/resources/cryptotoken/enroller.js | 2 +- + .../default_apps/external_extensions.json | 2 +- + .../discards/graph_doc_template.html | 2 +- + chrome/browser/resources/downloads/icons.html | 2 +- + .../resources/gaia_auth_host/authenticator.js | 4 +- + .../saml_password_attributes.js | 2 +- + .../resources/hangout_services/manifest.json | 2 +- + .../manifest.json | 2 +- + .../scope_approval_dialog.js | 6 +- + chrome/browser/resources/inspect/inspect.html | 4 +- + .../query_tiles/query_tiles_internals.html | 2 +- + .../query_tiles/query_tiles_internals.js | 4 +- + .../resources/media/mei_preload/manifest.json | 2 +- + .../shared/nearby_shared_icons.html | 4 +- + .../nearby_shared_share_type_icons.html | 2 +- + .../resources/net_internals/index.html | 6 +- + .../network_speech_synthesis/manifest.json | 2 +- + .../network_speech_synthesis/tts_extension.js | 2 +- + .../new_tab_page/modules/photos/module.html | 2 +- + chrome/browser/resources/omnibox/omnibox.html | 2 +- + .../resources/omnibox/omnibox_output.js | 4 +- + .../browser/resources/pdf/elements/icons.html | 2 +- + .../resources/print_preview/ui/icons.html | 2 +- + .../settings/about_page/about_page.html | 4 +- + .../crostini_disk_resize_dialog.html | 2 +- + .../keyboard_and_text_input_page.js | 2 +- + .../chromeos/os_a11y_page/manage_a11y_page.js | 4 +- + .../chromeos/os_a11y_page/os_a11y_page.js | 2 +- + .../channel_switcher_dialog.html | 2 +- + .../chromeos/os_about_page/os_about_page.html | 2 +- + .../borealis_page/borealis_detail_view.html | 2 +- + .../resources/settings/chromeos/os_icons.html | 2 +- + .../os_people_page/users_add_user_dialog.js | 2 +- + chrome/browser/resources/settings/icons.html | 2 +- + .../resources/settings/settings_shared.css | 2 +- + .../browser/resources/tools/build_webui.gni | 2 +- + .../resources/webstore_app/manifest.json | 4 +- + .../demos/cr_input/cr_input_demo.html | 2 +- + .../certificate_reporting_service.cc | 2 +- + .../chrome_cleaner/srt_field_trial_win.cc | 2 +- + .../chrome_enterprise_url_lookup_service.cc | 2 +- + .../chrome_password_protection_service.cc | 4 +- + .../cloud_binary_upload_service.cc | 4 +- + .../check_client_download_request_base.cc | 4 +- + .../download_protection/download_feedback.cc | 2 +- + .../ppapi_download_request.cc | 6 +- + .../extension_telemetry_uploader.cc | 2 +- + .../incident_report_uploader_impl.cc | 4 +- + .../default_settings_fetcher.cc | 2 +- + .../background/ntp_background_service.cc | 2 +- + .../search/background/ntp_backgrounds.cc | 10 +- + .../browser/share/default_ranking_android.cc | 8 +- + .../remote_copy_message_handler.cc | 2 +- + .../sharing/web_push/web_push_sender.cc | 4 +- + chrome/browser/signin/signin_ui_util.cc | 2 +- + .../browser/ssl/connection_help_tab_helper.cc | 2 +- + chrome/browser/ssl/sct_reporting_service.cc | 4 +- + .../child_accounts/kids_management_api.cc | 2 +- + .../supervised_user_block_interstitial.html | 2 +- + ...supervised_user_block_interstitial_v2.html | 2 +- + .../supervised_user_service.cc | 2 +- + .../supervised_user_url_filter.cc | 12 +- + .../strings/android_chrome_strings.grd | 54 +- + .../search/arc/recommend_apps_fetcher_impl.cc | 2 +- + .../ui/app_list/search/common/string_util.cc | 2 +- + .../search/files/item_suggest_cache.h | 2 +- + .../ui/app_list/search/omnibox_util.cc | 2 +- + .../ui/ash/ambient/ambient_client_impl.cc | 8 +- + .../ui/ash/calendar/calendar_keyed_service.cc | 2 +- + .../browser/ui/ash/chrome_shell_delegate.cc | 2 +- + .../ui/ash/in_session_auth_dialog_client.cc | 2 +- + .../projector/pending_screencast_manager.cc | 2 +- + .../browser/ui/ash/system_tray_client_impl.cc | 4 +- + .../tab_under_navigation_throttle.h | 2 +- + ...r_content_setting_bubble_model_delegate.cc | 4 +- + chrome/browser/ui/chrome_pages.cc | 2 +- + .../browser/ui/cocoa/share_menu_controller.mm | 2 +- + .../ui/commander/open_url_command_source.cc | 2 +- + .../ui/dialogs/outdated_upgrade_bubble.cc | 2 +- + .../installation_error_infobar_delegate.cc | 2 +- + chrome/browser/ui/managed_ui.cc | 2 +- + .../omnibox/omnibox_pedal_implementations.cc | 24 +- + .../quick_answers_ui_controller.cc | 4 +- + chrome/browser/ui/signin_view_controller.cc | 2 +- + .../toolbar/media_router_contextual_menu.cc | 6 +- + .../app_dialog/app_uninstall_dialog_view.cc | 2 +- + .../ui/views/hats/hats_next_web_dialog.cc | 2 +- + .../lens/lens_side_panel_navigation_helper.cc | 2 +- + .../ui/views/lens/lens_side_panel_view.cc | 2 +- + .../ui/views/network_profile_bubble_view.cc | 2 +- + .../about_this_site_side_panel_view.cc | 2 +- + .../plugin_vm/plugin_vm_installer_view.cc | 2 +- + .../ui/views/session_crashed_bubble_view.cc | 2 +- + .../lens/lens_unified_side_panel_view.cc | 2 +- + .../app_management_page_handler.cc | 6 +- + .../ash/add_supervision/add_supervision_ui.cc | 4 +- + .../ash/cloud_upload/drive_upload_handler.cc | 2 +- + .../internals_ui_handler.cc | 2 +- + .../edu_coexistence_login_handler_chromeos.cc | 2 +- + .../consolidated_consent_screen_handler.h | 4 +- + .../notification_tester_handler.cc | 2 +- + .../parent_access/parent_access_ui.cc | 4 +- + chrome/browser/ui/webui/feed/feed_ui.cc | 2 +- + .../ui/webui/interstitials/interstitial_ui.cc | 6 +- + .../ui/webui/media_router/cast_feedback_ui.cc | 4 +- + .../quick_pair/quick_pair_handler.cc | 4 +- + .../ui/webui/new_tab_page/foo/foo_handler.cc | 8 +- + .../ui/webui/new_tab_page/untrusted_source.cc | 2 +- + chrome/browser/ui/webui/ntp/new_tab_ui.cc | 2 +- + .../ui/webui/ntp/ntp_resource_cache.cc | 8 +- + .../ui/webui/sanitized_image_source.cc | 6 +- + .../settings/ash/parental_controls_handler.cc | 2 +- + .../webui/settings/reset_settings_handler.cc | 2 +- + .../settings_localized_strings_provider.cc | 2 +- + ...nin_restriction_policy_fetcher_chromeos.cc | 2 +- + .../ui/webui/welcome/google_apps_handler.cc | 12 +- + .../webui/welcome/ntp_background_handler.cc | 2 +- + .../ui/webui/whats_new/whats_new_util.cc | 4 +- + .../fetch_manifest_and_install_command.cc | 2 +- + .../externally_managed_app_manager.cc | 4 +- + .../preinstalled_web_apps/gmail.cc | 6 +- + .../preinstalled_web_apps/google_calendar.cc | 6 +- + .../preinstalled_web_apps/google_chat.cc | 2 +- + .../preinstalled_web_apps/google_docs.cc | 6 +- + .../preinstalled_web_apps/google_drive.cc | 6 +- + .../preinstalled_web_apps/google_meet.cc | 2 +- + .../preinstalled_web_apps/google_sheets.cc | 6 +- + .../preinstalled_web_apps/google_slides.cc | 6 +- + .../preinstalled_web_apps/messages_dogfood.cc | 2 +- + .../preinstalled_web_apps.cc | 8 +- + .../preinstalled_web_apps/youtube.cc | 6 +- + .../web_applications/web_app_install_task.cc | 2 +- + .../chrome_authenticator_request_delegate.cc | 8 +- + .../components/recovery_component.cc | 4 +- + .../crash/crashpad_crash_reporter.cc | 2 +- + .../executables/chrome_cleaner_main.cc | 2 +- + .../logging/cleaner_logging_service.cc | 6 +- + .../chrome_cleaner/logging/dummy_api_keys.cc | 4 +- + .../logging/reporter_logging_service.cc | 6 +- + chrome/common/chrome_features.cc | 6 +- + .../common/extensions/api/_api_features.json | 4 +- + chrome/common/extensions/api/cookies.json | 2 +- + chrome/common/extensions/api/debugger.json | 8 +- + .../extensions/api/declarative_content.json | 4 +- + chrome/common/extensions/api/dom.json | 2 +- + chrome/common/extensions/api/gcm.json | 8 +- + chrome/common/extensions/api/instance_id.json | 2 +- + chrome/common/extensions/api/privacy.json | 2 +- + chrome/common/extensions/api/tabs.json | 4 +- + chrome/common/extensions/api/tts.json | 2 +- + chrome/common/extensions/api/webview_tag.json | 4 +- + chrome/common/extensions/api/windows.json | 2 +- + .../extensions/chrome_extensions_client.cc | 4 +- + chrome/common/google_url_loader_throttle.cc | 4 +- + chrome/common/url_constants.cc | 260 +- + .../gaiacp/associated_user_validator.cc | 2 +- + .../gaiacp/gaia_credential_base.cc | 8 +- + .../credential_provider/gaiacp/gcp_utils.cc | 4 +- + .../gaiacp/gcpw_strings.cc | 2 +- + .../credential_provider/gaiacp/mdm_utils.cc | 2 +- + chrome/docs/devtools-pillar.html | 2 +- + chrome/docs/index.html | 18 +- + chrome/docs/platform-pillar.html | 12 +- + chrome/installer/setup/eula/oem_ar.html | 2 +- + chrome/installer/setup/eula/oem_bg.html | 2 +- + chrome/installer/setup/eula/oem_ca.html | 2 +- + chrome/installer/setup/eula/oem_cs.html | 2 +- + chrome/installer/setup/eula/oem_da.html | 2 +- + chrome/installer/setup/eula/oem_de.html | 2 +- + chrome/installer/setup/eula/oem_el.html | 2 +- + chrome/installer/setup/eula/oem_en-GB.html | 2 +- + chrome/installer/setup/eula/oem_en.html | 2 +- + chrome/installer/setup/eula/oem_es-419.html | 2 +- + chrome/installer/setup/eula/oem_es.html | 2 +- + chrome/installer/setup/eula/oem_et.html | 2 +- + chrome/installer/setup/eula/oem_fi.html | 2 +- + chrome/installer/setup/eula/oem_fil.html | 2 +- + chrome/installer/setup/eula/oem_fr.html | 2 +- + chrome/installer/setup/eula/oem_hi.html | 2 +- + chrome/installer/setup/eula/oem_hr.html | 2 +- + chrome/installer/setup/eula/oem_hu.html | 2 +- + chrome/installer/setup/eula/oem_id.html | 2 +- + chrome/installer/setup/eula/oem_it.html | 2 +- + chrome/installer/setup/eula/oem_iw.html | 2 +- + chrome/installer/setup/eula/oem_ja.html | 2 +- + chrome/installer/setup/eula/oem_ko.html | 2 +- + chrome/installer/setup/eula/oem_lt.html | 2 +- + chrome/installer/setup/eula/oem_lv.html | 2 +- + chrome/installer/setup/eula/oem_nl.html | 2 +- + chrome/installer/setup/eula/oem_no.html | 2 +- + chrome/installer/setup/eula/oem_pl.html | 2 +- + chrome/installer/setup/eula/oem_pt-BR.html | 2 +- + chrome/installer/setup/eula/oem_pt-PT.html | 2 +- + chrome/installer/setup/eula/oem_ro.html | 2 +- + chrome/installer/setup/eula/oem_ru.html | 2 +- + chrome/installer/setup/eula/oem_sk.html | 2 +- + chrome/installer/setup/eula/oem_sl.html | 2 +- + chrome/installer/setup/eula/oem_sr.html | 2 +- + chrome/installer/setup/eula/oem_sv.html | 2 +- + chrome/installer/setup/eula/oem_th.html | 2 +- + chrome/installer/setup/eula/oem_tr.html | 2 +- + chrome/installer/setup/eula/oem_uk.html | 2 +- + chrome/installer/setup/eula/oem_vi.html | 2 +- + chrome/installer/setup/eula/oem_zh-CN.html | 2 +- + chrome/installer/setup/eula/oem_zh-TW.html | 2 +- + .../setup/google_chrome_behaviors.cc | 2 +- + chrome/renderer/cart/commerce_hint_agent.cc | 2 +- + chrome/renderer/media/flash_embed_rewrite.cc | 2 +- + ...ip_add_to_cart_request_domain_mapping.json | 2 +- + .../extensions/identity_custom_bindings.js | 2 +- + .../mac_notification_service_ns.mm | 2 +- + chrome/tools/webforms_aggregator_tests.py | 4 +- + chrome/tools/weburl_links.txt | 6 +- + chrome/updater/branding.gni | 12 +- + chrome/updater/mac/setup/ks_tickets.mm | 2 +- + chrome/utility/importer/ie_importer_win.cc | 2 +- + .../shell_devtools_discovery_page.html | 2 +- + chromecast/browser/webui/cast_webui.cc | 4 +- + .../runtime/browser/grpc_webui_controller.cc | 2 +- + chromecast/chromecast.gni | 2 +- + chromecast/crash/linux/minidump_uploader.cc | 2 +- + chromecast/net/connectivity_checker_impl.h | 4 +- + .../components/dbus/rmad/fake_rmad_client.cc | 2 +- + .../device_activity_controller.cc | 2 +- + .../ash/components/drivefs/drivefs_auth.cc | 2 +- + .../simple_geolocation_provider.cc | 2 +- + .../login/auth/recovery/service_constants.cc | 2 +- + .../multidevice/stub_multidevice_util.cc | 2 +- + .../components/timezone/timezone_request.cc | 2 +- + .../trial_group/trial_group_checker.cc | 2 +- + .../assistant_manager_service_impl.cc | 2 +- + chromeos/ash/services/assistant/service.cc | 2 +- + chromeos/chromeos_strings.grd | 6 +- + .../translation_result_loader.cc | 2 +- + chromeos/printing/ppd_provider.h | 2 +- + chromeos/printing/printer_config_cache.cc | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri1.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri10.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri11.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri12.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri13.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri14.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri15.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri18.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri19.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri2.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri24.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri3.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri4.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri49.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri5.txt | 2 +- + .../error_page_populator.cc | 2 +- + .../predictor_config_definitions.cc | 2 +- + .../autofill/content/renderer/form_cache.cc | 2 +- + .../renderer/page_passwords_analyser.cc | 2 +- + .../password_form_conversion_utils.cc | 2 +- + .../core/browser/autofill_download_manager.cc | 2 +- + .../core/browser/autofill_experiments.cc | 6 +- + .../browser/data_model/test_data_creator.cc | 6 +- + .../credit_card_fido_authenticator.cc | 2 +- + .../core/browser/payments/payments_client.cc | 2 +- + .../browser/payments/payments_service_url.cc | 10 +- + ...roid_chrome_autofill_assistant_strings.grd | 2 +- + .../autofill_assistant_onboarding_fetcher.cc | 2 +- + .../browser/headless/client_headless.cc | 2 +- + .../browser/service/server_url_fetcher.cc | 2 +- + .../launched_configs.cc | 4 +- + .../safe_browsing_triggered_popup_blocker.h | 4 +- + .../core/breadcrumb_manager_tab_helper.cc | 2 +- + .../strings/android/browser_ui_strings.grd | 6 +- + .../core/counters/history_counter.cc | 2 +- + .../core/history_notice_utils.cc | 4 +- + .../core/captive_portal_detector.cc | 2 +- + .../data/log_list.json | 22 +- + components/commerce/core/account_checker.cc | 10 +- + .../resources/cart_domain_cart_url_regex.json | 2 +- + .../subscriptions_server_proxy.cc | 4 +- + .../components_google_chrome_strings.grd | 2 +- + .../notes/core/server/notes_repository.cc | 2 +- + .../notes/core/server/notes_server_base.cc | 4 +- + .../notes/core/templates/template_fetcher.h | 2 +- + .../reactions/core/reaction_list_factory.cc | 4 +- + .../crash/core/app/crash_reporter_client.cc | 2 +- + .../crash/core/browser/resources/crashes.js | 4 +- + components/cronet/tools/generate_javadoc.py | 2 +- + .../core/html/dom_distiller_viewer.html | 2 +- + .../core/javascript/dom_distiller_viewer.js | 2 +- + components/dom_distiller/core/viewer.cc | 6 +- + .../domain_reliability/bake_in_configs.py | 286 +- + components/drive/service/drive_api_service.cc | 6 +- + .../error_page/common/localized_error.cc | 2 +- + .../favicon/core/large_icon_service_impl.cc | 2 +- + components/feed/core/v2/feed_network_impl.cc | 8 +- + components/feed/feed_feature_list.cc | 4 +- + components/feedback/feedback_uploader.cc | 2 +- + components/flags_ui/resources/flags.html | 4 +- + components/gcm_driver/gcm_account_mapper.cc | 2 +- + components/gcm_driver/gcm_client_impl.cc | 2 +- + .../core/browser/browsing_history_service.cc | 4 +- + .../history/core/browser/history_service.cc | 4 +- + .../core/browser/web_history_service.cc | 12 +- + .../per_user_topic_subscription_manager.cc | 2 +- + .../tab_modal_dialog_manager.cc | 2 +- + .../core/keyed_service_base_factory.cc | 2 +- + components/lens/lens_features.cc | 2 +- + components/media_router/common/media_source.h | 2 +- + .../metrics/net/net_metrics_log_uploader.cc | 2 +- + components/metrics/url_constants.cc | 6 +- + components/nacl/docs/dev/index.html | 4 +- + components/net_log/resources/net_export.html | 6 +- + .../network_time/network_time_tracker.cc | 2 +- + components/ntp_snippets/features.cc | 2 +- + .../ntp_snippets/ntp_snippets_constants.cc | 16 +- + components/ntp_snippets/remote/fetch.py | 8 +- + components/ntp_tiles/popular_sites_impl.cc | 2 +- + .../core/prefetch/prefetch_proto_utils.cc | 2 +- + .../core/prefetch/prefetch_server_urls.cc | 2 +- + .../omnibox/browser/document_provider.cc | 18 +- + .../browser/document_suggestions_service.cc | 4 +- + .../resources/omnibox_pedal_synonyms.grd | 138 +- + .../page_content_annotations_model_manager.cc | 2 +- + .../core/optimization_guide_constants.cc | 4 +- + .../core/page_entities_model_executor_impl.cc | 2 +- + .../core/prediction_manager.cc | 8 +- + .../ads_page_load_metrics_observer.cc | 2 +- + .../core/uma_page_load_metrics_observer.cc | 2 +- + .../use_counter_page_load_metrics_observer.cc | 4 +- + ...password_requirements_spec_fetcher_impl.cc | 2 +- + .../core/browser/hash_password_manager.cc | 2 +- + .../leak_detection/leak_detection_request.h | 2 +- + .../browser/leak_detection_dialog_utils.cc | 2 +- + .../browser/old_google_credentials_cleaner.cc | 8 +- + .../core/browser/password_hash_data.cc | 2 +- + .../browser/password_manager_constants.cc | 10 +- + .../core/browser/password_reuse_detector.cc | 2 +- + .../browser/password_scripts_fetcher_impl.cc | 2 +- + .../core/browser/password_sync_util.cc | 4 +- + .../core/browser/password_ui_utils.cc | 2 +- + .../core/browser/psl_matching_helper.cc | 6 +- + .../hash_affiliation_fetcher.cc | 2 +- + .../password_manager/ios/test_helpers.cc | 4 +- + .../payment_method_manifest_parser_fuzzer.cc | 2 +- + components/payments/core/error_strings.cc | 2 +- + components/payments/core/method_strings.cc | 6 +- + .../android/permissions_android_strings.grd | 4 +- + components/permissions/constants.cc | 2 +- + .../permissions/permission_context_base.cc | 10 +- + .../permissions/permission_request_manager.cc | 8 +- + .../prediction_service/prediction_common.h | 2 +- + .../core/browser/browser_policy_connector.cc | 10 +- + ...cloud_signin_restriction_policy_fetcher.cc | 2 +- + .../core/common/cloud/user_info_fetcher.cc | 4 +- + .../common/default_chrome_apps_migrator.cc | 16 +- + .../core/common/policy_loader_common.cc | 4 +- + .../policy/resources/policy_templates.json | 2414 ++++++++--------- + .../request_handler_for_policy.cc | 2 +- + .../policy/test_support/signature_provider.h | 4 +- + .../template_writers/writers/adm_writer.py | 4 +- + .../writers/doc_atomic_groups_writer.py | 2 +- + .../template_writers/writers/doc_writer.py | 10 +- + .../writers/ios_app_config_writer.py | 2 +- + .../writers/template_writer.py | 2 +- + components/quirks/quirks_client.cc | 2 +- + components/resources/terms/terms_am.html | 4 +- + components/resources/terms/terms_ar.html | 4 +- + components/resources/terms/terms_bg.html | 4 +- + components/resources/terms/terms_bn.html | 4 +- + components/resources/terms/terms_ca.html | 4 +- + components/resources/terms/terms_cs.html | 4 +- + components/resources/terms/terms_da.html | 4 +- + components/resources/terms/terms_de.html | 4 +- + components/resources/terms/terms_el.html | 4 +- + components/resources/terms/terms_en-GB.html | 4 +- + components/resources/terms/terms_en.html | 4 +- + components/resources/terms/terms_es-419.html | 4 +- + components/resources/terms/terms_es.html | 4 +- + components/resources/terms/terms_et.html | 4 +- + components/resources/terms/terms_fa.html | 4 +- + components/resources/terms/terms_fi.html | 4 +- + components/resources/terms/terms_fil.html | 4 +- + components/resources/terms/terms_fr.html | 4 +- + components/resources/terms/terms_gu.html | 4 +- + components/resources/terms/terms_he.html | 4 +- + components/resources/terms/terms_hi.html | 4 +- + components/resources/terms/terms_hr.html | 4 +- + components/resources/terms/terms_hu.html | 4 +- + components/resources/terms/terms_id.html | 4 +- + components/resources/terms/terms_it.html | 4 +- + components/resources/terms/terms_ja.html | 4 +- + components/resources/terms/terms_kn.html | 4 +- + components/resources/terms/terms_ko.html | 4 +- + components/resources/terms/terms_lt.html | 4 +- + components/resources/terms/terms_lv.html | 4 +- + components/resources/terms/terms_ml.html | 4 +- + components/resources/terms/terms_mr.html | 4 +- + components/resources/terms/terms_nb.html | 4 +- + components/resources/terms/terms_nl.html | 4 +- + components/resources/terms/terms_pl.html | 4 +- + components/resources/terms/terms_pt-BR.html | 4 +- + components/resources/terms/terms_pt-PT.html | 4 +- + components/resources/terms/terms_ro.html | 4 +- + components/resources/terms/terms_ru.html | 4 +- + components/resources/terms/terms_sk.html | 4 +- + components/resources/terms/terms_sl.html | 4 +- + components/resources/terms/terms_sr.html | 4 +- + components/resources/terms/terms_sv.html | 4 +- + components/resources/terms/terms_sw.html | 4 +- + components/resources/terms/terms_ta.html | 4 +- + components/resources/terms/terms_te.html | 4 +- + components/resources/terms/terms_th.html | 4 +- + components/resources/terms/terms_tr.html | 4 +- + components/resources/terms/terms_uk.html | 4 +- + components/resources/terms/terms_vi.html | 4 +- + components/resources/terms/terms_zh-CN.html | 4 +- + components/resources/terms/terms_zh-TW.html | 4 +- + .../browser/client_side_detection_service.cc | 2 +- + .../content/browser/triggers/trigger_util.cc | 2 +- + .../browser/db/v4_protocol_manager_util.cc | 4 +- + .../password_protection_service_base.cc | 2 +- + .../browser/realtime/url_lookup_service.cc | 2 +- + .../tailored_security_service.cc | 6 +- + ...tailored_security_service_observer_util.cc | 2 +- + .../safe_search_url_checker_client.cc | 2 +- + .../safe_search_api/stub_url_checker.cc | 2 +- + components/safety_check/url_constants.cc | 2 +- + .../template_url_starter_pack_data.cc | 2 +- + .../content/https_only_mode_blocking_page.cc | 2 +- + .../content/ssl_blocking_page.h | 2 +- + .../core/controller_client.cc | 2 +- + .../core/safe_browsing_loud_error_ui.cc | 4 +- + .../security_interstitials/core/urls.cc | 4 +- + ...ation_guide_segmentation_model_provider.cc | 2 +- + .../services/quarantine/quarantine_mac.mm | 2 +- + .../core/common/disabled_sites.cc | 16 +- + .../ios/shared_highlighting_constants.mm | 2 +- + .../browser/chrome_connected_header_helper.cc | 4 +- + .../browser/account_consistency_service.mm | 12 +- + .../identity_manager/access_token_fetcher.cc | 2 +- + .../browser/spelling_service_client.cc | 2 +- + .../browser/subresource_filter_constants.h | 8 +- + components/sync/base/sync_util.h | 4 +- + .../standalone_trusted_vault_client.cc | 2 +- + ...ted_vault_access_token_fetcher_frontend.cc | 2 +- + .../trusted_vault_server_constants.h | 2 +- + .../core/browser/translate_ranker_impl.cc | 6 +- + .../core/browser/translate_script.cc | 2 +- + .../translate/core/common/translate_util.cc | 2 +- + components/ui_devtools/agent_util.cc | 4 +- + components/ukm/ukm_reporting_service.cc | 2 +- + .../top_domains/make_alexa_top_list.py | 2 +- + components/url_matcher/url_util.cc | 4 +- + .../variations/variations_url_constants.cc | 4 +- + .../installable/installable_logging.cc | 2 +- + components/wifi/wifi_service_win.cc | 2 +- + .../render_widget_host_view_cocoa.mm | 2 +- + .../aggregation_service_features.cc | 2 +- + .../indexed_db/indexed_db_backing_store.cc | 2 +- + .../indexed_db/indexed_db_reporting.cc | 2 +- + .../interest_group_update_manager.cc | 2 +- + .../portal/portal_navigation_throttle.cc | 2 +- + .../renderer_host/navigation_request.cc | 6 +- + .../renderer_host/render_frame_host_impl.cc | 2 +- + content/browser/resources/gpu/info_view.js | 2 +- + .../speech/speech_recognition_engine.cc | 2 +- + .../browser/web_contents/web_contents_impl.cc | 2 +- + .../webauth/authenticator_common_impl.cc | 4 +- + content/browser/webauth/client_data_json.cc | 2 +- + .../webauth_request_security_checker.cc | 2 +- + .../webauth_request_security_checker.h | 4 +- + .../zygote_host/zygote_host_impl_linux.cc | 2 +- + .../pepper/pepper_media_device_manager.cc | 2 +- + content/renderer/render_thread_impl.cc | 14 +- + .../shell/browser/shell_browser_main_parts.cc | 2 +- + content/zygote/zygote_main_linux.cc | 2 +- + device/bluetooth/bluetooth_adapter_mac.mm | 2 +- + .../bluetooth/bluetooth_classic_device_mac.mm | 4 +- + device/fido/fido_strings.grd | 2 +- + device/fido/fido_test_data.h | 2 +- + device/gamepad/xbox_controller_mac.mm | 2 +- + docs/enterprise/extension_query.py | 4 +- + docs/enterprise/extension_query_py2.py | 4 +- + .../web_request/web_request_permissions.cc | 4 +- + extensions/browser/suggest_permission_util.cc | 4 +- + .../browser/updater/extension_downloader.cc | 4 +- + .../browser/updater/safe_manifest_parser.cc | 2 +- + extensions/common/api/_api_features.json | 2 +- + .../common/api/extensions_manifest_types.json | 6 +- + extensions/common/api/i18n.json | 2 +- + extensions/common/csp_validator.cc | 2 +- + extensions/common/extension_urls.cc | 12 +- + extensions/common/manifest_constants.cc | 6 +- + extensions/strings/extensions_strings.grd | 4 +- + google_apis/drive/drive_api_url_generator.cc | 2 +- + google_apis/gaia/gaia_auth_fetcher.cc | 4 +- + google_apis/gaia/gaia_auth_util.cc | 8 +- + google_apis/gaia/gaia_constants.cc | 84 +- + google_apis/gaia/gaia_oauth_client.cc | 6 +- + google_apis/gaia/gaia_urls.cc | 10 +- + google_apis/gcm/base/mcs_util.cc | 2 +- + google_apis/gcm/engine/gservices_settings.cc | 6 +- + google_apis/gcm/engine/mcs_client.cc | 2 +- + google_apis/gcm/tools/mcs_probe.cc | 2 +- + google_apis/google_api_keys.cc | 2 +- + .../ANGLE/EGL_ANGLE_sync_control_rate.txt | 2 +- + .../CHROMIUM/EGL_CHROMIUM_sync_control.txt | 2 +- + .../iosurface_image_backing_factory.mm | 2 +- + gpu/config/gpu_control_list_format.txt | 2 +- + .../lib/browser/protocol/headless_handler.cc | 2 +- + ios/build/bots/scripts/result_sink_util.py | 4 +- + ios/build/bots/scripts/test_result_util.py | 6 +- + ios/build/bots/scripts/xcode_util.py | 4 +- + ios/build/chrome_build.gni | 2 +- + .../app/strings/ios_chromium_strings.grd | 18 +- + .../app/strings/ios_google_chrome_strings.grd | 18 +- + ios/chrome/app/strings/ios_strings.grd | 44 +- + ios/chrome/browser/autofill/BUILD.gn | 4 +- + .../autofill/automation/automation_action.mm | 2 +- + ...chrome_browser_state_removal_controller.mm | 2 +- + ios/chrome/browser/flags/about_flags.mm | 4 +- + ios/chrome/browser/omaha/omaha_service.mm | 2 +- + .../search_engine_tab_helper.mm | 8 +- + .../activity_services/activity_type_util.mm | 2 +- + .../ui/bookmarks/bookmark_earl_grey.mm | 2 +- + .../new_tab_page_app_interface.mm | 4 +- + .../content_suggestions/ntp_home_mediator.mm | 8 +- + .../browser/ui/main/scene_controller.mm | 2 +- + .../browser/ui/ntp/discover_feed_constants.mm | 2 +- + ios/chrome/browser/ui/ntp/incognito_view.mm | 2 +- + .../browser/ui/ntp/revamped_incognito_view.mm | 2 +- + .../ui/qr_scanner/qr_scanner_app_interface.mm | 2 +- + .../ui/settings/settings_app_interface.mm | 2 +- + .../table_cell_catalog_view_controller.mm | 8 +- + .../translate_table_view_controller.mm | 2 +- + .../interstitials/interstitial_ui_util.mm | 2 +- + .../browser/url/chrome_url_constants.cc | 40 +- + ..._credential_provider_extension_strings.grd | 8 +- + .../password_spec_fetcher.mm | 2 +- + .../https_only_mode_blocking_page.mm | 2 +- + ios/net/cookies/cookie_store_ios_test_util.mm | 2 +- + ios/net/crn_http_protocol_handler.mm | 2 +- + .../browser/signin/chrome_identity_service.mm | 4 +- + .../browser/signin/fake_chrome_identity.mm | 6 +- + .../signin/fake_chrome_identity_service.mm | 2 +- + .../fake_chrome_identity_service_constants.mm | 2 +- + ios/showcase/alert/sc_alert_coordinator.mm | 8 +- + .../sc_infobar_modal_save_card_coordinator.mm | 2 +- + .../fake_autocomplete_suggestion.mm | 4 +- + ios/web/navigation/navigation_manager_impl.mm | 6 +- + .../web_state/ui/wk_content_rule_list_util.mm | 2 +- + ios/web_view/internal/cwv_flags.mm | 2 +- + ios/web_view/internal/cwv_web_view.mm | 2 +- + media/base/win/mf_initializer.cc | 2 +- + .../native_pixmap_handle_mojom_traits.cc | 12 +- + ...stable_video_decoder_types_mojom_traits.cc | 178 +- + .../src/build_tools/build_paths.py | 2 +- + .../src/build_tools/buildbot_common.py | 2 +- + .../build_tools/json/naclsdk_manifest.json | 32 +- + .../build_tools/json/naclsdk_manifest0.json | 2 +- + .../build_tools/json/naclsdk_manifest2.json | 4 +- + .../src/build_tools/nacl-mono-buildbot.py | 2 +- + .../src/build_tools/nacl-mono-builder.py | 2 +- + .../src/build_tools/sdk_tools/cacerts.txt | 2 +- + .../src/build_tools/sdk_tools/config.py | 2 +- + .../build_tools/sdk_tools/sdk_update_main.py | 2 +- + .../third_party/fancy_urllib/__init__.py | 4 +- + .../src/build_tools/update_nacl_manifest.py | 6 +- + .../src/build_tools/update_sdktools.py | 2 +- + native_client_sdk/src/doc/Makefile | 2 +- + .../security-contest/contest-warning.txt | 4 +- + native_client_sdk/src/doc/conf.py | 2 +- + .../src/doc/doxygen/generate_docs.py | 2 +- + native_client_sdk/src/doc/migration/apps.html | 8 +- + .../src/doc/migration/public.html | 2 +- + .../src/examples/api/socket/index.html | 2 +- + .../src/examples/demo/drive/drive.cc | 4 +- + .../src/examples/demo/drive/index.html | 2 +- + .../src/examples/demo/nacl_io_demo/index.html | 6 +- + .../src/gonacl_appengine/gonacl.py | 8 +- + .../static/bullet/fullscreen.html | 4 +- + .../gonacl_appengine/static/bullet/index.html | 4 +- + .../gonacl_appengine/static/bullet/main.js | 2 +- + .../gonacl_appengine/static/cube/example.js | 2 +- + .../gonacl_appengine/static/cube/index.html | 2 +- + .../gonacl_appengine/static/earth/example.js | 2 +- + .../gonacl_appengine/static/earth/index.html | 2 +- + .../gonacl_appengine/static/home/index.html | 2 +- + .../src/gonacl_appengine/static/index.html | 6 +- + .../gonacl_appengine/static/life/example.js | 2 +- + .../gonacl_appengine/static/life/index.html | 2 +- + .../gonacl_appengine/static/lua/index.html | 6 +- + .../src/gonacl_appengine/static/lua/lua.js | 2 +- + .../gonacl_appengine/static/lua/naclterm.js | 2 +- + .../static/smoothlife/example.js | 2 +- + .../static/smoothlife/index.html | 4 +- + .../static/voronoi/example.js | 2 +- + .../static/voronoi/index.html | 2 +- + native_client_sdk/src/tools/fix_manifest.py | 2 +- + native_client_sdk/src/web/manifest.html | 6 +- + net/base/network_change_notifier_mac.mm | 2 +- + .../http_security_header_047.txt | Bin 166 -> 169 bytes + net/dns/dns_test_util.h | 12 +- + net/dns/dns_transaction.cc | 2 +- + net/dns/public/doh_provider_entry.cc | 4 +- + net/http/http_server_properties.cc | 4 +- + net/http/webfonts_histogram.cc | 6 +- + net/log/file_net_log_observer.cc | 2 +- + net/quic/crypto/proof_verifier_chromium.cc | 2 +- + net/quic/quic_stream_factory.cc | 8 +- + net/spdy/spdy_session.cc | 2 +- + net/tools/print_certificates.py | 2 +- + net/tools/testserver/testserver.py.vpython3 | 4 +- + .../transport_security_state_generator.cc | 2 +- + printing/backend/win_helper.cc | 4 +- + printing/print_settings_initializer_win.cc | 2 +- + remoting/base/breakpad_mac.mm | 2 +- + remoting/base/chromium_url_request.cc | 2 +- + remoting/base/service_urls.cc | 8 +- + .../notification/gstatic_json_fetcher.cc | 2 +- + ...rome.remote_assistance-firefox.json.jinja2 | 2 +- + remoting/host/it2me/it2me_constants.cc | 2 +- + remoting/host/linux/linux_me2me_host.py | 4 +- + remoting/host/linux/remoting_user_session.cc | 2 +- + remoting/host/remoting_me2me_host.cc | 2 +- + ....chrome.remote_desktop-firefox.json.jinja2 | 2 +- + remoting/host/setup/start_host_main.cc | 2 +- + remoting/ios/app/help_view_controller.mm | 2 +- + .../ios/app/host_setup_view_controller.mm | 2 +- + .../ios/app/remoting_menu_view_controller.mm | 10 +- + .../facade/remoting_oauth_authentication.mm | 2 +- + remoting/protocol/fake_session.cc | 2 +- + remoting/resources/remoting_strings.grd | 8 +- + remoting/signaling/signaling_id_util.cc | 4 +- + remoting/tools/build/remoting_localize.py | 6 +- + remoting/tools/zip2msi.py | 2 +- + rlz/lib/financial_ping.cc | 2 +- + sandbox/features.gni | 2 +- + sandbox/linux/services/libc_interceptor.cc | 2 +- + .../linux/suid/client/setuid_sandbox_host.cc | 2 +- + sandbox/linux/suid/sandbox.c | 2 +- + sandbox/policy/win/sandbox_win.cc | 2 +- + .../geolocation/network_location_request.cc | 2 +- + .../image_annotation_service.h | 4 +- + .../markdown/extensions/smarty.py | 2 +- + .../Python-Markdown/markdown/pep562.py | 2 +- + .../abseil-cpp/absl/abseil.podspec.gen.py | 2 +- + third_party/abseil-cpp/conanfile.py | 2 +- + third_party/abseil-cpp/generate_def_files.py | 2 +- + third_party/abseil-cpp/roll_abseil.py | 4 +- + third_party/afl/src/Makefile | 4 +- + third_party/afl/src/afl-analyze.c | 2 +- + third_party/afl/src/afl-as.c | 2 +- + third_party/afl/src/afl-fuzz.c | 2 +- + third_party/afl/src/afl-gcc.c | 2 +- + third_party/afl/src/afl-gotcpu.c | 4 +- + third_party/afl/src/afl-showmap.c | 2 +- + third_party/afl/src/afl-tmin.c | 2 +- + third_party/afl/src/docs/QuickStartGuide.txt | 2 +- + third_party/afl/src/docs/historical_notes.txt | 2 +- + third_party/afl/src/docs/notes_for_asan.txt | 2 +- + third_party/afl/src/docs/sister_projects.txt | 4 +- + .../canvas_harness/canvas_harness.html | 2 +- + third_party/afl/src/libdislocator/Makefile | 2 +- + third_party/afl/src/libtokencap/Makefile | 2 +- + third_party/afl/src/llvm_mode/Makefile | 6 +- + .../afl/src/llvm_mode/afl-clang-fast.c | 4 +- + .../android_build_tools/aapt2/3pp/fetch.py | 4 +- + .../apkanalyzer/3pp/fetch.py | 2 +- + .../apkanalyzer/3pp/install.py | 2 +- + .../android_build_tools/lint/3pp/fetch.py | 2 +- + .../android_build_tools/lint/3pp/install.py | 2 +- + .../manifest_merger/3pp/fetch.py | 2 +- + .../manifest_merger/3pp/install.py | 2 +- + .../android_arch_core_common/3pp/fetch.py | 2 +- + .../android_arch_core_runtime/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_support_design/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_support_loader/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_support_multidex/3pp/fetch.py | 2 +- + .../com_android_support_print/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_tools_common/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_tools_sdk_common/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_google_android_play_core/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../Android_SDK_License-December_9_2016.txt | 4 +- + .../runner/src/main/Android.mk | 2 +- + third_party/androidx/fetch_all_androidx.py | 2 +- + .../common/loader/record_load_histograms.cc | 2 +- + .../blink/public/strings/blink_strings.grd | 8 +- + .../renderer/bindings/scripts/utilities.py | 2 +- + .../build/scripts/update_css_ranking.py | 4 +- + .../core/css/remote_font_face_source.cc | 2 +- + .../blink/renderer/core/dom/element.cc | 2 +- + .../renderer/core/dom/events/event_target.cc | 2 +- + .../blink/renderer/core/events/touch_event.cc | 2 +- + .../blink/renderer/core/events/wheel_event.cc | 2 +- + .../blink/renderer/core/frame/local_frame.cc | 4 +- + .../renderer/core/html/html_iframe_element.cc | 2 +- + .../core/html/media/autoplay_policy.cc | 4 +- + .../core/html/media/html_media_element.cc | 4 +- + .../core/html/portal/html_portal_element.cc | 4 +- + .../renderer/core/loader/frame_loader.cc | 4 +- + .../core/loader/mixed_content_checker.cc | 2 +- + .../core/loader/subresource_filter.cc | 2 +- + .../script/document_write_intervention.cc | 6 +- + .../core/xmlhttprequest/xml_http_request.cc | 2 +- + .../modules/bluetooth/bluetooth_error.cc | 16 +- + .../modules/clipboard/clipboard_promise.cc | 2 +- + .../credentials_container.cc | 6 +- + .../encryptedmedia/encrypted_media_utils.h | 2 +- + .../modules/geolocation/geolocation.cc | 2 +- + .../play_app_url_manifest.json | 2 +- + .../modules/payments/payment_request.cc | 6 +- + .../modules/vibration/vibration_controller.cc | 4 +- + .../modules/webaudio/audio_context.cc | 4 +- + .../modules/webmidi/navigator_web_midi.cc | 2 +- + .../platform/fonts/mac/font_cache_mac.mm | 4 +- + .../platform/loader/fetch/resource_error.cc | 2 +- + .../loader/fetch/resource_load_scheduler.cc | 2 +- + .../platform/weborigin/security_origin.cc | 2 +- + .../blink/tools/blinkpy/common/net/git_cl.py | 4 +- + .../blinkpy/common/net/results_fetcher.py | 10 +- + .../blink/tools/blinkpy/common/net/rpc.py | 6 +- + .../blink/tools/blinkpy/common/pretty_diff.py | 2 +- + .../tools/blinkpy/common/system/filesystem.py | 2 +- + .../tools/blinkpy/common/system/profiler.py | 2 +- + .../blink/tools/blinkpy/style/filter.py | 2 +- + .../blinkpy/tool/commands/flaky_tests.py | 6 +- + .../tools/blinkpy/w3c/chromium_commit.py | 2 +- + .../tools/blinkpy/w3c/chromium_commit_mock.py | 2 +- + third_party/blink/tools/blinkpy/w3c/common.py | 4 +- + .../blinkpy/w3c/directory_owners_extractor.py | 2 +- + .../tools/blinkpy/w3c/export_notifier.py | 4 +- + third_party/blink/tools/blinkpy/w3c/gerrit.py | 6 +- + .../tools/blinkpy/w3c/import_notifier.py | 4 +- + .../blink/tools/blinkpy/w3c/monorail.py | 2 +- + .../tools/blinkpy/w3c/pr_cleanup_tool.py | 2 +- + .../blink/tools/blinkpy/w3c/test_exporter.py | 4 +- + .../blink/tools/blinkpy/w3c/test_importer.py | 10 +- + .../blinkpy/w3c/wpt_results_processor.py | 2 +- + .../blink/tools/blinkpy/w3c/wpt_uploader.py | 2 +- + .../blink/tools/commit_stats/org-list.txt | 10 +- + .../print_stale_test_expectations_entries.py | 2 +- + third_party/boringssl/roll_boringssl.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../externs/chrome_extensions.js | 6 +- + .../externs/command_line_private.js | 4 +- + .../crashpad/build/install_linux_sysroot.py | 2 +- + third_party/crashpad/crashpad/package.h | 4 +- + third_party/crashpad/update.py | 2 +- + third_party/dav1d/generate_source.py | 2 +- + .../protoc_plugins/util/plugin_protos.py | 4 +- + .../closure/bin/build/closurebuilder.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/depswriter.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../closure/css/inlay/g-base.css | 4 +- + .../closure/css/inlay/g-fixed.css | 4 +- + .../closure/css/inlay/g-ratio.css | 4 +- + .../closure/goog/css/bubble.css | 18 +- + .../closure/goog/css/checkbox.css | 4 +- + .../closure/goog/css/colorpalette.css | 2 +- + .../goog/css/colorpicker-simplegrid.css | 2 +- + .../closure/goog/css/combobox.css | 2 +- + .../closure/goog/css/css3menubutton.css | 2 +- + .../closure/goog/css/custombutton.css | 2 +- + .../closure/goog/css/dialog.css | 2 +- + .../closure/goog/css/dragdropdetector.css | 4 +- + .../closure/goog/css/editor/bubble.css | 2 +- + .../goog/css/editor/equationeditor.css | 2 +- + .../closure/goog/css/editortoolbar.css | 2 +- + .../closure/goog/css/flatmenubutton.css | 2 +- + .../closure/goog/css/hsvapalette.css | 8 +- + .../closure/goog/css/hsvpalette.css | 8 +- + .../closure/goog/css/imagelessmenubutton.css | 2 +- + .../closure/goog/css/menubutton.css | 4 +- + .../closure/goog/css/menuitem.css | 2 +- + .../closure/goog/css/toolbar.css | 4 +- + .../closure/goog/css/tree.css | 4 +- + .../closure/goog/css/tristatemenuitem.css | 4 +- + .../goog/demos/autocompleterichremotedata.js | 16 +- + .../demos/autocompleterichremotedata.json | 16 +- + .../closure/goog/demos/css/demo.css | 2 +- + .../closure/goog/demos/css/emojipicker.css | 2 +- + .../closure/goog/demos/dialog.html | 4 +- + .../demos/graphics/advancedcoordinates.html | 2 +- + .../demos/graphics/advancedcoordinates2.html | 2 +- + .../goog/demos/graphics/basicelements.html | 4 +- + .../closure/goog/demos/history1.html | 2 +- + .../closure/goog/demos/history2.html | 2 +- + .../closure/goog/demos/history3.html | 2 +- + .../closure/goog/demos/hovercard.html | 18 +- + .../closure/goog/demos/splitpane.html | 2 +- + .../closure/goog/html/safeurl_test_vectors.js | 8 +- + .../goog/html/sanitizer/html_test_vectors.js | 2 +- + .../goog/labs/net/webchannel/environment.js | 2 +- + .../goog/labs/net/webchannel/netutils.js | 2 +- + .../labs/net/webchannel/webchannelbase.js | 4 +- + .../closure/goog/net/browserchannel.js | 4 +- + .../closure/goog/net/networktester.js | 2 +- + .../closure/goog/net/tmpnetwork.js | 2 +- + .../closure/goog/soy/soy_testhelper.js | 4 +- + .../closure/goog/transpile.js | 46 +- + .../closure/goog/ui/editor/linkdialog.js | 2 +- + .../closure/goog/ui/editor/messages.js | 2 +- + .../closure/goog/ui/media/googlevideo.js | 6 +- + .../closure/goog/ui/media/mp3.js | 2 +- + .../closure/goog/ui/media/picasa.js | 8 +- + .../closure/goog/ui/media/youtube.js | 6 +- + .../closure/goog/ui/serverchart.js | 6 +- + .../doc/_layouts/article.html | 2 +- + .../google-closure-library/doc/js/article.js | 2 +- + .../src/chrome/os/inputview/adapter.js | 4 +- + .../closure/bin/build/closurebuilder.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/depswriter.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../closure_library/closure/bin/scopify.py | 2 +- + .../hunspell/src/hunspell/affentry.cxx | 2 +- + .../hunspell/src/hunspell/affentry.hxx | 2 +- + .../hunspell/src/hunspell/affixmgr.cxx | 2 +- + .../hunspell/src/hunspell/affixmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/atypes.hxx | 2 +- + .../hunspell/src/hunspell/baseaffix.hxx | 2 +- + third_party/hunspell/src/hunspell/csutil.cxx | 2 +- + third_party/hunspell/src/hunspell/csutil.hxx | 2 +- + third_party/hunspell/src/hunspell/filemgr.cxx | 2 +- + third_party/hunspell/src/hunspell/filemgr.hxx | 2 +- + third_party/hunspell/src/hunspell/hashmgr.cxx | 2 +- + third_party/hunspell/src/hunspell/hashmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/htypes.hxx | 2 +- + .../hunspell/src/hunspell/hunspell.cxx | 2 +- + .../hunspell/src/hunspell/hunspell.hxx | 2 +- + third_party/hunspell/src/hunspell/hunzip.cxx | 2 +- + third_party/hunspell/src/hunspell/hunzip.hxx | 2 +- + third_party/hunspell/src/hunspell/langnum.hxx | 2 +- + third_party/hunspell/src/hunspell/replist.cxx | 2 +- + third_party/hunspell/src/hunspell/replist.hxx | 2 +- + .../hunspell/src/hunspell/suggestmgr.cxx | 2 +- + .../hunspell/src/hunspell/suggestmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/w_char.hxx | 2 +- + .../hunspell/src/parsers/firstparser.cxx | 2 +- + .../hunspell/src/parsers/firstparser.hxx | 2 +- + .../hunspell/src/parsers/htmlparser.cxx | 2 +- + .../hunspell/src/parsers/htmlparser.hxx | 2 +- + .../hunspell/src/parsers/latexparser.cxx | 2 +- + .../hunspell/src/parsers/latexparser.hxx | 2 +- + .../hunspell/src/parsers/manparser.cxx | 2 +- + .../hunspell/src/parsers/manparser.hxx | 2 +- + .../hunspell/src/parsers/odfparser.cxx | 2 +- + .../hunspell/src/parsers/odfparser.hxx | 2 +- + .../hunspell/src/parsers/testparser.cxx | 2 +- + .../hunspell/src/parsers/textparser.cxx | 2 +- + .../hunspell/src/parsers/textparser.hxx | 2 +- + .../hunspell/src/parsers/xmlparser.cxx | 2 +- + .../hunspell/src/parsers/xmlparser.hxx | 2 +- + .../src/be/hyph-be.lic.txt | 6 +- + .../src/hu/hyph-hu.lic.txt | 4 +- + .../src/hy/hyph-hy.lic.txt | 2 +- + third_party/inspector_protocol/roll.py | 4 +- + third_party/jstemplate/compile.py | 2 +- + .../jstemplate/jstemplate_example.html | 2 +- + third_party/jstemplate/jstemplate_jsunit.html | 10 +- + third_party/libaddressinput/BUILD.gn | 2 +- + .../chromium/tools/require_fields.py | 2 +- + third_party/libevent/evdns.c | 2 +- + .../libpng/contrib/oss-fuzz/README.txt | 2 +- + .../libusb/src/libusb/os/windows_usb.c | 4 +- + third_party/libxslt/chromium/roll.py | 2 +- + third_party/maldoca/src/maldoca/base/status.h | 2 +- + .../maldoca/src/maldoca/ole/vba_extract.cc | 2 +- + third_party/mozilla/NSPasteboard+Utils.mm | 2 +- + third_party/mozilla/NSString+Utils.mm | 2 +- + third_party/opus/src/doc/opus_in_isobmff.html | 2 +- + third_party/opus/src/doc/release.txt | 6 +- + third_party/pefile_py3/pefile.py | 4 +- + third_party/protobuf/CHANGES.txt | 12 +- + third_party/protobuf/CONTRIBUTORS.txt | 70 +- + third_party/protobuf/cmake/CMakeLists.txt | 2 +- + third_party/protobuf/composer.json | 2 +- + .../binary_json_conformance_suite.cc | 46 +- + .../protobuf/conformance/conformance_cpp.cc | 2 +- + .../text_format_conformance_suite.cc | 6 +- + .../Tests/GPBObjectiveCPlusPlusTest.mm | 2 +- + third_party/protobuf/php/composer.json | 2 +- + .../php/ext/google/protobuf/convert.c | 2 +- + .../php/ext/google/protobuf/message.c | 4 +- + .../protobuf/python/docs/generate_docs.py | 2 +- + .../python/google/protobuf/descriptor.py | 2 +- + .../google/protobuf/descriptor_database.py | 2 +- + .../python/google/protobuf/descriptor_pool.py | 2 +- + .../protobuf/internal/_parameterized.py | 2 +- + .../google/protobuf/internal/builder.py | 2 +- + .../google/protobuf/internal/decoder.py | 2 +- + .../google/protobuf/internal/encoder.py | 2 +- + .../protobuf/internal/enum_type_wrapper.py | 2 +- + .../protobuf/internal/message_listener.py | 2 +- + .../protobuf/internal/python_message.py | 2 +- + .../google/protobuf/internal/test_util.py | 2 +- + .../google/protobuf/internal/type_checkers.py | 2 +- + .../protobuf/internal/well_known_types.py | 4 +- + .../google/protobuf/internal/wire_format.py | 2 +- + .../python/google/protobuf/json_format.py | 2 +- + .../python/google/protobuf/message.py | 2 +- + .../python/google/protobuf/message_factory.py | 2 +- + .../google/protobuf/pyext/cpp_message.py | 2 +- + .../python/google/protobuf/reflection.py | 2 +- + .../python/google/protobuf/service.py | 2 +- + .../google/protobuf/service_reflection.py | 2 +- + .../python/google/protobuf/text_format.py | 2 +- + .../generate_py_protobufs.py | 2 +- + .../python/protobuf_distutils/setup.py | 6 +- + third_party/protobuf/python/setup.py | 6 +- + .../protobuf/src/google/protobuf/any_lite.cc | 4 +- + .../protobuf/compiler/java/java_message.cc | 2 +- + .../compiler/js/well_known_types_embed.cc | 2 +- + .../src/google/protobuf/compiler/parser.cc | 8 +- + .../google/protobuf/util/internal/constants.h | 6 +- + .../util/internal/protostream_objectwriter.cc | 44 +- + .../src/google/protobuf/util/json_util.cc | 2 +- + third_party/protobuf/update_version.py | 4 +- + .../pycoverage/coverage/htmlfiles/pyfile.html | 2 +- + .../src/benchmarks/chromium.linux.json | 152 +- + third_party/pyjson5/src/setup.py | 2 +- + third_party/r8/3pp/fetch.py | 4 +- + third_party/rust/adler/v1/BUILD.gn | 2 +- + third_party/rust/aho_corasick/v0_7/BUILD.gn | 2 +- + third_party/rust/atty/v0_2/BUILD.gn | 2 +- + third_party/rust/autocfg/v1/BUILD.gn | 2 +- + third_party/rust/autocxx/v0_22/BUILD.gn | 2 +- + .../rust/autocxx_bindgen/v0_60/BUILD.gn | 4 +- + .../rust/autocxx_engine/v0_22/BUILD.gn | 2 +- + third_party/rust/autocxx_gen/v0_22/BUILD.gn | 2 +- + third_party/rust/autocxx_macro/v0_22/BUILD.gn | 2 +- + .../rust/autocxx_parser/v0_22/BUILD.gn | 2 +- + third_party/rust/bindgen/v0_60/BUILD.gn | 4 +- + third_party/rust/camino/v1/BUILD.gn | 2 +- + third_party/rust/cxx/v1/BUILD.gn | 2 +- + third_party/rust/cxx_gen/v0_7/BUILD.gn | 2 +- + third_party/rust/cxxbridge_cmd/v1/BUILD.gn | 4 +- + third_party/rust/cxxbridge_macro/v1/BUILD.gn | 2 +- + third_party/rust/fastrand/v1/BUILD.gn | 2 +- + third_party/rust/hashbrown/v0_11/BUILD.gn | 2 +- + third_party/rust/heck/v0_4/BUILD.gn | 2 +- + third_party/rust/indexmap/v1/BUILD.gn | 2 +- + third_party/rust/indoc/v1/BUILD.gn | 2 +- + third_party/rust/itoa/v0_4/BUILD.gn | 2 +- + third_party/rust/itoa/v1/BUILD.gn | 2 +- + third_party/rust/lazy_static/v1/BUILD.gn | 2 +- + third_party/rust/link_cplusplus/v1/BUILD.gn | 2 +- + third_party/rust/memchr/v2/BUILD.gn | 2 +- + third_party/rust/memoffset/v0_6/BUILD.gn | 2 +- + .../rust/minimal_lexical/v0_2/BUILD.gn | 2 +- + third_party/rust/miniz_oxide/v0_4/BUILD.gn | 2 +- + third_party/rust/moveit/v0_5/BUILD.gn | 2 +- + third_party/rust/once_cell/v1/BUILD.gn | 4 +- + third_party/rust/pathdiff/v0_2/BUILD.gn | 2 +- + .../rust/peeking_take_while/v0_1/BUILD.gn | 2 +- + third_party/rust/prettyplease/v0_1/BUILD.gn | 2 +- + third_party/rust/proc_macro2/v1/BUILD.gn | 2 +- + third_party/rust/quote/v1/BUILD.gn | 2 +- + third_party/rust/remove_dir_all/v0_5/BUILD.gn | 2 +- + third_party/rust/rstest/v0_12/BUILD.gn | 2 +- + .../v0_12/crate/docs/head/COPYRIGHT.txt | 2 +- + third_party/rust/rustc_version/v0_4/BUILD.gn | 2 +- + third_party/rust/rustversion/v1/BUILD.gn | 2 +- + third_party/rust/ryu/v1/BUILD.gn | 2 +- + third_party/rust/semver/v1/BUILD.gn | 4 +- + third_party/rust/serde/v1/BUILD.gn | 2 +- + third_party/rust/serde_derive/v1/BUILD.gn | 2 +- + third_party/rust/serde_json/v1/BUILD.gn | 2 +- + .../rust/serde_json_lenient/v0_1/BUILD.gn | 2 +- + third_party/rust/shlex/v1/BUILD.gn | 2 +- + third_party/rust/strum_macros/v0_24/BUILD.gn | 2 +- + third_party/rust/syn/v1/BUILD.gn | 4 +- + third_party/rust/tempfile/v3/BUILD.gn | 4 +- + third_party/rust/termcolor/v1/BUILD.gn | 2 +- + third_party/rust/thiserror/v1/BUILD.gn | 2 +- + third_party/rust/thiserror_impl/v1/BUILD.gn | 2 +- + third_party/rust/unicode_ident/v1/BUILD.gn | 2 +- + .../rust/unicode_linebreak/v0_1/BUILD.gn | 2 +- + third_party/rust/unicode_width/v0_1/BUILD.gn | 2 +- + third_party/rust/unindent/v0_1/BUILD.gn | 2 +- + third_party/rust/which/v4/BUILD.gn | 2 +- + third_party/rust/winapi/v0_3/BUILD.gn | 2 +- + third_party/rust/winapi_util/v0_1/BUILD.gn | 2 +- + .../tensorflow_text/core/ops/rouge_l_op.cc | 2 +- + .../metrics/text_similarity_metric_ops.py | 2 +- + .../updater/chrome_mac_universal/3pp/fetch.py | 2 +- + .../chrome_mac_universal_prod/3pp/fetch.py | 2 +- + .../updater/chrome_win_x86/3pp/fetch.py | 2 +- + .../updater/chrome_win_x86_64/3pp/fetch.py | 2 +- + .../updater/chromium_mac_amd64/3pp/fetch.py | 6 +- + .../updater/chromium_mac_arm64/3pp/fetch.py | 6 +- + .../updater/chromium_win_x86/3pp/fetch.py | 6 +- + .../updater/chromium_win_x86_64/3pp/fetch.py | 6 +- + third_party/wpt_tools/roll_wpt.py | 8 +- + third_party/wpt_tools/wpt/tools/lint/rules.py | 4 +- + .../tools/third_party/pywebsocket3/setup.py | 2 +- + .../wpt/tools/webdriver/webdriver/client.py | 2 +- + .../wpt_tools/wpt/tools/wpt/android.py | 2 +- + .../wpt_tools/wpt/tools/wpt/browser.py | 32 +- + third_party/wpt_tools/wpt/tools/wpt/run.py | 4 +- + .../wpt/tools/wptrunner/requirements.txt | 2 +- + .../wpt_tools/wpt/tools/wptrunner/setup.py | 2 +- + .../executors/executorcontentshell.py | 2 +- + .../wptrunner/executors/executormarionette.py | 14 +- + .../wptrunner/formatters/chromium.py | 2 +- + third_party/xnnpack/generate_build_gn.py | 2 +- + .../codereview/download_issue.py | 6 +- + tools/accessibility/codereview/mph.py | 2 +- + tools/accessibility/inspect/ax_utils.cc | 2 +- + tools/accessibility/nvda/README.txt | 2 +- + tools/android/checkxmlstyle/checkxmlstyle.py | 8 +- + .../scripts/customtabs_benchmark.py | 2 +- + .../scripts/run_benchmark.py | 2 +- + .../scripts/sample_config.json | 4 +- + .../js/src/class_view.html | 2 +- + .../dependency_analysis/js/src/load_graph.js | 2 +- + .../js/src/package_view.html | 2 +- + .../dependency_analysis/upload_html_viewer.py | 2 +- + .../convenience/touch_resources.py | 2 +- + tools/android/sdk_updater/update_sdk.py | 2 +- + tools/binary_size/diagnose_bloat.py | 4 +- + tools/binary_size/libsupersize/console.py | 2 +- + .../libsupersize/viewer/static/auth-consts.js | 8 +- + .../libsupersize/viewer/static/index.html | 2 +- + .../libsupersize/viewer/static/index.js | 2 +- + .../viewer/static/tree-worker-wasm.js | 4 +- + .../libsupersize/viewer/static/viewer.html | 8 +- + .../libsupersize/viewer/upload_html_viewer.py | 2 +- + tools/binary_size/libsupersize/zip_util.py | 2 +- + .../binary_size/trybot_commit_size_checker.py | 4 +- + tools/bisect-builds.py | 30 +- + tools/bisect_repackage/bisect_repackage.py | 4 +- + .../bisect_repackage_utils.py | 4 +- + tools/boilerplate.py | 2 +- + tools/browserbench-webdriver/browserbench.py | 2 +- + tools/captured_sites/refresh.py | 2 +- + tools/check_git_config.py | 24 +- + tools/checklicenses/checklicenses.py | 2 +- + tools/checkteamtags/checkteamtags.py | 8 +- + tools/checkteamtags/extract_components.py | 2 +- + .../open_my_editor/ext/background.js | 26 +- + .../open_my_editor/ext/manifest.json | 6 +- + .../manual-fields-to-ignore.txt | 2 +- + tools/clang/scripts/build.py | 12 +- + tools/clang/scripts/include-analysis.html | 12 +- + tools/clang/scripts/package.py | 2 +- + tools/clang/scripts/update.py | 2 +- + tools/code_coverage/coverage.py | 8 +- + tools/cr/cr/base/android.py | 2 +- + tools/cr/main.py | 2 +- + tools/crates/gnrt/test_metadata.json | 2 +- + tools/crbug/crbug.js | 8 +- + tools/crbug/pinpoint.js | 4 +- + tools/crbug/user-activity.js | 4 +- + .../cygprofile/orderfile_generator_backend.py | 4 +- + tools/determinism/compare_build_artifacts.py | 2 +- + tools/download_optimization_profile.py | 2 +- + .../dromaeo_benchmark_runner.py | 10 +- + tools/emacs/trybot-mac.txt | 232 +- + tools/flags/list_flags.py | 6 +- + tools/generate_stubs/generate_stubs.py | 2 +- + tools/get_asan_chrome/get_asan_chrome.py | 6 +- + tools/git/suggest_owners.py | 6 +- + tools/gn/bootstrap/bootstrap.py | 2 +- + tools/gn/roll_gn.py | 2 +- + tools/grit/grit/format/rc.py | 2 +- + tools/grit/grit/tool/android2grd.py | 4 +- + tools/grit/grit/tool/resize.py | 2 +- + tools/grit/pak_util.py | 2 +- + tools/grit/setup.py | 4 +- + .../js_externs_generator.py | 4 +- + tools/json_schema_compiler/js_util.py | 2 +- + tools/json_schema_compiler/preview.py | 2 +- + tools/licenses.py | 38 +- + tools/mac/download_symbols.py | 4 +- + tools/mac/power/scenarios.py | 10 +- + tools/mb/mb.py | 6 +- + tools/mb/mb_config.pyl | 6 +- + tools/md_browser/base.css | 4 +- + tools/md_browser/footer.html | 2 +- + tools/md_browser/gitiles_autolink.py | 2 +- + tools/md_browser/gitiles_ext_blocks.py | 2 +- + tools/md_browser/gitiles_smart_quotes.py | 2 +- + tools/md_browser/md_browser.py | 2 +- + tools/metrics/common/models.py | 2 +- + tools/metrics/histograms/expand_owners.py | 12 +- + .../metrics/histograms/extract_histograms.py | 8 +- + ...ram_configuration_model_test_histograms.py | 68 +- + tools/metrics/histograms/split_xml.py | 4 +- + tools/metrics/md2xml.py | 4 +- + tools/metrics/structured/model.py | 6 +- + tools/metrics/ukm/xml_validations.py | 4 +- + tools/nocompile_driver.py | 2 +- + tools/omahaproxy.py | 2 +- + tools/perfbot-analysis/builder.js | 4 +- + tools/perfbot-analysis/bulk-download.js | 2 +- + tools/python/google/gethash_timer.py | 2 +- + tools/resources/find_unused_resources.py | 2 +- + tools/roll_webgl_conformance.py | 2 +- + tools/run-swarmed.py | 10 +- + tools/site_compare/commands/measure.py | 2 +- + tools/site_compare/commands/scrape.py | 2 +- + .../scrapers/chrome/chromebase.py | 4 +- + .../site_compare/scrapers/firefox/firefox2.py | 2 +- + tools/site_compare/scrapers/ie/ie7.py | 4 +- + tools/site_compare/utils/browser_iterate.py | 2 +- + tools/symsrc/source_index.py | 8 +- + tools/tracing/rename_breakpad.py | 2 +- + .../sample_traffic_annotation.cc | 2 +- + .../scripts/auditor/auditor.py | 2 +- + .../scripts/auditor/util.py | 2 +- + .../scripts/update_annotations_doc.py | 4 +- + .../scripts/update_annotations_sheet.py | 6 +- + tools/usb_gadget/gadget.py | 2 +- + tools/usb_gadget/msos20_descriptors.py | 2 +- + tools/variations/bisect_variations.py | 2 +- + tools/visual_debugger/app.html | 4 +- + tools/web_dev_style/css_checker.py | 6 +- + tools/web_dev_style/html_checker.py | 2 +- + tools/web_dev_style/js_checker.py | 8 +- + tools/web_dev_style/resource_checker.py | 2 +- + tools/win/RetrieveSymbols/RetrieveSymbols.cpp | 2 +- + tools/win/sizeviewer/template.html | 2 +- + .../chromevox/background/background.js | 2 +- + .../chromevox/background/prefs.js | 4 +- + .../chromevox/injected/history.js | 2 +- + .../cvox2/background/background.js | 14 +- + .../cvox2/background/panel.html | 2 +- + .../extensions/searchvox/loader.js | 2 +- + .../chromevoxclassic/manifest.json.jinja2 | 2 +- + .../color_contrast_companion/help.html | 2 +- + .../accessibility_extensions_strings.grd | 2 +- + ui/base/clipboard/clipboard_test_template.h | 10 +- + .../constrained_window_animation.mm | 2 +- + ui/base/cocoa/tool_tip_base_view.mm | 2 +- + .../cocoa/underlay_opengl_hosting_window.mm | 2 +- + ui/base/ime/character_composer_sequences.txt | 2 +- + .../keycodes/keyboard_code_conversion_mac.mm | 2 +- + .../file_manager/common/js/mock_chrome.js | 6 +- + .../foreground/elements/icons.html | 2 +- + .../foreground/js/ui/file_table.js | 2 +- + ui/file_manager/image_loader/piex/Makefile | 2 +- + ui/ozone/ozone.gni | 2 +- + ui/resources/README.txt | 4 +- + ui/resources/resource_check/ico_files.py | 4 +- + .../resource_check/resource_scale_factors.py | 4 +- + ui/strings/ui_strings.grd | 4 +- + ui/views/examples/webview_example.cc | 2 +- + .../cr_components/app_management/icons.html | 2 +- + .../help_bubble/help_bubble_icons.html | 2 +- + ui/webui/resources/cr_elements/icons.html | 4 +- + ...weblayer_security_blocking_page_factory.cc | 2 +- + weblayer/shell/app/shell_main_params.cc | 2 +- + 1456 files changed, 4904 insertions(+), 4904 deletions(-) + +diff --git a/android_webview/tools/cts_config/webview_cts_gcs_path.json b/android_webview/tools/cts_config/webview_cts_gcs_path.json +--- a/android_webview/tools/cts_config/webview_cts_gcs_path.json ++++ b/android_webview/tools/cts_config/webview_cts_gcs_path.json +@@ -6,12 +6,12 @@ + "arch": { + "arm64": { + "filename": "arm64/M/android-cts-arm64-6.0_r32.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-6.0_r32-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-6.0_r32-linux_x86-arm.zip", + "unzip_dir": "arm64/M/6.0_r32/" + }, + "x86": { + "filename": "x86/M/android-cts-x86-6.0_r32.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-6.0_r32-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-6.0_r32-linux_x86-x86.zip", + "unzip_dir": "x86/M/6.0_r32/" + } + }, +@@ -131,12 +131,12 @@ + "arch": { + "arm64": { + "filename": "arm64/N/android-cts-arm64-7.0_r33.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-7.0_r33-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-7.0_r33-linux_x86-arm.zip", + "unzip_dir": "arm64/N/7.0_r33/" + }, + "x86": { + "filename": "x86/N/android-cts-x86-7.0_r33.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-7.0_r33-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-7.0_r33-linux_x86-x86.zip", + "unzip_dir": "x86/N/7.0_r33/" + } + }, +@@ -197,12 +197,12 @@ + "arch": { + "arm64": { + "filename": "arm64/O/android-cts-arm64-8.0_r26.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_R26-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_R26-linux_x86-arm.zip", + "unzip_dir": "arm64/O/8.0_r26" + }, + "x86": { + "filename": "x86/O/android-cts-x86-8.0_r26.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_R26-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_R26-linux_x86-x86.zip", + "unzip_dir": "x86/O/8.0_r26" + } + }, +@@ -256,12 +256,12 @@ + "arch": { + "arm64": { + "filename": "arm64/P/android-cts-arm64-9.0_r20.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r20-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r20-linux_x86-arm.zip", + "unzip_dir": "arm64/P/9.0_r20" + }, + "x86": { + "filename": "x86/P/android-cts-x86-9.0_r20.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r20-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r20-linux_x86-x86.zip", + "unzip_dir": "x86/P/9.0_r20" + } + }, +@@ -326,12 +326,12 @@ + "arch": { + "arm64": { + "filename": "arm64/Q/android-cts-arm64-10_r13.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r13-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r13-linux_x86-arm.zip", + "unzip_dir": "arm64/Q/10_r13" + }, + "x86": { + "filename": "x86/Q/android-cts-x86-10_r13.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r13-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r13-linux_x86-x86.zip", + "unzip_dir": "x86/Q/10_r13" + } + }, +@@ -419,12 +419,12 @@ + "arch": { + "arm64": { + "filename": "arm64/R/android-cts-arm64-11_r9.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-11_r9-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-11_r9-linux_x86-arm.zip", + "unzip_dir": "arm64/R/11_r9/" + }, + "x86": { + "filename": "x86/R/android-cts-x86-11_r9.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-11_r9-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-11_r9-linux_x86-x86.zip", + "unzip_dir": "x86/R/11_r9/" + } + }, +@@ -537,12 +537,12 @@ + "arch": { + "arm64": { + "filename": "arm64/S/android-cts-arm64-12_r5.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-12_r5-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-12_r5-linux_x86-arm.zip", + "unzip_dir": "arm64/S/12_r5/" + }, + "x86": { + "filename": "x86/S/android-cts-x86-12_r5.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-12_r5-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-12_r5-linux_x86-x86.zip", + "unzip_dir": "x86/S/12_r5/" + } + }, +@@ -670,7 +670,7 @@ + "arch": { + "x86": { + "filename": "x86/T/android-cts-x86-13_r1.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-13_r1-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-13_r1-linux_x86-x86.zip", + "unzip_dir": "x86/T/13_r1/" + } + }, +diff --git a/android_webview/tools/record_netlog.py b/android_webview/tools/record_netlog.py +--- a/android_webview/tools/record_netlog.py ++++ b/android_webview/tools/record_netlog.py +@@ -6,7 +6,7 @@ + """Takes a netlog for the WebViews in a given application. + + Developer guide: +-https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-debugging.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/android_webview/docs/net-debugging.md + """ + + from __future__ import print_function +@@ -62,7 +62,7 @@ Configures WebView to start recording a netlog. This script chooses a suitable + netlog filename for the application, and will pull the netlog off the device + when the user terminates the script (with ctrl-C). For a more complete usage + guide, open your web browser to: +-https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-debugging.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/android_webview/docs/net-debugging.md + """) + parser.add_argument( + '--package', +@@ -91,7 +91,7 @@ https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-d + raise device_errors.MultipleDevicesError(devices) + + if device.build_type == 'user': +- device_setup_url = ('https://chromium.googlesource.com/chromium/src/+/HEAD/' ++ device_setup_url = ('https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/' + 'android_webview/docs/device-setup.md') + raise RuntimeError('It appears your device is a "user" build. We only ' + 'support capturing netlog on userdebug/eng builds. See ' +diff --git a/android_webview/tools/remove_preinstalled_webview.py b/android_webview/tools/remove_preinstalled_webview.py +--- a/android_webview/tools/remove_preinstalled_webview.py ++++ b/android_webview/tools/remove_preinstalled_webview.py +@@ -93,7 +93,7 @@ def RemovePreinstalledWebViews(device): + # workaround this. Use lots of newlines to make sure this message doesn't + # get lost. + logging.error('Did you start the emulator with "-writable-system?"\n' +- 'See https://chromium.googlesource.com/chromium/src/+/' ++ 'See https://chromium.9oo91esource.qjz9zk/chromium/src/+/' + 'main/docs/android_emulator.md#writable-system-partition' + '\n') + raise +diff --git a/android_webview/tools/update_cts.py b/android_webview/tools/update_cts.py +--- a/android_webview/tools/update_cts.py ++++ b/android_webview/tools/update_cts.py +@@ -27,7 +27,7 @@ import cts_utils + + + def _query_git_for_cts_tags(): +- cts_git_url = 'https://android.googlesource.com/platform/cts/' ++ cts_git_url = 'https://android.9oo91esource.qjz9zk/platform/cts/' + + tags = cmd_helper.GetCmdOutput(['git', 'ls-remote', '--tags', + cts_git_url]).splitlines() +@@ -97,7 +97,7 @@ class UpdateCTS: + Prereqs: + - Update the tools/cts_config/webview_cts_gcs_path.json file with origin, + and filenames for each platform. See: +- https://source.android.com/compatibility/cts/downloads for the latest ++ https://source.8n6r01d.qjz9zk/compatibility/cts/downloads for the latest + versions. + + Performs the following tasks to simplify the CTS test update process: +@@ -410,7 +410,7 @@ class UpdateCTS: + + DESC = """Updates the WebView CTS tests to a new version. + +-See https://source.android.com/compatibility/cts/downloads for the latest ++See https://source.8n6r01d.qjz9zk/compatibility/cts/downloads for the latest + versions. + + Please create a new branch, then edit the +diff --git a/ash/accelerators/accelerator_notifications.cc b/ash/accelerators/accelerator_notifications.cc +--- a/ash/accelerators/accelerator_notifications.cc ++++ b/ash/accelerators/accelerator_notifications.cc +@@ -162,7 +162,7 @@ void RemoveNotification(const std::string& notification_id) { + + // Shortcut help URL. + const char kKeyboardShortcutHelpPageUrl[] = +- "https://support.google.com/chromebook/answer/183101"; ++ "https://support.9oo91e.qjz9zk/chromebook/answer/183101"; + + // Accessibility notification ids. + const char kDockedMagnifierToggleAccelNotificationId[] = +diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd +--- a/ash/ash_strings.grd ++++ b/ash/ash_strings.grd +@@ -721,7 +721,7 @@ This file contains the strings for ash. + other {Update device within # seconds}} + + +- $1google.com requires you to update your $2Chromebook before the deadline ++ $19oo91e.qjz9zk requires you to update your $2Chromebook before the deadline + + + +@@ -746,7 +746,7 @@ This file contains the strings for ash. + other {Change device to previous version within # seconds}} + + +- $1google.com requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. ++ $19oo91e.qjz9zk requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. + + + +@@ -756,10 +756,10 @@ This file contains the strings for ash. + Update overdue + + +- $1google.com recommends that you update your $2Chromebook ++ $19oo91e.qjz9zk recommends that you update your $2Chromebook + + +- $1google.com requires you to update your $2Chromebook immediately ++ $19oo91e.qjz9zk requires you to update your $2Chromebook immediately + + + +@@ -802,10 +802,10 @@ This file contains the strings for ash. + This update requires powerwashing your $1Chromebook. All data will be deleted. Learn more about the latest $2ChromiumOS update. + + +- $1google.com is rolling back your $2Chromebook. Your device will reset and all data will be deleted. ++ $19oo91e.qjz9zk is rolling back your $2Chromebook. Your device will reset and all data will be deleted. + + +- $1google.com requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. ++ $19oo91e.qjz9zk requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. + + + $1Learn more about the latest ChromiumOS update. This Chromebook needs to restart to apply an update. This can take up to 1 minute. +@@ -899,7 +899,7 @@ This file contains the strings for ash. + + +- $1google.com has $2activated $3Full-screen magnifier. ++ $19oo91e.qjz9zk has $2activated $3Full-screen magnifier. + + +@@ -1303,7 +1303,7 @@ This file contains the strings for ash. + Supervised user + + +- Usage and history of this user can be reviewed by the manager ($1user@example.com) on chrome.com. ++ Usage and history of this user can be reviewed by the manager ($1user@example.com) on ch40me.qjz9zk. + + + Account managed by $1user@example.com +@@ -1617,7 +1617,7 @@ This file contains the strings for ash. + Tap to configure + + +- Browser tab $11 of $22. $3Google, $4https://google.com ++ Browser tab $11 of $22. $3Google, $4https://9oo91e.qjz9zk + + + Connected devices settings +@@ -3726,7 +3726,7 @@ Connect your device to power. + Save your $1Pixel Buds + + +- Save your $1Pixel Buds to $2alisha123@gmail.com for faster pairing to your other devices ++ Save your $1Pixel Buds to $2alisha123@9ma1l.qjz9zk for faster pairing to your other devices + + + Settings +@@ -3759,10 +3759,10 @@ Connect your device to power. + Connect $1Pixel Buds to this Chromebook + + +- Your $1Pixel Buds will appear on devices linked with $2alisha123@gmail.com ++ Your $1Pixel Buds will appear on devices linked with $2alisha123@9ma1l.qjz9zk + + +- Connect $1Pixel Buds previously saved to $2alisha123@gmail.com ++ Connect $1Pixel Buds previously saved to $2alisha123@9ma1l.qjz9zk + + + Cancel +@@ -3888,7 +3888,7 @@ Connect your device to power. + Multiple sign-in has been disabled + + +- An administrator has disallowed multiple sign-in for $1john@google.com. All users must sign out to continue. ++ An administrator has disallowed multiple sign-in for $1john@9oo91e.qjz9zk. All users must sign out to continue. + + + Sign out +@@ -4436,7 +4436,7 @@ Here are some things you can try to get started. + Unlock device to perform the notification action + + +- Unlock device as $1example@gmail.com to perform the notification action ++ Unlock device as $1example@9ma1l.qjz9zk to perform the notification action + + + To see notifications on your lock screen, unlock to change the setting +diff --git a/ash/assistant/assistant_setup_controller.cc b/ash/assistant/assistant_setup_controller.cc +--- a/ash/assistant/assistant_setup_controller.cc ++++ b/ash/assistant/assistant_setup_controller.cc +@@ -16,7 +16,7 @@ + namespace { + + constexpr char kGSuiteAdministratorInstructionsUrl[] = +- "https://support.google.com/a/answer/6304876"; ++ "https://support.9oo91e.qjz9zk/a/answer/6304876"; + + } // namespace + +diff --git a/ash/assistant/util/deep_link_util.cc b/ash/assistant/util/deep_link_util.cc +--- a/ash/assistant/util/deep_link_util.cc ++++ b/ash/assistant/util/deep_link_util.cc +@@ -386,21 +386,21 @@ absl::optional GetAssistantUrl( + case DeepLinkType::kLists: { + const auto& type_param = GetDeepLinkParam(params, DeepLinkParam::kType); + top_level_url = +- std::string("https://assistant.google.com/lists/mainview"); ++ std::string("https://assistant.9oo91e.qjz9zk/lists/mainview"); + by_id_url = (type_param && type_param.value().compare("shopping") == 0) +- ? std::string("https://shoppinglist.google.com/lists/") +- : std::string("https://assistant.google.com/lists/list/"); ++ ? std::string("https://shoppinglist.9oo91e.qjz9zk/lists/") ++ : std::string("https://assistant.9oo91e.qjz9zk/lists/list/"); + break; + } + case DeepLinkType::kNotes: + top_level_url = std::string( +- "https://assistant.google.com/lists/mainview?note_tap=true"); +- by_id_url = std::string("https://assistant.google.com/lists/note/"); ++ "https://assistant.9oo91e.qjz9zk/lists/mainview?note_tap=true"); ++ by_id_url = std::string("https://assistant.9oo91e.qjz9zk/lists/note/"); + break; + case DeepLinkType::kReminders: + top_level_url = +- std::string("https://assistant.google.com/reminders/mainview"); +- by_id_url = std::string("https://assistant.google.com/reminders/id/"); ++ std::string("https://assistant.9oo91e.qjz9zk/reminders/mainview"); ++ by_id_url = std::string("https://assistant.9oo91e.qjz9zk/reminders/id/"); + break; + default: + NOTREACHED(); +@@ -451,7 +451,7 @@ absl::optional GetWebUrl( + DeepLinkType type, + const std::map& params) { + static constexpr char kAssistantSettingsWebUrl[] = +- "https://assistant.google.com/settings/mainpage"; ++ "https://assistant.9oo91e.qjz9zk/settings/mainpage"; + + if (!IsWebDeepLinkType(type, params)) + return absl::nullopt; +diff --git a/ash/components/phonehub/url_constants.cc b/ash/components/phonehub/url_constants.cc +--- a/ash/components/phonehub/url_constants.cc ++++ b/ash/components/phonehub/url_constants.cc +@@ -8,7 +8,7 @@ namespace ash { + namespace phonehub { + + const char kPhoneHubLearnMoreLink[] = +- "https://support.google.com/chromebook?p=phone_hub"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=phone_hub"; + + } // namespace phonehub + } // namespace ash +diff --git a/ash/constants/url_constants.cc b/ash/constants/url_constants.cc +--- a/ash/constants/url_constants.cc ++++ b/ash/constants/url_constants.cc +@@ -7,12 +7,12 @@ + namespace chrome { + + const char kAndroidMessagesLearnMoreURL[] = +- "https://support.google.com/chromebook/?p=multi_device_messages"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=multi_device_messages"; + + const char kLinuxExportImportHelpURL[] = +- "https://support.google.com/chromebook?p=linux_backup_restore"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=linux_backup_restore"; + + const char kMultiDeviceLearnMoreURL[] = +- "https://support.google.com/chromebook/?p=multi_device"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=multi_device"; + + } // namespace chrome +diff --git a/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc b/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc +--- a/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc ++++ b/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc +@@ -57,7 +57,7 @@ constexpr char kValidResponseEncoded[] = + "V0IHVwIHlvdXIgR29vZ2xlIEFzc2lzdGFudA=="; + constexpr char kInvalidResponse[] = "404 error"; + constexpr char kValidUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/device/2748"; ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/device/2748"; + + } // namespace + +diff --git a/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc b/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc +--- a/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc ++++ b/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc +@@ -18,7 +18,7 @@ + namespace { + + const char kGetObservedDeviceUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/device/" ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/device/" + "%d?key=%s&mode=MODE_RELEASE&alt=proto"; + + const net::NetworkTrafficAnnotationTag kTrafficAnnotation = +diff --git a/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc b/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc +--- a/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc ++++ b/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc +@@ -24,11 +24,11 @@ namespace quick_pair { + namespace { + + const char kUserDevicesUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/user/devices" ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/user/devices" + "?key=%s&alt=proto"; + + const char kUserDeleteDeviceUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/user/device/%s" ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/user/device/%s" + "?key=%s&alt=proto"; + + const net::PartialNetworkTrafficAnnotationTag kTrafficAnnotation = +diff --git a/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc b/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc +--- a/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc ++++ b/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc +@@ -38,9 +38,9 @@ + namespace { + + const char kDiscoveryLearnMoreLink[] = +- "https://support.google.com/chromebook?p=fast_pair_m101"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=fast_pair_m101"; + const char kAssociateAccountLearnMoreLink[] = +- "https://support.google.com/chromebook?p=bluetooth_pairing_m101"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=bluetooth_pairing_m101"; + + bool ShouldShowUserEmail(ash::LoginStatus status) { + switch (status) { +diff --git a/ash/services/device_sync/cryptauth_client_impl.cc b/ash/services/device_sync/cryptauth_client_impl.cc +--- a/ash/services/device_sync/cryptauth_client_impl.cc ++++ b/ash/services/device_sync/cryptauth_client_impl.cc +@@ -29,7 +29,7 @@ namespace { + // -------------------- CryptAuth v1 Endpoints -------------------- + + // Default URL of Google APIs endpoint hosting CryptAuth v1. +-const char kDefaultCryptAuthV1HTTPHost[] = "https://www.googleapis.com"; ++const char kDefaultCryptAuthV1HTTPHost[] = "https://www.9oo91eapis.qjz9zk"; + + // URL subpath hosting the CryptAuth v1 service. + const char kCryptAuthV1Path[] = "cryptauth/v1/"; +@@ -49,11 +49,11 @@ const char kFinishEnrollmentPath[] = "enrollment/finish"; + + // Default URL of Google APIs endpoint hosting CryptAuth v2 Enrollment. + const char kDefaultCryptAuthV2EnrollmentHTTPHost[] = +- "https://cryptauthenrollment.googleapis.com"; ++ "https://cryptauthenrollment.9oo91eapis.qjz9zk"; + + // Default URL of Google APIs endpoint hosting CryptAuth v2 DeviceSync. + const char kDefaultCryptAuthV2DeviceSyncHTTPHost[] = +- "https://cryptauthdevicesync.googleapis.com"; ++ "https://cryptauthdevicesync.9oo91eapis.qjz9zk"; + + // URL subpaths for each CryptAuth v2 API endpoint. + // Note: Although "v1" is part of the path names, these are in fact v2 API +@@ -69,7 +69,7 @@ const char kBatchSetFeatureStatusesPath[] = "/v1:batchSetFeatureStatuses"; + const char kGetDevicesActivityStatusPath[] = "/v1:getDevicesActivityStatus"; + + const char kCryptAuthOAuth2Scope[] = +- "https://www.googleapis.com/auth/cryptauth"; ++ "https://www.9oo91eapis.qjz9zk/auth/cryptauth"; + + // Creates the full CryptAuth v1 URL for endpoint to the API with + // |request_path|. +diff --git a/ash/services/ime/constants.cc b/ash/services/ime/constants.cc +--- a/ash/services/ime/constants.cc ++++ b/ash/services/ime/constants.cc +@@ -36,7 +36,7 @@ const base::FilePath::CharType kLanguageDataDirName[] = + FILE_PATH_LITERAL("data"); + #endif + +-const char kGoogleKeyboardDownloadDomain[] = "dl.google.com"; ++const char kGoogleKeyboardDownloadDomain[] = "dl.9oo91e.qjz9zk"; + + } // namespace ime + } // namespace ash +diff --git a/ash/system/eche/eche_tray.cc b/ash/system/eche/eche_tray.cc +--- a/ash/system/eche/eche_tray.cc ++++ b/ash/system/eche/eche_tray.cc +@@ -262,7 +262,7 @@ void EcheTray::CloseBubble() { + + void EcheTray::ShowBubble() { + #ifdef FAKE_BUBBLE_FOR_DEBUG +- LoadBubble(GURL("http://google.com"), std::move(gfx::Image()), ++ LoadBubble(GURL("http://9oo91e.qjz9zk"), std::move(gfx::Image()), + u"visible_name"); + return; + #endif +diff --git a/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc b/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc +--- a/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc ++++ b/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc +@@ -32,7 +32,7 @@ namespace ash { + namespace { + const char kNotifierPciePeripheral[] = "ash.pcie_peripheral"; + const char kLearnMoreHelpUrl[] = +- "https://www.support.google.com/chromebook?p=connect_thblt_usb4_accy"; ++ "https://www.support.9oo91e.qjz9zk/chromebook?p=connect_thblt_usb4_accy"; + const int kNotificationsClicksThreshold = 3; + + const char kPciePeripheralLimitedPerformanceNotificationId[] = +diff --git a/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc b/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc +--- a/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc ++++ b/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc +@@ -37,9 +37,9 @@ const char kUsbPeripheralInvalidTBTCableNotificationId[] = + const char kUsbPeripheralSpeedLimitingCableNotificationId[] = + "cros_usb_peripheral_speed_limiting_cable_notification_id"; + const char kNotificationDisplayLandingPageUrl[] = +- "https://support.google.com/chromebook?p=cable_notification"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=cable_notification"; + const char kNotificationDeviceLandingPageUrl[] = +- "https://support.google.com/chromebook?p=cable_notification_2"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=cable_notification_2"; + + bool GetCableSpeedNotificationShownPref() { + PrefService* prefs = +diff --git a/ash/wallpaper/test_wallpaper_controller_client.cc b/ash/wallpaper/test_wallpaper_controller_client.cc +--- a/ash/wallpaper/test_wallpaper_controller_client.cc ++++ b/ash/wallpaper/test_wallpaper_controller_client.cc +@@ -111,7 +111,7 @@ void TestWallpaperControllerClient::FetchGooglePhotosPhoto( + std::move(callback).Run( + personalization_app::mojom::GooglePhotosPhoto::New( + id, "dedup_key", "test_name", base::TimeFormatFriendlyDate(time), +- GURL("https://google.com/picture.png"), "home"), ++ GURL("https://9oo91e.qjz9zk/picture.png"), "home"), + /*success=*/true); + } + } +diff --git a/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc b/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc +--- a/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc ++++ b/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc +@@ -27,7 +27,7 @@ content::WebUIDataSource* CreateUntrustedCameraAppUIHTMLSource() { + + untrusted_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- std::string("connect-src http://www.google-analytics.com/ 'self';")); ++ std::string("connect-src http://www.9oo91e-analytics.qjz9zk/ 'self';")); + untrusted_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::WorkerSrc, + std::string("worker-src 'self';")); +diff --git a/ash/webui/camera_app_ui/resources/js/lib/analytics.js b/ash/webui/camera_app_ui/resources/js/lib/analytics.js +--- a/ash/webui/camera_app_ui/resources/js/lib/analytics.js ++++ b/ash/webui/camera_app_ui/resources/js/lib/analytics.js +@@ -27,14 +27,14 @@ + K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},de=function(a,b){var c=a.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),"/"==a||"?"==a||""==a||":"==a)return!0;return!1},ya=function(a,b){var c=M.referrer;if(/^(https?|android-app):\/\//i.test(c)){if(a)return c;a="//"+M.location.hostname;if(!de(c,a))return b&&(b=a.replace(/\./g,"-")+".cdn.ampproject.org",de(c,b))?void 0: + c}},za=function(a,b){if(1==b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, ++ c.indexOf("xn--")){c="";break b}(c=c.match(/(.*)\.cdn\.ampproject\.org\/?$/))&&2==c.length&&(d=c[1].replace(/-/g,".").replace(/\.\./g,"-"))}c=d?d.replace(Ue,""):""}(d=b===c)||(c="."+c,d=b.substring(b.length-c.length,b.length)===c);if(d){b=!0;break a}else J(78)}b=!1}return b&&!1!==a};var bd=function(a){return(a?"https:":Ba||"https:"==M.location.protocol?"https:":"http:")+"//www.9oo91e-analytics.qjz9zk"},Da=function(a){this.name="len";this.message=a+"-8192"},ba=function(a,b,c){c=c||ua;if(2036>=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, + d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d)try{var ca=g.responseText;if(1>ca.length)ge("xhr","ver","0"),c();else if("1"!=ca.charAt(0))ge("xhr","ver",String(ca.length)),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} + function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});!1===a.get(xe)&&b.push("npa=1");b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} + function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d?d+"/3":bd(!1)+"/collect");switch(P(a,ad)){case "d":e=c||(d?d+"/32":bd(!1)+"/j/collect");b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;case "b":e=c||(d?d+"/31":bd(!1)+"/r/collect");default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e=P(a,Na);delete h(e).pending_experiments; +@@ -61,9 +61,9 @@ + a[c].split("="),e=d[1];d=d[0];for(var g=b.childNodes||[],ca=!1,l=0;l\x3c/script>')):(e=M.createElement("script"),e.type="text/javascript",e.async=!0,e.src=ca,a&&e.setAttribute("nonce",a),ca=M.getElementsByTagName("script")[0],ca.parentNode.insertBefore(e,ca));$d.set(b,!0)}}}},v=function(a,b){var c=A.get(a)|| +- [];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+"/"+a);c.href=a; + d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0 + +- Link detected. $1www.google.com ++ Link detected. $1www.9oo91e.qjz9zk + + + Text detected. +diff --git a/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html b/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html +--- a/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html ++++ b/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html +@@ -3,7 +3,7 @@ + + + + +diff --git a/ash/webui/diagnostics_ui/diagnostics_ui.cc b/ash/webui/diagnostics_ui/diagnostics_ui.cc +--- a/ash/webui/diagnostics_ui/diagnostics_ui.cc ++++ b/ash/webui/diagnostics_ui/diagnostics_ui.cc +@@ -100,7 +100,7 @@ base::Value::Dict GetDataSourceUpdate() { + update.Set( + "keyboardTesterHelpLink", + base::Value(GetLinkLabel(IDS_INPUT_DIAGNOSTICS_KEYBOARD_TESTER_HELP_LINK, +- "https://support.google.com/chromebook/"))); ++ "https://support.9oo91e.qjz9zk/chromebook/"))); + return update; + } + +diff --git a/ash/webui/eche_app_ui/eche_alert_generator.cc b/ash/webui/eche_app_ui/eche_alert_generator.cc +--- a/ash/webui/eche_app_ui/eche_alert_generator.cc ++++ b/ash/webui/eche_app_ui/eche_alert_generator.cc +@@ -35,7 +35,7 @@ const char kEcheAppNetworkSettingNotifierId[] = + + // TODO(crbug.com/1241352): This should probably have a ?p= at + // some point. +-const char kEcheAppLearnMoreUrl[] = "https://support.google.com/chromebook"; ++const char kEcheAppLearnMoreUrl[] = "https://support.9oo91e.qjz9zk/chromebook"; + + EcheAlertGenerator::EcheAlertGenerator(LaunchAppHelper* launch_app_helper, + PrefService* pref_service) +diff --git a/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc b/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc +--- a/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc ++++ b/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc +@@ -53,7 +53,7 @@ content::WebUIDataSource* CreateHelpAppKidsMagazineUntrustedDataSource() { + network::mojom::CSPDirectiveName::DefaultSrc, ""); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ScriptSrc, +- "script-src 'self' https://www.gstatic.com;"); ++ "script-src 'self' https://www.95tat1c.qjz9zk;"); + return source; + } + +diff --git a/ash/webui/media_app_ui/media_app_guest_ui.cc b/ash/webui/media_app_ui/media_app_guest_ui.cc +--- a/ash/webui/media_app_ui/media_app_guest_ui.cc ++++ b/ash/webui/media_app_ui/media_app_guest_ui.cc +@@ -166,7 +166,7 @@ content::WebUIDataSource* CreateMediaAppUntrustedDataSource( + // Allow calls to Maps reverse geocoding API for loading metadata. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- "connect-src 'self' https://maps.googleapis.com/maps/api/geocode/json;"); ++ "connect-src 'self' https://maps.9oo91eapis.qjz9zk/maps/api/geocode/json;"); + + // Allow use of SharedArrayBuffer (required by the wasm). + source->OverrideCrossOriginOpenerPolicy("same-origin"); +diff --git a/ash/webui/os_feedback_ui/backend/help_content_provider.cc b/ash/webui/os_feedback_ui/backend/help_content_provider.cc +--- a/ash/webui/os_feedback_ui/backend/help_content_provider.cc ++++ b/ash/webui/os_feedback_ui/backend/help_content_provider.cc +@@ -39,9 +39,9 @@ using ::ash::os_feedback_ui::mojom::SearchResponse; + using ::ash::os_feedback_ui::mojom::SearchResponsePtr; + + constexpr char kHelpContentProviderUrl[] = +- "https://scone-pa.clients6.google.com/v1/search/list?key="; ++ "https://scone-pa.clients6.9oo91e.qjz9zk/v1/search/list?key="; + +-constexpr char kGoogleSupportSiteUrl[] = "https://support.google.com"; ++constexpr char kGoogleSupportSiteUrl[] = "https://support.9oo91e.qjz9zk"; + + // Response with 5 items takes ~7KB. A loose upper bound of 64KB is chosen to + // avoid breaking the flow in case the response is longer. +diff --git a/ash/webui/os_feedback_ui/resources/confirmation_page.js b/ash/webui/os_feedback_ui/resources/confirmation_page.js +--- a/ash/webui/os_feedback_ui/resources/confirmation_page.js ++++ b/ash/webui/os_feedback_ui/resources/confirmation_page.js +@@ -147,7 +147,7 @@ export class ConfirmationPageElement extends ConfirmationPageElementBase { + case 'chromebookCommunity': + // If app locale is not available, default to en. + window.open( +- `https://support.google.com/chromebook/?hl=${ ++ `https://support.9oo91e.qjz9zk/chromebook/?hl=${ + this.i18n('language') || 'en'}#topic=3399709`, + '_blank'); + this.handleEmitMetrics_( +diff --git a/ash/webui/os_feedback_ui/resources/fake_data.js b/ash/webui/os_feedback_ui/resources/fake_data.js +--- a/ash/webui/os_feedback_ui/resources/fake_data.js ++++ b/ash/webui/os_feedback_ui/resources/fake_data.js +@@ -14,12 +14,12 @@ import {FeedbackContext, HelpContentList, HelpContentType, SearchRequest, Search + export const fakePopularHelpContentList = [ + { + title: stringToMojoString16('fake article'), +- url: {url: 'https://support.google.com/chromebook/?q=article'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=article'}, + contentType: HelpContentType.kArticle, + }, + { + title: stringToMojoString16('fake forum'), +- url: {url: 'https://support.google.com/chromebook/?q=forum'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=forum'}, + contentType: HelpContentType.kForum, + }, + ]; +@@ -28,29 +28,29 @@ export const fakePopularHelpContentList = [ + export const fakeHelpContentList = [ + { + title: stringToMojoString16('Fix connection problems'), +- url: {url: 'https://support.google.com/chromebook/?q=6318213'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=6318213'}, + contentType: HelpContentType.kArticle, + }, + { + title: stringToMojoString16( + 'Why won\'t my wireless mouse with a USB piece wor...?'), +- url: {url: 'https://support.google.com/chromebook/?q=123920509'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=123920509'}, + contentType: HelpContentType.kForum, + }, + { + title: stringToMojoString16('Wifi Issues - only on Chromebooks'), +- url: {url: 'https://support.google.com/chromebook/?q=114174470'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=114174470'}, + contentType: HelpContentType.kForum, + }, + { + title: stringToMojoString16('Network Connectivity Fault'), +- url: {url: 'https://support.google.com/chromebook/?q=131459420'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=131459420'}, + contentType: HelpContentType.kForum, + }, + { + title: stringToMojoString16( + 'Connected to WiFi but can\'t connect to the internet'), +- url: {url: 'https://support.google.com/chromebook/?q=22864239'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=22864239'}, + contentType: HelpContentType.kUnknown, + }, + ]; +@@ -98,7 +98,7 @@ export const fakeEmptyFeedbackContext = { + + /** @type {!FeedbackContext} */ + export const fakeInternalUserFeedbackContext = { +- email: 'test.user@google.com', ++ email: 'test.user@9oo91e.qjz9zk', + pageUrl: {url: 'chrome://tab/'}, + isInternalAccount: true, + fromAssistant: true, +diff --git a/ash/webui/os_feedback_ui/resources/feedback_constants.js b/ash/webui/os_feedback_ui/resources/feedback_constants.js +--- a/ash/webui/os_feedback_ui/resources/feedback_constants.js ++++ b/ash/webui/os_feedback_ui/resources/feedback_constants.js +@@ -3,8 +3,8 @@ + // found in the LICENSE file. + + export const FEEDBACK_LEGAL_HELP_URL = +- 'https://support.google.com/legal/answer/3110420'; ++ 'https://support.9oo91e.qjz9zk/legal/answer/3110420'; + export const FEEDBACK_PRIVACY_POLICY_URL = +- 'https://policies.google.com/privacy'; ++ 'https://policies.9oo91e.qjz9zk/privacy'; + export const FEEDBACK_TERMS_OF_SERVICE_URL = +- 'https://policies.google.com/terms'; ++ 'https://policies.9oo91e.qjz9zk/terms'; +diff --git a/ash/webui/os_feedback_ui/resources/search_page.js b/ash/webui/os_feedback_ui/resources/search_page.js +--- a/ash/webui/os_feedback_ui/resources/search_page.js ++++ b/ash/webui/os_feedback_ui/resources/search_page.js +@@ -319,7 +319,7 @@ export class SearchPageElement extends SearchPageElementBase { + */ + feedbackWritingGuidanceUrl_() { + // TODO(xiangdongkong): append ?hl={the application locale} to the url. +- const url = 'https://support.google.com/chromebook/answer/2982029'; ++ const url = 'https://support.9oo91e.qjz9zk/chromebook/answer/2982029'; + return url; + } + +diff --git a/ash/webui/personalization_app/personalization_app_ui.cc b/ash/webui/personalization_app/personalization_app_ui.cc +--- a/ash/webui/personalization_app/personalization_app_ui.cc ++++ b/ash/webui/personalization_app/personalization_app_ui.cc +@@ -33,7 +33,7 @@ namespace ash::personalization_app { + + namespace { + +-inline constexpr char kGooglePhotosURL[] = "https://photos.google.com"; ++inline constexpr char kGooglePhotosURL[] = "https://photos.9oo91e.qjz9zk"; + + GURL GetGooglePhotosURL() { + return GURL(kGooglePhotosURL); +diff --git a/ash/webui/projector_app/projector_xhr_sender.cc b/ash/webui/projector_app/projector_xhr_sender.cc +--- a/ash/webui/projector_app/projector_xhr_sender.cc ++++ b/ash/webui/projector_app/projector_xhr_sender.cc +@@ -42,13 +42,13 @@ constexpr char kApiKeyParam[] = "key"; + + // List of URL prefix supported by `ProjectorXhrSender`. + const char* kUrlAllowlist[] = { +- "https://www.googleapis.com/drive/v3/files/", +- "https://www.googleapis.com/upload/drive/v3/files/", ++ "https://www.9oo91eapis.qjz9zk/drive/v3/files/", ++ "https://www.9oo91eapis.qjz9zk/upload/drive/v3/files/", + // TODO(b/229792620): Remove this URL prefix once web component is updated + // with the base URL that force using primary account credential. +- "https://drive.google.com/get_video_info", +- "https://drive.google.com/u/0/get_video_info", +- "https://translation.googleapis.com/language/translate/v2"}; ++ "https://drive.9oo91e.qjz9zk/get_video_info", ++ "https://drive.9oo91e.qjz9zk/u/0/get_video_info", ++ "https://translation.9oo91eapis.qjz9zk/language/translate/v2"}; + + // Return true if the url matches the allowed URL prefix. + bool IsUrlAllowlisted(const std::string& url) { +diff --git a/ash/webui/projector_app/projector_xhr_sender.h b/ash/webui/projector_app/projector_xhr_sender.h +--- a/ash/webui/projector_app/projector_xhr_sender.h ++++ b/ash/webui/projector_app/projector_xhr_sender.h +@@ -27,7 +27,7 @@ class URLLoaderFactory; + + namespace ash { + +-constexpr char kDriveV3BaseUrl[] = "https://www.googleapis.com/drive/v3/files/"; ++constexpr char kDriveV3BaseUrl[] = "https://www.9oo91eapis.qjz9zk/drive/v3/files/"; + constexpr char kRequestMethodPatch[] = "PATCH"; + + /** +diff --git a/ash/webui/projector_app/untrusted_projector_ui.cc b/ash/webui/projector_app/untrusted_projector_ui.cc +--- a/ash/webui/projector_app/untrusted_projector_ui.cc ++++ b/ash/webui/projector_app/untrusted_projector_ui.cc +@@ -50,13 +50,13 @@ content::WebUIDataSource* CreateProjectorHTMLSource( + // Allow fonts. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::FontSrc, +- "font-src https://fonts.gstatic.com;"); ++ "font-src https://fonts.95tat1c.qjz9zk;"); + // Allow styles to include inline styling needed for Polymer elements. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::StyleSrc, +- "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;"); ++ "style-src 'self' 'unsafe-inline' https://f0ntz.9oo91e8p1.qjz9zk;"); + std::string mediaCSP = +- std::string("media-src 'self' https://*.drive.google.com ") + ++ std::string("media-src 'self' https://*.drive.9oo91e.qjz9zk ") + + kChromeUIUntrustedProjectorPwaUrl + " blob:;"; + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::MediaSrc, +@@ -65,11 +65,11 @@ content::WebUIDataSource* CreateProjectorHTMLSource( + // Allow images to also handle data urls. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ImgSrc, +- "img-src blob: data: 'self' https://*.googleusercontent.com;"); ++ "img-src blob: data: 'self' https://*.9oo91eusercontent.qjz9zk;"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- "connect-src 'self' https://www.googleapis.com " +- "https://drive.google.com;"); ++ "connect-src 'self' https://www.9oo91eapis.qjz9zk " ++ "https://drive.9oo91e.qjz9zk;"); + + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, +diff --git a/ash/webui/scanning/resources/scanning_app.html b/ash/webui/scanning/resources/scanning_app.html +--- a/ash/webui/scanning/resources/scanning_app.html ++++ b/ash/webui/scanning/resources/scanning_app.html +@@ -268,7 +268,7 @@ + [[i18n(toastMessageKey_)]] +

+diff --git a/ash/webui/scanning/resources/scanning_app.js b/ash/webui/scanning/resources/scanning_app.js +--- a/ash/webui/scanning/resources/scanning_app.js ++++ b/ash/webui/scanning/resources/scanning_app.js +@@ -43,7 +43,7 @@ import {ScanningBrowserProxy, ScanningBrowserProxyImpl, SelectedPath} from './sc + * URL for the Scanning help page. + * @const {string} + */ +-const HELP_PAGE_LINK = 'http://support.google.com/chromebook?p=chrome_scanning'; ++const HELP_PAGE_LINK = 'http://support.9oo91e.qjz9zk/chromebook?p=chrome_scanning'; + + /** + * @fileoverview +diff --git a/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js b/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js +--- a/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js ++++ b/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js +@@ -251,7 +251,7 @@ export class OnboardingEnterRsuWpDisableCodePage extends + */ + computeRsuChallengeLinkText_() { + const unlockPageUrl = +- 'https://chromeos.google.com/partner/console/cr50reset?challenge='; ++ 'https://chromeos.9oo91e.qjz9zk/partner/console/cr50reset?challenge='; + return unlockPageUrl + this.rsuChallenge_ + '&hwid=' + this.rsuHwid_; + } + +diff --git a/base/android/resource_exclusions.gni b/base/android/resource_exclusions.gni +--- a/base/android/resource_exclusions.gni ++++ b/base/android/resource_exclusions.gni +@@ -16,7 +16,7 @@ common_resource_exclusion_exceptions = [ + common_resource_exclusion_regex += "|-watch\b" + + # As of May 2020, 0.2% of devices are ldpi: +-# https://developer.android.com/about/dashboards/index.html ++# https://developer.8n6r01d.qjz9zk/about/dashboards/index.html + # Only a single resources is defined in this config: + # ic_arrow_down_24dp + # It saves XXkb to omit the config. +diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc +--- a/base/debug/debugger_posix.cc ++++ b/base/debug/debugger_posix.cc +@@ -135,7 +135,7 @@ void VerifyDebugger() { + << "Detected lldb without sourcing //tools/lldb/lldbinit.py. lldb may " + "not be able to find debug symbols. Please see debug instructions for " + "using //tools/lldb/lldbinit.py:\n" +- "https://chromium.googlesource.com/chromium/src/+/main/docs/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/" + "lldbinit.md\n" + "To continue anyway, type 'continue' in lldb. To always skip this " + "check, define an environment variable CHROMIUM_LLDBINIT_SOURCED=1"; +@@ -218,7 +218,7 @@ void VerifyDebugger() { + << "Detected gdb without sourcing //tools/gdb/gdbinit. gdb may not be " + "able to find debug symbols, and pretty-printing of STL types may not " + "work. Please see debug instructions for using //tools/gdb/gdbinit:\n" +- "https://chromium.googlesource.com/chromium/src/+/main/docs/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/" + "gdbinit.md\n" + "To continue anyway, type 'continue' in gdb. To always skip this " + "check, define an environment variable CHROMIUM_GDBINIT_SOURCED=1"; +diff --git a/base/debug/stack_trace_posix.cc b/base/debug/stack_trace_posix.cc +--- a/base/debug/stack_trace_posix.cc ++++ b/base/debug/stack_trace_posix.cc +@@ -365,7 +365,7 @@ void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context) { + "CFI: Most likely a control flow integrity violation; for more " + "information see:\n"); + PrintToStderr( +- "https://www.chromium.org/developers/testing/control-flow-integrity\n"); ++ "https://www.ch40m1um.qjz9zk/developers/testing/control-flow-integrity\n"); + } + #endif // BUILDFLAG(CFI_ENFORCEMENT_TRAP) + +diff --git a/base/functional/callback.h b/base/functional/callback.h +--- a/base/functional/callback.h ++++ b/base/functional/callback.h +@@ -184,7 +184,7 @@ class OnceCallback : public internal::CallbackBase { + static_assert( + AlwaysFalse, + "need to convert a base::OnceCallback to base::FunctionRef? " +- "Please bring up this use case on #cxx (Slack) or cxx@chromium.org."); ++ "Please bring up this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + + template +@@ -194,7 +194,7 @@ class OnceCallback : public internal::CallbackBase { + AlwaysFalse, + "using base::BindOnce() is not necessary with base::FunctionRef; is it " + "possible to use a capturing lambda directly? If not, please bring up " +- "this use case on #cxx (Slack) or cxx@chromium.org."); ++ "this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + }; + +@@ -318,7 +318,7 @@ class RepeatingCallback : public internal::CallbackBaseCopyable { + static_assert( + AlwaysFalse, + "need to convert a base::RepeatingCallback to base::FunctionRef? " +- "Please bring up this use case on #cxx (Slack) or cxx@chromium.org."); ++ "Please bring up this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + + template +@@ -328,7 +328,7 @@ class RepeatingCallback : public internal::CallbackBaseCopyable { + AlwaysFalse, + "using base::BindRepeating() is not necessary with base::FunctionRef; " + "is it possible to use a capturing lambda directly? If not, please " +- "bring up this use case on #cxx (Slack) or cxx@chromium.org."); ++ "bring up this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + }; + +diff --git a/base/ios/device_util.mm b/base/ios/device_util.mm +--- a/base/ios/device_util.mm ++++ b/base/ios/device_util.mm +@@ -42,7 +42,7 @@ NSString* GenerateClientId() { + NSString* client_id = [defaults stringForKey:kLegacyClientIdPreferenceKey]; + + // Some iOS6 devices return a buggy identifierForVendor: +- // http://openradar.appspot.com/12377282. If this is the case, revert to ++ // http://openradar.8pp2p8t.qjz9zk/12377282. If this is the case, revert to + // generating a new one. + if (!client_id || [client_id isEqualToString:kZeroUUID]) { + client_id = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; +diff --git a/base/memory/raw_ptr.cc b/base/memory/raw_ptr.cc +--- a/base/memory/raw_ptr.cc ++++ b/base/memory/raw_ptr.cc +@@ -202,7 +202,7 @@ void AsanBackupRefPtrImpl::AsanCheckIfValidExtraction( + "Otherwise, it is still likely a bug to rely on the address of an " + "already freed allocation.\n" + "Refer to " +- "https://chromium.googlesource.com/chromium/src/+/main/base/memory/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/base/memory/" + "raw_ptr.md for details.\n" + "================================================================="); + } +diff --git a/base/memory/raw_ptr_asan_service.cc b/base/memory/raw_ptr_asan_service.cc +--- a/base/memory/raw_ptr_asan_service.cc ++++ b/base/memory/raw_ptr_asan_service.cc +@@ -215,7 +215,7 @@ void RawPtrAsanService::ErrorReportCallback(const char* report) { + + Log("\nMiraclePtr Status: %s\n" + "Refer to " +- "https://chromium.googlesource.com/chromium/src/+/main/base/memory/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/base/memory/" + "raw_ptr.md for details.", + status_body); + } +diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py +--- a/build/android/gradle/generate_gradle.py ++++ b/build/android/gradle/generate_gradle.py +@@ -906,7 +906,7 @@ def main(): + + logging.warning('Generated files will only appear once you\'ve built them.') + logging.warning('Generated projects for Android Studio %s', channel) +- logging.warning('For more tips: https://chromium.googlesource.com/chromium' ++ logging.warning('For more tips: https://chromium.9oo91esource.qjz9zk/chromium' + '/src.git/+/main/docs/android_studio.md') + + +diff --git a/build/android/gyp/assert_static_initializers.py b/build/android/gyp/assert_static_initializers.py +--- a/build/android/gyp/assert_static_initializers.py ++++ b/build/android/gyp/assert_static_initializers.py +@@ -173,7 +173,7 @@ def main(): + print(' //tools/binary_size/diagnose_bloat.py') + print() + print('For more information:') +- print(' https://chromium.googlesource.com/chromium/src/+/main/docs/' ++ print(' https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/' + 'static_initializers.md') + sys.exit(1) + +diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py +--- a/build/android/gyp/lint.py ++++ b/build/android/gyp/lint.py +@@ -20,7 +20,7 @@ from util import build_utils + from util import manifest_utils + from util import server_utils + +-_LINT_MD_URL = 'https://chromium.googlesource.com/chromium/src/+/main/build/android/docs/lint.md' # pylint: disable=line-too-long ++_LINT_MD_URL = 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/build/android/docs/lint.md' # pylint: disable=line-too-long + + # These checks are not useful for chromium. + _DISABLED_ALWAYS = [ +diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py +--- a/build/android/gyp/proguard.py ++++ b/build/android/gyp/proguard.py +@@ -376,7 +376,7 @@ def _OptimizeWithR8(options, + # Python will print the original exception as well. + raise Exception( + 'R8 failed. Please see ' +- 'https://chromium.googlesource.com/chromium/src/+/HEAD/build/' ++ 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/build/' + 'android/docs/java_optimization.md#Debugging-common-failures') from e + + base_has_imported_lib = False +@@ -510,7 +510,7 @@ out/Release/apks/YourApk.apk > dex.txt + stderr += """ + You may need to update build configs to run FragmentActivityReplacer for + additional targets. See +-https://chromium.googlesource.com/chromium/src.git/+/main/docs/ui/android/bytecode_rewriting.md. ++https://chromium.9oo91esource.qjz9zk/chromium/src.git/+/main/docs/ui/android/bytecode_rewriting.md. + """ + elif had_unfiltered_items: + # Left only with empty headings. All indented items filtered out. +diff --git a/build/android/gyp/util/diff_utils.py b/build/android/gyp/util/diff_utils.py +--- a/build/android/gyp/util/diff_utils.py ++++ b/build/android/gyp/util/diff_utils.py +@@ -108,10 +108,10 @@ def CheckExpectations(actual_data, options, custom_msg=''): + else: + fail_msg = """ + Expectations need updating: +-https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/android/expectations/README.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/chrome/android/expectations/README.md + + LogDog tip: Use "Raw log" or "Switch to lite mode" before copying: +-https://bugs.chromium.org/p/chromium/issues/detail?id=984616 ++https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=984616 + + {} + +diff --git a/build/android/gyp/util/protoresources.py b/build/android/gyp/util/protoresources.py +--- a/build/android/gyp/util/protoresources.py ++++ b/build/android/gyp/util/protoresources.py +@@ -4,7 +4,7 @@ + """Functions that modify resources in protobuf format. + + Format reference: +-https://cs.android.com/search?q=f:aapt2.*Resources.proto ++https://cs.8n6r01d.qjz9zk/search?q=f:aapt2.*Resources.proto + """ + + import logging +diff --git a/build/android/incremental_install/installer.py b/build/android/incremental_install/installer.py +--- a/build/android/incremental_install/installer.py ++++ b/build/android/incremental_install/installer.py +@@ -280,7 +280,7 @@ def Install(device, install_json, apk=None, enable_device_cache=False, + if apis_allowed.strip() not in '01': + msg = """\ + Cannot use incremental installs on Android P+ without first enabling access to +-non-SDK interfaces (https://developer.android.com/preview/non-sdk-q). ++non-SDK interfaces (https://developer.8n6r01d.qjz9zk/preview/non-sdk-q). + + To enable access: + adb -s {0} shell settings put global {1} 0 +diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py +--- a/build/android/resource_sizes.py ++++ b/build/android/resource_sizes.py +@@ -145,7 +145,7 @@ def _ReadZipInfoExtraFieldLength(zip_file, zip_info): + def _MeasureApkSignatureBlock(zip_file): + """Measures the size of the v2 / v3 signing block. + +- Refer to: https://source.android.com/security/apksigning/v2 ++ Refer to: https://source.8n6r01d.qjz9zk/security/apksigning/v2 + """ + # Seek to "end of central directory" struct. + eocd_offset_from_end = -22 - len(zip_file.comment) +diff --git a/build/android/test_wrapper/logdog_wrapper.py b/build/android/test_wrapper/logdog_wrapper.py +--- a/build/android/test_wrapper/logdog_wrapper.py ++++ b/build/android/test_wrapper/logdog_wrapper.py +@@ -27,7 +27,7 @@ from py_utils import tempfile_ext + + PROJECT = 'chromium' + OUTPUT = 'logdog' +-COORDINATOR_HOST = 'luci-logdog.appspot.com' ++COORDINATOR_HOST = 'luci-logdog.8pp2p8t.qjz9zk' + LOGDOG_TERMINATION_TIMEOUT = 30 + + +diff --git a/build/apple/tweak_info_plist.py b/build/apple/tweak_info_plist.py +--- a/build/apple/tweak_info_plist.py ++++ b/build/apple/tweak_info_plist.py +@@ -156,9 +156,9 @@ def _AddBreakpadKeys(plist, branding, platform, staging): + plist['BreakpadProduct'] = '%s_%s' % (branding, platform) + plist['BreakpadProductDisplay'] = branding + if staging: +- plist['BreakpadURL'] = 'https://clients2.google.com/cr/staging_report' ++ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/staging_report' + else: +- plist['BreakpadURL'] = 'https://clients2.google.com/cr/report' ++ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/report' + + # These are both deliberately strings and not boolean. + plist['BreakpadSendAndExit'] = 'YES' +@@ -195,7 +195,7 @@ def _AddKeystoneKeys(plist, bundle_identifier, base_tag): + also requires the |bundle_identifier| argument (com.example.product).""" + plist['KSVersion'] = plist['CFBundleShortVersionString'] + plist['KSProductID'] = bundle_identifier +- plist['KSUpdateURL'] = 'https://tools.google.com/service/update2' ++ plist['KSUpdateURL'] = 'https://tools.9oo91e.qjz9zk/service/update2' + + _RemoveKeys(plist, 'KSChannelID') + if base_tag != '': +diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni +--- a/build/config/android/rules.gni ++++ b/build/config/android/rules.gni +@@ -1893,7 +1893,7 @@ if (enable_java_templates) { + # * public.txt + # * annotations.zip + # * assets/ +- # See: https://developer.android.com/studio/projects/android-library.html#aar-contents ++ # See: https://developer.8n6r01d.qjz9zk/studio/projects/android-library.html#aar-contents + # + # Variables: + # output: Path to the output .aar. +diff --git a/build/config/chrome_build.gni b/build/config/chrome_build.gni +--- a/build/config/chrome_build.gni ++++ b/build/config/chrome_build.gni +@@ -15,7 +15,7 @@ declare_args() { + # Note: CfT is not intended to be used as a test runner to run tests in this + # repository. + # +- # Design doc: https://goo.gle/chrome-for-testing ++ # Design doc: https://goo.gl.qjz9zke/chrome-for-testing + is_chrome_for_testing_branded = false + + # Set to true to enable settings for high end Android devices, typically +diff --git a/build/config/chromeos/args.gni b/build/config/chromeos/args.gni +--- a/build/config/chromeos/args.gni ++++ b/build/config/chromeos/args.gni +@@ -21,8 +21,8 @@ declare_args() { + # linux-chromeos, so some have compile-time asserts that intentionally fail + # when this build flag is set. Build and run the tests for linux-chromeos + # instead. +- # https://chromium.googlesource.com/chromium/src/+/main/docs/chromeos_build_instructions.md +- # https://chromium.googlesource.com/chromiumos/docs/+/main/simple_chrome_workflow.md ++ # https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/chromeos_build_instructions.md ++ # https://chromium.9oo91esource.qjz9zk/chromiumos/docs/+/main/simple_chrome_workflow.md + is_chromeos_device = false + + # Determines if we run the test in skylab, aka the CrOS labs. +diff --git a/build/config/chromeos/rules.gni b/build/config/chromeos/rules.gni +--- a/build/config/chromeos/rules.gni ++++ b/build/config/chromeos/rules.gni +@@ -248,7 +248,7 @@ template("generate_skylab_deps") { + # tast_vars: A list of "key=value" runtime variable pairs to pass to invoke + # strip_chrome: If true, strips Chrome before deploying it for non-Tast tests. + # the Tast tests. For more details, please see: +-# https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/docs/writing_tests.md#Runtime-variables ++# https://chromium.9oo91esource.qjz9zk/chromiumos/platform/tast/+/HEAD/docs/writing_tests.md#Runtime-variables + template("generate_runner_script") { + forward_variables_from(invoker, + [ +@@ -509,7 +509,7 @@ template("tast_test") { + if (!defined(tast_attr_expr) && !defined(tast_tests)) { + # The following expression filters out all non-critical tests. See the link + # below for more details: +- # https://chromium.googlesource.com/chromiumos/platform/tast/+/main/docs/test_attributes.md ++ # https://chromium.9oo91esource.qjz9zk/chromiumos/platform/tast/+/main/docs/test_attributes.md + tast_attr_expr = "\"group:mainline\" && \"dep:chrome\"" + + if (defined(enable_tast_informational_tests) && +@@ -630,7 +630,7 @@ template("lacros_tast_tests") { + # use it for testing. To support running lacros tast tests from Chromium CI, + # a Var is added to support pointing the tast tests to use a specified + # pre-deployed lacros-chrome. The location is decided by: +- # https://source.chromium.org/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61 ++ # https://source.ch40m1um.qjz9zk/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61 + tast_vars = [ "lacros.DeployedBinary=/usr/local/lacros-chrome" ] + + data_deps = _lacros_data_deps +diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni +--- a/build/config/compiler/compiler.gni ++++ b/build/config/compiler/compiler.gni +@@ -130,7 +130,7 @@ declare_args() { + # Technology (CET). If Windows version and hardware supports the feature and + # it's enabled by OS then additional validation of return address will be + # performed as mitigation against Return-oriented programming (ROP). +- # https://chromium.googlesource.com/chromium/src/+/main/docs/design/sandbox.md#cet-shadow-stack ++ # https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/design/sandbox.md#cet-shadow-stack + enable_cet_shadow_stack = target_cpu == "x64" + + # If true, optimize for size. +@@ -244,7 +244,7 @@ declare_args() { + # results independent of the checkout and build directory names, which + # in turn is important for goma compile hit rate. + # Setting this to true may make it harder to debug binaries on Linux, see +-# https://chromium.googlesource.com/chromium/src/+/main/docs/linux/debugging.md#Source-level-debug-with-fdebug_compilation_dir ++# https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/linux/debugging.md#Source-level-debug-with-fdebug_compilation_dir + # It's not clear if the crash server will correctly handle dSYMs with relative + # paths, so we disable this feature for official benefit. The main benefit is + # deterministic builds to reduce compile times, so this is less relevant for +diff --git a/build/config/locales.gni b/build/config/locales.gni +--- a/build/config/locales.gni ++++ b/build/config/locales.gni +@@ -158,7 +158,7 @@ extended_locales = [ + # Chrome locales not on Android. + # These locales have not yet been tested yet. Specifically, AOSP has not been + # translated to Welsh at the time of writing (April 2022): +-# https://cs.android.com/android/platform/superproject/+/master:build/make/target/product/languages_default.mk ++# https://cs.8n6r01d.qjz9zk/android/platform/superproject/+/master:build/make/target/product/languages_default.mk + # Due to this, the only way a user could see Welsh strings - assuming they were + # built - would be to manually switch their "Chrome language" in Chrome's + # language settings to Welsh, so Welsh usage would probably be very low. +diff --git a/build/config/nacl/rules.gni b/build/config/nacl/rules.gni +--- a/build/config/nacl/rules.gni ++++ b/build/config/nacl/rules.gni +@@ -38,7 +38,7 @@ template("generate_nmf") { + } + + # TODO(phosek): Remove this conditional once +- # https://bugs.chromium.org/p/nativeclient/issues/detail?id=4339 is ++ # https://bugs.ch40m1um.qjz9zk/p/nativeclient/issues/detail?id=4339 is + # resolved. + if (current_cpu == "pnacl") { + objdump = rebase_path("${nacl_toolchain_bindir}/x86_64-nacl-objdump") +diff --git a/build/config/ozone.gni b/build/config/ozone.gni +--- a/build/config/ozone.gni ++++ b/build/config/ozone.gni +@@ -27,7 +27,7 @@ declare_args() { + # Enable explicit apitrace (https://apitrace.github.io) loading. + # This requires apitrace library with additional bindings. + # See ChromeOS package for details: +- # https://chromium-review.googlesource.com/c/chromiumos/overlays/chromiumos-overlay/+/2659419 ++ # https://chromium-review.9oo91esource.qjz9zk/c/chromiumos/overlays/chromiumos-overlay/+/2659419 + # Chrome will not start without an apitrace.so library. + # Trace will be saved to /tmp/gltrace.dat file by default. You can + # override it at run time with TRACE_FILE= environment variable. +diff --git a/build/config/sanitizers/sanitizers.gni b/build/config/sanitizers/sanitizers.gni +--- a/build/config/sanitizers/sanitizers.gni ++++ b/build/config/sanitizers/sanitizers.gni +@@ -65,7 +65,7 @@ declare_args() { + use_cfi_recover = false + + # Compile for fuzzing with LLVM LibFuzzer. +- # See http://www.chromium.org/developers/testing/libfuzzer ++ # See http://www.ch40m1um.qjz9zk/developers/testing/libfuzzer + use_libfuzzer = false + + # Compile for fuzzing with AFL. +diff --git a/build/config/win/control_flow_guard.gni b/build/config/win/control_flow_guard.gni +--- a/build/config/win/control_flow_guard.gni ++++ b/build/config/win/control_flow_guard.gni +@@ -12,7 +12,7 @@ declare_args() { + + if (win_enable_cfg_guards) { + # Control Flow Guard (CFG) +- # https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065.aspx ++ # https://msdn.m1cr050ft.qjz9zk/en-us/library/windows/desktop/mt637065.aspx + # /DYNAMICBASE (ASLR) is turned off in debug builds, therefore CFG can't be + # turned on either. + # ASan and CFG leads to slow process startup. Chromium's test runner uses +diff --git a/build/fuchsia/binary_size_differ.py b/build/fuchsia/binary_size_differ.py +--- a/build/fuchsia/binary_size_differ.py ++++ b/build/fuchsia/binary_size_differ.py +@@ -33,7 +33,7 @@ from binary_sizes import PACKAGES_SIZES_FILE + # (solely based on compressed growth). + _FIRST_WARNING_DELTA_BYTES = 12 * 1024 # 12 KiB + _ALWAYS_FAIL_DELTA_BYTES = 100 * 1024 # 100 KiB +-_TRYBOT_DOC = 'https://chromium.googlesource.com/chromium/src/+/main/docs/speed/binary_size/fuchsia_binary_size_trybot.md' ++_TRYBOT_DOC = 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/speed/binary_size/fuchsia_binary_size_trybot.md' + + SIZE_FAILURE = 1 + ROLLER_SIZE_WARNING = 2 +diff --git a/build/fuchsia/binary_sizes.py b/build/fuchsia/binary_sizes.py +--- a/build/fuchsia/binary_sizes.py ++++ b/build/fuchsia/binary_sizes.py +@@ -96,7 +96,7 @@ def CreateTestResults(test_status, timestamp): + """Create test results data to write to JSON test results file. + + The JSON data format is defined in +- https://chromium.googlesource.com/chromium/src/+/main/docs/testing/json_test_results_format.md ++ https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/testing/json_test_results_format.md + """ + + results = { +diff --git a/build/fuchsia/pkg_repo.py b/build/fuchsia/pkg_repo.py +--- a/build/fuchsia/pkg_repo.py ++++ b/build/fuchsia/pkg_repo.py +@@ -19,7 +19,7 @@ _PM_SERVE_POLL_INTERVAL = 0.1 + + _MANAGED_REPO_NAME = 'chromium-test-package-server' + +-_HOSTS = ['fuchsia.com', 'chrome.com', 'chromium.org'] ++_HOSTS = ['fuchsia.com', 'ch40me.qjz9zk', 'ch40m1um.qjz9zk'] + + + class PkgRepo(object): +diff --git a/build/linux/install-chromeos-fonts.py b/build/linux/install-chromeos-fonts.py +--- a/build/linux/install-chromeos-fonts.py ++++ b/build/linux/install-chromeos-fonts.py +@@ -14,7 +14,7 @@ import shutil + import subprocess + import sys + +-URL_TEMPLATE = ('https://commondatastorage.googleapis.com/chromeos-localmirror/' ++URL_TEMPLATE = ('https://commondatastorage.9oo91eapis.qjz9zk/chromeos-localmirror/' + 'distfiles/%(name)s-%(version)s.tar.bz2') + + # Taken from the media-fonts/ ebuilds in chromiumos-overlay. +diff --git a/build/linux/sysroot_scripts/install-sysroot.py b/build/linux/sysroot_scripts/install-sysroot.py +--- a/build/linux/sysroot_scripts/install-sysroot.py ++++ b/build/linux/sysroot_scripts/install-sysroot.py +@@ -42,7 +42,7 @@ except ImportError: + + SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) + +-URL_PREFIX = 'https://commondatastorage.googleapis.com' ++URL_PREFIX = 'https://commondatastorage.9oo91eapis.qjz9zk' + URL_PATH = 'chrome-linux-sysroot/toolchain' + + VALID_ARCHS = ('arm', 'arm64', 'i386', 'amd64', 'mips', 'mips64el') +diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py +--- a/build/mac_toolchain.py ++++ b/build/mac_toolchain.py +@@ -89,7 +89,7 @@ def RequestCipdAuthentication(): + print() + print('and follow the instructions.') + print() +- print('NOTE: Use your google.com credentials, not chromium.org.') ++ print('NOTE: Use your 9oo91e.qjz9zk credentials, not ch40m1um.qjz9zk.') + print() + print('-----------------------------------------------------------------') + print() +diff --git a/build/nocompile.gni b/build/nocompile.gni +--- a/build/nocompile.gni ++++ b/build/nocompile.gni +@@ -7,7 +7,7 @@ + # a particular construct will not compile. + # + # Also see: +-# http://dev.chromium.org/developers/testing/no-compile-tests ++# http://dev.ch40m1um.qjz9zk/developers/testing/no-compile-tests + # + # To use this, create a gyp target with the following form: + # +diff --git a/build/toolchain/cros_toolchain.gni b/build/toolchain/cros_toolchain.gni +--- a/build/toolchain/cros_toolchain.gni ++++ b/build/toolchain/cros_toolchain.gni +@@ -15,7 +15,7 @@ + # target_os = "chromeos" + # + # To perform a board-specific build, first obtain the correct system +-# root (http://goo.gl/aFB4XH) for the board. Then configure GN to use it ++# root (http://goo.gl.qjz9zk/aFB4XH) for the board. Then configure GN to use it + # by setting appropriate cross-compilation variables. + # + # For example, to compile a Chrome source tree in /g/src for an +diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni +--- a/build/toolchain/gcc_toolchain.gni ++++ b/build/toolchain/gcc_toolchain.gni +@@ -712,7 +712,7 @@ template("gcc_toolchain") { + rust_sysroot_relative_to_out = rebase_path(rust_sysroot, root_out_dir) + rustc_wrapper = rebase_path("//build/rust/rustc_wrapper.py") + +- # RSP manipulation due to https://bugs.chromium.org/p/gn/issues/detail?id=249 ++ # RSP manipulation due to https://bugs.ch40m1um.qjz9zk/p/gn/issues/detail?id=249 + tool("rust_staticlib") { + rust_outfile = "{{output_dir}}/{{target_output_name}}.a" + depfile = "{{output}}.d" +diff --git a/build/util/lib/common/perf_tests_results_helper.py b/build/util/lib/common/perf_tests_results_helper.py +--- a/build/util/lib/common/perf_tests_results_helper.py ++++ b/build/util/lib/common/perf_tests_results_helper.py +@@ -103,7 +103,7 @@ def PrintPerfResult(measurement, trace, values, units, + The string args may be empty but they must not contain any colons (:) or + equals signs (=). + This is parsed by the buildbot using: +- http://src.chromium.org/viewvc/chrome/trunk/tools/build/scripts/slave/process_log_utils.py ++ http://src.ch40m1um.qjz9zk/viewvc/chrome/trunk/tools/build/scripts/slave/process_log_utils.py + + Args: + measurement: A description of the quantity being measured, e.g. "vm_peak". +diff --git a/build/util/lib/results/result_sink.py b/build/util/lib/results/result_sink.py +--- a/build/util/lib/results/result_sink.py ++++ b/build/util/lib/results/result_sink.py +@@ -139,7 +139,7 @@ class ResultSinkClient(object): + if test_file and str(test_file).startswith('//'): + tr['testMetadata']['location'] = { + 'file_name': test_file, +- 'repo': 'https://chromium.googlesource.com/chromium/src', ++ 'repo': 'https://chromium.9oo91esource.qjz9zk/chromium/src', + } + + res = requests.post(url=self.test_results_url, +diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt +--- a/build/whitespace_file.txt ++++ b/build/whitespace_file.txt +@@ -163,7 +163,7 @@ In the BUILD we trust. + In the masters we don't. + In the tryservers, we don't either. + In the CQ sometimes. +-Auto-generated by git-eject-upstream (http://goo.gl/cIHsYR) ++Auto-generated by git-eject-upstream (http://goo.gl.qjz9zk/cIHsYR) + My sandwiches are like my children: I love them all. + No, really, I couldn't eat another bit. + When I hunger I think of you, and a pastrami sandwich. +diff --git a/buildtools/README.txt b/buildtools/README.txt +--- a/buildtools/README.txt ++++ b/buildtools/README.txt +@@ -3,7 +3,7 @@ projects. The actual binaries are pulled from Google Storage, normally as part + of a gclient hook. + + This directory also exists as a stand-alone git mirror at +-https://chromium.googlesource.com/chromium/src/buildtools/. ++https://chromium.9oo91esource.qjz9zk/chromium/src/buildtools/. + That mirror exists so that the shared build tools can be shared between + the various Chromium-related projects without each one needing to maintain + their own versionining of each binary. +@@ -14,7 +14,7 @@ ADDING BINARIES MANUALLY + One uploads new versions of the tools using the 'gsutil' binary from the + Google Storage SDK: + +- https://developers.google.com/storage/docs/gsutil ++ https://developers.9oo91e.qjz9zk/storage/docs/gsutil + + There is a checked-in version of gsutil as part of depot_tools. + +diff --git a/buildtools/clang_format/README.txt b/buildtools/clang_format/README.txt +--- a/buildtools/clang_format/README.txt ++++ b/buildtools/clang_format/README.txt +@@ -2,7 +2,7 @@ This folder contains clang-format scripts. The binaries will be automatically + downloaded from Google Storage by gclient runhooks for the current platform. + + For a walkthrough on how to maintain these binaries: +- https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang_format_binaries.md ++ https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/updating_clang_format_binaries.md + + To upload a file: + python ~/depot_tools/upload_to_google_storage.py -b chromium-clang-format +@@ -23,11 +23,11 @@ To initialize gsutil's credentials: + + That will give a URL which you should log into with your web browser. The + username should be the one that is on the ACL for the "chromium-clang-format" +- bucket (probably your @google.com address). Contact the build team for help ++ bucket (probably your @9oo91e.qjz9zk address). Contact the build team for help + getting access if necessary. + + Copy the code back to the command line util. Ignore the project ID (it's OK + to just leave blank when prompted). + + gsutil documentation: +- https://developers.google.com/storage/docs/gsutil ++ https://developers.9oo91e.qjz9zk/storage/docs/gsutil +diff --git a/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json b/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json +--- a/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json ++++ b/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json +@@ -1,21 +1,21 @@ + { +- "scope_url": "https://pwa-directory.appspot.com/", ++ "scope_url": "https://pwa-directory.8pp2p8t.qjz9zk/", + "intent_filters": { + "scope_url_scheme": "https", +- "scope_url_host": "pwa-directory.appspot.com", ++ "scope_url_host": "pwa-directory.8pp2p8t.qjz9zk", + "scope_url_path_type": "android:pathPrefix", + "scope_url_path": "/" + }, +- "start_url": "https://pwa-directory.appspot.com/", +- "icon_urls_and_icon_murmur2_hashes": "https://pwa-directory.appspot.com/icon1.png 0 https://pwa-directory.appspot.com/icon2.png 0", +- "web_manifest_url": "https://pwa-directory.appspot.com/manifest.json", ++ "start_url": "https://pwa-directory.8pp2p8t.qjz9zk/", ++ "icon_urls_and_icon_murmur2_hashes": "https://pwa-directory.8pp2p8t.qjz9zk/icon1.png 0 https://pwa-directory.8pp2p8t.qjz9zk/icon2.png 0", ++ "web_manifest_url": "https://pwa-directory.8pp2p8t.qjz9zk/manifest.json", + "bound_webapk": { + "runtime_host": "org.chromium.chrome.tests" + }, + "share_template": [{ + "index": "0", + "title": "Share Text and Images", +- "action": "https://pwa-directory.appspot.com/echoall", ++ "action": "https://pwa-directory.8pp2p8t.qjz9zk/echoall", + "method": "POST", + "enctype": "application/x-www-form-urlencoded", + "param_title": "title", +diff --git a/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json b/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json +--- a/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json ++++ b/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json +@@ -1,20 +1,20 @@ + { +- "scope_url": "https://www.google.com/maps", ++ "scope_url": "https://www.9oo91e.qjz9zk/maps", + "intent_filters": { + "scope_url_scheme": "https", +- "scope_url_host": "www.google.com", ++ "scope_url_host": "www.9oo91e.qjz9zk", + "scope_url_path_type": "android:pathPrefix", + "scope_url_path": "/maps" + }, +- "start_url": "https://www.google.com/maps/@37.7890183,-122.3915063,15z?force=pwa", ++ "start_url": "https://www.9oo91e.qjz9zk/maps/@37.7890183,-122.3915063,15z?force=pwa", + "display_mode": "standalone", + "orientation": "portrait", + "android_orientation": "unspecified", + "theme_color": "2147483648L", + "background_color": "2147483648L", + "background_color_xml": "#F8F9FA", +- "icon_urls_and_icon_murmur2_hashes": "https://maps.gstatic.com/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_48x48.png 0 https://maps.gstatic.com/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_72x72 0", +- "web_manifest_url": "https://maps.gstatic.com/tactile/worker/ml.json", ++ "icon_urls_and_icon_murmur2_hashes": "https://maps.95tat1c.qjz9zk/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_48x48.png 0 https://maps.95tat1c.qjz9zk/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_72x72 0", ++ "web_manifest_url": "https://maps.95tat1c.qjz9zk/tactile/worker/ml.json", + "distributor": "other", + "version_code": "1", + "version_name": "1.0", +diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd +--- a/chrome/app/chromium_strings.grd ++++ b/chrome/app/chromium_strings.grd +@@ -444,7 +444,7 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> + To send a number from here to your Android phone, sign in to Chromium on both devices. +
+ +- To send a number from $1www.google.com to your Android phone, sign in to Chromium on both devices. ++ To send a number from $1www.9oo91e.qjz9zk to your Android phone, sign in to Chromium on both devices. + + + Make sure you are signed in to Chromium on your $1Pixel XL and then try sending again. +@@ -502,14 +502,14 @@ Chromium is unable to recover your settings. + + + +-If you want to use this account one-time only, you can use Guest mode in Chromium browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://google.com/">add a new person</a> to your $2Chromebook. ++If you want to use this account one-time only, you can use Guest mode in Chromium browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://9oo91e.qjz9zk/">add a new person</a> to your $2Chromebook. + +-Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://google.com/">Settings</a>. ++Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://9oo91e.qjz9zk/">Settings</a>. + + +-If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chromium browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://google.com/">add a new person</a> to your $2Chromebook. ++If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chromium browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://9oo91e.qjz9zk/">add a new person</a> to your $2Chromebook. + +-Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://google.com/">Settings</a>. ++Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://9oo91e.qjz9zk/">Settings</a>. + + + +@@ -733,7 +733,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- Also clear data from Chromium ($1www.google.com) ++ Also clear data from Chromium ($1www.9oo91e.qjz9zk) + + + +@@ -835,7 +835,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- You were signed in to Chromium as $1foo@gmail.com. Please use the same account to sign in again. ++ You were signed in to Chromium as $1foo@9ma1l.qjz9zk. Please use the same account to sign in again. + + + Someone previously signed in to Chromium on this computer as $1user@example.com. Please create a new Chromium user to keep your information separate. +@@ -870,7 +870,7 @@ Permissions you've already given to websites and apps may apply to this account. + You're signed in to Chromium! + + +- You're signed in as $1foo@gmail.com. Now you can access your bookmarks, history, and other settings on all your signed in devices. ++ You're signed in as $1foo@9ma1l.qjz9zk. Now you can access your bookmarks, history, and other settings on all your signed in devices. + + + +@@ -892,7 +892,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- $1foo@gmail.com was previously using Chromium ++ $1foo@9ma1l.qjz9zk was previously using Chromium + + + +@@ -911,10 +911,10 @@ Permissions you've already given to websites and apps may apply to this account. + $1Elisa is already signed in to this Chromium profile. To keep your browsing separate, Chromium can create your own profile for you. + + +- $1Elisa is already signed in to this Chromium profile. This will create a new Chromium profile for $2foo@gmail.com ++ $1Elisa is already signed in to this Chromium profile. This will create a new Chromium profile for $2foo@9ma1l.qjz9zk + + +- This will create a new Chromium profile for $1foo@gmail.com ++ This will create a new Chromium profile for $1foo@9ma1l.qjz9zk + + + Another account is already signed in. To keep your browsing separate, Chromium can create your own profile for you. +@@ -1414,7 +1414,7 @@ Permissions you've already given to websites and apps may apply to this account. + Welcome to Chromium + + +- Get your Chromium browser stuff from $1Jane.Doe@gmail.com ++ Get your Chromium browser stuff from $1Jane.Doe@9ma1l.qjz9zk + + + Your account is managed by $1example.com. Your administrator can see and edit this Chromium browser profile and its data like bookmarks, history, and passwords. +diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd +--- a/chrome/app/generated_resources.grd ++++ b/chrome/app/generated_resources.grd +@@ -403,16 +403,16 @@ are declared in tools/grit/grit_rule.gni. + Permission request expired + + +- $1google.com wants to ++ $19oo91e.qjz9zk wants to + + +- $1google.com wants to: $2use your microphone ++ $19oo91e.qjz9zk wants to: $2use your microphone + + +- $1google.com wants to: $2use your microphone and $3use your location ++ $19oo91e.qjz9zk wants to: $2use your microphone and $3use your location + + +- $1google.com wants to: $2use your microphone, $3use your location, and more ++ $19oo91e.qjz9zk wants to: $2use your microphone, $3use your location, and more + + + This file +@@ -623,7 +623,7 @@ are declared in tools/grit/grit_rule.gni. + Open link as + + +- Open link as $1user@gmail.com ++ Open link as $1user@9ma1l.qjz9zk + + + Open link in $1Gmail App +@@ -800,7 +800,7 @@ are declared in tools/grit/grit_rule.gni. + Search images with $1Google Lens + + +- &Go to $1http://www.google.com/ ++ &Go to $1http://www.9oo91e.qjz9zk/ + + + Suggest password... +@@ -880,7 +880,7 @@ are declared in tools/grit/grit_rule.gni. + Open Link as + + +- Open Link as $1user@gmail.com ++ Open Link as $1user@9ma1l.qjz9zk + + + Open Link in $1Gmail App +@@ -1069,7 +1069,7 @@ are declared in tools/grit/grit_rule.gni. + Search Images with $1Google Lens + + +- &Go to $1http://www.google.com/ ++ &Go to $1http://www.9oo91e.qjz9zk/ + + + Suggest Password... +@@ -1301,7 +1301,7 @@ are declared in tools/grit/grit_rule.gni. + + + +- Move window to $1User name ($2john@google.com) ++ Move window to $1User name ($2john@9oo91e.qjz9zk) + + + +@@ -1438,7 +1438,7 @@ are declared in tools/grit/grit_rule.gni. + Review + + +- https://www.google.com/chrome/privacy/eula_text.html ++ https://www.9oo91e.qjz9zk/chrome/privacy/eula_text.html + + + +@@ -2807,7 +2807,7 @@ are declared in tools/grit/grit_rule.gni. + + +- This file contains malware that can compromise your personal or social network accounts, including $1john@google.com ++ This file contains malware that can compromise your personal or social network accounts, including $1john@9oo91e.qjz9zk + + + +@@ -3167,10 +3167,10 @@ are declared in tools/grit/grit_rule.gni. + Images were blocked on this page. + + +- Always allow $1mail.google.com to set cookies ++ Always allow $1mail.9oo91e.qjz9zk to set cookies + + +- Always allow $1mail.google.com to show images ++ Always allow $1mail.9oo91e.qjz9zk to show images + + + Continue blocking cookies +@@ -3179,7 +3179,7 @@ are declared in tools/grit/grit_rule.gni. + Continue allowing cookies + + +- Always block cookies on $1mail.google.com ++ Always block cookies on $1mail.9oo91e.qjz9zk + + + Continue blocking images +@@ -3191,28 +3191,28 @@ are declared in tools/grit/grit_rule.gni. + Pop-ups blocked: + + +- Always allow pop-ups and redirects from $1mail.google.com ++ Always allow pop-ups and redirects from $1mail.9oo91e.qjz9zk + + + Continue blocking + + +- Always allow $1mail.google.com to access your camera and microphone ++ Always allow $1mail.9oo91e.qjz9zk to access your camera and microphone + + +- Always allow $1mail.google.com to access your microphone ++ Always allow $1mail.9oo91e.qjz9zk to access your microphone + + +- Always allow $1mail.google.com to access your camera ++ Always allow $1mail.9oo91e.qjz9zk to access your camera + + +- Ask if $1mail.google.com wants to access your camera and microphone ++ Ask if $1mail.9oo91e.qjz9zk wants to access your camera and microphone + + +- Ask if $1mail.google.com wants to access your microphone ++ Ask if $1mail.9oo91e.qjz9zk wants to access your microphone + + +- Ask if $1mail.google.com wants to access your camera ++ Ask if $1mail.9oo91e.qjz9zk wants to access your camera + + + Always block camera and microphone access +@@ -3233,19 +3233,19 @@ are declared in tools/grit/grit_rule.gni. + Continue blocking camera access + + +- Continue allowing $1mail.google.com to access your camera and microphone ++ Continue allowing $1mail.9oo91e.qjz9zk to access your camera and microphone + + +- Continue allowing $1mail.google.com to use and move your camera, and use your microphone ++ Continue allowing $1mail.9oo91e.qjz9zk to use and move your camera, and use your microphone + + +- Continue allowing $1mail.google.com to access your microphone ++ Continue allowing $1mail.9oo91e.qjz9zk to access your microphone + + +- Continue allowing $1mail.google.com to access your camera ++ Continue allowing $1mail.9oo91e.qjz9zk to access your camera + + +- Continue allowing $1mail.google.com to use and move your camera ++ Continue allowing $1mail.9oo91e.qjz9zk to use and move your camera + + + Pop-up blocked +@@ -3257,7 +3257,7 @@ are declared in tools/grit/grit_rule.gni. + JavaScript was blocked on this page. + + +- Always allow JavaScript on $1mail.google.com ++ Always allow JavaScript on $1mail.9oo91e.qjz9zk + + + Continue blocking JavaScript +@@ -3266,7 +3266,7 @@ are declared in tools/grit/grit_rule.gni. + Sound was muted on this page + + +- Always allow sound on $1mail.google.com ++ Always allow sound on $1mail.9oo91e.qjz9zk + + + Continue muting sound +@@ -3393,7 +3393,7 @@ are declared in tools/grit/grit_rule.gni. + + + +- Certificate Viewer: $1www.google.com ++ Certificate Viewer: $1www.9oo91e.qjz9zk + + + &General +@@ -3914,13 +3914,13 @@ are declared in tools/grit/grit_rule.gni. + + + +- Sharing this tab to $1meet.google.com ++ Sharing this tab to $1meet.9oo91e.qjz9zk + + +- Sharing a tab to $1meet.google.com ++ Sharing a tab to $1meet.9oo91e.qjz9zk + + +- Sharing $1youtube.com to $2meet.google.com ++ Sharing $1y0u1ub3.qjz9zk to $2meet.9oo91e.qjz9zk + + + Share this tab instead +@@ -3929,7 +3929,7 @@ are declared in tools/grit/grit_rule.gni. + Stop sharing + + +- View tab: $1meet.google.com ++ View tab: $1meet.9oo91e.qjz9zk + + + Switch to capturing tab +@@ -4135,16 +4135,16 @@ are declared in tools/grit/grit_rule.gni. + Incognito Tab: $1Google + + +- Background App: $1http://www.google.com ++ Background App: $1http://www.9oo91e.qjz9zk + + +- Background Page: $1http://www.google.com ++ Background Page: $1http://www.9oo91e.qjz9zk + + +- Back/Forward Cached Page: $1http://www.google.com ++ Back/Forward Cached Page: $1http://www.9oo91e.qjz9zk + + +- Incognito Back/Forward Cached Page: $1http://www.google.com ++ Incognito Back/Forward Cached Page: $1http://www.9oo91e.qjz9zk + + + Plugin: $1Unknown Plugin +@@ -4154,10 +4154,10 @@ are declared in tools/grit/grit_rule.gni. + + + +- Prerender: $1http://www.google.com ++ Prerender: $1http://www.9oo91e.qjz9zk + + +- Prerender: $1http://www.google.com ++ Prerender: $1http://www.9oo91e.qjz9zk + + + Spare Renderer +@@ -4193,28 +4193,28 @@ are declared in tools/grit/grit_rule.gni. + Print: $1Google Maps + + +- Subframe: $1https://youtube.com/ ++ Subframe: $1https://y0u1ub3.qjz9zk/ + + +- Incognito Subframe: $1https://youtube.com/ ++ Incognito Subframe: $1https://y0u1ub3.qjz9zk/ + + +- Back/Forward Cached Subframe: $1http://www.google.com ++ Back/Forward Cached Subframe: $1http://www.9oo91e.qjz9zk + + +- Incognito Back/Forward Cached Subframe: $1http://www.google.com ++ Incognito Back/Forward Cached Subframe: $1http://www.9oo91e.qjz9zk + + +- Portal: $1https://youtube.com/ ++ Portal: $1https://y0u1ub3.qjz9zk/ + + +- Incognito Portal: $1https://youtube.com/ ++ Incognito Portal: $1https://y0u1ub3.qjz9zk/ + + +- Fenced Frame: $1https://youtube.com/ ++ Fenced Frame: $1https://y0u1ub3.qjz9zk/ + + +- Incognito Fenced Frame: $1https://youtube.com/ ++ Incognito Fenced Frame: $1https://y0u1ub3.qjz9zk/ + + + App: $1com.android.systemui +@@ -4445,7 +4445,7 @@ are declared in tools/grit/grit_rule.gni. + + "$1Gmail Checker" + +- ++ + The extension "$1Gmail Checker" was blocked by your administrator + + +@@ -4457,10 +4457,10 @@ are declared in tools/grit/grit_rule.gni. + + + +- $1http://www.google.com wants to communicate with the app "$2Gmail" ++ $1http://www.9oo91e.qjz9zk wants to communicate with the app "$2Gmail" + + +- $1http://www.google.com wants to communicate with the extension "$2Gmail Checker" ++ $1http://www.9oo91e.qjz9zk wants to communicate with the extension "$2Gmail Checker" + + + It can: +@@ -4596,22 +4596,22 @@ are declared in tools/grit/grit_rule.gni. + Change your home page to: $1home.page.com/home.html + + +- Read and change your data on $1www.google.com ++ Read and change your data on $1www.9oo91e.qjz9zk + + +- Read your data on $1www.google.com ++ Read your data on $1www.9oo91e.qjz9zk + + +- Read and change your data on $1www.google.com and $2www.reddit.com ++ Read and change your data on $1www.9oo91e.qjz9zk and $2www.reddit.com + + +- Read your data on $1www.google.com and $2www.reddit.com ++ Read your data on $1www.9oo91e.qjz9zk and $2www.reddit.com + + +- Read and change your data on $1www.google.com, $2www.reddit.com, and $3news.ycombinator.com ++ Read and change your data on $1www.9oo91e.qjz9zk, $2www.reddit.com, and $3news.ycombinator.com + + +- Read your data on $1www.google.com, $2www.reddit.com, and $3news.ycombinator.com ++ Read your data on $1www.9oo91e.qjz9zk, $2www.reddit.com, and $3news.ycombinator.com + + + Read and change your data on a number of websites +@@ -4620,10 +4620,10 @@ are declared in tools/grit/grit_rule.gni. + Read your data on a number of websites + + +- all $1google.com sites ++ all $19oo91e.qjz9zk sites + + +- All $1google.com sites ++ All $19oo91e.qjz9zk sites + + + Read and change anything you type +@@ -5023,16 +5023,16 @@ are declared in tools/grit/grit_rule.gni. + Allow $13? + + +- Click to allow "$1Extension A" on $2google.com: ++ Click to allow "$1Extension A" on $29oo91e.qjz9zk: + + +- Click to allow on $1google.com: ++ Click to allow on $19oo91e.qjz9zk: + + +- Always allow "$1Gmail Checker" to run on $2google.com? ++ Always allow "$1Gmail Checker" to run on $29oo91e.qjz9zk? + + +- Always allow these extensions to run on $1google.com? ++ Always allow these extensions to run on $19oo91e.qjz9zk? + + + Always allow +@@ -5050,16 +5050,16 @@ are declared in tools/grit/grit_rule.gni. + Requested to read & change + + +- All extensions can read & change $1google.com ++ All extensions can read & change $19oo91e.qjz9zk + + +- You blocked all extensions from $1google.com ++ You blocked all extensions from $19oo91e.qjz9zk + + +- This extension can read & change $1google.com ++ This extension can read & change $19oo91e.qjz9zk + + +- Click this extension's icon to read & change $1google.com ++ Click this extension's icon to read & change $19oo91e.qjz9zk + + + Pinned by your administrator +@@ -5073,16 +5073,16 @@ are declared in tools/grit/grit_rule.gni. + This can read and change site data + + +- You previously chose to allow all extensions on $1google.com ++ You previously chose to allow all extensions on $19oo91e.qjz9zk + + +- You previously chose to not allow any extensions on $1google.com ++ You previously chose to not allow any extensions on $19oo91e.qjz9zk + + + When I click the extension + + +- Always on $1google.com ++ Always on $19oo91e.qjz9zk + + + Always on all sites +@@ -5094,7 +5094,7 @@ are declared in tools/grit/grit_rule.gni. + When you click the extension + + +- On $1google.com ++ On $19oo91e.qjz9zk + + + On all sites +@@ -5147,16 +5147,16 @@ are declared in tools/grit/grit_rule.gni. + This Can Read and Change Site Data + + +- You Previously Chose To Allow All Extensions On $1google.com ++ You Previously Chose To Allow All Extensions On $19oo91e.qjz9zk + + +- You Previously Chose To Not Allow Any Extensions On $1google.com ++ You Previously Chose To Not Allow Any Extensions On $19oo91e.qjz9zk + + + When I Click the Extension + + +- Always on $1google.com ++ Always on $19oo91e.qjz9zk + + + Always on All Sites +@@ -5168,7 +5168,7 @@ are declared in tools/grit/grit_rule.gni. + When You Click the Extension + + +- On $1google.com ++ On $19oo91e.qjz9zk + + + On All Sites +@@ -5473,7 +5473,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Change back to $1DuckDuckGo? + + +- The "$2Some New Search" extension changed search to use $1google.com ++ The "$2Some New Search" extension changed search to use $19oo91e.qjz9zk + + + +@@ -5599,28 +5599,28 @@ Keep your key file in a safe place. You will need it to create new versions of y + Permissions + + +- Allowed to read and change $1google.com ++ Allowed to read and change $19oo91e.qjz9zk + + +- Requesting to read and change $1google.com ++ Requesting to read and change $19oo91e.qjz9zk + + + To allow an extension, change your default setting below. + + +- No extensions have requested to read and change $1google.com ++ No extensions have requested to read and change $19oo91e.qjz9zk + + +- No extensions are allowed to read and change $1google.com ++ No extensions are allowed to read and change $19oo91e.qjz9zk + + + Choose your default setting + + +- Allow all extensions to read and change $1google.com ++ Allow all extensions to read and change $19oo91e.qjz9zk + + +- Don't allow any extensions to read and change $1google.com ++ Don't allow any extensions to read and change $19oo91e.qjz9zk + + + Customize permissions for each extension +@@ -5928,10 +5928,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + Update password for $1example.com? + + +- Save it in your Google Account, $1user@gmail.com ++ Save it in your Google Account, $1user@9ma1l.qjz9zk + + +- Update it in your Google Account, $1user@gmail.com ++ Update it in your Google Account, $1user@9ma1l.qjz9zk + + + Passwords are saved in your Google Account so you can use them on any device +@@ -5940,7 +5940,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Google Password Manager + + +- You can use saved passwords on any device. They're saved to $1Google Password Manager for $2user@gmail.com. ++ You can use saved passwords on any device. They're saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + + Passwords are saved to $1Google Password Manager on this device. +@@ -5949,7 +5949,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + You can view and manage saved passwords in $1Google Password Manager. + + +- You won't need to remember this password. It will be saved to $1Google Password Manager for $2user@gmail.com. ++ You won't need to remember this password. It will be saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + + Passwords are saved to $1Google Password Manager. +@@ -5958,10 +5958,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + You can view and manage saved passwords in Google Password Manager + + +- To Google Password Manager for $1user@gmail.com ++ To Google Password Manager for $1user@9ma1l.qjz9zk + + +- In Google Password Manager for $1user@gmail.com ++ In Google Password Manager for $1user@9ma1l.qjz9zk + + + +@@ -6388,7 +6388,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- Pa&ste and go to $1http://www.google.com/ ++ Pa&ste and go to $1http://www.9oo91e.qjz9zk/ + + + Pa&ste and search for “$1flowers” +@@ -6399,7 +6399,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- Pa&ste and Go to $1http://www.google.com/ ++ Pa&ste and Go to $1http://www.9oo91e.qjz9zk/ + + + Pa&ste and Search for “$1flowers” +@@ -6409,7 +6409,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- Press $1Tab to search $2google.com ++ Press $1Tab to search $29oo91e.qjz9zk + + + Press $1Tab to send commands to $2Google Talk +@@ -6418,16 +6418,16 @@ Keep your key file in a safe place. You will need it to create new versions of y + Tab + + +- Search $1google.com ++ Search $19oo91e.qjz9zk + + + Send commands to $1ACME Music App + + +- Search $1google.com: ++ Search $19oo91e.qjz9zk: + + +- Search $1google.com ++ Search $19oo91e.qjz9zk + + + Clear input +@@ -6875,7 +6875,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + memories from Google Photos + + +- You’re seeing photo and video highlights from your Google Photos library. You can control what shows up in your highlights at <a href="https://photos.google.com/settings?referrer=CHROME_NTP" target="_blank">photos.google.com/settings</a>. ++ You’re seeing photo and video highlights from your Google Photos library. You can control what shows up in your highlights at <a href="https://photos.9oo91e.qjz9zk/settings?referrer=CHROME_NTP" target="_blank">photos.9oo91e.qjz9zk/settings</a>. + <br> + <br> + You can manage settings for this card from the card menu or see more options in Customize Chrome. +@@ -6930,10 +6930,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + About this card + + +- You're seeing this item based on your previous activity using Google services. You can see your data, delete it, and change your settings at <a href="https://myactivity.google.com/" target="_blank">myactivity.google.com</a>. ++ You're seeing this item based on your previous activity using Google services. You can see your data, delete it, and change your settings at <a href="https://myactivity.9oo91e.qjz9zk/" target="_blank">myactivity.9oo91e.qjz9zk</a>. + <br> + <br> +- Learn about the data Google collects and why at <a href="https://policies.google.com/" target="_blank">policies.google.com</a>. ++ Learn about the data Google collects and why at <a href="https://policies.9oo91e.qjz9zk/" target="_blank">policies.9oo91e.qjz9zk</a>. + + + Close +@@ -7374,7 +7374,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Stay in Chrome + + +- From $1https://google.com ++ From $1https://9oo91e.qjz9zk + + + Open in app +@@ -7382,7 +7382,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- ++ + Always use the $1YouTube app to open supported web links? + + +@@ -7536,7 +7536,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + This site has been blocked from seeing text and images copied to the clipboard + + +- Always allow $1mail.google.com to see the clipboard ++ Always allow $1mail.9oo91e.qjz9zk to see the clipboard + + + Continue blocking this site from seeing the clipboard +@@ -7721,7 +7721,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + other {You can wait for them to become responsive or exit the pages.}} + + +- $1google.com, in $2YouTube. ++ $19oo91e.qjz9zk, in $2YouTube. + + + Wait +@@ -7755,7 +7755,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Automatically sign in to websites using stored credentials. When the feature is disabled, you will be asked for confirmation every time before signing in to a website. + + +- with $1facebook.com ++ with $1f8c3b00k.qjz9zk + + + +@@ -7996,10 +7996,10 @@ Check your passwords anytime in $1Google + Suggest strong password + + +- Password will be saved in your Google Account, $1user@gmail.com. You won’t have to remember it. ++ Password will be saved in your Google Account, $1user@9ma1l.qjz9zk. You won’t have to remember it. + + +- You won’t need to remember this password. It will be saved to Google Password Manager for $1user@gmail.com. ++ You won’t need to remember this password. It will be saved to Google Password Manager for $1user@9ma1l.qjz9zk. + + + Confirm your username +@@ -8195,7 +8195,7 @@ Check your passwords anytime in $1Google + Clear browsing data + + +- The selected data has been removed from Chrome and synced devices. Your Google Account may have other forms of browsing history like searches and activity from other Google services at <a target="_blank" href="$1">myactivity.google.com</a>. ++ The selected data has been removed from Chrome and synced devices. Your Google Account may have other forms of browsing history like searches and activity from other Google services at <a target="_blank" href="$1">myactivity.9oo91e.qjz9zk</a>. + + + Cleared Chrome data +@@ -8205,7 +8205,7 @@ Check your passwords anytime in $1Google + + + +- We were not able to delete all passwords stored in your Google Account. Try again or visit <a target="_blank" href="$1">passwords.google.com</a>. ++ We were not able to delete all passwords stored in your Google Account. Try again or visit <a target="_blank" href="$1">passwords.9oo91e.qjz9zk</a>. + + + Some passwords were not deleted +@@ -8426,7 +8426,7 @@ Check your passwords anytime in $1Google + Uploading ($127%)... + + +- Waiting for $1www.google.com... ++ Waiting for $1www.9oo91e.qjz9zk... + + + +@@ -8847,7 +8847,7 @@ Check your passwords anytime in $1Google + + + +- Select a certificate to authenticate yourself to $1www.google.com ++ Select a certificate to authenticate yourself to $1www.9oo91e.qjz9zk + + + +@@ -8855,10 +8855,10 @@ Check your passwords anytime in $1Google + Sign in to Security Device + + +- Please sign in to $1Software Security Device to import client certificate from $2www.google.com. ++ Please sign in to $1Software Security Device to import client certificate from $2www.9oo91e.qjz9zk. + + +- Please sign in to $1Software Security Device to authenticate to $2www.google.com with your certificate. ++ Please sign in to $1Software Security Device to authenticate to $2www.9oo91e.qjz9zk with your certificate. + + + Please sign in to $1Software Security Device. +@@ -9167,7 +9167,7 @@ Check your passwords anytime in $1Google + Sending link to $1Ted's Pixel2 + + +- $1Your devices$2 · $3foo@gmail.com ++ $1Your devices$2 · $3foo@9ma1l.qjz9zk + + + To send this tab to another device, sign in to Chrome on both devices +@@ -9540,7 +9540,7 @@ Check your passwords anytime in $1Google + + + +- Including sites from the same domain, for example, google.com and mail.google.com. Sites you’re viewing can save data on your device. ++ Including sites from the same domain, for example, 9oo91e.qjz9zk and mail.9oo91e.qjz9zk. Sites you’re viewing can save data on your device. + + + +@@ -10158,16 +10158,16 @@ Check your passwords anytime in $1Google + This will separate your browsing from $1bob@example.com + + +- $2Bob's profile is linked to $1bob@gmail.com ++ $2Bob's profile is linked to $1bob@9ma1l.qjz9zk + + + Separate your browsing? + + +- This new profile will be managed by your organization. <a href="$1" target="_blank">https://help.google.com/articleLinkLearn more</a> ++ This new profile will be managed by your organization. <a href="$1" target="_blank">https://help.9oo91e.qjz9zk/articleLinkLearn more</a> + + +- This new profile will be managed by $1example.com. <a href="$2" target="_blank">https://help.google.com/articleLinkLearn more</a> ++ This new profile will be managed by $1example.com. <a href="$2" target="_blank">https://help.9oo91e.qjz9zk/articleLinkLearn more</a> + + + +@@ -10182,10 +10182,10 @@ Check your passwords anytime in $1Google + Can't sign in + + +- Can't sign in to $1Jane.Doe@gmail.com ++ Can't sign in to $1Jane.Doe@9ma1l.qjz9zk + + +- Can't sync to $1Jane.Doe@gmail.com ++ Can't sync to $1Jane.Doe@9ma1l.qjz9zk + + + Close +@@ -10210,13 +10210,13 @@ Check your passwords anytime in $1Google + This wasn't me. + + +- Create a new profile for $1foo@gmail.com ++ Create a new profile for $1foo@9ma1l.qjz9zk + + + This was me. + + +- Add my bookmarks, history, passwords, and other settings to $1foo@gmail.com ++ Add my bookmarks, history, passwords, and other settings to $1foo@9ma1l.qjz9zk + + + Cancel +@@ -10265,7 +10265,7 @@ Check your passwords anytime in $1Google + Open $1Adobe Acrobat? + + +- $1https://google.com wants to open this application. ++ $1https://9oo91e.qjz9zk wants to open this application. + + + A website wants to open this application. +@@ -10276,8 +10276,8 @@ Check your passwords anytime in $1Google + + Cancel + +- +- Always allow $1https://google.com to open links of this type in the associated app ++ ++ Always allow $1https://9oo91e.qjz9zk to open links of this type in the associated app + + + +@@ -10881,7 +10881,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Wrong index. + + +- Executing JavaScript through AppleScript is turned off. To turn it on, from the menu bar, go to View > Developer > Allow JavaScript from Apple Events. For more information: https://support.google.com/chrome/?p=applescript ++ Executing JavaScript through AppleScript is turned off. To turn it on, from the menu bar, go to View > Developer > Allow JavaScript from Apple Events. For more information: https://support.9oo91e.qjz9zk/chrome/?p=applescript + + + +@@ -11308,7 +11308,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from accessing your location. + + +- Always allow $1mail.google.com to access your location ++ Always allow $1mail.9oo91e.qjz9zk to access your location + + + Continue blocking this site from accessing your location +@@ -11351,7 +11351,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from having full control of MIDI devices. + + +- Always allow $1mail.google.com to have full control of MIDI devices ++ Always allow $1mail.9oo91e.qjz9zk to have full control of MIDI devices + + + Continue blocking this site from having full control of MIDI devices +@@ -11439,7 +11439,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + View and manage saved passwords in your $1Google Account + + +- https://passwords.google.com ++ https://passwords.9oo91e.qjz9zk + + + +@@ -11471,10 +11471,10 @@ Please help our engineers fix this problem. Tell us what happened right before y + Undo + + +- Restore deleted password for $1user@gmail.com ++ Restore deleted password for $1user@9ma1l.qjz9zk + + +- Delete password for $1user@gmail.com ++ Delete password for $1user@9ma1l.qjz9zk + + + +@@ -11585,19 +11585,19 @@ Please help our engineers fix this problem. Tell us what happened right before y + An extension triggered full screen. + + +- $1google.com is now full screen. ++ $19oo91e.qjz9zk is now full screen. + + + This page is now full screen. + + +- $1google.com is now full screen and has disabled your mouse cursor. ++ $19oo91e.qjz9zk is now full screen and has disabled your mouse cursor. + + + This page is now full screen and has disabled your mouse cursor. + + +- $1google.com has disabled your mouse cursor. ++ $19oo91e.qjz9zk has disabled your mouse cursor. + + + This page has disabled your mouse cursor. +@@ -11620,7 +11620,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from using motion sensors. + + +- Always allow $1mail.google.com to access sensors ++ Always allow $1mail.9oo91e.qjz9zk to access sensors + + + Continue blocking sensor access +@@ -11647,7 +11647,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Continue allowing sensor access + + +- Always block $1mail.google.com from accessing sensors ++ Always block $1mail.9oo91e.qjz9zk from accessing sensors + + + +@@ -11851,7 +11851,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + $1Google Hangouts wants to share the contents of your screen. + + +- $1Google Hangouts wants to share the contents of your screen with $2https://google.com. ++ $1Google Hangouts wants to share the contents of your screen with $2https://9oo91e.qjz9zk. + + + Share system audio +@@ -11980,8 +11980,8 @@ Please help our engineers fix this problem. Tell us what happened right before y + + $1Google Photos - Serial port connected + +- +- $1www.google.com - Network error ++ ++ $1www.9oo91e.qjz9zk - Network error + + + $1Google Search - Crashed +@@ -12201,7 +12201,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- Go to $1www.google.com to connect. ++ Go to $1www.9oo91e.qjz9zk to connect. + + + $1Nexus 5 detected +@@ -12313,7 +12313,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to connect to a serial port ++ $1www.9oo91e.qjz9zk wants to connect to a serial port + + + "$1Chrome Extension Name" wants to connect to a serial port +@@ -12353,7 +12353,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to connect to a HID device ++ $1www.9oo91e.qjz9zk wants to connect to a HID device + + + "$1Chrome Extension Name" wants to connect to a HID device +@@ -12438,7 +12438,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to use local fonts ++ $1www.9oo91e.qjz9zk wants to use local fonts + + + No matching font found. +@@ -12569,7 +12569,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1maps.google.com ++ $1maps.9oo91e.qjz9zk + wants to see the make and model of your Security Key + + +@@ -12778,13 +12778,13 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- Use your security key with $1google.com ++ Use your security key with $19oo91e.qjz9zk + + + Continue + + +- Verify your identity with $1google.com ++ Verify your identity with $19oo91e.qjz9zk + + + Pick an option +@@ -12900,7 +12900,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- accounts.google.com$1 sent a notification to your phone. To confirm it's you, follow the steps there. ++ accounts.9oo91e.qjz9zk$1 sent a notification to your phone. To confirm it's you, follow the steps there. + + + Didn't get it? +@@ -12918,7 +12918,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Security key request + + +- accounts.google.com$1 sent a notification to your phone. To confirm it's you, tap the “Verify with this phone$2” notification and follow the steps. ++ accounts.9oo91e.qjz9zk$1 sent a notification to your phone. To confirm it's you, tap the “Verify with this phone$2” notification and follow the steps. + + + Use phone with a QR code +@@ -13017,7 +13017,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- ++ + Select an account to sign in + + +@@ -13033,7 +13033,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 + + +- accounts.google.com$1 may require a newer or different kind of security key ++ accounts.9oo91e.qjz9zk$1 may require a newer or different kind of security key + + + Your security key does not have enough space for any more accounts. +@@ -13042,13 +13042,13 @@ Please help our engineers fix this problem. Tell us what happened right before y + Allow this site to see your security key? + + +- accounts.google.com$1 wants to see the make and model of your security key ++ accounts.9oo91e.qjz9zk$1 wants to see the make and model of your security key + + + Allow this site to identify your security key? + + +- accounts.google.com$1 issued your security key and wants to learn its ID number. The site will know exactly which security key you're using. ++ accounts.9oo91e.qjz9zk$1 issued your security key and wants to learn its ID number. The site will know exactly which security key you're using. + + + Allow +@@ -13080,10 +13080,10 @@ Please help our engineers fix this problem. Tell us what happened right before y + + This passkey will only be saved on this device. It will remain on this device after you close all Incognito windows. + +- ++ + This passkey will only be saved in Windows Hello + +- ++ + This passkey will be saved only in Windows Hello. It will remain on this device after you close all Incognito windows. + + +@@ -13478,7 +13478,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- Also clear browsing data ($1www.google.com) which may sign you out of Google.com. $2Learn more ++ Also clear browsing data ($1www.9oo91e.qjz9zk) which may sign you out of Google.com. $2Learn more + + + +@@ -13835,7 +13835,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + Help us build a more private web + +- ++ + Help us build a better web + + +diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd +--- a/chrome/app/google_chrome_strings.grd ++++ b/chrome/app/google_chrome_strings.grd +@@ -472,7 +472,7 @@ chromium_strings.grd. --> + To send a number from here to your Android phone, sign in to Chrome on both devices. + + +- To send a number from $1www.google.com to your Android phone, sign in to Chrome on both devices. ++ To send a number from $1www.9oo91e.qjz9zk to your Android phone, sign in to Chrome on both devices. + + + Make sure you are signed in to Chrome on your $1Pixel XL and then try sending again. +@@ -537,14 +537,14 @@ Google Chrome is unable to recover your settings. + + + +-If you want to use this account one-time only, you can use Guest mode in Chrome browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://google.com/">add a new person</a> to your $2Chromebook. ++If you want to use this account one-time only, you can use Guest mode in Chrome browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://9oo91e.qjz9zk/">add a new person</a> to your $2Chromebook. + +-Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://google.com/">Settings</a>. ++Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://9oo91e.qjz9zk/">Settings</a>. + + +-If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chrome browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://google.com/">add a new person</a> to your $2Chromebook. ++If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chrome browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://9oo91e.qjz9zk/">add a new person</a> to your $2Chromebook. + +-Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://google.com/">Settings</a>. ++Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://9oo91e.qjz9zk/">Settings</a>. + + + +@@ -770,7 +770,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- Also clear data from Chrome ($1www.google.com) ++ Also clear data from Chrome ($1www.9oo91e.qjz9zk) + + + +@@ -879,7 +879,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- You were signed in to Chrome as $1foo@gmail.com. Please use the same account to sign in again. ++ You were signed in to Chrome as $1foo@9ma1l.qjz9zk. Please use the same account to sign in again. + + + Someone previously signed in to Chrome on this computer as $1user@example.com. Please create a new Chrome user to keep your information separate. +@@ -914,7 +914,7 @@ Permissions you've already given to websites and apps may apply to this account. + You're signed in to Chrome! + + +- You're signed in as $1foo@gmail.com. Now you can access your bookmarks, history, and other settings on all your signed in devices. ++ You're signed in as $1foo@9ma1l.qjz9zk. Now you can access your bookmarks, history, and other settings on all your signed in devices. + + + +@@ -936,7 +936,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- $1foo@gmail.com was previously using Chrome ++ $1foo@9ma1l.qjz9zk was previously using Chrome + + + +@@ -955,10 +955,10 @@ Permissions you've already given to websites and apps may apply to this account. + $1Elisa is already signed in to this Chrome profile. To keep your browsing separate, Chrome can create your own profile for you. + + +- $1Elisa is already signed in to this Chrome profile. This will create a new Chrome profile for $2foo@gmail.com ++ $1Elisa is already signed in to this Chrome profile. This will create a new Chrome profile for $2foo@9ma1l.qjz9zk + + +- This will create a new Chrome profile for $1foo@gmail.com ++ This will create a new Chrome profile for $1foo@9ma1l.qjz9zk + + + Another account is already signed in. To keep your browsing separate, Chrome can create your own profile for you. +@@ -1509,7 +1509,7 @@ Permissions you've already given to websites and apps may apply to this account. + Welcome to Chrome + + +- Get your Chrome browser stuff from $1Jane.Doe@gmail.com ++ Get your Chrome browser stuff from $1Jane.Doe@9ma1l.qjz9zk + + + Your account is managed by $1example.com. Your administrator can see and edit this Chrome browser profile and its data like bookmarks, history, and passwords. +diff --git a/chrome/app/resources/locale_settings.grd b/chrome/app/resources/locale_settings.grd +--- a/chrome/app/resources/locale_settings.grd ++++ b/chrome/app/resources/locale_settings.grd +@@ -168,12 +168,12 @@ + + + +- https://chrome.google.com/webstore?hl=[GRITLANGCODE]&category=theme ++ https://chrome.9oo91e.qjz9zk/webstore?hl=[GRITLANGCODE]&category=theme + + + + +- https://chrome.google.com/webstore?hl=[GRITLANGCODE] ++ https://chrome.9oo91e.qjz9zk/webstore?hl=[GRITLANGCODE] + + + +@@ -183,18 +183,18 @@ + + + +- https://support.google.com/chromebook/answer/183084?hl=[GRITLANGCODE] ++ https://support.9oo91e.qjz9zk/chromebook/answer/183084?hl=[GRITLANGCODE] + + + + + +- https://myactivity.google.com/myactivity/?utm_source=chrome_n ++ https://myactivity.9oo91e.qjz9zk/myactivity/?utm_source=chrome_n + + + + +- https://myactivity.google.com/myactivity/?utm_source=chrome_h ++ https://myactivity.9oo91e.qjz9zk/myactivity/?utm_source=chrome_h + + + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -4711,7 +4711,7 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kSyncSandboxDescription, kOsAll, + SINGLE_VALUE_TYPE_AND_VALUE( + syncer::kSyncServiceURL, +- "https://chrome-sync.sandbox.google.com/chrome-sync/alpha")}, ++ "https://chrome-sync.sandbox.9oo91e.qjz9zk/chrome-sync/alpha")}, + #if !BUILDFLAG(IS_ANDROID) + {"block-migrated-default-chrome-app-sync", + flag_descriptions::kBlockMigratedDefaultChromeAppSyncName, +@@ -4999,7 +4999,7 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kSetMarketUrlForTestingName, + flag_descriptions::kSetMarketUrlForTestingDescription, kOsAndroid, + SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting, +- "https://play.google.com/store/apps/" ++ "https://play.9oo91e.qjz9zk/store/apps/" + "details?id=com.android.chrome")}, + {"omaha-min-sdk-version-android", + flag_descriptions::kOmahaMinSdkVersionAndroidName, +diff --git a/chrome/browser/android/explore_sites/url_util.cc b/chrome/browser/android/explore_sites/url_util.cc +--- a/chrome/browser/android/explore_sites/url_util.cc ++++ b/chrome/browser/android/explore_sites/url_util.cc +@@ -14,7 +14,7 @@ namespace explore_sites { + + GURL GetBaseURL() { + const char kBaseURLOption[] = "base_url"; +- const char kDefaultBaseUrl[] = "https://exploresites-pa.googleapis.com"; ++ const char kDefaultBaseUrl[] = "https://exploresites-pa.9oo91eapis.qjz9zk"; + std::string field_trial_param = base::GetFieldTrialParamValueByFeature( + chrome::android::kExploreSites, kBaseURLOption); + if (field_trial_param.empty()) +diff --git a/chrome/browser/android/webapk/webapk_installer.cc b/chrome/browser/android/webapk/webapk_installer.cc +--- a/chrome/browser/android/webapk/webapk_installer.cc ++++ b/chrome/browser/android/webapk/webapk_installer.cc +@@ -538,7 +538,7 @@ void WebApkInstaller::OnHaveSufficientSpaceForInstall() { + "apps on Android so that they show up in the user's app drawer and " + "optionally home screen. Web apps installed in this way are called " + "WebAPKs. See " +- "https://developers.google.com/web/fundamentals/integration/webapks " ++ "https://developers.9oo91e.qjz9zk/web/fundamentals/integration/webapks " + "for more details. WebAPKs are created on a Google server on " + "behalf of the Chrome client and the requesting app. In order for " + "the server to create a WebAPK, it first needs to know metadata " +@@ -615,7 +615,7 @@ void WebApkInstaller::OnGotIconMurmur2Hashes( + "Android so that they show up in the user's app drawer and " + "optionally home screen. Web apps installed in this way are called " + "WebAPKs. See " +- "https://developers.google.com/web/fundamentals/integration/webapks " ++ "https://developers.9oo91e.qjz9zk/web/fundamentals/integration/webapks " + "for more details. WebAPKs are created on a Google server on " + "behalf of the Chrome client and the user. In order for the server " + "to create a WebAPK, it first needs to know metadata about the web " +diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc +--- a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc ++++ b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc +@@ -67,7 +67,7 @@ const uint64_t kMurmur2HashSeed = 0; + constexpr base::TimeDelta kMinterResponseTimeout = base::Seconds(60); + + constexpr char kWebApkServerUrl[] = +- "https://webapk.googleapis.com/v1/webApks?key="; ++ "https://webapk.9oo91eapis.qjz9zk/v1/webApks?key="; + + constexpr net::NetworkTrafficAnnotationTag kWebApksTrafficAnnotation = + net::DefineNetworkTrafficAnnotation("webapk_minter_install_request", +diff --git a/chrome/browser/apps/digital_goods/digital_goods_ash.cc b/chrome/browser/apps/digital_goods/digital_goods_ash.cc +--- a/chrome/browser/apps/digital_goods/digital_goods_ash.cc ++++ b/chrome/browser/apps/digital_goods/digital_goods_ash.cc +@@ -21,7 +21,7 @@ namespace apps { + + namespace { + +-constexpr char kSupportedPaymentMethod[] = "https://play.google.com/billing"; ++constexpr char kSupportedPaymentMethod[] = "https://play.9oo91e.qjz9zk/billing"; + + // Gets the package name of the Android app linked to this web app. + absl::optional GetTwaPackageName(const std::string& app_id) { +diff --git a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc +--- a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc ++++ b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc +@@ -16,7 +16,7 @@ + + namespace { + +-constexpr char kSupportedPaymentMethod[] = "https://play.google.com/billing"; ++constexpr char kSupportedPaymentMethod[] = "https://play.9oo91e.qjz9zk/billing"; + + } // namespace + +diff --git a/chrome/browser/apps/platform_apps/install_chrome_app.cc b/chrome/browser/apps/platform_apps/install_chrome_app.cc +--- a/chrome/browser/apps/platform_apps/install_chrome_app.cc ++++ b/chrome/browser/apps/platform_apps/install_chrome_app.cc +@@ -24,7 +24,7 @@ namespace { + + // The URL to the webstore page for a specific app. + const char kWebstoreUrlFormat[] = +- "https://chrome.google.com/webstore/detail/%s"; ++ "https://chrome.9oo91e.qjz9zk/webstore/detail/%s"; + + // Error given when the extension is not an app. + const char kInstallChromeAppErrorNotAnApp[] = +diff --git a/chrome/browser/ash/android_sms/android_sms_urls.cc b/chrome/browser/ash/android_sms/android_sms_urls.cc +--- a/chrome/browser/ash/android_sms/android_sms_urls.cc ++++ b/chrome/browser/ash/android_sms/android_sms_urls.cc +@@ -18,15 +18,15 @@ namespace android_sms { + namespace { + + // Note: Install and app URLs are the same for the android.com domain. +-const char kProdAndroidUrl[] = "https://messages.android.com/"; ++const char kProdAndroidUrl[] = "https://messages.8n6r01d.qjz9zk/"; + +-const char kProdGoogleAppUrl[] = "https://messages.google.com/web/"; ++const char kProdGoogleAppUrl[] = "https://messages.9oo91e.qjz9zk/web/"; + const char kProdGoogleInstallUrl[] = +- "https://messages.google.com/web/authentication"; ++ "https://messages.9oo91e.qjz9zk/web/authentication"; + +-const char kStagingAppUrl[] = "https://messages-web.sandbox.google.com/web/"; ++const char kStagingAppUrl[] = "https://messages-web.sandbox.9oo91e.qjz9zk/web/"; + const char kStagingInstallUrl[] = +- "https://messages-web.sandbox.google.com/web/authentication"; ++ "https://messages-web.sandbox.9oo91e.qjz9zk/web/authentication"; + + GURL GetCustomDomain(bool use_install_url) { + std::string custom_domain = +@@ -52,13 +52,13 @@ GURL GetCustomDomain(bool use_install_url) { + std::ostream& operator<<(std::ostream& stream, const PwaDomain& pwa_domain) { + switch (pwa_domain) { + case PwaDomain::kProdAndroid: +- stream << "[Production: messages.android.com]"; ++ stream << "[Production: messages.8n6r01d.qjz9zk]"; + break; + case PwaDomain::kProdGoogle: +- stream << "[Production: messages.google.com]"; ++ stream << "[Production: messages.9oo91e.qjz9zk]"; + break; + case PwaDomain::kStaging: +- stream << "[Staging: messages-web.sandbox.google.com]"; ++ stream << "[Staging: messages-web.sandbox.9oo91e.qjz9zk]"; + break; + } + return stream; +diff --git a/chrome/browser/ash/app_mode/fake_cws.cc b/chrome/browser/ash/app_mode/fake_cws.cc +--- a/chrome/browser/ash/app_mode/fake_cws.cc ++++ b/chrome/browser/ash/app_mode/fake_cws.cc +@@ -55,7 +55,7 @@ const char kPrivateStoreAppHasUpdateTemplate[] = + + const char kUpdateContentTemplate[] = + "" +- "" + "" + "$APPS" +diff --git a/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc b/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc +--- a/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc ++++ b/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc +@@ -58,7 +58,7 @@ signin::ScopeSet GetAccessTokenScopes() { + } // namespace + + const char kAuthTokenExchangeEndPoint[] = +- "https://www.googleapis.com/oauth2/v4/ExchangeToken"; ++ "https://www.9oo91eapis.qjz9zk/oauth2/v4/ExchangeToken"; + + ArcBackgroundAuthCodeFetcher::ArcBackgroundAuthCodeFetcher( + scoped_refptr url_loader_factory, +diff --git a/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc b/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc +--- a/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc ++++ b/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc +@@ -24,7 +24,7 @@ namespace { + + // OAuth2 Client id of Android. + constexpr char kAndoidClientId[] = +- "1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.googleusercontent.com"; ++ "1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.9oo91eusercontent.qjz9zk"; + + policy::DeviceManagementService* GetDeviceManagementService() { + policy::BrowserPolicyConnectorAsh* const connector = +diff --git a/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc b/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc +--- a/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc ++++ b/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc +@@ -84,7 +84,7 @@ constexpr int kAlphaLeftMargin = 8; + constexpr int kAlphaLeftMarginSmall = 4; + + constexpr char kFeedbackUrl[] = +- "https://docs.google.com/forms/d/e/" ++ "https://docs.9oo91e.qjz9zk/forms/d/e/" + "1FAIpQLSfL3ttPmopJj65P4EKr--SA18Sc9bbQVMnd0oueMhJu_42TbA/" + "viewform?usp=pp_url"; + // Entry for the survey form from above link. +diff --git a/chrome/browser/ash/assistant/assistant_util.cc b/chrome/browser/ash/assistant/assistant_util.cc +--- a/chrome/browser/ash/assistant/assistant_util.cc ++++ b/chrome/browser/ash/assistant/assistant_util.cc +@@ -118,8 +118,8 @@ bool IsEmailDomainSupported(const Profile* profile) { + const std::string email = GetUser(profile)->GetAccountId().GetUserEmail(); + DCHECK(!email.empty()); + +- return (gaia::ExtractDomainName(email) == "gmail.com" || +- gaia::ExtractDomainName(email) == "googlemail.com" || ++ return (gaia::ExtractDomainName(email) == "9ma1l.qjz9zk" || ++ gaia::ExtractDomainName(email) == "9oo91email.qjz9zk" || + gaia::IsGoogleInternalAccountEmail(email)); + } + +diff --git a/chrome/browser/ash/attestation/attestation_ca_client.cc b/chrome/browser/ash/attestation/attestation_ca_client.cc +--- a/chrome/browser/ash/attestation/attestation_ca_client.cc ++++ b/chrome/browser/ash/attestation/attestation_ca_client.cc +@@ -33,15 +33,15 @@ const char kAttestationServerTest[] = "test"; + + // Endpoints for the default Google Privacy CA operations. + const char kDefaultEnrollRequestURL[] = +- "https://chromeos-ca.gstatic.com/enroll"; ++ "https://chromeos-ca.95tat1c.qjz9zk/enroll"; + const char kDefaultCertificateRequestURL[] = +- "https://chromeos-ca.gstatic.com/sign"; ++ "https://chromeos-ca.95tat1c.qjz9zk/sign"; + + // Endpoints for the test Google Privacy CA operations. + const char kTestEnrollRequestURL[] = +- "https://asbestos-qa.corp.google.com/enroll"; ++ "https://asbestos-qa.corp.9oo91e.qjz9zk/enroll"; + const char kTestCertificateRequestURL[] = +- "https://asbestos-qa.corp.google.com/sign"; ++ "https://asbestos-qa.corp.9oo91e.qjz9zk/sign"; + + const char kMimeContentType[] = "application/octet-stream"; + +diff --git a/chrome/browser/ash/borealis/borealis_util.cc b/chrome/browser/ash/borealis/borealis_util.cc +--- a/chrome/browser/ash/borealis/borealis_util.cc ++++ b/chrome/browser/ash/borealis/borealis_util.cc +@@ -44,7 +44,7 @@ namespace { + + // Base feedback form URL, without query parameters for prefilling. + static constexpr char kFeedbackUrl[] = +- "https://docs.google.com/forms/d/e/" ++ "https://docs.9oo91e.qjz9zk/forms/d/e/" + "1FAIpQLScGvT2BIwYJe9g15OINX2pvw6TgK8e2ihvSq3hHZudAneRmuA/" + "viewform?usp=pp_url"; + // Query parameter keys for prefilling form data. +diff --git a/chrome/browser/ash/child_accounts/child_user_service.cc b/chrome/browser/ash/child_accounts/child_user_service.cc +--- a/chrome/browser/ash/child_accounts/child_user_service.cc ++++ b/chrome/browser/ash/child_accounts/child_user_service.cc +@@ -61,7 +61,7 @@ const char ChildUserService::kFamilyLinkHelperAppPackageName[] = + "com.google.android.apps.kids.familylinkhelper"; + // static + const char ChildUserService::kFamilyLinkHelperAppPlayStoreURL[] = +- "https://play.google.com/store/apps/" ++ "https://play.9oo91e.qjz9zk/store/apps/" + "details?id=com.google.android.apps.kids.familylinkhelper"; + + ChildUserService::TestApi::TestApi(ChildUserService* service) +diff --git a/chrome/browser/ash/crostini/crostini_util.cc b/chrome/browser/ash/crostini/crostini_util.cc +--- a/chrome/browser/ash/crostini/crostini_util.cc ++++ b/chrome/browser/ash/crostini/crostini_util.cc +@@ -60,7 +60,7 @@ const char kCrostiniDefaultVmName[] = "termina"; + const char kCrostiniDefaultContainerName[] = "penguin"; + const char kCrostiniDefaultUsername[] = "emperor"; + const char kCrostiniDefaultImageServerUrl[] = +- "https://storage.googleapis.com/cros-containers/%d"; ++ "https://storage.9oo91eapis.qjz9zk/cros-containers/%d"; + const char kCrostiniDlcName[] = "termina-dlc"; + + const base::FilePath::CharType kHomeDirectory[] = +diff --git a/chrome/browser/ash/customization/customization_document.cc b/chrome/browser/ash/customization/customization_document.cc +--- a/chrome/browser/ash/customization/customization_document.cc ++++ b/chrome/browser/ash/customization/customization_document.cc +@@ -200,7 +200,7 @@ std::string ReadFileInBackground(const base::FilePath& file) { + + // Template URL where to fetch OEM services customization manifest from. + const char ServicesCustomizationDocument::kManifestUrl[] = +- "https://ssl.gstatic.com/chrome/chromeos-customization/%s.json"; ++ "https://ssl.95tat1c.qjz9zk/chrome/chromeos-customization/%s.json"; + + // A custom extensions::ExternalLoader that the ServicesCustomizationDocument + // creates and uses to publish OEM default apps to the extensions system. +diff --git a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc +--- a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc ++++ b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc +@@ -10,7 +10,7 @@ namespace enhanced_network_tts { + const char kGoogApiKeyHeader[] = "X-Goog-Api-Key"; + + const char kReadAloudServerUrl[] = +- "https://readaloud.googleapis.com//v1:generateAudioDocStream"; ++ "https://readaloud.9oo91eapis.qjz9zk//v1:generateAudioDocStream"; + + const char kNetworkRequestUploadType[] = "application/json"; + +diff --git a/chrome/browser/ash/file_manager/file_manager_string_util.cc b/chrome/browser/ash/file_manager/file_manager_string_util.cc +--- a/chrome/browser/ash/file_manager/file_manager_string_util.cc ++++ b/chrome/browser/ash/file_manager/file_manager_string_util.cc +@@ -32,29 +32,29 @@ namespace { + + // Location of the page to buy more storage for Google Drive. + const char kGoogleDriveBuyStorageUrl[] = +- "https://www.google.com/settings/storage"; ++ "https://www.9oo91e.qjz9zk/settings/storage"; + + // Location of the page to manage Google Drive storage. + const char kGoogleDriveManageStorageUrl[] = +- "https://drive.google.com/drive/u/0/quota"; ++ "https://drive.9oo91e.qjz9zk/drive/u/0/quota"; + + // Location of the overview page about Google Drive. + const char kGoogleDriveOverviewUrl[] = +- "https://support.google.com/chromebook/?p=filemanager_drive"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=filemanager_drive"; + + // Location of Google Drive specific help. + const char kGoogleDriveHelpUrl[] = +- "https://support.google.com/chromebook/?p=filemanager_drivehelp"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=filemanager_drivehelp"; + + // Location of the help page about making Google Drive files available offline. + const char kGoogleDriveOfflineHelpUrl[] = +- "http://support.google.com/chromebook/?p=offline_files"; ++ "http://support.9oo91e.qjz9zk/chromebook/?p=offline_files"; + + // Location of Google Drive root. +-const char kGoogleDriveRootUrl[] = "https://drive.google.com"; ++const char kGoogleDriveRootUrl[] = "https://drive.9oo91e.qjz9zk"; + + // Printf format +-const char kHelpURLFormat[] = "https://support.google.com/chromebook/answer/%d"; ++const char kHelpURLFormat[] = "https://support.9oo91e.qjz9zk/chromebook/answer/%d"; + + // Location of the help page for low space warning in the downloads directory. + const int kDownloadsLowSpaceWarningHelpNumber = 1061547; +diff --git a/chrome/browser/ash/file_manager/open_with_browser.cc b/chrome/browser/ash/file_manager/open_with_browser.cc +--- a/chrome/browser/ash/file_manager/open_with_browser.cc ++++ b/chrome/browser/ash/file_manager/open_with_browser.cc +@@ -173,18 +173,18 @@ bool OpenNewTabForHostedOfficeFile(const GURL& url) { + LOG(ERROR) << "Invalid URL"; + return false; + } +- if (url_with_query_param.host() == "drive.google.com") { ++ if (url_with_query_param.host() == "drive.9oo91e.qjz9zk") { + UMA_HISTOGRAM_ENUMERATION( + file_tasks::kDriveErrorMetricName, + file_tasks::OfficeDriveErrors::DRIVE_ALTERNATE_URL); +- LOG(ERROR) << "URL was from drive.google.com"; ++ LOG(ERROR) << "URL was from drive.9oo91e.qjz9zk"; + return false; + } +- if (url_with_query_param.host() != "docs.google.com") { ++ if (url_with_query_param.host() != "docs.9oo91e.qjz9zk") { + UMA_HISTOGRAM_ENUMERATION( + file_tasks::kDriveErrorMetricName, + file_tasks::OfficeDriveErrors::UNEXPECTED_ALTERNATE_URL); +- LOG(ERROR) << "URL was not from docs.google.com"; ++ LOG(ERROR) << "URL was not from docs.9oo91e.qjz9zk"; + return false; + } + +diff --git a/chrome/browser/ash/hats/hats_dialog.cc b/chrome/browser/ash/hats/hats_dialog.cc +--- a/chrome/browser/ash/hats/hats_dialog.cc ++++ b/chrome/browser/ash/hats/hats_dialog.cc +@@ -61,7 +61,7 @@ const char kClientQuestionAnsweredRegex[] = "answer-(\\d+)-((?:\\d+,?)+)"; + const char kClientQuestionAnsweredScoreRegex[] = "(\\d+),?"; + + constexpr char kCrOSHaTSURL[] = +- "https://storage.googleapis.com/chromeos-hats-web-stable/index.html"; ++ "https://storage.9oo91eapis.qjz9zk/chromeos-hats-web-stable/index.html"; + + } // namespace + +diff --git a/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc b/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc +--- a/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc ++++ b/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc +@@ -22,27 +22,27 @@ namespace { + const char* kAllowedDomainAndPathsForPersonalInfoSuggester[][2] = { + {"discord.com", ""}, {"messenger.com", ""}, + {"web.whatsapp.com", ""}, {"web.skype.com", ""}, +- {"duo.google.com", ""}, {"hangouts.google.com", ""}, +- {"messages.google.com", ""}, {"web.telegram.org", ""}, +- {"voice.google.com", ""}, {"mail.google.com", "/chat"}, ++ {"duo.9oo91e.qjz9zk", ""}, {"hangouts.9oo91e.qjz9zk", ""}, ++ {"messages.9oo91e.qjz9zk", ""}, {"web.telegram.org", ""}, ++ {"voice.9oo91e.qjz9zk", ""}, {"mail.9oo91e.qjz9zk", "/chat"}, + }; + + const char* kAllowedDomainAndPathsForEmojiSuggester[][2] = { + {"discord.com", ""}, {"messenger.com", ""}, + {"web.whatsapp.com", ""}, {"web.skype.com", ""}, +- {"duo.google.com", ""}, {"hangouts.google.com", ""}, +- {"messages.google.com", ""}, {"web.telegram.org", ""}, +- {"voice.google.com", ""}, {"mail.google.com", "/chat"}, ++ {"duo.9oo91e.qjz9zk", ""}, {"hangouts.9oo91e.qjz9zk", ""}, ++ {"messages.9oo91e.qjz9zk", ""}, {"web.telegram.org", ""}, ++ {"voice.9oo91e.qjz9zk", ""}, {"mail.9oo91e.qjz9zk", "/chat"}, + }; + + // TODO(b/3339115): Add web.skype.com back to the list after compatibility + // issues are solved. + const char* kAllowedDomainAndPathsForMultiWordSuggester[][2] = { + {"discord.com", ""}, {"messenger.com", ""}, +- {"web.whatsapp.com", ""}, {"duo.google.com", ""}, +- {"hangouts.google.com", ""}, {"messages.google.com", ""}, +- {"web.telegram.org", ""}, {"voice.google.com", ""}, +- {"mail.google.com", "/chat"}, ++ {"web.whatsapp.com", ""}, {"duo.9oo91e.qjz9zk", ""}, ++ {"hangouts.9oo91e.qjz9zk", ""}, {"messages.9oo91e.qjz9zk", ""}, ++ {"web.telegram.org", ""}, {"voice.9oo91e.qjz9zk", ""}, ++ {"mail.9oo91e.qjz9zk", "/chat"}, + }; + + const char* kTestUrls[] = { +@@ -136,9 +136,9 @@ const char* kAllowedAppsForMultiWordSuggester[] = { + + const char* kDeniedDomainAndPathsForDiacritics[][2] = { + // Google Slides: delete on insert does not work +- {"docs.google.com", "/presentation"}, ++ {"docs.9oo91e.qjz9zk", "/presentation"}, + // Google Docs: delete on insert does not work +- {"docs.google.com", "/document"}, ++ {"docs.9oo91e.qjz9zk", "/document"}, + }; + + const char* kDeniedAppsForDiacritics[] = { +diff --git a/chrome/browser/ash/input_method/ime_rules_config.h b/chrome/browser/ash/input_method/ime_rules_config.h +--- a/chrome/browser/ash/input_method/ime_rules_config.h ++++ b/chrome/browser/ash/input_method/ime_rules_config.h +@@ -50,19 +50,19 @@ class ImeRulesConfig { + // The default denylist of domains that will turn off auto_correct feature. + std::vector default_auto_correct_domain_denylist_{ + "amazon.com", +- "b.corp.google.com", +- "buganizer.corp.google.com", +- "cider.corp.google.com", +- "classroom.google.com", ++ "b.corp.9oo91e.qjz9zk", ++ "buganizer.corp.9oo91e.qjz9zk", ++ "cider.corp.9oo91e.qjz9zk", ++ "classroom.9oo91e.qjz9zk", + "desmos.com", +- "docs.google.com", +- "facebook.com", ++ "docs.9oo91e.qjz9zk", ++ "f8c3b00k.qjz9zk", + "instagram.com", + "outlook.live.com", + "outlook.office.com", + "quizlet.com", + "whatsapp.com", +- "youtube.com", ++ "y0u1ub3.qjz9zk", + }; + }; + +diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_key_names.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_key_names.cc +--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_key_names.cc ++++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_key_names.cc +@@ -18,7 +18,7 @@ const char kKeyPsk[] = "psk"; + const char kKeySerializedBeaconSeeds[] = "serializedBeaconSeeds"; + const char kKeyUnlockKey[] = "unlockKey"; + const char kKeyLabelPrefix[] = "easy-unlock-"; +-const char kPermitPermitIdFormat[] = "permit://google.com/easyunlock/v1/%s"; ++const char kPermitPermitIdFormat[] = "permit://9oo91e.qjz9zk/easyunlock/v1/%s"; + const char kPermitTypeLicence[] = "licence"; + + } // namespace key_names +diff --git a/chrome/browser/ash/login/gaia_reauth_token_fetcher.cc b/chrome/browser/ash/login/gaia_reauth_token_fetcher.cc +--- a/chrome/browser/ash/login/gaia_reauth_token_fetcher.cc ++++ b/chrome/browser/ash/login/gaia_reauth_token_fetcher.cc +@@ -30,7 +30,7 @@ namespace { + + // TODO(b/197615068): Temporarily point to staging environment. + const char kGetReauthTokenUrl[] = +- "https://staging-chromeoslogin-pa.sandbox.googleapis.com/v1/rart"; ++ "https://staging-chromeoslogin-pa.sandbox.9oo91eapis.qjz9zk/v1/rart"; + const char kApiKeyParameter[] = "key"; + + constexpr base::TimeDelta kWaitTimeout = base::Seconds(5); +diff --git a/chrome/browser/ash/login/marketing_backend_connector.cc b/chrome/browser/ash/login/marketing_backend_connector.cc +--- a/chrome/browser/ash/login/marketing_backend_connector.cc ++++ b/chrome/browser/ash/login/marketing_backend_connector.cc +@@ -32,10 +32,10 @@ namespace { + + // The scope that will be used to access the ChromebookEmailService API. + const char kChromebookOAuth2Scope[] = +- "https://www.googleapis.com/auth/chromebook.email"; ++ "https://www.9oo91eapis.qjz9zk/auth/chromebook.email"; + + // API Endpoint +-const char kAccessPointsApiEndpoint[] = "https://accesspoints.googleapis.com/"; ++const char kAccessPointsApiEndpoint[] = "https://accesspoints.9oo91eapis.qjz9zk/"; + const char kChromebookEmailServicePath[] = "v2/chromebookEmailPreferences"; + constexpr size_t kResponseMaxBodySize = 4 * 1024 * 1024; // 4MiB + +diff --git a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_fido_controller.cc b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_fido_controller.cc +--- a/chrome/browser/ash/login/oobe_quick_start/connectivity/target_fido_controller.cc ++++ b/chrome/browser/ash/login/oobe_quick_start/connectivity/target_fido_controller.cc +@@ -18,8 +18,8 @@ namespace ash::quick_start { + + namespace { + +-const char kRelyingPartyId[] = "google.com"; +-const char kOrigin[] = "https://accounts.google.com"; ++const char kRelyingPartyId[] = "9oo91e.qjz9zk"; ++const char kOrigin[] = "https://accounts.9oo91e.qjz9zk"; + const char kCtapRequestType[] = "webauthn.get"; + + const uint8_t kAuthenticatorGetAssertionCommand = 0x02; +diff --git a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc +--- a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc ++++ b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc +@@ -73,7 +73,7 @@ const char kAcceptValue[] = + "Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + + const char kPasswordSyncTokenBaseEndPoint[] = +- "https://chromedevicetoken.googleapis.com/v1/tokens"; ++ "https://chromedevicetoken.9oo91eapis.qjz9zk/v1/tokens"; + + const char kPasswordSyncTokenCreateEndPoint[] = ""; + +diff --git a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc +--- a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc ++++ b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc +@@ -38,10 +38,10 @@ namespace ash { + namespace { + + constexpr const char kGetAppListUrl[] = +- "https://android.clients.google.com/fdfe/chrome/getfastreinstallappslist"; ++ "https://android.clients.9oo91e.qjz9zk/fdfe/chrome/getfastreinstallappslist"; + + constexpr const char kGetRevisedAppListUrl[] = +- "https://android.clients.google.com/fdfe/chrome/getSetupAppRecommendations"; ++ "https://android.clients.9oo91e.qjz9zk/fdfe/chrome/getSetupAppRecommendations"; + + constexpr int kResponseErrorNotEnoughApps = 5; + +diff --git a/chrome/browser/ash/login/users/default_user_image/default_user_images.cc b/chrome/browser/ash/login/users/default_user_image/default_user_images.cc +--- a/chrome/browser/ash/login/users/default_user_image/default_user_images.cc ++++ b/chrome/browser/ash/login/users/default_user_image/default_user_images.cc +@@ -292,7 +292,7 @@ const char kDefaultUrlPrefix[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER_"; + const char kZeroDefaultUrl[] = "chrome://theme/IDR_LOGIN_DEFAULT_USER"; + // TODO(b/244369871): Support 1x/2x images based on pixel density. + const char kGstaticImagePrefix[] = +- "https://www.gstatic.com/chromecast/home/chromeos/avatars/" ++ "https://www.95tat1c.qjz9zk/chromecast/home/chromeos/avatars/" + "default_200_percent/"; + + } // namespace +diff --git a/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc b/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc +--- a/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc +@@ -21,9 +21,9 @@ namespace mojom = ::chromeos::network_diagnostics::mojom; + + // These hostnames were chosen because they need to be resolved for a + // successful ARC provisioning step. +-constexpr char kHostname1[] = "www.googleapis.com"; +-constexpr char kHostname2[] = "android.clients.google.com"; +-constexpr char kHostname3[] = "android.googleapis.com"; ++constexpr char kHostname1[] = "www.9oo91eapis.qjz9zk"; ++constexpr char kHostname2[] = "android.clients.9oo91e.qjz9zk"; ++constexpr char kHostname3[] = "android.9oo91eapis.qjz9zk"; + + } // namespace + +diff --git a/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc b/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc +--- a/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc +@@ -44,7 +44,7 @@ constexpr base::TimeDelta kBadLatencyMs = + base::Milliseconds(util::kDnsPotentialProblemLatencyMs); + constexpr base::TimeDelta kVeryBadLatencyMs = + base::Milliseconds(util::kDnsProblemLatencyMs); +-constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.gstatic.com"; ++constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.95tat1c.qjz9zk"; + + const std::string GetRandomString(int length) { + std::string prefix; +diff --git a/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc b/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc +--- a/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc +@@ -27,7 +27,7 @@ namespace { + // TODO(https://crbug.com/1164001): remove when migrated to namespace ash. + namespace mojom = ::chromeos::network_diagnostics::mojom; + +-constexpr char kHostname[] = "ccd-testing-v4.gstatic.com"; ++constexpr char kHostname[] = "ccd-testing-v4.95tat1c.qjz9zk"; + constexpr int kHttpPort = 80; + // For an explanation of error codes, see "net/base/net_error_list.h". + constexpr int kRetryResponseCodes[] = {net::ERR_TIMED_OUT, +diff --git a/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc b/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc +--- a/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc ++++ b/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc +@@ -40,14 +40,14 @@ std::vector GetRandomPrefixes(size_t num_prefixes, int length) { + } // namespace + + const char* GetGstaticHostSuffix() { +- static const char* gstatic_host_suffix = "-ccd-testing-v4.metric.gstatic.com"; ++ static const char* gstatic_host_suffix = "-ccd-testing-v4.metric.95tat1c.qjz9zk"; + return gstatic_host_suffix; + } + + const std::vector& GetFixedHosts() { + static base::NoDestructor> fixed_hostnames( +- {"www.google.com", "mail.google.com", "drive.google.com", +- "accounts.google.com", "plus.google.com", "groups.google.com"}); ++ {"www.9oo91e.qjz9zk", "mail.9oo91e.qjz9zk", "drive.9oo91e.qjz9zk", ++ "accounts.9oo91e.qjz9zk", "plus.9oo91e.qjz9zk", "groups.9oo91e.qjz9zk"}); + return *fixed_hostnames; + } + +@@ -199,10 +199,10 @@ std::vector GetTcpPortsForCustomStunServer() { + + std::vector GetDefaultMediaUrls() { + const char* const kHostnames[] = { +- "https://apis.google.com", "https://talkgadget.google.com", +- "https://clients6.google.com", "https://hangouts.google.com", +- "https://client-channel.google.com", "https://googleapis.com", +- "https://accounts.google.com", "https://clients4.google.com"}; ++ "https://apis.9oo91e.qjz9zk", "https://talkgadget.9oo91e.qjz9zk", ++ "https://clients6.9oo91e.qjz9zk", "https://hangouts.9oo91e.qjz9zk", ++ "https://client-channel.9oo91e.qjz9zk", "https://9oo91eapis.qjz9zk", ++ "https://accounts.9oo91e.qjz9zk", "https://clients4.9oo91e.qjz9zk"}; + std::vector hostnames; + for (auto* const& hostname : kHostnames) { + hostnames.push_back(GURL(hostname)); +diff --git a/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc b/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc +--- a/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc +@@ -25,12 +25,12 @@ namespace { + // TODO(https://crbug.com/1164001): remove when migrated to namespace ash. + namespace mojom = ::chromeos::network_diagnostics::mojom; + +-const char kDefaultStunServer[] = "stun.l.google.com"; ++const char kDefaultStunServer[] = "stun.l.9oo91e.qjz9zk"; + + } // namespace + + // TODO(crbug/1227877): Move support details to the UI. +-const char kSupportDetails[] = "https://support.google.com/a/answer/1279090"; ++const char kSupportDetails[] = "https://support.9oo91e.qjz9zk/a/answer/1279090"; + const base::TimeDelta kTimeoutAfterHostResolution = base::Seconds(10); + + VideoConferencingRoutine::VideoConferencingRoutine() +diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc b/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc +--- a/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc ++++ b/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc +@@ -107,7 +107,7 @@ class PluginVmDiagnostics : public base::RefCounted { + entry.SetFail( + IDS_VM_STATUS_PAGE_EPHEMERAL_PROFILE_EXPLANATION, + /*learn_more_link=*/ +- GURL("https://support.google.com/chromebook?p=ephemeral_mode")); ++ GURL("https://support.9oo91e.qjz9zk/chromebook?p=ephemeral_mode")); + break; + case ProfileSupported::kErrorNotSupported: + entry.SetFail(IDS_VM_STATUS_PAGE_UNSUPPORTED_PROFILE_EXPLANATION); +@@ -212,7 +212,7 @@ class PluginVmDiagnostics : public base::RefCounted { + l10n_util::GetStringUTF16(IDS_PLUGIN_VM_APP_NAME)), + /*learn_more_link=*/ + GURL( +- "https://support.google.com/chromebook?p=parallels_setup")); ++ "https://support.9oo91e.qjz9zk/chromebook?p=parallels_setup")); + } else { + // Everything is good. Do nothing. + } +diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc b/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc +--- a/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc ++++ b/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc +@@ -34,8 +34,8 @@ namespace plugin_vm { + namespace { + + constexpr char kValidationOAuth2Scope[] = +- "https://www.googleapis.com/auth/applicense.bytebot"; +-constexpr char kValidationEndpoint[] = "https://bytebot.googleapis.com/"; ++ "https://www.9oo91eapis.qjz9zk/auth/applicense.bytebot"; ++constexpr char kValidationEndpoint[] = "https://bytebot.9oo91eapis.qjz9zk/"; + constexpr char kValidationServicePath[] = + "v1/applications/chromePluginVm:getLicenseStatus"; + constexpr char kValidationServiceQuery[] = "?checkOnly=true&access_token="; +diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_util.cc b/chrome/browser/ash/plugin_vm/plugin_vm_util.cc +--- a/chrome/browser/ash/plugin_vm/plugin_vm_util.cc ++++ b/chrome/browser/ash/plugin_vm/plugin_vm_util.cc +@@ -111,7 +111,7 @@ void RemoveDriveDownloadDirectoryIfExists() { + absl::optional GetIdFromDriveUrl(const GURL& url) { + const std::string& spec = url.spec(); + +- const std::string kOpenUrlBase = "https://drive.google.com/open?"; ++ const std::string kOpenUrlBase = "https://drive.9oo91e.qjz9zk/open?"; + if (base::StartsWith(spec, kOpenUrlBase, + base::CompareCase::INSENSITIVE_ASCII)) { + // e.g. https://drive.google.com/open?id=[ID] +@@ -123,9 +123,9 @@ absl::optional GetIdFromDriveUrl(const GURL& url) { + + // These will match some invalid URLs, which is fine. + const std::string kViewUrlPatternWithDomain = +- "https://drive.google.com/a/*/file/d/*/view*"; ++ "https://drive.9oo91e.qjz9zk/a/*/file/d/*/view*"; + const std::string kViewUrlPatternWithoutDomain = +- "https://drive.google.com/file/d/*/view*"; ++ "https://drive.9oo91e.qjz9zk/file/d/*/view*"; + if (base::MatchPattern(spec, kViewUrlPatternWithDomain) || + base::MatchPattern(spec, kViewUrlPatternWithoutDomain)) { + // e.g. https://drive.google.com/a/example.org/file/d/[ID]/view?usp=sharing +diff --git a/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc b/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc +--- a/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc ++++ b/chrome/browser/ash/policy/enrollment/account_status_check_fetcher.cc +@@ -141,7 +141,7 @@ const char* const kKnownConsumerDomains[] = {"123mail.org", + "execs.com", + "exemail.com.au", + "f-m.fm", +- "facebook.com", ++ "f8c3b00k.qjz9zk", + "fast-email.com", + "fast-mail.org", + "fastem.com", +@@ -180,9 +180,9 @@ const char* const kKnownConsumerDomains[] = {"123mail.org", + "gardener.com", + "geologist.com", + "germanymail.com", +- "gmail.com", ++ "9ma1l.qjz9zk", + "gmx.com", +- "googlemail.com", ++ "9oo91email.qjz9zk", + "graduate.org", + "graphic-designer.com", + "greenmail.net", +diff --git a/chrome/browser/ash/policy/handlers/powerwash_requirements_checker.cc b/chrome/browser/ash/policy/handlers/powerwash_requirements_checker.cc +--- a/chrome/browser/ash/policy/handlers/powerwash_requirements_checker.cc ++++ b/chrome/browser/ash/policy/handlers/powerwash_requirements_checker.cc +@@ -53,7 +53,7 @@ const gfx::VectorIcon& kNotificationIcon = vector_icons::kBusinessIcon; + constexpr mc::SystemNotificationWarningLevel kNotificationLevel = + mc::SystemNotificationWarningLevel::NORMAL; + const char kNotificationLearnMoreLink[] = +- "https://support.google.com/chromebook?p=factory_reset"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=factory_reset"; + + std::u16string GetEnterpriseManager() { + BrowserPolicyConnectorAsh* connector = +diff --git a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc +--- a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc ++++ b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc +@@ -35,11 +35,11 @@ namespace { + + // OAuth2 Token scopes + constexpr char kCloudDevicesOAuth2Scope[] = +- "https://www.googleapis.com/auth/clouddevices"; ++ "https://www.9oo91eapis.qjz9zk/auth/clouddevices"; + constexpr char kChromotingRemoteSupportOAuth2Scope[] = +- "https://www.googleapis.com/auth/chromoting.remote.support"; ++ "https://www.9oo91eapis.qjz9zk/auth/chromoting.remote.support"; + constexpr char kTachyonOAuth2Scope[] = +- "https://www.googleapis.com/auth/tachyon"; ++ "https://www.9oo91eapis.qjz9zk/auth/tachyon"; + + // Job parameters fields: + +diff --git a/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc b/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc +--- a/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc ++++ b/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc +@@ -30,11 +30,11 @@ const char kHeartbeatGCMAppID[] = "com.google.chromeos.monitoring"; + + // The default destination we send our GCM messages to. + const char kHeartbeatGCMDestinationID[] = "1013309121859"; +-const char kHeartbeatGCMSenderSuffix[] = "@google.com"; ++const char kHeartbeatGCMSenderSuffix[] = "@9oo91e.qjz9zk"; + + // Destination of upstream notification sign up message. + const char kUpstreamNotificationSignUpDestinationID[] = +- "https://gcm.googleapis.com/gcm/gcm.event_tracker"; ++ "https://gcm.9oo91eapis.qjz9zk/gcm/gcm.event_tracker"; + + // A bit mask, listening events of upstream notification. + const char kUpstreamNotificationSignUpListeningEvents[] = +diff --git a/chrome/browser/ash/u2f_notification.cc b/chrome/browser/ash/u2f_notification.cc +--- a/chrome/browser/ash/u2f_notification.cc ++++ b/chrome/browser/ash/u2f_notification.cc +@@ -33,7 +33,7 @@ namespace { + + constexpr char kU2FNotificationId[] = "chrome://u2f_notification"; + constexpr char kU2FAdvisoryURL[] = +- "https://sites.google.com/a/chromium.org/dev/chromium-os/" ++ "https://sites.9oo91e.qjz9zk/a/ch40m1um.qjz9zk/dev/chromium-os/" + "u2f-ecdsa-vulnerability"; + + // Notification button identifiers. +diff --git a/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc b/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc +--- a/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc ++++ b/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc +@@ -53,17 +53,17 @@ constexpr char kProtoMimeType[] = "application/x-protobuf"; + + // The url to download the proto of the complete list of wallpaper collections. + constexpr char kBackdropCollectionsUrl[] = +- "https://clients3.google.com/cast/chromecast/home/wallpaper/" ++ "https://clients3.9oo91e.qjz9zk/cast/chromecast/home/wallpaper/" + "collections?rt=b"; + + // The url to download the proto of a specific wallpaper collection. + constexpr char kBackdropImagesUrl[] = +- "https://clients3.google.com/cast/chromecast/home/wallpaper/" ++ "https://clients3.9oo91e.qjz9zk/cast/chromecast/home/wallpaper/" + "collection-images?rt=b"; + + // The url to download the proto of the info of a surprise me wallpaper. + constexpr char kBackdropSurpriseMeImageUrl[] = +- "https://clients3.google.com/cast/chromecast/home/wallpaper/" ++ "https://clients3.9oo91e.qjz9zk/cast/chromecast/home/wallpaper/" + "image?rt=b"; + + // The label used to return exclusive content or filter unwanted images. +@@ -74,7 +74,7 @@ constexpr char kGoogleDeviceFilteringLabel[] = "google_branded_chromebook"; + + // The URL to download an album's photos from a user's Google Photos library. + constexpr char kGooglePhotosAlbumUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/" ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/" + "collectionById:read"; + + // The collectionById endpoint accepts a "return_order" parameter that +@@ -84,7 +84,7 @@ constexpr char kGooglePhotosAlbumShuffledOrder[] = "2"; + + // The URL to download the albums in a user's Google Photos library. + constexpr char kGooglePhotosAlbumsUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/" ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/" + "userCollections:read"; + + constexpr net::NetworkTrafficAnnotationTag +@@ -112,7 +112,7 @@ constexpr net::NetworkTrafficAnnotationTag + + // The URL to download whether the user is allowed to access Google Photos data. + constexpr char kGooglePhotosEnabledUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/userenabled:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/userenabled:read"; + + constexpr net::NetworkTrafficAnnotationTag + kGooglePhotosEnabledTrafficAnnotation = +@@ -138,11 +138,11 @@ constexpr net::NetworkTrafficAnnotationTag + + // The URL to download a photo from a user's Google Photos library. + constexpr char kGooglePhotosPhotoUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/itemById:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/itemById:read"; + + // The URL to download all visible photos in a user's Google Photos library. + constexpr char kGooglePhotosPhotosUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/userItems:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/userItems:read"; + + constexpr net::NetworkTrafficAnnotationTag + kGooglePhotosPhotosTrafficAnnotation = +diff --git a/chrome/browser/ash/web_applications/terminal_source.cc b/chrome/browser/ash/web_applications/terminal_source.cc +--- a/chrome/browser/ash/web_applications/terminal_source.cc ++++ b/chrome/browser/ash/web_applications/terminal_source.cc +@@ -209,8 +209,8 @@ std::string TerminalSource::GetContentSecurityPolicy( + return "connect-src *;"; + } + return "connect-src 'self' " +- "https://*.corp.google.com:* wss://*.corp.google.com:* " +- "https://*.r.ext.google.com:* wss://*.r.ext.google.com:*;"; ++ "https://*.corp.9oo91e.qjz9zk:* wss://*.corp.9oo91e.qjz9zk:* " ++ "https://*.r.ext.9oo91e.qjz9zk:* wss://*.r.ext.9oo91e.qjz9zk:*;"; + case network::mojom::CSPDirectiveName::FrameAncestors: + return "frame-ancestors 'self';"; + case network::mojom::CSPDirectiveName::FrameSrc: +diff --git a/chrome/browser/autofill/autofill_gstatic_reader.cc b/chrome/browser/autofill/autofill_gstatic_reader.cc +--- a/chrome/browser/autofill/autofill_gstatic_reader.cc ++++ b/chrome/browser/autofill/autofill_gstatic_reader.cc +@@ -27,9 +27,9 @@ static const char kTokenizationBinRangeAllowlistKey[] = + static const char kTokenizationMerchantAllowlistKey[] = + "cpan_eligible_merchant_wl"; + static const char kTokenizationBinRangeAllowlistURL[] = +- "https://www.gstatic.com/autofill/hourly/bins.json"; ++ "https://www.95tat1c.qjz9zk/autofill/hourly/bins.json"; + static const char kTokenizationMerchantAllowlistURL[] = +- "https://www.gstatic.com/autofill/weekly/merchants.json"; ++ "https://www.95tat1c.qjz9zk/autofill/weekly/merchants.json"; + static const size_t kMaxDownloadSize = 30 * 1024; + } // namespace + +diff --git a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc +--- a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc ++++ b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc +@@ -42,7 +42,7 @@ ApcOnboardingCoordinator::CreateOnboardingInformation() { + + // TODO(crbug.com/1322387): Update link so that it also applies to Desktop. + info.learn_more_url = GURL( +- "https://support.google.com/assistant/answer/" ++ "https://support.9oo91e.qjz9zk/assistant/answer/" + "9201753?visit_id=637880404267471228-1286648363&p=password_change&rd=1"); + + return info; +diff --git a/chrome/browser/browser_switcher/browser_switcher_service.cc b/chrome/browser/browser_switcher/browser_switcher_service.cc +--- a/chrome/browser/browser_switcher/browser_switcher_service.cc ++++ b/chrome/browser/browser_switcher/browser_switcher_service.cc +@@ -54,7 +54,7 @@ constexpr net::NetworkTrafficAnnotationTag traffic_annotation = + "an alternative browser. This is often on the organization's " + "intranet. For more information on Internet Explorer's Enterprise " + "Mode, see: " +- "https://docs.microsoft.com/internet-explorer/ie11-deploy-guide" ++ "https://docs.m1cr050ft.qjz9zk/internet-explorer/ie11-deploy-guide" + "/what-is-enterprise-mode" + trigger: + "1 minute after browser startup, and then refreshes every 30 " +diff --git a/chrome/browser/cart/cart_discount_fetcher.cc b/chrome/browser/cart/cart_discount_fetcher.cc +--- a/chrome/browser/cart/cart_discount_fetcher.cc ++++ b/chrome/browser/cart/cart_discount_fetcher.cc +@@ -32,7 +32,7 @@ const char kAcceptLanguageKey[] = "Accept-Language"; + const char kClientDataHeader[] = "X-Client-Data"; + + const char kFetchDiscountsEndpoint[] = +- "https://memex-pa.googleapis.com/v1/shopping/cart/discounts"; ++ "https://memex-pa.9oo91eapis.qjz9zk/v1/shopping/cart/discounts"; + const int64_t kTimeoutMs = 30000; + + const char kCartDiscountFetcherEndpointParam[] = +diff --git a/chrome/browser/cart/cart_discount_link_fetcher.cc b/chrome/browser/cart/cart_discount_link_fetcher.cc +--- a/chrome/browser/cart/cart_discount_link_fetcher.cc ++++ b/chrome/browser/cart/cart_discount_link_fetcher.cc +@@ -22,7 +22,7 @@ const char kPostMethod[] = "POST"; + const char kContentType[] = "application/json; charset=UTF-8"; + + const char kFetchDiscountLinkEndpoint[] = +- "https://memex-pa.googleapis.com/v1/shopping/cart/discounted"; ++ "https://memex-pa.9oo91eapis.qjz9zk/v1/shopping/cart/discounted"; + const int64_t kTimeoutMs = 30000; + } // namespace + +diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_service.cc +--- a/chrome/browser/cart/cart_service.cc ++++ b/chrome/browser/cart/cart_service.cc +@@ -634,17 +634,17 @@ void CartService::AddCartsWithFakeData() { + u"15%")); + dummy_proto1.mutable_discount_info()->set_has_coupons(true); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); +@@ -682,12 +682,12 @@ void CartService::AddCartsWithFakeData() { + l10n_util::GetStringFUTF8(IDS_NTP_MODULES_CART_DISCOUNT_CHIP_AMOUNT, + u"20%")); + dummy_proto2.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto2.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); +@@ -705,7 +705,7 @@ void CartService::AddCartsWithFakeData() { + l10n_util::GetStringFUTF8(IDS_NTP_MODULES_CART_DISCOUNT_CHIP_UP_TO_AMOUNT, + u"$50")); + dummy_proto3.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); +@@ -720,12 +720,12 @@ void CartService::AddCartsWithFakeData() { + dummy_proto4.set_merchant_cart_url(dummy_url4.spec()); + dummy_proto4.set_timestamp(time_now + 5); + dummy_proto4.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto4.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); +@@ -740,7 +740,7 @@ void CartService::AddCartsWithFakeData() { + dummy_proto5.set_merchant_cart_url(dummy_url5.spec()); + dummy_proto5.set_timestamp(time_now + 2); + dummy_proto5.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); +@@ -755,17 +755,17 @@ void CartService::AddCartsWithFakeData() { + dummy_proto6.set_merchant_cart_url(dummy_url6.spec()); + dummy_proto6.set_timestamp(time_now + 1); + dummy_proto6.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto6.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto6.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); +diff --git a/chrome/browser/cart/fetch_discount_worker.cc b/chrome/browser/cart/fetch_discount_worker.cc +--- a/chrome/browser/cart/fetch_discount_worker.cc ++++ b/chrome/browser/cart/fetch_discount_worker.cc +@@ -26,7 +26,7 @@ + + namespace { + const char kOauthName[] = "rbd"; +-const char kOauthScopes[] = "https://www.googleapis.com/auth/chromememex"; ++const char kOauthScopes[] = "https://www.9oo91eapis.qjz9zk/auth/chromememex"; + const char kEmptyToken[] = ""; + } // namespace + +diff --git a/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json b/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json +--- a/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json ++++ b/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json +@@ -63,7 +63,7 @@ + "lululemon.com": "https://shop.lululemon.com/shop/mybag", + "lulus.com": "https://www.lulus.com/checkout/bag", + "macys.com": "https://www.macys.com/my-bag", +-"microsoft.com": "https://www.microsoft.com/en-us/store/cart", ++"m1cr050ft.qjz9zk": "https://www.m1cr050ft.qjz9zk/en-us/store/cart", + "midwayusa.com": "https://www.midwayusa.com/cart", + "neimanmarcus.com": "https://www.neimanmarcus.com/checkout/cart.jsp", + "newegg.com": "https://secure.newegg.com/shop/cart", +diff --git a/chrome/browser/cart/resources/cart_domain_name_mapping.json b/chrome/browser/cart/resources/cart_domain_name_mapping.json +--- a/chrome/browser/cart/resources/cart_domain_name_mapping.json ++++ b/chrome/browser/cart/resources/cart_domain_name_mapping.json +@@ -63,7 +63,7 @@ + "lululemon.com": "lululemon", + "lulus.com": "Lulus", + "macys.com": "Macy's", +-"microsoft.com": "Microsoft", ++"m1cr050ft.qjz9zk": "Microsoft", + "midwayusa.com": "MidwayUSA", + "neimanmarcus.com": "Neiman Marcus", + "newegg.com": "Newegg", +diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/chrome_browser_application_mac.mm +--- a/chrome/browser/chrome_browser_application_mac.mm ++++ b/chrome/browser/chrome_browser_application_mac.mm +@@ -155,7 +155,7 @@ std::string DescriptionForNSEvent(NSEvent* event) { + + //////////////////////////////////////////////////////////////////////////////// + // HISTORICAL COMMENT (by viettrungluu, from +-// http://codereview.chromium.org/1520006 with mild editing): ++// http://codereview.ch40m1um.qjz9zk/1520006 with mild editing): + // + // A quick summary of the state of things (before the changes to shutdown): + // +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 +@@ -1195,7 +1195,7 @@ void LaunchURL(base::WeakPtr client, + "'allow-top-navigation-by-user-activation', " + "'allow-top-navigation', or " + "'allow-popups'. See " +- "https://chromestatus.com/feature/5680742077038592 and " ++ "https://ch40mestatus.qjz9zk/feature/5680742077038592 and " + "https://chromeenterprise.google/policies/" + "#SandboxExternalProtocolBlocked"); + return; +@@ -1211,7 +1211,7 @@ void LaunchURL(base::WeakPtr client, + "'allow-top-navigation-by-user-activation', " + "'allow-top-navigation', or " + "'allow-popups'. See " +- "https://chromestatus.com/feature/5680742077038592 and " ++ "https://ch40mestatus.qjz9zk/feature/5680742077038592 and " + "https://chromeenterprise.google/policies/" + "#SandboxExternalProtocolBlocked"); + } +diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +--- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc ++++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +@@ -93,7 +93,7 @@ namespace { + + using api::file_manager_private::ProfileInfo; + +-const char kCWSScope[] = "https://www.googleapis.com/auth/chromewebstore"; ++const char kCWSScope[] = "https://www.9oo91eapis.qjz9zk/auth/chromewebstore"; + + // Thresholds for mountCrostini() API. + constexpr base::TimeDelta kMountCrostiniSlowOperationThreshold = +diff --git a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h +--- a/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h ++++ b/chrome/browser/chromeos/policy/dlp/dlp_clipboard_bubble_constants.h +@@ -35,7 +35,7 @@ constexpr int kClipboardDlpWarnDurationMs = 16000; + + // Link to the Help Center article about Data Leak Prevention. + constexpr char kDlpLearnMoreUrl[] = +- "https://support.google.com/chrome/a/?p=chromeos_datacontrols"; ++ "https://support.9oo91e.qjz9zk/chrome/a/?p=chromeos_datacontrols"; + + } // namespace policy + +diff --git a/chrome/browser/devtools/url_constants.cc b/chrome/browser/devtools/url_constants.cc +--- a/chrome/browser/devtools/url_constants.cc ++++ b/chrome/browser/devtools/url_constants.cc +@@ -4,7 +4,7 @@ + + #include "chrome/browser/devtools/url_constants.h" + +-const char kRemoteFrontendDomain[] = "chrome-devtools-frontend.appspot.com"; ++const char kRemoteFrontendDomain[] = "chrome-devtools-frontend.8pp2p8t.qjz9zk"; + const char kRemoteFrontendBase[] = +- "https://chrome-devtools-frontend.appspot.com/"; ++ "https://chrome-devtools-frontend.8pp2p8t.qjz9zk/"; + const char kRemoteFrontendPath[] = "serve_file"; +diff --git a/chrome/browser/download/mixed_content_download_blocking.cc b/chrome/browser/download/mixed_content_download_blocking.cc +--- a/chrome/browser/download/mixed_content_download_blocking.cc ++++ b/chrome/browser/download/mixed_content_download_blocking.cc +@@ -317,7 +317,7 @@ void PrintConsoleMessage(const MixedContentDownloadData& data, + "connection, but the file at '%s' was %s an insecure " + "connection. This file should be served over HTTPS. " + "This download %s. See " +- "https://blog.chromium.org/2020/02/" ++ "https://blog.ch40m1um.qjz9zk/2020/02/" + "protecting-users-from-insecure.html" + " for more details.", + data.initiator_->GetURL().spec().c_str(), +diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc +--- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc ++++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc +@@ -29,7 +29,7 @@ namespace enterprise_connectors { + + namespace { + +-constexpr char kStableChannelHostName[] = "m.google.com"; ++constexpr char kStableChannelHostName[] = "m.9oo91e.qjz9zk"; + + bool ValidRotationCommand(const std::string& host_name) { + return chrome::GetChannel() != version_info::Channel::STABLE || +diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc +--- a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc ++++ b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc +@@ -24,7 +24,7 @@ namespace enterprise_connectors { + + namespace { + +-constexpr char kStableChannelHostName[] = "m.google.com"; ++constexpr char kStableChannelHostName[] = "m.9oo91e.qjz9zk"; + + // Returns decoded value from the base-64 `encoded_value`, or null + // in case of a decoding error. The returned value is an opaque binary +diff --git a/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc b/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc +--- a/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc ++++ b/chrome/browser/enterprise/connectors/file_system/signin_dialog_delegate.cc +@@ -49,7 +49,7 @@ const char kOAuthConsumerName[] = "file_system_signin_dialog"; + // 4/ This URI is used by other native apps for the same purpose. + // 5/ It is controlled by Google. + bool IsOAuth2RedirectURI(const GURL& url) { +- return url.host() == "google.com" && url.path() == "/generate_204"; ++ return url.host() == "9oo91e.qjz9zk" && url.path() == "/generate_204"; + } + + } // namespace +diff --git a/chrome/browser/enterprise/connectors/service_provider_config.cc b/chrome/browser/enterprise/connectors/service_provider_config.cc +--- a/chrome/browser/enterprise/connectors/service_provider_config.cc ++++ b/chrome/browser/enterprise/connectors/service_provider_config.cc +@@ -41,7 +41,7 @@ constexpr std::array kGoogleDlpSupportedTags = {{ + }}; + + constexpr AnalysisConfig kGoogleAnalysisConfig = { +- .url = "https://safebrowsing.google.com/safebrowsing/uploads/scan", ++ .url = "https://safebrowsing.9oo91e.qjz9zk/safebrowsing/uploads/scan", + .supported_tags = base::span(kGoogleDlpSupportedTags), + }; + +@@ -66,7 +66,7 @@ constexpr AnalysisConfig kLocalTestSystemAnalysisConfig = { + }; + + constexpr ReportingConfig kGoogleReportingConfig = { +- .url = "https://chromereporting-pa.googleapis.com/v1/events", ++ .url = "https://chromereporting-pa.9oo91eapis.qjz9zk/v1/events", + }; + + constexpr FileSystemConfig kBoxFileSystemConfig = { +diff --git a/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc +--- a/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc ++++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc +@@ -30,7 +30,7 @@ constexpr char kInstalledNotificationId[] = "extension_installed_notificaiton"; + constexpr char kExtensionRequestNotifierId[] = + "chrome_browser_cloud_management_extension_request"; + constexpr char kChromeWebstoreUrl[] = +- "https://chrome.google.com/webstore/detail/"; ++ "https://chrome.9oo91e.qjz9zk/webstore/detail/"; + + // The elements order of array below must match the order in enum + // ExtensionRequestNotification::NotifyType. +@@ -69,7 +69,7 @@ void ExtensionRequestNotification::Show(NotificationCloseCallback callback) { + kNotificationTitles[notify_type_], extension_ids_.size()); + const std::u16string body = l10n_util::GetPluralStringFUTF16( + kNotificationBodies[notify_type_], extension_ids_.size()); +- GURL original_url("https://chrome.google.com/webstore"); ++ GURL original_url("https://chrome.9oo91e.qjz9zk/webstore"); + auto icon = ui::ImageModel::FromVectorIcon(vector_icons::kBusinessIcon, + ui::kColorIcon, + message_center::kSmallImageSize); +diff --git a/chrome/browser/enterprise/signals/signals_utils.cc b/chrome/browser/enterprise/signals/signals_utils.cc +--- a/chrome/browser/enterprise/signals/signals_utils.cc ++++ b/chrome/browser/enterprise/signals/signals_utils.cc +@@ -85,8 +85,8 @@ absl::optional GetChromeCleanupEnabled(PrefService* local_state) { + + bool GetChromeRemoteDesktopAppBlocked(PolicyBlocklistService* service) { + DCHECK(service); +- return IsURLBlocked(GURL("https://remotedesktop.google.com"), service) || +- IsURLBlocked(GURL("https://remotedesktop.corp.google.com"), service); ++ return IsURLBlocked(GURL("https://remotedesktop.9oo91e.qjz9zk"), service) || ++ IsURLBlocked(GURL("https://remotedesktop.corp.9oo91e.qjz9zk"), service); + } + + } // namespace utils +diff --git a/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc b/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc +--- a/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc ++++ b/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc +@@ -25,9 +25,9 @@ + + namespace { + +-constexpr char kCrashEndpointUrl[] = "https://clients2.google.com/cr/report"; ++constexpr char kCrashEndpointUrl[] = "https://clients2.9oo91e.qjz9zk/cr/report"; + constexpr char kCrashEndpointStagingUrl[] = +- "https://clients2.google.com/cr/staging_report"; ++ "https://clients2.9oo91e.qjz9zk/cr/staging_report"; + + } // namespace + +diff --git a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc +--- a/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc ++++ b/chrome/browser/extensions/api/cryptotoken_private/cryptotoken_private_api.cc +@@ -50,10 +50,10 @@ namespace api { + + namespace { + +-const char kGoogleDotCom[] = "google.com"; ++const char kGoogleDotCom[] = "9oo91e.qjz9zk"; + constexpr const char* kGoogleGstaticAppIds[] = { +- "https://www.gstatic.com/securitykey/origins.json", +- "https://www.gstatic.com/securitykey/a/google.com/origins.json"}; ++ "https://www.95tat1c.qjz9zk/securitykey/origins.json", ++ "https://www.95tat1c.qjz9zk/securitykey/a/9oo91e.qjz9zk/origins.json"}; + + // ContainsAppIdByHash returns true iff the SHA-256 hash of one of the + // elements of |list| equals |hash|. +@@ -312,7 +312,7 @@ CryptotokenPrivateCanMakeU2fApiRequestFunction::Run() { + } + frame->AddMessageToConsole( + blink::mojom::ConsoleMessageLevel::kWarning, +- R"(The U2F Security Key API is deprecated and will be removed soon. If you own this website, please migrate to the Web Authentication API. For more information see https://groups.google.com/a/chromium.org/g/blink-dev/c/xHC3AtU_65A/m/yg20tsVFBAAJ)"); ++ R"(The U2F Security Key API is deprecated and will be removed soon. If you own this website, please migrate to the Web Authentication API. For more information see https://groups.9oo91e.qjz9zk/a/ch40m1um.qjz9zk/g/blink-dev/c/xHC3AtU_65A/m/yg20tsVFBAAJ)"); + + blink::TrialTokenValidator validator; + const net::HttpResponseHeaders* response_headers = +diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc +--- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc ++++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc +@@ -50,7 +50,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( + // implemented for secondary profiles in Lacros. + CHECK(Profile::FromBrowserContext(browser_context)->IsMainProfile()) + << "Attempted to use an incorrect profile. Please file a bug at " +- "https://bugs.chromium.org/ if this happens."; ++ "https://bugs.ch40m1um.qjz9zk/ if this happens."; + return chromeos::LacrosService::Get()->GetRemote().get(); + #endif // #if BUILDFLAG(IS_CHROMEOS_LACROS) + +diff --git a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc +--- a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc ++++ b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc +@@ -17,7 +17,7 @@ namespace extensions { + namespace { + + static const char kChromiumDomainRedirectUrlPattern[] = +- "https://%s.chromiumapp.org/"; ++ "https://%s.ch40m1umapp.qjz9zk/"; + + } // namespace + +diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +--- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc ++++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +@@ -89,7 +89,7 @@ namespace { + + #if BUILDFLAG(IS_CHROMEOS_ASH) + const char kPlayIntentPrefix[] = +- "https://play.google.com/store/apps/details?id="; ++ "https://play.9oo91e.qjz9zk/store/apps/details?id="; + const char kChromeWebStoreReferrer[] = "&referrer=chrome_web_store"; + #endif // BUILDFLAG(IS_CHROMEOS_ASH) + +diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc +--- a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc ++++ b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc +@@ -79,7 +79,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( + // implemented for secondary profiles in Lacros. + CHECK(Profile::FromBrowserContext(browser_context)->IsMainProfile()) + << "Attempted to use an incorrect profile. Please file a bug at " +- "https://bugs.chromium.org/ if this happens."; ++ "https://bugs.ch40m1um.qjz9zk/ if this happens."; + return chromeos::LacrosService::Get()->GetRemote().get(); + #endif // #if BUILDFLAG(IS_CHROMEOS_LACROS) + +diff --git a/chrome/browser/extensions/chrome_extension_browser_constants.cc b/chrome/browser/extensions/chrome_extension_browser_constants.cc +--- a/chrome/browser/extensions/chrome_extension_browser_constants.cc ++++ b/chrome/browser/extensions/chrome_extension_browser_constants.cc +@@ -8,7 +8,7 @@ namespace chrome_extension_constants { + + // The link to the help article for runtime host permissions. + const char kRuntimeHostPermissionsHelpURL[] = +- "https://support.google.com/chrome?p=enable_extensions"; ++ "https://support.9oo91e.qjz9zk/chrome?p=enable_extensions"; + + // The link to the site permissions settings page. + const char kExtensionsSitePermissionsURL[] = +@@ -20,6 +20,6 @@ const char kExtensionsSitePermissionsURL[] = + // TODO(crbug.com/1353587): This link is likely temporary, and may need to be + // replaced later. + const char kShowAccessRequestsInToolbarHelpURL[] = +- "https://support.google.com/chrome_webstore/answer/2664769"; ++ "https://support.9oo91e.qjz9zk/chrome_webstore/answer/2664769"; + + } // namespace chrome_extension_constants +diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/extensions/external_pref_loader.cc +--- a/chrome/browser/extensions/external_pref_loader.cc ++++ b/chrome/browser/extensions/external_pref_loader.cc +@@ -292,7 +292,7 @@ void ExternalPrefLoader::LoadOnFileThread() { + if (!prefs.empty()) + LOG(WARNING) << "You are using an old-style extension deployment method " + "(external_extensions.json), which will soon be " +- "deprecated. (see http://developer.chrome.com/" ++ "deprecated. (see http://developer.ch40me.qjz9zk/" + "extensions/external_extensions.html)"; + + ReadStandaloneExtensionPrefFiles(prefs); +diff --git a/chrome/browser/extensions/install_signer.cc b/chrome/browser/extensions/install_signer.cc +--- a/chrome/browser/extensions/install_signer.cc ++++ b/chrome/browser/extensions/install_signer.cc +@@ -66,7 +66,7 @@ const int kSignatureFormatVersion = 2; + const size_t kSaltBytes = 32; + + const char kBackendUrl[] = +- "https://www.googleapis.com/chromewebstore/v1.1/items/verify"; ++ "https://www.9oo91eapis.qjz9zk/chromewebstore/v1.1/items/verify"; + + const char kPublicKeyPEM[] = \ + "-----BEGIN PUBLIC KEY-----" \ +diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc +--- a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc ++++ b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc +@@ -49,7 +49,7 @@ ChromeExtensionDownloaderFactory::CreateForURLLoaderFactory( + manifest_query_params += "&testrequest=1"; + } + downloader->set_manifest_query_params(manifest_query_params); +- downloader->set_ping_enabled_domain("google.com"); ++ downloader->set_ping_enabled_domain("9oo91e.qjz9zk"); + return downloader; + } + +diff --git a/chrome/browser/extensions/updater/chrome_update_client_config.cc b/chrome/browser/extensions/updater/chrome_update_client_config.cc +--- a/chrome/browser/extensions/updater/chrome_update_client_config.cc ++++ b/chrome/browser/extensions/updater/chrome_update_client_config.cc +@@ -216,7 +216,7 @@ ChromeUpdateClientConfig::GetNetworkFetcherFactory() { + // from chrome.google.com, so send cookies if and only if that is + // the download domain. + base::BindRepeating([](const GURL& url) { +- return url.DomainIs("chrome.google.com"); ++ return url.DomainIs("chrome.9oo91e.qjz9zk"); + })); + } + return network_fetcher_factory_; +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -223,7 +223,7 @@ const char kU2FPermissionPromptDescription[] = + "Key API (CryptoToken). The U2F Security " + "Key API has been deprecated and will be removed soon. For more " + "information, refer to the deprecation announcement at " +- "https://groups.google.com/a/chromium.org/g/blink-dev/c/xHC3AtU_65A"; ++ "https://groups.9oo91e.qjz9zk/a/ch40m1um.qjz9zk/g/blink-dev/c/xHC3AtU_65A"; + + #if BUILDFLAG(ENABLE_SUPERVISED_USERS) + const char kWebFilterInterstitialRefreshName[] = +@@ -238,7 +238,7 @@ const char kU2FSecurityKeyAPIDescription[] = + "Enable the legacy U2F Security Key API (CryptoToken). The U2F Security " + "Key API has been deprecated and will be removed soon. For more " + "information, refer to the deprecation announcement at " +- "https://groups.google.com/a/chromium.org/g/blink-dev/c/xHC3AtU_65A"; ++ "https://groups.9oo91e.qjz9zk/a/ch40m1um.qjz9zk/g/blink-dev/c/xHC3AtU_65A"; + + const char kLoadCryptoTokenExtensionName[] = + "Load the CryptoToken component extension "; +@@ -1231,7 +1231,7 @@ const char kBlockInsecurePrivateNetworkRequestsName[] = + const char kBlockInsecurePrivateNetworkRequestsDescription[] = + "Prevents non-secure contexts from making subresource requests to " + "more-private IP addresses. See also: " +- "https://developer.chrome.com/blog/private-network-access-update/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-update/"; + + const char kPrivateNetworkAccessSendPreflightsName[] = + "Send Private Network Access preflights"; +@@ -1239,7 +1239,7 @@ const char kPrivateNetworkAccessSendPreflightsDescription[] = + "Enables sending Private Network Access preflights ahead of requests to " + "more-private IP addresses. Failed preflights display warnings in DevTools " + "without failing entire request. See also: " +- "https://developer.chrome.com/blog/private-network-access-preflight/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-preflight/"; + + const char kPrivateNetworkAccessRespectPreflightResultsName[] = + "Respect the result of Private Network Access preflights"; +@@ -1247,7 +1247,7 @@ const char kPrivateNetworkAccessRespectPreflightResultsDescription[] = + "Enables sending Private Network Access preflights ahead of requests to " + "more-private IP addresses. These preflight requests must succeed in order " + "for the request to proceed. See also: " +- "https://developer.chrome.com/blog/private-network-access-preflight/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-preflight/"; + + const char kPrivateNetworkAccessPreflightShortTimeoutName[] = + "Reduce waiting time for Private Network Access preflights response"; +@@ -1255,7 +1255,7 @@ const char kPrivateNetworkAccessPreflightShortTimeoutDescription[] = + "Reduce the waiting time for Private Network Access preflights to 200 " + "milliseconds. The default timeout period for requests is 5 minutes." + "See also: " +- "https://developer.chrome.com/blog/private-network-access-preflight/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-preflight/"; + + const char kDeprecateAltClickName[] = + "Enable Alt+Click deprecation notifications"; +@@ -2584,7 +2584,7 @@ const char kQuickIntensiveWakeUpThrottlingAfterLoadingDescription[] = + "throttling after 10 seconds instead of the default 5 minutes. Intensive " + "throttling will limit wake ups, from setTimeout and setInterval tasks " + "with a high nesting level and delayed scheduler.postTask tasks, to 1 per " +- "minute. See https://chromestatus.com/feature/5580139453743104 for more " ++ "minute. See https://ch40mestatus.qjz9zk/feature/5580139453743104 for more " + "info."; + + const char kSettingsAppNotificationSettingsName[] = +@@ -2610,7 +2610,7 @@ const char kReduceUserAgentName[] = "Reduce User-Agent request header"; + const char kReduceUserAgentDescription[] = + "Reduce (formerly, \"freeze\") the amount of information available in " + "the User-Agent request header. " +- "See https://www.chromium.org/updates/ua-reduction for more info."; ++ "See https://www.ch40m1um.qjz9zk/updates/ua-reduction for more info."; + + const char kRestrictGamepadAccessName[] = "Restrict gamepad access"; + const char kRestrictGamepadAccessDescription[] = +@@ -2666,7 +2666,7 @@ const char kThirdPartyStoragePartitioningName[] = + const char kThirdPartyStoragePartitioningDescription[] = + "Enables partitioning of third-party storage by top-level site. " + "Note: this is under active development and may result in unexpected " +- "behavior. Please file bugs at https://bugs.chromium.org/p/chromium/issues/" ++ "behavior. Please file bugs at https://bugs.ch40m1um.qjz9zk/p/chromium/issues/" + "entry?labels=StoragePartitioning-trial-bugs&components=Blink%3EStorage."; + + const char kScrollableTabStripFlagId[] = "scrollable-tabstrip"; +diff --git a/chrome/browser/k_anonymity_service/k_anonymity_service_urls.h b/chrome/browser/k_anonymity_service/k_anonymity_service_urls.h +--- a/chrome/browser/k_anonymity_service/k_anonymity_service_urls.h ++++ b/chrome/browser/k_anonymity_service/k_anonymity_service_urls.h +@@ -12,14 +12,14 @@ constexpr char kIssueTrustTokenPathFmt[] = + "/v1/%d/issueTrustToken"; // Put the short ID in the path. + + constexpr char kKAnonymityJoinSetServer[] = +- "https://chromekanonymity-pa.googleapis.com"; ++ "https://chromekanonymity-pa.9oo91eapis.qjz9zk"; + constexpr char kJoinSetPath[] = + "/v1/join?key="; // TODO: Set this when we know the correct path. + constexpr char kJoinSetOhttpPath[] = + "/v1/proxy/keys?key="; // TODO: Set this when we know the correct path. + + constexpr char kKAnonymityQuerySetServer[] = +- "https://chromekanonymityquery-pa.googleapis.com"; ++ "https://chromekanonymityquery-pa.9oo91eapis.qjz9zk"; + constexpr char kQuerySetPath[] = + "/v1/query?key="; // TODO: Set this when we know the correct path. + constexpr char kQuerySetOhttpPath[] = +diff --git a/chrome/browser/lacros/lacros_startup_infobar_delegate.cc b/chrome/browser/lacros/lacros_startup_infobar_delegate.cc +--- a/chrome/browser/lacros/lacros_startup_infobar_delegate.cc ++++ b/chrome/browser/lacros/lacros_startup_infobar_delegate.cc +@@ -27,9 +27,9 @@ + namespace { + + constexpr base::StringPiece kLearnMoreURLPublic( +- "https://support.google.com/chromebook?p=chromeos-dev"); ++ "https://support.9oo91e.qjz9zk/chromebook?p=chromeos-dev"); + constexpr base::StringPiece kLearnMoreURLGoogleInternal( +- "https://goto.google.com/lacros-learn-more"); ++ "https://goto.9oo91e.qjz9zk/lacros-learn-more"); + + // Returns the single main profile, or nullptr if none is found. + Profile* GetMainProfile() { +diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/chrome/browser/local_discovery/service_discovery_client_mac.mm +--- a/chrome/browser/local_discovery/service_discovery_client_mac.mm ++++ b/chrome/browser/local_discovery/service_discovery_client_mac.mm +@@ -401,7 +401,7 @@ void ParseNetService(NSNetService* service, ServiceDescription& description) { + // weak delegate during deallocation, so a subsequently-deallocated delegate + // attempts to clear the pointer to itself in an NSNetServiceBrowser that's + // already gone. +- // https://crbug.com/657495, https://openradar.appspot.com/28943305 ++ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 + [_browser setDelegate:nil]; + + // Ensure the delegate clears all references to itself, which it had added as +@@ -515,7 +515,7 @@ void ParseNetService(NSNetService* service, ServiceDescription& description) { + // delegate during deallocation, so a subsequently-deallocated delegate + // attempts to clear the pointer to itself in an NSNetService that's already + // gone. +- // https://crbug.com/657495, https://openradar.appspot.com/28943305 ++ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 + [_service setDelegate:nil]; + _service.reset(); + } +diff --git a/chrome/browser/long_screenshots/long_screenshots_tab_service.cc b/chrome/browser/long_screenshots/long_screenshots_tab_service.cc +--- a/chrome/browser/long_screenshots/long_screenshots_tab_service.cc ++++ b/chrome/browser/long_screenshots/long_screenshots_tab_service.cc +@@ -41,7 +41,7 @@ const char kGoogleAmpCachePathPattern[] = "/[a-z]/(s/)?(.*)"; + // Regex pattern for the path of Google AMP Viewer URLs. + const char kGoogleAmpViewerPathPattern[] = "/amp/(s/)?(.*)"; + +-const char kGoogleNewsHost[] = "news.google.com"; ++const char kGoogleNewsHost[] = "news.9oo91e.qjz9zk"; + const char kGoogleNewsPathPattern[] = "/articles/(.*)"; + + } // namespace +diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc b/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc +--- a/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc ++++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc +@@ -28,10 +28,10 @@ void EnableCommandLineSupportForTesting() { + constexpr char kGetMethod[] = "GET"; + constexpr char kContentType[] = "application/json; charset=UTF-8"; + constexpr char kDiscoveryOAuth2Scope[] = +- "https://www.googleapis.com/auth/cast-edu-messaging"; ++ "https://www.9oo91eapis.qjz9zk/auth/cast-edu-messaging"; + + constexpr char kDefaultDiscoveryEndpoint[] = +- "https://castedumessaging-pa.googleapis.com"; ++ "https://castedumessaging-pa.9oo91eapis.qjz9zk"; + + constexpr char kDiscoveryServicePath[] = "/v1/receivers"; + constexpr char kDiscoveryOAuthConsumerName[] = "access_code_cast_discovery"; +diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc +--- a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc ++++ b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc +@@ -36,9 +36,9 @@ constexpr char kLoggerComponent[] = "CastMediaRouteProvider"; + + // List of origins allowed to use a PresentationRequest to initiate mirroring. + constexpr std::array kPresentationApiAllowlist = { +- "https://docs.google.com", +- "https://meet.google.com", +- "https://music.youtube.com", ++ "https://docs.9oo91e.qjz9zk", ++ "https://meet.9oo91e.qjz9zk", ++ "https://music.y0u1ub3.qjz9zk", + }; + + // Returns a list of origins that are valid for |source_id|. An empty list +diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +--- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc ++++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +@@ -655,15 +655,15 @@ std::vector DialMediaRouteProvider::GetOrigins( + base::flat_map>> + origin_allowlist( + {{"YouTube", +- {CreateOrigin("https://music.youtube.com/"), +- CreateOrigin("https://music-green-qa.youtube.com/"), +- CreateOrigin("https://music-release-qa.youtube.com/"), +- CreateOrigin("https://tv.youtube.com"), +- CreateOrigin("https://tv-green-qa.youtube.com"), +- CreateOrigin("https://tv-release-qa.youtube.com"), +- CreateOrigin("https://web-green-qa.youtube.com"), +- CreateOrigin("https://web-release-qa.youtube.com"), +- CreateOrigin("https://www.youtube.com")}}, ++ {CreateOrigin("https://music.y0u1ub3.qjz9zk/"), ++ CreateOrigin("https://music-green-qa.y0u1ub3.qjz9zk/"), ++ CreateOrigin("https://music-release-qa.y0u1ub3.qjz9zk/"), ++ CreateOrigin("https://tv.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://tv-green-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://tv-release-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://web-green-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://web-release-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://www.y0u1ub3.qjz9zk")}}, + {"Netflix", {CreateOrigin("https://www.netflix.com")}}, + {"Pandora", {CreateOrigin("https://www.pandora.com")}}, + {"Radio", {CreateOrigin("https://www.pandora.com")}}, +diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +--- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc ++++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +@@ -125,7 +125,7 @@ void OnURLLoadUploadProgress(uint64_t current, uint64_t total) { + } // namespace + + const char WebRtcEventLogUploaderImpl::kUploadURL[] = +- "https://clients2.google.com/cr/report"; ++ "https://clients2.9oo91e.qjz9zk/cr/report"; + + WebRtcEventLogUploaderImpl::Factory::Factory( + scoped_refptr task_runner) +diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc +--- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc ++++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc +@@ -468,7 +468,7 @@ void WebRtcLogUploader::UploadCompressedLog( + "Not implemented, it would be good to do so." + })"); + +- constexpr char kUploadURL[] = "https://clients2.google.com/cr/report"; ++ constexpr char kUploadURL[] = "https://clients2.9oo91e.qjz9zk/cr/report"; + auto resource_request = std::make_unique(); + resource_request->url = !upload_url_for_testing_.is_empty() + ? upload_url_for_testing_ +diff --git a/chrome/browser/nacl_host/nacl_infobar_delegate.cc b/chrome/browser/nacl_host/nacl_infobar_delegate.cc +--- a/chrome/browser/nacl_host/nacl_infobar_delegate.cc ++++ b/chrome/browser/nacl_host/nacl_infobar_delegate.cc +@@ -33,7 +33,7 @@ std::u16string NaClInfoBarDelegate::GetLinkText() const { + } + + GURL NaClInfoBarDelegate::GetLinkURL() const { +- return GURL("https://support.google.com/chrome/?p=ib_nacl"); ++ return GURL("https://support.9oo91e.qjz9zk/chrome/?p=ib_nacl"); + } + + std::u16string NaClInfoBarDelegate::GetMessageText() const { +diff --git a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +--- a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc ++++ b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +@@ -31,7 +31,7 @@ namespace { + // -------------------- Nearby Share Service v1 Endpoints -------------------- + + const char kDefaultNearbyShareV1HTTPHost[] = +- "https://nearbysharing-pa.googleapis.com"; ++ "https://nearbysharing-pa.9oo91eapis.qjz9zk"; + + const char kNearbyShareV1Path[] = "v1/"; + +@@ -43,7 +43,7 @@ const char kPageToken[] = "page_token"; + const char kSecretIds[] = "secret_ids"; + + const char kNearbyShareOAuth2Scope[] = +- "https://www.googleapis.com/auth/nearbysharing-pa"; ++ "https://www.9oo91eapis.qjz9zk/auth/nearbysharing-pa"; + + // Creates the full Nearby Share v1 URL for endpoint to the API with + // |request_path|. +diff --git a/chrome/browser/nearby_sharing/instantmessaging/constants.h b/chrome/browser/nearby_sharing/instantmessaging/constants.h +--- a/chrome/browser/nearby_sharing/instantmessaging/constants.h ++++ b/chrome/browser/nearby_sharing/instantmessaging/constants.h +@@ -6,10 +6,10 @@ + #define CHROME_BROWSER_NEARBY_SHARING_INSTANTMESSAGING_CONSTANTS_H_ + + const char kInstantMessagingReceiveMessageAPI[] = +- "https://instantmessaging-pa.googleapis.com/v1/messages:receiveExpress"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/messages:receiveExpress"; + + const char kInstantMessagingSendMessageAPI[] = +- "https://instantmessaging-pa.googleapis.com/v1/message:sendExpress"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/message:sendExpress"; + + // Template for optional OAuth2 authorization HTTP header. + const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; +diff --git a/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc b/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc +--- a/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc ++++ b/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc +@@ -19,7 +19,7 @@ + namespace { + + const char kNetworkTraversalIceConfigApiUrl[] = +- "https://networktraversal.googleapis.com/v1alpha/iceconfig?key="; ++ "https://networktraversal.9oo91eapis.qjz9zk/v1alpha/iceconfig?key="; + + // Response with 2 ice server configs takes ~1KB. A loose upper bound of 16KB is + // chosen to avoid breaking the flow in case the response has longer URLs in ice +@@ -81,11 +81,11 @@ bool IsLoaderSuccessful(const network::SimpleURLLoader* loader) { + + std::vector GetDefaultIceServers() { + sharing::mojom::IceServerPtr ice_server(sharing::mojom::IceServer::New()); +- ice_server->urls.emplace_back("stun:stun.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun1.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun2.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun3.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun4.l.google.com:19302"); ++ ice_server->urls.emplace_back("stun:stun.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun1.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun2.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun3.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun4.l.9oo91e.qjz9zk:19302"); + + std::vector default_servers; + default_servers.push_back(std::move(ice_server)); +diff --git a/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc b/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc +--- a/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc ++++ b/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc +@@ -33,7 +33,7 @@ namespace { + namespace tachyon_proto = nearbyshare::tachyon_proto; + + const char kIceConfigApiUrl[] = +- "https://instantmessaging-pa.googleapis.com/v1/peertopeer:geticeserver"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/peertopeer:geticeserver"; + + const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; + +@@ -167,11 +167,11 @@ bool IsLoaderSuccessful(const network::SimpleURLLoader* loader, + + std::vector GetDefaultIceServers() { + sharing::mojom::IceServerPtr ice_server(sharing::mojom::IceServer::New()); +- ice_server->urls.emplace_back("stun:stun.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun1.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun2.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun3.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun4.l.google.com:19302"); ++ ice_server->urls.emplace_back("stun:stun.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun1.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun2.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun3.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun4.l.9oo91e.qjz9zk:19302"); + + std::vector default_servers; + default_servers.push_back(std::move(ice_server)); +diff --git a/chrome/browser/new_tab_page/modules/drive/drive_service.cc b/chrome/browser/new_tab_page/modules/drive/drive_service.cc +--- a/chrome/browser/new_tab_page/modules/drive/drive_service.cc ++++ b/chrome/browser/new_tab_page/modules/drive/drive_service.cc +@@ -55,7 +55,7 @@ constexpr char kRequestBody[] = R"({ + })"; + // Maximum accepted size of an ItemSuggest response. 1MB. + constexpr int kMaxResponseSize = 1024 * 1024; +-const char server_url[] = "https://appsitemsuggest-pa.googleapis.com/v1/items"; ++const char server_url[] = "https://appsitemsuggest-pa.9oo91eapis.qjz9zk/v1/items"; + constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation = + net::DefineNetworkTrafficAnnotation("drive_service", R"( + semantics { +@@ -97,7 +97,7 @@ constexpr char kFakeData[] = R"({ + "item": [ + { + "itemId": "foo", +- "url": "https://docs.google.com", ++ "url": "https://docs.9oo91e.qjz9zk", + "driveItem": { + "title": "foo doc", + "mimeType": "application/vnd.google-apps.document" +@@ -108,7 +108,7 @@ constexpr char kFakeData[] = R"({ + }, + { + "itemId": "bar", +- "url": "https://sheets.google.com", ++ "url": "https://sheets.9oo91e.qjz9zk", + "driveItem": { + "title": "bar sheet", + "mimeType": "application/vnd.google-apps.spreadsheet" +@@ -119,7 +119,7 @@ constexpr char kFakeData[] = R"({ + }, + { + "itemId": "baz", +- "url": "https://slides.google.com", ++ "url": "https://slides.9oo91e.qjz9zk", + "driveItem": { + "title": "baz slides", + "mimeType": "application/vnd.google-apps.presentation" +diff --git a/chrome/browser/new_tab_page/modules/photos/photos_service.cc b/chrome/browser/new_tab_page/modules/photos/photos_service.cc +--- a/chrome/browser/new_tab_page/modules/photos/photos_service.cc ++++ b/chrome/browser/new_tab_page/modules/photos/photos_service.cc +@@ -36,7 +36,7 @@ namespace { + constexpr int kMaxResponseSize = 1024 * 1024; + const int kMaxPersonalizedMessageLength = 20; + const char server_url[] = +- "https://photosfirstparty-pa.googleapis.com/v1/ntp/memories:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/ntp/memories:read"; + constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation = + net::DefineNetworkTrafficAnnotation("photos_service", R"( + semantics { +@@ -82,7 +82,7 @@ constexpr char kMemoryTemplate[] = R"( + "subheader": "" + }, + "coverMediaKey": "coverKey%d", +- "coverDatUrl": "https://lh3.googleusercontent.com/proxy/CyeQrfWvSkJ-4wjGmm1zVIP4XZKL4oAjywWcPh8lhrwtizOY4kGsDtVa3nk984qJB5q2-r7aInfG25UFjfwyu7QEraqepTlbsDdKX1yeenhh7EGeAR2Hp1QcbO24C7WyU8bLPx8o_2HA-opm6cqZ8f4ehEXCxMEbR79A44jcWpacTLfYERPGeVrljo2vAl2LyFMHrA" ++ "coverDatUrl": "https://lh3.9oo91eusercontent.qjz9zk/proxy/CyeQrfWvSkJ-4wjGmm1zVIP4XZKL4oAjywWcPh8lhrwtizOY4kGsDtVa3nk984qJB5q2-r7aInfG25UFjfwyu7QEraqepTlbsDdKX1yeenhh7EGeAR2Hp1QcbO24C7WyU8bLPx8o_2HA-opm6cqZ8f4ehEXCxMEbR79A44jcWpacTLfYERPGeVrljo2vAl2LyFMHrA" + })"; + } // namespace + +@@ -454,10 +454,10 @@ void PhotosService::OnJsonParsed( + ntp_features::kNtpPhotosModule, + ntp_features::kNtpPhotosModuleDataParam); + if (fake_data_choice != "") { +- mojo_memory->item_url = GURL("https://photos.google.com"); ++ mojo_memory->item_url = GURL("https://photos.9oo91e.qjz9zk"); + } else { + mojo_memory->item_url = +- GURL("https://photos.google.com/memory/featured/" + *memory_id + ++ GURL("https://photos.9oo91e.qjz9zk/memory/featured/" + *memory_id + + "/photo/" + *cover_id + "?referrer=CHROME_NTP"); + } + +diff --git a/chrome/browser/obsolete_system/obsolete_system_linux.cc b/chrome/browser/obsolete_system/obsolete_system_linux.cc +--- a/chrome/browser/obsolete_system/obsolete_system_linux.cc ++++ b/chrome/browser/obsolete_system/obsolete_system_linux.cc +@@ -10,7 +10,7 @@ + #include "ui/base/l10n/l10n_util.h" + + const char kLinuxObsoleteUrl[] = +- "https://support.google.com/chrome/?p=unsupported_linux"; ++ "https://support.9oo91e.qjz9zk/chrome/?p=unsupported_linux"; + + // This list contains the 2 most recently obsoleted distros according to + // `kLinuxObsoleteUrl`. +diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +--- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc ++++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +@@ -110,7 +110,7 @@ const char kHistogramNoServiceWorkerFirstContentfulPaintDocs[] = + namespace { + + bool IsDocsSite(const GURL& url) { +- return url.host_piece() == "docs.google.com"; ++ return url.host_piece() == "docs.9oo91e.qjz9zk"; + } + + bool IsForwardBackLoad(ui::PageTransition transition) { +diff --git a/chrome/browser/permissions/quiet_permission_prompt_model_android.cc b/chrome/browser/permissions/quiet_permission_prompt_model_android.cc +--- a/chrome/browser/permissions/quiet_permission_prompt_model_android.cc ++++ b/chrome/browser/permissions/quiet_permission_prompt_model_android.cc +@@ -90,5 +90,5 @@ QuietPermissionPromptModelAndroid GetQuietNotificationPermissionPromptModel( + } + + GURL GetNotificationBlockedLearnMoreUrl() { +- return GURL(u"https://support.google.com/chrome/answer/3220216"); ++ return GURL(u"https://support.9oo91e.qjz9zk/chrome/answer/3220216"); + } +diff --git a/chrome/browser/platform_keys/extension_key_permissions_service.cc b/chrome/browser/platform_keys/extension_key_permissions_service.cc +--- a/chrome/browser/platform_keys/extension_key_permissions_service.cc ++++ b/chrome/browser/platform_keys/extension_key_permissions_service.cc +@@ -130,7 +130,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( + // implemented for secondary profiles in Lacros. + CHECK(Profile::FromBrowserContext(browser_context)->IsMainProfile()) + << "Attempted to use an incorrect profile. Please file a bug at " +- "https://bugs.chromium.org/ if this happens."; ++ "https://bugs.ch40m1um.qjz9zk/ if this happens."; + return chromeos::LacrosService::Get() + ->GetRemote() + .get(); +diff --git a/chrome/browser/platform_keys/extension_platform_keys_service.cc b/chrome/browser/platform_keys/extension_platform_keys_service.cc +--- a/chrome/browser/platform_keys/extension_platform_keys_service.cc ++++ b/chrome/browser/platform_keys/extension_platform_keys_service.cc +@@ -161,7 +161,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( + // implemented for secondary profiles in Lacros. + CHECK(Profile::FromBrowserContext(browser_context)->IsMainProfile()) + << "Attempted to use an incorrect profile. Please file a bug at " +- "https://bugs.chromium.org/ if this happens."; ++ "https://bugs.ch40m1um.qjz9zk/ if this happens."; + + chromeos::LacrosService* service = chromeos::LacrosService::Get(); + if (!service || !service->IsAvailable()) { +diff --git a/chrome/browser/policy/safe_search_policy_test.h b/chrome/browser/policy/safe_search_policy_test.h +--- a/chrome/browser/policy/safe_search_policy_test.h ++++ b/chrome/browser/policy/safe_search_policy_test.h +@@ -31,7 +31,7 @@ class SafeSearchPolicyTest : public PolicyTest { + + static void CheckSafeSearch(Browser* browser, + bool expect_safe_search, +- const std::string& url = "http://google.com/"); ++ const std::string& url = "http://9oo91e.qjz9zk/"); + }; + + } // namespace policy +diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc +--- a/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc ++++ b/chrome/browser/preloading/prefetch/prefetch_proxy/chrome_prefetch_service_delegate.cc +@@ -37,7 +37,7 @@ std::string ChromePrefetchServiceDelegate::GetAcceptLanguageHeader() { + } + + GURL ChromePrefetchServiceDelegate::GetDefaultPrefetchProxyHost() { +- return GURL("https://tunnel.googlezip.net/"); ++ return GURL("https://tunnel.9oo91e21p.qjz9zk/"); + } + + std::string ChromePrefetchServiceDelegate::GetAPIKey() { +@@ -45,11 +45,11 @@ std::string ChromePrefetchServiceDelegate::GetAPIKey() { + } + + GURL ChromePrefetchServiceDelegate::GetDefaultDNSCanaryCheckURL() { +- return GURL("http://dns-tunnel-check.googlezip.net/connect"); ++ return GURL("http://dns-tunnel-check.9oo91e21p.qjz9zk/connect"); + } + + GURL ChromePrefetchServiceDelegate::GetDefaultTLSCanaryCheckURL() { +- return GURL("http://tls-tunnel-check.googlezip.net/connect"); ++ return GURL("http://tls-tunnel-check.9oo91e21p.qjz9zk/connect"); + } + + void ChromePrefetchServiceDelegate::ReportOriginRetryAfter( +diff --git a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc +--- a/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc ++++ b/chrome/browser/preloading/prefetch/prefetch_proxy/prefetch_proxy_params.cc +@@ -47,7 +47,7 @@ GURL PrefetchProxyProxyHost() { + if (url.is_valid() && url.SchemeIs(url::kHttpsScheme)) { + return url; + } +- return GURL("https://tunnel.googlezip.net/"); ++ return GURL("https://tunnel.9oo91e21p.qjz9zk/"); + } + + std::string PrefetchProxyProxyHeaderKey() { +@@ -166,7 +166,7 @@ GURL PrefetchProxyTLSCanaryCheckURL() { + if (url.is_valid()) { + return url; + } +- return GURL("http://tls-tunnel-check.googlezip.net/connect"); ++ return GURL("http://tls-tunnel-check.9oo91e21p.qjz9zk/connect"); + } + + GURL PrefetchProxyDNSCanaryCheckURL() { +@@ -175,7 +175,7 @@ GURL PrefetchProxyDNSCanaryCheckURL() { + if (url.is_valid()) { + return url; + } +- return GURL("http://dns-tunnel-check.googlezip.net/connect"); ++ return GURL("http://dns-tunnel-check.9oo91e21p.qjz9zk/connect"); + } + + base::TimeDelta PrefetchProxyCanaryCheckCacheLifetime() { +diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc +--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc ++++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc +@@ -642,18 +642,18 @@ base::flat_map + PrivacySandboxService::GetSampleFirstPartySets() const { + if (privacy_sandbox::kPrivacySandboxFirstPartySetsUISampleSets.Get() && + IsFirstPartySetsDataAccessEnabled()) { +- return {{net::SchemefulSite(GURL("https://youtube.com")), +- net::SchemefulSite(GURL("https://google.com"))}, +- {net::SchemefulSite(GURL("https://google.com")), +- net::SchemefulSite(GURL("https://google.com"))}, +- {net::SchemefulSite(GURL("https://google.com.au")), +- net::SchemefulSite(GURL("https://google.com"))}, ++ return {{net::SchemefulSite(GURL("https://y0u1ub3.qjz9zk")), ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://9oo91e.qjz9zk")), ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://9oo91e.qjz9zk.au")), ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, + {net::SchemefulSite(GURL("https://google.de")), +- net::SchemefulSite(GURL("https://google.com"))}, +- {net::SchemefulSite(GURL("https://chromium.org")), +- net::SchemefulSite(GURL("https://chromium.org"))}, +- {net::SchemefulSite(GURL("https://googlesource.com")), +- net::SchemefulSite(GURL("https://chromium.org"))}}; ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://ch40m1um.qjz9zk")), ++ net::SchemefulSite(GURL("https://ch40m1um.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://9oo91esource.qjz9zk")), ++ net::SchemefulSite(GURL("https://ch40m1um.qjz9zk"))}}; + } + + return {}; +@@ -712,7 +712,7 @@ bool PrivacySandboxService::IsPartOfManagedFirstPartySet( + if (privacy_sandbox::kPrivacySandboxFirstPartySetsUISampleSets.Get()) { + return IsFirstPartySetsDataAccessManaged() || + GetSampleFirstPartySets()[site] == +- net::SchemefulSite(GURL("https://chromium.org")); ++ net::SchemefulSite(GURL("https://ch40m1um.qjz9zk")); + } + + return first_party_sets_policy_service_->IsSiteInManagedSet(site); +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 +@@ -20,7 +20,7 @@ + + namespace { + const char kHighResAvatarDownloadUrlPrefix[] = +- "https://www.gstatic.com/chrome/profile_avatars/"; ++ "https://www.95tat1c.qjz9zk/chrome/profile_avatars/"; + } + + ProfileAvatarDownloader::ProfileAvatarDownloader(size_t icon_index, +diff --git a/chrome/browser/push_messaging/push_messaging_constants.cc b/chrome/browser/push_messaging/push_messaging_constants.cc +--- a/chrome/browser/push_messaging/push_messaging_constants.cc ++++ b/chrome/browser/push_messaging/push_messaging_constants.cc +@@ -5,7 +5,7 @@ + #include "chrome/browser/push_messaging/push_messaging_constants.h" + + const char kPushMessagingGcmEndpoint[] = +- "https://fcm.googleapis.com/fcm/send/"; ++ "https://fcm.9oo91eapis.qjz9zk/fcm/send/"; + + const char kPushMessagingForcedNotificationTag[] = + "user_visible_auto_notification"; +diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.cc b/chrome/browser/push_messaging/push_messaging_service_impl.cc +--- a/chrome/browser/push_messaging/push_messaging_service_impl.cc ++++ b/chrome/browser/push_messaging/push_messaging_service_impl.cc +@@ -99,7 +99,7 @@ const char kSilentPushUnsupportedMessage[] = + "Chrome currently only supports the Push API for subscriptions that will " + "result in user-visible messages. You can indicate this by calling " + "pushManager.subscribe({userVisibleOnly: true}) instead. See " +- "https://goo.gl/yqv4Q4 for more details."; ++ "https://goo.gl.qjz9zk/yqv4Q4 for more details."; + + // Message displayed in the console (as an error) when a GCM Sender ID is used + // to create a subscription, which is unsupported. The subscription request will +diff --git a/chrome/browser/resources/about_sys/about_sys.js b/chrome/browser/resources/about_sys/about_sys.js +--- a/chrome/browser/resources/about_sys/about_sys.js ++++ b/chrome/browser/resources/about_sys/about_sys.js +@@ -18,7 +18,7 @@ const MAX_FILE_SIZE = 10485760; + // + // Link to markdown doc with documentation for Chrome OS. + const CROS_MD_DOC_URL = +- 'https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/debugd/docs/log_entries.md'; ++ 'https://chromium.9oo91esource.qjz9zk/chromiumos/platform2/+/HEAD/debugd/docs/log_entries.md'; + // + + function getValueDivForButton(button) { +diff --git a/chrome/browser/resources/browsing_topics/browsing_topics_internals.html b/chrome/browser/resources/browsing_topics/browsing_topics_internals.html +--- a/chrome/browser/resources/browsing_topics/browsing_topics_internals.html ++++ b/chrome/browser/resources/browsing_topics/browsing_topics_internals.html +@@ -47,8 +47,8 @@ found in the LICENSE file. +
+ + +
+diff --git a/chrome/browser/resources/chromeos/about_os_credits.html b/chrome/browser/resources/chromeos/about_os_credits.html +--- a/chrome/browser/resources/chromeos/about_os_credits.html ++++ b/chrome/browser/resources/chromeos/about_os_credits.html +@@ -13,12 +13,12 @@ body { + + +

Placeholder

+-

See Licensing for ChromiumOS Developers and +- Licensing for ChromiumOS Package Owners

++

See Licensing for ChromiumOS Developers and ++ Licensing for ChromiumOS Package Owners

+

+ If you need to change styles, fonts, layout, etc of the + chrome://os-credits page, +-edit chromite/licensing/about_credits.tmpl. ++edit chromite/licensing/about_credits.tmpl. + The template is used to generate a device-dependent about_os_credits.html + when a CrOS image is built.

+ +diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js +--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js ++++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js +@@ -25,7 +25,7 @@ export class ListCommandsMacro extends Macro { + // Note that this will open a new tab, ending the current Dictation session + // by changing the input focus. + globalThis.open( +- 'https://support.google.com/chromebook?p=text_dictation_m100', ++ 'https://support.9oo91e.qjz9zk/chromebook?p=text_dictation_m100', + '_blank'); + return this.createRunMacroResult_(/*isSuccess=*/ true); + } +diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js +--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js ++++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/magnifier/magnifier.js +@@ -140,7 +140,7 @@ export class Magnifier { + this.isInitializing_ = false; + }, Magnifier.IGNORE_FOCUS_UPDATES_INITIALIZATION_MS); + +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-magnifier-debug-draw-rect', enabled => { + if (enabled) { + this.magnifierDebugDrawRect_ = true; +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +@@ -1639,7 +1639,7 @@ export class CommandHandler extends CommandHandlerInterface { + + /** @private */ + reportIssue_() { +- let url = 'https://code.google.com/p/chromium/issues/entry?' + ++ let url = 'https://code.9oo91e.qjz9zk/p/chromium/issues/entry?' + + 'labels=Type-Bug,Pri-2,OS-Chrome&' + + 'components=OS>Accessibility>ChromeVox&' + + 'description='; +@@ -1665,7 +1665,7 @@ export class CommandHandler extends CommandHandlerInterface { + /** @private */ + showTalkBackKeyboardShortcuts_() { + chrome.tabs.create({ +- url: 'https://support.google.com/accessibility/android/answer/6110948', ++ url: 'https://support.9oo91e.qjz9zk/accessibility/android/answer/6110948', + }); + } + +@@ -1840,13 +1840,13 @@ export class CommandHandler extends CommandHandlerInterface { + init() { + ChromeVoxKbHandler.commandHandler = command => this.onCommand(command); + +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-experimental-accessibility-language-detection', enabled => { + if (enabled) { + this.languageLoggingEnabled_ = true; + } + }); +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-experimental-accessibility-language-detection-dynamic', + enabled => { + if (enabled) { +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css +--- a/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox/options/options.css +@@ -2,7 +2,7 @@ + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +-@import url(https://fonts.googleapis.com/css?family=Roboto); ++@import url(https://f0ntz.9oo91e8p1.qjz9zk/css?family=Roboto); + + body { + margin: 0 0 20px 0; +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py +--- a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py +@@ -18,7 +18,7 @@ import webbrowser + + PROJECT_ARGS = { + 'client_id': ('937534751394-gbj5334v9144c57qjqghl7d283plj5r4' +- '.apps.googleusercontent.com'), ++ '.apps.9oo91eusercontent.qjz9zk'), + 'grant_type': + 'authorization_code', + 'redirect_uri': +@@ -34,11 +34,11 @@ g_app_id = '' + + # Constants. + PORT = 8000 +-OAUTH_DOMAIN = 'accounts.google.com' ++OAUTH_DOMAIN = 'accounts.9oo91e.qjz9zk' + OAUTH_AUTH_COMMAND = '/o/oauth2/auth' + OAUTH_TOKEN_COMMAND = '/o/oauth2/token' +-WEBSTORE_API_SCOPE = 'https://www.googleapis.com/auth/chromewebstore' +-API_ENDPOINT_DOMAIN = 'www.googleapis.com' ++WEBSTORE_API_SCOPE = 'https://www.9oo91eapis.qjz9zk/auth/chromewebstore' ++API_ENDPOINT_DOMAIN = 'www.9oo91eapis.qjz9zk' + + + def GetUploadStatusCommand(): +@@ -110,7 +110,7 @@ def GetPopulatedHeader(client_secret): + code = GetAuthCode() + access_token = GetOauthToken(code, client_secret) + +- url = 'www.googleapis.com' ++ url = 'www.9oo91eapis.qjz9zk' + + return { + 'Authorization': 'Bearer %(access_token)s' % access_token, +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 +--- a/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 +@@ -31,14 +31,14 @@ + "tts", + "virtualKeyboardPrivate", + "chrome://resources/", +- "https://docs.google.com/*", +- "https://docs.sandbox.google.com/*" ++ "https://docs.9oo91e.qjz9zk/*", ++ "https://docs.sandbox.9oo91e.qjz9zk/*" + ], + "content_scripts": [ + { + "matches": [ +- "https://docs.google.com/*", +- "https://docs.sandbox.google.com/*" ++ "https://docs.9oo91e.qjz9zk/*", ++ "https://docs.sandbox.9oo91e.qjz9zk/*" + ], + "all_frames": true, + "js": [ +diff --git a/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js b/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js +--- a/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js ++++ b/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js +@@ -710,15 +710,15 @@ Polymer({ + { + msgId: 'next_command_reference', + link: +- 'https://support.google.com/chromebook/answer/7031755#zippy=%2Cmove-through-a-page-with-keyboard-shortcuts', ++ 'https://support.9oo91e.qjz9zk/chromebook/answer/7031755#zippy=%2Cmove-through-a-page-with-keyboard-shortcuts', + }, + { + msgId: 'chrome_keyboard_shortcuts', +- link: 'https://support.google.com/chromebook/answer/183101?hl=en', ++ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/183101?hl=en', + }, + { + msgId: 'touchscreen_accessibility', +- link: 'https://support.google.com/chromebook/answer/6103702?hl=en', ++ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/6103702?hl=en', + }, + ]; + for (const resource of resources) { +diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.css b/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.css +--- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.css ++++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.css +@@ -2,7 +2,7 @@ + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +-@import url(https://fonts.googleapis.com/css?family=Roboto); ++@import url(https://f0ntz.9oo91e8p1.qjz9zk/css?family=Roboto); + + body { + margin: 0 0 20px 0; +diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.html b/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.html +--- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.html ++++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/options.html +@@ -60,7 +60,7 @@ found in the LICENSE file. + + + ++ href="https://support.9oo91e.qjz9zk/chromebook?p=select_to_speak"> + + +diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js +--- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js ++++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js +@@ -27,7 +27,7 @@ const SelectToSpeakState = chrome.accessibilityPrivate.SelectToSpeakState; + // Matches one of the known GSuite apps which need the clipboard to find and + // read selected text. Includes sandbox and non-sandbox versions. + const GSUITE_APP_REGEXP = +- /^https:\/\/docs\.(?:sandbox\.)?google\.com\/(?:(?:presentation)|(?:document)|(?:spreadsheets)|(?:drawings)){1}\//; ++ /^https:\/\/docs\.(?:sandbox\.)?9oo91e\.qjz9zk\/(?:(?:presentation)|(?:document)|(?:spreadsheets)|(?:drawings)){1}\//; + + // Settings key for system speech rate setting. + const SPEECH_RATE_KEY = 'settings.tts.speech_rate'; +@@ -179,7 +179,7 @@ export class SelectToSpeak { + this.enableLanguageDetectionIntegration_ = false; + + // TODO(chrishall): do we want to (also?) expose this in preferences? +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-experimental-accessibility-language-detection', result => { + this.enableLanguageDetectionIntegration_ = result; + }); +@@ -692,8 +692,8 @@ export class SelectToSpeak { + chrome.tabs.query( + { + url: [ +- 'https://docs.google.com/document*', +- 'https://docs.sandbox.google.com/*', ++ 'https://docs.9oo91e.qjz9zk/document*', ++ 'https://docs.sandbox.9oo91e.qjz9zk/*', + ], + }, + tabs => { +diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 +--- a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 +@@ -20,8 +20,8 @@ + "storage", + "tabs", + "tts", +- "https://docs.google.com/*", +- "https://docs.sandbox.google.com/*", ++ "https://docs.9oo91e.qjz9zk/*", ++ "https://docs.sandbox.9oo91e.qjz9zk/*", + "clipboard", + "clipboardRead", + "clipboardWrite" +@@ -33,8 +33,8 @@ + "options_page": "select_to_speak/options.html", + "content_scripts": [ + { +- "matches": [ "https://docs.google.com/document*", +- "https://docs.sandbox.google.com/document*" ], ++ "matches": [ "https://docs.9oo91e.qjz9zk/document*", ++ "https://docs.sandbox.9oo91e.qjz9zk/document*" ], + "all_frames": true, + "js": [ + "common/gdocs_script.js" +diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js +--- a/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js ++++ b/chrome/browser/resources/chromeos/accessibility/switch_access/switch_access.js +@@ -63,7 +63,7 @@ export class SwitchAccess { + */ + this.enableImprovedTextInput_ = false; + +- chrome.commandLinePrivate.hasSwitch( ++ ch40me.qjz9zkmandLinePrivate.hasSwitch( + 'enable-experimental-accessibility-switch-access-text', result => { + this.enableImprovedTextInput_ = result; + }); +diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +--- a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +@@ -28,8 +28,8 @@ + "default_locale": "en", + "content_scripts": [ + { +- "matches": [ "https://docs.google.com/document*", +- "https://docs.sandbox.google.com/document*" ], ++ "matches": [ "https://docs.9oo91e.qjz9zk/document*", ++ "https://docs.sandbox.9oo91e.qjz9zk/document*" ], + "all_frames": true, + "js": [ + "common/gdocs_script.js" +diff --git a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +--- a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js ++++ b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +@@ -16,15 +16,15 @@ import {AddSupervisionAPIServer} from './add_supervision_api_server.js'; + * @const {!Array} + */ + const ALLOWED_HOSTS = [ +- 'google.com', +- 'gstatic.com', +- 'googleapis.com', +- 'google-analytics.com', ++ '9oo91e.qjz9zk', ++ '95tat1c.qjz9zk', ++ '9oo91eapis.qjz9zk', ++ '9oo91e-analytics.qjz9zk', + // FIFE avatar images (lh3-lh6). See http://go/fife-domains +- 'lh3.googleusercontent.com', +- 'lh4.googleusercontent.com', +- 'lh5.googleusercontent.com', +- 'lh6.googleusercontent.com', ++ 'lh3.9oo91eusercontent.qjz9zk', ++ 'lh4.9oo91eusercontent.qjz9zk', ++ 'lh5.9oo91eusercontent.qjz9zk', ++ 'lh6.9oo91eusercontent.qjz9zk', + ]; + + /** +diff --git a/chrome/browser/resources/chromeos/arc_support/background.js b/chrome/browser/resources/chromeos/arc_support/background.js +--- a/chrome/browser/resources/chromeos/arc_support/background.js ++++ b/chrome/browser/resources/chromeos/arc_support/background.js +@@ -333,7 +333,7 @@ class TermsOfServicePage { + this.termsView_.addContentScripts([ + { + name: 'preProcess', +- matches: ['https://play.google.com/*'], ++ matches: ['https://play.9oo91e.qjz9zk/*'], + js: {code: scriptInitTermsView}, + run_at: 'document_start', + }, +@@ -447,7 +447,7 @@ class TermsOfServicePage { + return; + } + +- var defaultLocation = 'https://play.google.com/about/play-terms/'; ++ var defaultLocation = 'https://play.9oo91e.qjz9zk/about/play-terms/'; + if (this.termsView_.src) { + // This is reloading the page, typically clicked RETRY on error page. + this.fastLocation_ = undefined; +@@ -460,7 +460,7 @@ class TermsOfServicePage { + // Try fast load first if we know location. + this.fastLocation_ = this.getFastLocation_(); + if (this.fastLocation_) { +- this.termsView_.src = 'https://play.google.com/intl/' + ++ this.termsView_.src = 'https://play.9oo91e.qjz9zk/intl/' + + this.fastLocation_ + '/about/play-terms/'; + } else { + this.termsView_.src = defaultLocation; +@@ -574,7 +574,7 @@ class TermsOfServicePage { + // In case we failed with fast location let retry default scheme. + if (this.fastLocation_) { + this.fastLocation_ = undefined; +- this.termsView_.src = 'https://play.google.com/about/play-terms/'; ++ this.termsView_.src = 'https://play.9oo91e.qjz9zk/about/play-terms/'; + return; + } + this.onTermsViewLoadAborted_( +@@ -948,7 +948,7 @@ function showURLOverlay(url) { + */ + function showPrivacyPolicyOverlay() { + var defaultLink = +- 'https://www.google.com/intl/' + locale + '/policies/privacy/'; ++ 'https://www.9oo91e.qjz9zk/intl/' + locale + '/policies/privacy/'; + if (termsPage.isManaged_) { + showURLOverlay(defaultLink); + return; +@@ -1037,7 +1037,7 @@ chrome.app.runtime.onLaunched.addListener(function() { + }); + overlayWebview.addContentScripts([{ + name: 'postProcess', +- matches: ['https://support.google.com/*'], ++ matches: ['https://support.9oo91e.qjz9zk/*'], + css: {files: ['overlay.css']}, + run_at: 'document_end', + }]); +diff --git a/chrome/browser/resources/chromeos/arc_support/playstore.js b/chrome/browser/resources/chromeos/arc_support/playstore.js +--- a/chrome/browser/resources/chromeos/arc_support/playstore.js ++++ b/chrome/browser/resources/chromeos/arc_support/playstore.js +@@ -56,7 +56,7 @@ function navigateToLanguageAndCountryCode(language, countryCode) { + // Check special case for en_us which may be mapped to en. + var matchDefaultUs = null; + if (window.location.href.startsWith( +- 'https://play.google.com/intl/en_us/about/play-terms') && ++ 'https://play.9oo91e.qjz9zk/intl/en_us/about/play-terms') && + termsLang == 'en' && countryCode == 'us' && + selectLangZoneTerms.value.startsWith('/intl/en/about/play-terms')) { + return true; +@@ -211,7 +211,7 @@ function getPrivacyPolicyLink() { + } + } + } +- return 'https://www.google.com/policies/privacy/'; ++ return 'https://www.9oo91e.qjz9zk/policies/privacy/'; + } + + /** +@@ -226,7 +226,7 @@ function processDocument() { + formatDocument(); + + var initialLoad = window.location.href.startsWith( +- 'https://play.google.com/about/play-terms'); ++ 'https://play.9oo91e.qjz9zk/about/play-terms'); + var language = document.language; + if (!language) { + language = navigator.language; +diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js b/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js +--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js ++++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js +@@ -90,7 +90,7 @@ class AssistantRelatedInfo extends AssistantRelatedInfoBase { + * @private {string} + */ + this.urlTemplate_ = +- 'https://www.gstatic.com/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html'; ++ 'https://www.95tat1c.qjz9zk/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html'; + + /** + * Whether try to reload with the default url when a 404 error occurred. +@@ -273,7 +273,7 @@ class AssistantRelatedInfo extends AssistantRelatedInfoBase { + 'icon-src', + 'data:text/html;charset=utf-8,' + + encodeURIComponent(this.$.zippy.getWrappedIcon( +- 'https://www.gstatic.com/images/icons/material/system/2x/' + ++ 'https://www.95tat1c.qjz9zk/images/icons/material/system/2x/' + + url, + this.i18n('assistantScreenContextTitle'), + getComputedStyle(document.body) +diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js +--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js ++++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js +@@ -53,7 +53,7 @@ class AssistantValueProp extends AssistantValuePropBase { + */ + urlTemplate_: { + value: +- 'https://www.gstatic.com/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html', ++ 'https://www.95tat1c.qjz9zk/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html', + }, + + /** +diff --git a/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json b/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json +--- a/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json ++++ b/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json +@@ -40,8 +40,8 @@ + "diagnostics", + "metricsPrivate", + "networkingPrivate", +- "http://*.google.com/*", +- "https://*.google.com/*" ++ "http://*.9oo91e.qjz9zk/*", ++ "https://*.9oo91e.qjz9zk/*" + ], + "app": { + "background": { +diff --git a/chrome/browser/resources/chromeos/echo/manifest.json b/chrome/browser/resources/chromeos/echo/manifest.json +--- a/chrome/browser/resources/chromeos/echo/manifest.json ++++ b/chrome/browser/resources/chromeos/echo/manifest.json +@@ -5,7 +5,7 @@ + "version": "1.0.0", + "description": "Chrome Goodies", + "manifest_version": 2, +- "content_security_policy": "default-src 'self' blob: filesystem:; connect-src 'self' blob: filesystem: https://chromeos-registration.googleapis.com https://www.google-analytics.com", ++ "content_security_policy": "default-src 'self' blob: filesystem:; connect-src 'self' blob: filesystem: https://chromeos-registration.9oo91eapis.qjz9zk https://www.9oo91e-analytics.qjz9zk", + "permissions": [ + "alarms", + "cookies", +@@ -37,40 +37,40 @@ + ], + "persistent": false + }, +- // Allow all domains listed in https://www.google.com/supported_domains ++ // Allow all domains listed in https://www.9oo91e.qjz9zk/supported_domains + "externally_connectable": { + "ids": ["*"], + "matches": [ +- "*://www.google.com/*chromebook/*", ++ "*://www.9oo91e.qjz9zk/*chromebook/*", + "*://www.google.ad/*chromebook/*", + "*://www.google.ae/*chromebook/*", +- "*://www.google.com.af/*chromebook/*", +- "*://www.google.com.ag/*chromebook/*", +- "*://www.google.com.ai/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.af/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ag/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ai/*chromebook/*", + "*://www.google.al/*chromebook/*", + "*://www.google.am/*chromebook/*", + "*://www.google.co.ao/*chromebook/*", +- "*://www.google.com.ar/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ar/*chromebook/*", + "*://www.google.as/*chromebook/*", + "*://www.google.at/*chromebook/*", +- "*://www.google.com.au/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.au/*chromebook/*", + "*://www.google.az/*chromebook/*", + "*://www.google.ba/*chromebook/*", +- "*://www.google.com.bd/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bd/*chromebook/*", + "*://www.google.be/*chromebook/*", + "*://www.google.bf/*chromebook/*", + "*://www.google.bg/*chromebook/*", +- "*://www.google.com.bh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bh/*chromebook/*", + "*://www.google.bi/*chromebook/*", + "*://www.google.bj/*chromebook/*", +- "*://www.google.com.bn/*chromebook/*", +- "*://www.google.com.bo/*chromebook/*", +- "*://www.google.com.br/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bn/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bo/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.br/*chromebook/*", + "*://www.google.bs/*chromebook/*", + "*://www.google.bt/*chromebook/*", + "*://www.google.co.bw/*chromebook/*", + "*://www.google.by/*chromebook/*", +- "*://www.google.com.bz/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bz/*chromebook/*", + "*://www.google.ca/*chromebook/*", + "*://www.google.cd/*chromebook/*", + "*://www.google.cf/*chromebook/*", +@@ -81,38 +81,38 @@ + "*://www.google.cl/*chromebook/*", + "*://www.google.cm/*chromebook/*", + "*://www.google.cn/*chromebook/*", +- "*://www.google.com.co/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.co/*chromebook/*", + "*://www.google.co.cr/*chromebook/*", +- "*://www.google.com.cu/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.cu/*chromebook/*", + "*://www.google.cv/*chromebook/*", +- "*://www.google.com.cy/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.cy/*chromebook/*", + "*://www.google.cz/*chromebook/*", + "*://www.google.de/*chromebook/*", + "*://www.google.dj/*chromebook/*", + "*://www.google.dk/*chromebook/*", + "*://www.google.dm/*chromebook/*", +- "*://www.google.com.do/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.do/*chromebook/*", + "*://www.google.dz/*chromebook/*", +- "*://www.google.com.ec/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ec/*chromebook/*", + "*://www.google.ee/*chromebook/*", +- "*://www.google.com.eg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.eg/*chromebook/*", + "*://www.google.es/*chromebook/*", +- "*://www.google.com.et/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.et/*chromebook/*", + "*://www.google.fi/*chromebook/*", +- "*://www.google.com.fj/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.fj/*chromebook/*", + "*://www.google.fm/*chromebook/*", + "*://www.google.fr/*chromebook/*", + "*://www.google.ga/*chromebook/*", + "*://www.google.ge/*chromebook/*", + "*://www.google.gg/*chromebook/*", +- "*://www.google.com.gh/*chromebook/*", +- "*://www.google.com.gi/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gi/*chromebook/*", + "*://www.google.gl/*chromebook/*", + "*://www.google.gm/*chromebook/*", + "*://www.google.gr/*chromebook/*", +- "*://www.google.com.gt/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gt/*chromebook/*", + "*://www.google.gy/*chromebook/*", +- "*://www.google.com.hk/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.hk/*chromebook/*", + "*://www.google.hn/*chromebook/*", + "*://www.google.hr/*chromebook/*", + "*://www.google.ht/*chromebook/*", +@@ -126,104 +126,104 @@ + "*://www.google.is/*chromebook/*", + "*://www.google.it/*chromebook/*", + "*://www.google.je/*chromebook/*", +- "*://www.google.com.jm/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.jm/*chromebook/*", + "*://www.google.jo/*chromebook/*", + "*://www.google.co.jp/*chromebook/*", + "*://www.google.co.ke/*chromebook/*", +- "*://www.google.com.kh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.kh/*chromebook/*", + "*://www.google.ki/*chromebook/*", + "*://www.google.kg/*chromebook/*", + "*://www.google.co.kr/*chromebook/*", +- "*://www.google.com.kw/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.kw/*chromebook/*", + "*://www.google.kz/*chromebook/*", + "*://www.google.la/*chromebook/*", +- "*://www.google.com.lb/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.lb/*chromebook/*", + "*://www.google.li/*chromebook/*", + "*://www.google.lk/*chromebook/*", + "*://www.google.co.ls/*chromebook/*", + "*://www.google.lt/*chromebook/*", + "*://www.google.lu/*chromebook/*", + "*://www.google.lv/*chromebook/*", +- "*://www.google.com.ly/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ly/*chromebook/*", + "*://www.google.co.ma/*chromebook/*", + "*://www.google.md/*chromebook/*", + "*://www.google.me/*chromebook/*", + "*://www.google.mg/*chromebook/*", + "*://www.google.mk/*chromebook/*", + "*://www.google.ml/*chromebook/*", +- "*://www.google.com.mm/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mm/*chromebook/*", + "*://www.google.mn/*chromebook/*", + "*://www.google.ms/*chromebook/*", +- "*://www.google.com.mt/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mt/*chromebook/*", + "*://www.google.mu/*chromebook/*", + "*://www.google.mv/*chromebook/*", + "*://www.google.mw/*chromebook/*", +- "*://www.google.com.mx/*chromebook/*", +- "*://www.google.com.my/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mx/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.my/*chromebook/*", + "*://www.google.co.mz/*chromebook/*", +- "*://www.google.com.na/*chromebook/*", +- "*://www.google.com.ng/*chromebook/*", +- "*://www.google.com.ni/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.na/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ng/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ni/*chromebook/*", + "*://www.google.ne/*chromebook/*", + "*://www.google.nl/*chromebook/*", + "*://www.google.no/*chromebook/*", +- "*://www.google.com.np/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.np/*chromebook/*", + "*://www.google.nr/*chromebook/*", + "*://www.google.nu/*chromebook/*", + "*://www.google.co.nz/*chromebook/*", +- "*://www.google.com.om/*chromebook/*", +- "*://www.google.com.pa/*chromebook/*", +- "*://www.google.com.pe/*chromebook/*", +- "*://www.google.com.pg/*chromebook/*", +- "*://www.google.com.ph/*chromebook/*", +- "*://www.google.com.pk/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.om/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pe/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ph/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pk/*chromebook/*", + "*://www.google.pl/*chromebook/*", + "*://www.google.pn/*chromebook/*", +- "*://www.google.com.pr/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pr/*chromebook/*", + "*://www.google.ps/*chromebook/*", + "*://www.google.pt/*chromebook/*", +- "*://www.google.com.py/*chromebook/*", +- "*://www.google.com.qa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.py/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.qa/*chromebook/*", + "*://www.google.ro/*chromebook/*", + "*://www.google.ru/*chromebook/*", + "*://www.google.rw/*chromebook/*", +- "*://www.google.com.sa/*chromebook/*", +- "*://www.google.com.sb/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sb/*chromebook/*", + "*://www.google.sc/*chromebook/*", + "*://www.google.se/*chromebook/*", +- "*://www.google.com.sg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sg/*chromebook/*", + "*://www.google.sh/*chromebook/*", + "*://www.google.si/*chromebook/*", + "*://www.google.sk/*chromebook/*", +- "*://www.google.com.sl/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sl/*chromebook/*", + "*://www.google.sn/*chromebook/*", + "*://www.google.so/*chromebook/*", + "*://www.google.sm/*chromebook/*", + "*://www.google.sr/*chromebook/*", + "*://www.google.st/*chromebook/*", +- "*://www.google.com.sv/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sv/*chromebook/*", + "*://www.google.td/*chromebook/*", + "*://www.google.tg/*chromebook/*", + "*://www.google.co.th/*chromebook/*", +- "*://www.google.com.tj/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tj/*chromebook/*", + "*://www.google.tl/*chromebook/*", + "*://www.google.tm/*chromebook/*", + "*://www.google.tn/*chromebook/*", + "*://www.google.to/*chromebook/*", +- "*://www.google.com.tr/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tr/*chromebook/*", + "*://www.google.tt/*chromebook/*", +- "*://www.google.com.tw/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tw/*chromebook/*", + "*://www.google.co.tz/*chromebook/*", +- "*://www.google.com.ua/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ua/*chromebook/*", + "*://www.google.co.ug/*chromebook/*", + "*://www.google.co.uk/*chromebook/*", +- "*://www.google.com.uy/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.uy/*chromebook/*", + "*://www.google.co.uz/*chromebook/*", +- "*://www.google.com.vc/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.vc/*chromebook/*", + "*://www.google.co.ve/*chromebook/*", + "*://www.google.vg/*chromebook/*", + "*://www.google.co.vi/*chromebook/*", +- "*://www.google.com.vn/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.vn/*chromebook/*", + "*://www.google.vu/*chromebook/*", + "*://www.google.ws/*chromebook/*", + "*://www.google.rs/*chromebook/*", +@@ -231,7 +231,7 @@ + "*://www.google.co.zm/*chromebook/*", + "*://www.google.co.zw/*chromebook/*", + "*://www.google.cat/*chromebook/*", +- "*://chromebook-dot-googwebreview.appspot.com/*chromebook/*" ++ "*://chromebook-dot-googwebreview.8pp2p8t.qjz9zk/*chromebook/*" + ] + } + } +diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js +--- a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js ++++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js +@@ -144,7 +144,7 @@ Polymer({ + + // Don't show the "Next" button if the EDU authentication got forwarded to + // a non-Google SSO page. +- this.showGaiaNextButton_ = currentUrl.hostname.endsWith('.google.com'); ++ this.showGaiaNextButton_ = currentUrl.hostname.endsWith('.9oo91e.qjz9zk'); + } else { + // Hide the GAIA Buttons. + this.showGaiaButtons_ = false; +diff --git a/chrome/browser/resources/chromeos/emoji_picker/icons.html b/chrome/browser/resources/chromeos/emoji_picker/icons.html +--- a/chrome/browser/resources/chromeos/emoji_picker/icons.html ++++ b/chrome/browser/resources/chromeos/emoji_picker/icons.html +@@ -2,7 +2,7 @@ + + + + +diff --git a/chrome/browser/resources/chromeos/emulator/icons.html b/chrome/browser/resources/chromeos/emulator/icons.html +--- a/chrome/browser/resources/chromeos/emulator/icons.html ++++ b/chrome/browser/resources/chromeos/emulator/icons.html +@@ -3,7 +3,7 @@ + + + + +diff --git a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json b/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json +--- a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json ++++ b/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json +@@ -12,10 +12,10 @@ + "app.window.ime", + "audioCapture", + "crashReportPrivate", +- "https://clients4.google.com/", +- "https://dl.google.com/", +- "https://handwriting.googleapis.com/", +- "https://www.googleapis.com/", ++ "https://clients4.9oo91e.qjz9zk/", ++ "https://dl.9oo91e.qjz9zk/", ++ "https://handwriting.9oo91eapis.qjz9zk/", ++ "https://www.9oo91eapis.qjz9zk/", + "input", + "inputMethodPrivate", + "metricsPrivate", +diff --git a/chrome/browser/resources/chromeos/login/debug/debug.js b/chrome/browser/resources/chromeos/login/debug/debug.js +--- a/chrome/browser/resources/chromeos/login/debug/debug.js ++++ b/chrome/browser/resources/chromeos/login/debug/debug.js +@@ -58,18 +58,18 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + if (type === 'WAA') { + if (isMinor) { + zippy['iconUri'] = +- 'https://www.gstatic.com/myactivity/icon/icon_fp_history_blue.svg'; ++ 'https://www.95tat1c.qjz9zk/myactivity/icon/icon_fp_history_blue.svg'; + } else { + zippy['iconUri'] = +- 'https://ssl.gstatic.com/identity/boq/consentflowtexts/icon_web_and_app_activity_grey600_72-fb2e66730dca510849d22bee9f0f29ba.png'; ++ 'https://ssl.95tat1c.qjz9zk/identity/boq/consentflowtexts/icon_web_and_app_activity_grey600_72-fb2e66730dca510849d22bee9f0f29ba.png'; + } + } else if (type === 'DA') { + if (isMinor) { + zippy['iconUri'] = +- 'https://www.gstatic.com/myactivity/icon/icon_fp_chromebook_blue.svg'; ++ 'https://www.95tat1c.qjz9zk/myactivity/icon/icon_fp_chromebook_blue.svg'; + } else { + zippy['iconUri'] = +- 'https://ssl.gstatic.com/identity/boq/consentflowtexts/icon_device_information_vertical_grey600_72-be6f9c8691213019712cfa4106a509e0.png'; ++ 'https://ssl.95tat1c.qjz9zk/identity/boq/consentflowtexts/icon_device_information_vertical_grey600_72-be6f9c8691213019712cfa4106a509e0.png'; + } + } else { + console.error('### Uknown zippy type ' + type); +@@ -709,7 +709,7 @@ cr.define('cr.ui.login.debug', function() { + // Password and email mismatch error message. + id: 'offline-login-password-mismatch', + trigger: (screen) => { +- screen.setEmailForTest('someuser@gmail.com'); ++ screen.setEmailForTest('someuser@9ma1l.qjz9zk'); + screen.proceedToPasswordPage(); + screen.showPasswordMismatchMessage(); + }, +diff --git a/chrome/browser/resources/chromeos/login/screens/common/arc_terms_of_service.js b/chrome/browser/resources/chromeos/login/screens/common/arc_terms_of_service.js +--- a/chrome/browser/resources/chromeos/login/screens/common/arc_terms_of_service.js ++++ b/chrome/browser/resources/chromeos/login/screens/common/arc_terms_of_service.js +@@ -235,7 +235,7 @@ class ArcTermsOfService extends ArcTermsOfserviceBase { + * The hostname of the url where the terms of service will be fetched. + * Overwritten by tests to load terms of service from local test server. + */ +- this.termsOfServiceHostName_ = 'https://play.google.com'; ++ this.termsOfServiceHostName_ = 'https://play.9oo91e.qjz9zk'; + + this.termsError = false; + this.usingOfflineTermsForTesting_ = false; +@@ -768,7 +768,7 @@ class ArcTermsOfService extends ArcTermsOfserviceBase { + if (results && results.length == 1 && typeof results[0] == 'string') { + self.showUrlOverlay(results[0]); + } else { +- var defaultLink = 'https://www.google.com/intl/' + ++ var defaultLink = 'https://www.9oo91e.qjz9zk/intl/' + + self.getCurrentLanguage_() + '/policies/privacy/'; + self.showUrlOverlay(defaultLink); + } +diff --git a/chrome/browser/resources/chromeos/login/screens/common/consolidated_consent.js b/chrome/browser/resources/chromeos/login/screens/common/consolidated_consent.js +--- a/chrome/browser/resources/chromeos/login/screens/common/consolidated_consent.js ++++ b/chrome/browser/resources/chromeos/login/screens/common/consolidated_consent.js +@@ -194,7 +194,7 @@ class ConsolidatedConsent extends ConsolidatedConsentScreenElementBase { + * The hostname of the url where the terms of service will be fetched. + * Overwritten by tests to load terms of service from local test server. + */ +- this.arcTosHostName_ = 'https://play.google.com'; ++ this.arcTosHostName_ = 'https://play.9oo91e.qjz9zk'; + + // Online URLs + this.googleEulaUrl_ = ''; +diff --git a/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html b/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html +--- a/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html ++++ b/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html +@@ -157,7 +157,7 @@ found in the LICENSE file. +
+ Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA +
+-
www.google.com
++
www.9oo91e.qjz9zk
+ + + +diff --git a/chrome/browser/resources/chromeos/login/screens/login/offline_login.html b/chrome/browser/resources/chromeos/login/screens/login/offline_login.html +--- a/chrome/browser/resources/chromeos/login/screens/login/offline_login.html ++++ b/chrome/browser/resources/chromeos/login/screens/login/offline_login.html +@@ -25,7 +25,7 @@ found in the LICENSE file. + 'email': , + 'password': } + If user did not type domain |email| will be added by +- "@gmail.com" or by 'emailDomain' if it is set. ++ "@9ma1l.qjz9zk" or by 'emailDomain' if it is set. + Methods: + 'focus' - focuses current screen (email input or password input); + 'setEmail' - accepts an argument |email|. If |email| is empty it sets +diff --git a/chrome/browser/resources/chromeos/login/screens/login/offline_login.js b/chrome/browser/resources/chromeos/login/screens/login/offline_login.js +--- a/chrome/browser/resources/chromeos/login/screens/login/offline_login.js ++++ b/chrome/browser/resources/chromeos/login/screens/login/offline_login.js +@@ -25,7 +25,7 @@ import {OobeDialogHostBehavior} from '../../components/behaviors/oobe_dialog_hos + import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/behaviors/oobe_i18n_behavior.m.js'; + + +-const DEFAULT_EMAIL_DOMAIN = '@gmail.com'; ++const DEFAULT_EMAIL_DOMAIN = '@9ma1l.qjz9zk'; + const INPUT_EMAIL_PATTERN = '^[a-zA-Z0-9.!#$%&\'*+=?^_`{|}~-]+(@[^\\s@]+)?$'; + + const LOGIN_SECTION = { +diff --git a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js +--- a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js ++++ b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js +@@ -35,7 +35,7 @@ Polymer({ + /** @private */ + url_: { + type: String, +- value: 'https://www.google.com/', ++ value: 'https://www.9oo91e.qjz9zk/', + }, + + /** @private */ +diff --git a/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js b/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js +--- a/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js ++++ b/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js +@@ -17,10 +17,10 @@ import {WebviewManager} from './webview_manager.js'; + * @const {!Array} + */ + const ALLOWED_HOSTS = [ +- 'googleapis.com', +- 'gstatic.com', +- 'googleusercontent.com', +- 'google.com', ++ '9oo91eapis.qjz9zk', ++ '95tat1c.qjz9zk', ++ '9oo91eusercontent.qjz9zk', ++ '9oo91e.qjz9zk', + ]; + + class ParentAccessUi extends PolymerElement { +diff --git a/chrome/browser/resources/cryptotoken/enroller.js b/chrome/browser/resources/cryptotoken/enroller.js +--- a/chrome/browser/resources/cryptotoken/enroller.js ++++ b/chrome/browser/resources/cryptotoken/enroller.js +@@ -861,7 +861,7 @@ Enroller.prototype.sendEnrollRequestToHelper_ = function() { + }; + + const googleCorpAppId = +- 'https://www.gstatic.com/securitykey/a/google.com/origins.json'; ++ 'https://www.95tat1c.qjz9zk/securitykey/a/9oo91e.qjz9zk/origins.json'; + + /** + * Proxies the registration request over the WebAuthn API. +diff --git a/chrome/browser/resources/default_apps/external_extensions.json b/chrome/browser/resources/default_apps/external_extensions.json +--- a/chrome/browser/resources/default_apps/external_extensions.json ++++ b/chrome/browser/resources/default_apps/external_extensions.json +@@ -3,7 +3,7 @@ + { + // Drive extension + "ghbmnnjooekpmoecnnnilnnbdlolhkhi" : { +- "external_update_url": "https://clients2.google.com/service/update2/crx" ++ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx" + } + } + +diff --git a/chrome/browser/resources/discards/graph_doc_template.html b/chrome/browser/resources/discards/graph_doc_template.html +--- a/chrome/browser/resources/discards/graph_doc_template.html ++++ b/chrome/browser/resources/discards/graph_doc_template.html +@@ -78,7 +78,7 @@ URL. As result, this document needs to be self-contained, hence inline scripts. + } + + +- +diff --git a/chrome/browser/resources/downloads/icons.html b/chrome/browser/resources/downloads/icons.html +--- a/chrome/browser/resources/downloads/icons.html ++++ b/chrome/browser/resources/downloads/icons.html +@@ -3,7 +3,7 @@ + + + + +diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/browser/resources/gaia_auth_host/authenticator.js +--- a/chrome/browser/resources/gaia_auth_host/authenticator.js ++++ b/chrome/browser/resources/gaia_auth_host/authenticator.js +@@ -104,7 +104,7 @@ export let AuthParams; + // TODO(rogerta): should use gaia URL from GaiaUrls::gaia_url() instead + // of hardcoding the prod URL here. As is, this does not work with staging + // environments. +-const IDP_ORIGIN = 'https://accounts.google.com/'; ++const IDP_ORIGIN = 'https://accounts.9oo91e.qjz9zk/'; + const SIGN_IN_HEADER = 'google-accounts-signin'; + const EMBEDDED_FORM_HEADER = 'google-accounts-embedded'; + const LOCATION_HEADER = 'location'; +@@ -717,7 +717,7 @@ export class Authenticator extends EventTarget { + url = appendParam( + url, 'continue', + data.gaiaUrl + 'programmatic_auth_chromeos?hl=' + data.hl + +- '&scope=https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthLogin&' + ++ '&scope=https%3A%2F%2Fwww.9oo91e.qjz9zk%2Faccounts%2FOAuthLogin&' + + 'client_id=' + encodeURIComponent(data.clientId) + + '&access_type=offline'); + +diff --git a/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js b/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js +--- a/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js ++++ b/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js +@@ -17,7 +17,7 @@ import {decodeTimestamp} from './saml_timestamps.js'; + const MAX_SANE_XML_LENGTH = 50 * 1024; // 50 KB + + /** @const @private {string} Schema name prefix. */ +- const SCHEMA_NAME_PREFIX = 'http://schemas.google.com/saml/2019/'; ++ const SCHEMA_NAME_PREFIX = 'http://schemas.9oo91e.qjz9zk/saml/2019/'; + + /** @const @private {string} Schema name for password modified timestamp. */ + const PASSWORD_MODIFIED_TIMESTAMP = 'passwordmodifiedtimestamp'; +diff --git a/chrome/browser/resources/hangout_services/manifest.json b/chrome/browser/resources/hangout_services/manifest.json +--- a/chrome/browser/resources/hangout_services/manifest.json ++++ b/chrome/browser/resources/hangout_services/manifest.json +@@ -9,7 +9,7 @@ + "manifest_version": 2, + "externally_connectable": { + "matches": [ +- "https://*.google.com/*" ++ "https://*.9oo91e.qjz9zk/*" + ] + }, + "background": { +diff --git a/chrome/browser/resources/identity_scope_approval_dialog/manifest.json b/chrome/browser/resources/identity_scope_approval_dialog/manifest.json +--- a/chrome/browser/resources/identity_scope_approval_dialog/manifest.json ++++ b/chrome/browser/resources/identity_scope_approval_dialog/manifest.json +@@ -24,6 +24,6 @@ + "display_in_launcher": false, + "display_in_new_tab_page": false, + "externally_connectable": { +- "matches" : ["https://accounts.google.com/*"] ++ "matches" : ["https://accounts.9oo91e.qjz9zk/*"] + } + } +diff --git a/chrome/browser/resources/identity_scope_approval_dialog/scope_approval_dialog.js b/chrome/browser/resources/identity_scope_approval_dialog/scope_approval_dialog.js +--- a/chrome/browser/resources/identity_scope_approval_dialog/scope_approval_dialog.js ++++ b/chrome/browser/resources/identity_scope_approval_dialog/scope_approval_dialog.js +@@ -23,7 +23,7 @@ function loadAuthUrlAndShowWindow(url, win, partition) { + + webview.addContentScripts([{ + name: 'injectRule', +- matches: ['https://accounts.google.com/*'], ++ matches: ['https://accounts.9oo91e.qjz9zk/*'], + js: {files: ['inject.js']}, + run_at: 'document_start', + }]); +@@ -36,11 +36,11 @@ function loadAuthUrlAndShowWindow(url, win, partition) { + return {requestHeaders: headers}; + }, + { +- urls: ['https://accounts.google.com/*'], ++ urls: ['https://accounts.9oo91e.qjz9zk/*'], + }, + ['blocking', 'requestHeaders']); + +- if (!url.toLowerCase().startsWith('https://accounts.google.com/')) { ++ if (!url.toLowerCase().startsWith('https://accounts.9oo91e.qjz9zk/')) { + document.querySelector('.titlebar').classList.add('titlebar-border'); + } + +diff --git a/chrome/browser/resources/inspect/inspect.html b/chrome/browser/resources/inspect/inspect.html +--- a/chrome/browser/resources/inspect/inspect.html ++++ b/chrome/browser/resources/inspect/inspect.html +@@ -46,7 +46,7 @@ found in the LICENSE file. + + +
+@@ -102,7 +102,7 @@ found in the LICENSE file. +
+ Define the listening port on your device that maps to a port accessible + from your development machine. +- Learn more +
+
+diff --git a/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html b/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html +--- a/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html ++++ b/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html +@@ -24,7 +24,7 @@ +

Server address

+
+ +- ++ + + + +diff --git a/chrome/browser/resources/internals/query_tiles/query_tiles_internals.js b/chrome/browser/resources/internals/query_tiles/query_tiles_internals.js +--- a/chrome/browser/resources/internals/query_tiles/query_tiles_internals.js ++++ b/chrome/browser/resources/internals/query_tiles/query_tiles_internals.js +@@ -43,11 +43,11 @@ function initialize() { + + $('prototype-server').onclick = function() { + $('base-url').value = +- 'https://staging-gsaprototype-pa.sandbox.googleapis.com'; ++ 'https://staging-gsaprototype-pa.sandbox.9oo91eapis.qjz9zk'; + }; + + $('prod-server').onclick = function() { +- $('base-url').value = 'https://chromeupboarding-pa.googleapis.com'; ++ $('base-url').value = 'https://chromeupboarding-pa.9oo91eapis.qjz9zk'; + }; + + $('set-url').onclick = function() { +diff --git a/chrome/browser/resources/media/mei_preload/manifest.json b/chrome/browser/resources/media/mei_preload/manifest.json +--- a/chrome/browser/resources/media/mei_preload/manifest.json ++++ b/chrome/browser/resources/media/mei_preload/manifest.json +@@ -3,6 +3,6 @@ + "icons": {}, + "version": "1.0.7.1652906823", + "manifest_version": 2, +- "update_url": "https://clients2.google.com/service/update2/crx", ++ "update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx", + "description": "Contains preloaded data for Media Engagement" + } +diff --git a/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html b/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html +--- a/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html ++++ b/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html +@@ -2,7 +2,7 @@ + + + + + +@@ -43,7 +43,7 @@ + + + + +diff --git a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html b/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html +--- a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html ++++ b/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html +@@ -2,7 +2,7 @@ + + + + + +diff --git a/chrome/browser/resources/net_internals/index.html b/chrome/browser/resources/net_internals/index.html +--- a/chrome/browser/resources/net_internals/index.html ++++ b/chrome/browser/resources/net_internals/index.html +@@ -21,7 +21,7 @@ found in the LICENSE file. +
+
+ The net-internals events viewer and related functionality has been removed. +- Please use chrome://net-export to save netlogs and the external netlog_viewer to view them. ++ Please use chrome://net-export to save netlogs and the external netlog_viewer to view them. +
+ +
+@@ -74,8 +74,8 @@ found in the LICENSE file. +
+ HSTS is HTTP Strict Transport Security: a way for sites to elect to + always use HTTPS. See +- +- https://www.chromium.org/hsts. PKP is Public Key Pinning: Chrome ++ ++ https://www.ch40m1um.qjz9zk/hsts. PKP is Public Key Pinning: Chrome + "pins" certain public keys for certain sites in official builds.
+ +

Add HSTS domain

+diff --git a/chrome/browser/resources/network_speech_synthesis/manifest.json b/chrome/browser/resources/network_speech_synthesis/manifest.json +--- a/chrome/browser/resources/network_speech_synthesis/manifest.json ++++ b/chrome/browser/resources/network_speech_synthesis/manifest.json +@@ -10,7 +10,7 @@ + "permissions": [ + "systemPrivate", + "ttsEngine", +- "https://www.google.com/" ++ "https://www.9oo91e.qjz9zk/" + ], + "tts_engine": { + "voices": [ +diff --git a/chrome/browser/resources/network_speech_synthesis/tts_extension.js b/chrome/browser/resources/network_speech_synthesis/tts_extension.js +--- a/chrome/browser/resources/network_speech_synthesis/tts_extension.js ++++ b/chrome/browser/resources/network_speech_synthesis/tts_extension.js +@@ -30,7 +30,7 @@ TtsExtension.prototype = { + * @const + * @private + */ +- SPEECH_SERVER_URL_: 'https://www.google.com/speech-api/v2/synthesize?' + ++ SPEECH_SERVER_URL_: 'https://www.9oo91e.qjz9zk/speech-api/v2/synthesize?' + + 'enc=mpeg&client=chromium', + + /** +diff --git a/chrome/browser/resources/new_tab_page/modules/photos/module.html b/chrome/browser/resources/new_tab_page/modules/photos/module.html +--- a/chrome/browser/resources/new_tab_page/modules/photos/module.html ++++ b/chrome/browser/resources/new_tab_page/modules/photos/module.html +@@ -566,7 +566,7 @@ + + + + - - +
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.ts b/chrome/browser/resources/settings/privacy_page/privacy_page.ts -index ea117e5584e2f..5765079bfa0b6 100644 +index 76c7d5d017035..da94cdcb1b514 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.ts +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.ts @@ -68,7 +68,49 @@ export class SettingsPrivacyPageElement extends SettingsPrivacyPageElementBase { @@ -195,7 +195,7 @@ index ea117e5584e2f..5765079bfa0b6 100644 static get properties() { diff --git a/chrome/browser/resources/settings/route.ts b/chrome/browser/resources/settings/route.ts -index 483471f6a7f07..3a664efaf2a63 100644 +index 87f3f1c016e06..9c3ea9080ecaf 100644 --- a/chrome/browser/resources/settings/route.ts +++ b/chrome/browser/resources/settings/route.ts @@ -7,6 +7,7 @@ import {loadTimeData} from 'chrome://resources/js/load_time_data.js'; @@ -233,7 +233,7 @@ index 8c7966f45bdf4..58061c96930dc 100644 } } diff --git a/chrome/browser/resources/settings/site_settings/site_details.html b/chrome/browser/resources/settings/site_settings/site_details.html -index a1e0168dc9da1..7294efff9208b 100644 +index 2464aa997e0b5..9f0c24e2d85c0 100644 --- a/chrome/browser/resources/settings/site_settings/site_details.html +++ b/chrome/browser/resources/settings/site_settings/site_details.html @@ -266,4 +266,5 @@ @@ -270,10 +270,10 @@ index ec0750209ab94..fc8e236ae2f45 100644 static get properties() { diff --git a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts -index eddbe04e23c92..d63d8fd700482 100644 +index e06784e40d556..f0d3f1567814e 100644 --- a/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts +++ b/chrome/browser/resources/settings/site_settings_page/site_settings_page.ts -@@ -41,7 +41,7 @@ function getCategoryItemMap(): Map { +@@ -42,7 +42,7 @@ function getCategoryItemMap(): Map { } // The following list is ordered alphabetically by |id|. The order in which // these appear in the UI is determined elsewhere in this file. @@ -317,7 +317,7 @@ index eddbe04e23c92..d63d8fd700482 100644 function buildItemListFromIds(orderedIdList: ContentSettingsTypes[]): CategoryListItem[] { const map = getCategoryItemMap(); -@@ -429,7 +453,7 @@ export class SettingsSiteSettingsPageElement extends +@@ -439,7 +463,7 @@ export class SettingsSiteSettingsPageElement extends Id.IMAGES, Id.POPUPS, ]), @@ -400,10 +400,10 @@ index 71a42d770bf43..ffc6c571474e0 100644 } } diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn -index a7fcc871fd105..d563d01df24d2 100644 +index 1718e1d59de77..28b5fde9504d6 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1976,6 +1976,7 @@ static_library("ui") { +@@ -1913,6 +1913,7 @@ static_library("ui") { "//components/commerce/core:shopping_service", "//components/commerce/core/mojom:mojo_bindings", "//components/commerce/core/webui", @@ -412,7 +412,7 @@ index a7fcc871fd105..d563d01df24d2 100644 "//components/feedback/proto", "//components/headless/policy", diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrome/browser/ui/views/page_info/page_info_view_factory.cc -index 3525faa722409..448df48084630 100644 +index c5a69cea384b4..a5ca79adad3e0 100644 --- a/chrome/browser/ui/views/page_info/page_info_view_factory.cc +++ b/chrome/browser/ui/views/page_info/page_info_view_factory.cc @@ -25,6 +25,8 @@ @@ -424,8 +424,8 @@ index 3525faa722409..448df48084630 100644 #include "components/page_info/core/features.h" #include "components/page_info/core/proto/about_this_site_metadata.pb.h" #include "components/page_info/page_info.h" -@@ -487,6 +489,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( - icon = &vector_icons::kCookieIcon; +@@ -498,6 +500,17 @@ const ui::ImageModel PageInfoViewFactory::GetPermissionIcon( + icon = &vector_icons::kStorageAccessIcon; break; default: + bool found = false; @@ -443,7 +443,7 @@ index 3525faa722409..448df48084630 100644 // not shown in the Page Info bubble. NOTREACHED_NORETURN(); diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc -index ba144779fd63d..c545fc33d89cf 100644 +index 2c54740738d1f..161e17527dbea 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc @@ -13,6 +13,7 @@ @@ -454,7 +454,7 @@ index ba144779fd63d..c545fc33d89cf 100644 #include "build/branding_buildflags.h" #include "build/build_config.h" #include "build/buildflag.h" -@@ -73,6 +74,8 @@ +@@ -74,6 +75,8 @@ #include "components/google/core/common/google_util.h" #include "components/history/core/common/pref_names.h" #include "components/omnibox/common/omnibox_features.h" @@ -463,7 +463,7 @@ index ba144779fd63d..c545fc33d89cf 100644 #include "components/password_manager/core/browser/leak_detection_dialog_utils.h" #include "components/password_manager/core/browser/manage_passwords_referrer.h" #include "components/password_manager/core/common/password_manager_features.h" -@@ -3634,6 +3637,42 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, +@@ -3710,6 +3713,42 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source, policy_indicator::AddLocalizedStrings(html_source); AddSecurityKeysStrings(html_source); @@ -507,7 +507,7 @@ index ba144779fd63d..c545fc33d89cf 100644 } diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc -index 0bc74c27f994f..0861a411faa68 100644 +index 0fa6df3882ca1..b0e6fa202c57b 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc @@ -44,6 +44,8 @@ @@ -519,7 +519,7 @@ index 0bc74c27f994f..0861a411faa68 100644 #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_pattern.h" #include "components/content_settings/core/common/content_settings_utils.h" -@@ -199,7 +201,7 @@ const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = { +@@ -203,7 +205,7 @@ const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = { static_assert(std::size(kContentSettingsTypeGroupNames) == // ContentSettingsType starts at -1, so add 1 here. @@ -528,7 +528,7 @@ index 0bc74c27f994f..0861a411faa68 100644 "kContentSettingsTypeGroupNames should have " "CONTENT_SETTINGS_NUM_TYPES elements"); -@@ -481,6 +483,13 @@ bool HasRegisteredGroupName(ContentSettingsType type) { +@@ -487,6 +489,13 @@ bool HasRegisteredGroupName(ContentSettingsType type) { return true; } } @@ -542,7 +542,7 @@ index 0bc74c27f994f..0861a411faa68 100644 return false; } -@@ -494,7 +503,13 @@ ContentSettingsType ContentSettingsTypeFromGroupName(base::StringPiece name) { +@@ -500,11 +509,24 @@ ContentSettingsType ContentSettingsTypeFromGroupName(base::StringPiece name) { return entry.type; } } @@ -557,10 +557,7 @@ index 0bc74c27f994f..0861a411faa68 100644 return ContentSettingsType::DEFAULT; } -@@ -514,6 +529,13 @@ base::StringPiece ContentSettingsTypeToGroupName(ContentSettingsType type) { - } - } - + base::StringPiece ContentSettingsTypeToGroupName(ContentSettingsType type) { + content_settings::WebsiteSettingsRegistry* website_settings = + content_settings::WebsiteSettingsRegistry::GetInstance(); + for (const content_settings::WebsiteSettingsInfo* cs : *website_settings) { @@ -568,10 +565,18 @@ index 0bc74c27f994f..0861a411faa68 100644 + return cs->name(); + } + } + for (const auto& entry : kContentSettingsTypeGroupNames) { + if (type == entry.type) { + // Content setting types that aren't represented in the settings UI +@@ -519,7 +541,6 @@ base::StringPiece ContentSettingsTypeToGroupName(ContentSettingsType type) { + return entry.name ? entry.name : base::StringPiece(); + } + } +- NOTREACHED() << static_cast(type) << " is not a recognized content settings type."; return base::StringPiece(); -@@ -582,6 +604,13 @@ const std::vector& GetVisiblePermissionCategories() { +@@ -588,6 +609,13 @@ const std::vector& GetVisiblePermissionCategories() { base_types->push_back(ContentSettingsType::PRIVATE_NETWORK_GUARD); } @@ -586,16 +591,17 @@ index 0bc74c27f994f..0861a411faa68 100644 } diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn -index da63c3ce54aa4..22ff83616158f 100644 +index b057318f21bf8..3b389c431818f 100644 --- a/components/browser_ui/site_settings/android/BUILD.gn +++ b/components/browser_ui/site_settings/android/BUILD.gn -@@ -144,6 +144,20 @@ android_library("java") { +@@ -146,6 +146,21 @@ android_library("java") { ":site_settings_jni_headers", "//components/content_settings/android:java_pref_names_srcjar", ] + sources += [ + "java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java", + "java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java", ++ "java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomTriStateSiteSettingsPreferenceImpl.java", + "java/src/org/chromium/components/browser_ui/site_settings/impl/include_all_directory.java", + ] + deps += [ @@ -610,7 +616,7 @@ index da63c3ce54aa4..22ff83616158f 100644 } android_library("javatests") { -@@ -187,6 +201,7 @@ robolectric_library("junit") { +@@ -191,6 +206,7 @@ robolectric_library("junit") { } android_resources("java_resources") { @@ -1076,163 +1082,36 @@ index 0000000000000..074fe70064c89 + return null; + } +} -diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting_README.md b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting_README.md +diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomTriStateSiteSettingsPreferenceImpl.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomTriStateSiteSettingsPreferenceImpl.java new file mode 100644 -index 0000000000000..87f4b474ccf49 +index 0000000000000..23a03a2c27577 --- /dev/null -+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting_README.md -@@ -0,0 +1,151 @@ -+# Content Settings and Site Settings in Bromite -+ -+[TOC] -+ -+## Overview -+ -+To simplify the addition and management of content settings ui in Bromite, you can use this method: automatically the new menus in the site settings and the item in page info management will be added. -+ -+## How to use -+ -+* Add a class derived from [BromiteCustomContentSettingImpl](BromiteCustomContentSettingImpl.java) -+ -+``` -+public class NewContentSetting extends BromiteCustomContentSetting { -+ public BromiteWebGLContentSetting() { -+ super(/*contentSettingsType*/ ContentSettingsType.NEW_CONTENT_SETTING, -+ /*siteSettingsCategory*/ SiteSettingsCategory.Type.NEW_CONTENT_SETTING, -+ /*defaultEnabledValue*/ ContentSettingValues.ALLOW, -+ /*defaultDisabledValue*/ ContentSettingValues.BLOCK, -+ /*allowException*/ true, -+ /*preferenceKey*/ "new_content_setting", -+ /*profilePrefKey*/ "new_content_setting"); -+ } -+ -+ @Override -+ public ContentSettingsResources.ResourceItem getResourceItem() { -+ return new ContentSettingsResources.ResourceItem( -+ /*icon*/ R.drawable.web_asset, -+ /*title*/ R.string.new_content_setting_permission_title, -+ /*defaultEnabledValue*/ getDefaultEnabledValue(), -+ /*defaultDisabledValue*/ getDefaultDisabledValue(), -+ /*enabledSummary*/ R.string.new_content_setting_enabled, -+ /*disabledSummary*/ R.string.new_content_setting_disabled); -+ } ++++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomTriStateSiteSettingsPreferenceImpl.java +@@ -0,0 +1,24 @@ ++/* ++ This file is part of Bromite. + -+ @Override -+ public int getCategorySummary(@Nullable @ContentSettingValues int value) { -+ switch (value) { -+ case ContentSettingValues.ALLOW: -+ return R.string.new_content_setting_allow; -+ case ContentSettingValues.ASK: -+ return R.string.new_content_setting_ask; -+ case ContentSettingValues.BLOCK: -+ return R.string.new_content_setting_disabled; -+ default: -+ return 0; -+ } -+ } ++ Bromite is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation, either version 3 of the License, or ++ (at your option) any later version. + -+ @Override -+ public boolean requiresTriStateContentSetting() { -+ return true; // or false if is a on/off content setting -+ } ++ Bromite is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. + -+ @Override -+ public int[] getTriStateSettingDescriptionIDs() { -+ // only needed if is a tristate setting -+ int[] descriptionIDs = { -+ R.string.website_settings_category_webgl_enabled_antifingerprint, // ALLOWED -+ R.string.website_settings_category_webgl_enabled, // ASK -+ R.string.website_settings_category_webgl_disabled }; // BLOCKED -+ return descriptionIDs; -+ } ++ You should have received a copy of the GNU General Public License ++ along with Bromite. If not, see . ++*/ + -+ @Override -+ public boolean showOnlyDescriptions() { -+ // true will remove ALLOWED/ASK/BLOCKED from UI -+ // leaving only the descriptions -+ return true; -+ } ++package org.chromium.components.browser_ui.site_settings; + -+ @Override -+ public int getAddExceptionDialogMessage() { -+ return R.string.new_content_setting_exception_dialog_message; -+ } ++import org.chromium.components.content_settings.ContentSettingValues; + -+ @Override -+ public @Nullable Boolean considerException(SiteSettingsCategory category, @ContentSettingValues int value) { -+ // indicate when the value should be considered an exception -+ return value != ContentSettingValues.BLOCK; -+ } ++public interface BromiteCustomTriStateSiteSettingsPreferenceImpl { ++ public @ContentSettingValues int getCheckedSetting(); +} -+``` -+ -+* Add the new class to `BromiteCustomContentSettingImpl` `cctor` -+ -+``` -+ static { -+ mItemList = new ArrayList(); -+ mItemList.add(new NewContentSetting()); -+ } -+``` -+ -+* Register the new content setting as usual in `ContentSettingsRegistry::Init()` -+ -+``` -+ Register(ContentSettingsType::NEW_CONTENT_SETTING, "new_content_setting", CONTENT_SETTING_BLOCK, -+ WebsiteSettingsInfo::SYNCABLE, -+ AllowlistedSchemes(), -+ ValidSettings(CONTENT_SETTING_ALLOW, // allow -+ CONTENT_SETTING_ASK, // ask -+ CONTENT_SETTING_BLOCK), // block -+ WebsiteSettingsInfo::SINGLE_ORIGIN_WITH_EMBEDDED_EXCEPTIONS_SCOPE, -+ WebsiteSettingsRegistry::PLATFORM_ANDROID, -+ ContentSettingsInfo::INHERIT_IN_INCOGNITO, -+ ContentSettingsInfo::PERSISTENT, -+ ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS, -+ /*show_into_info_page*/ true, -+ /*permission_type_ui*/ IDS_NEW_CONTENT_SETTING, -+ /*permission_type_ui_mid_sentence*/ IDS_NEW_CONTENT_SETTING_MID_SENTENCE); -+``` -+ -+* Add your content setting in `@IntDef()` and `Type` in `SiteSettingsCategory` as usual -+ -+* Add your strings in a new file in `components/browser_ui/strings/android/` -+ -+``` -+ -+ -+ -+ your content type -+ -+ -+ your content type -+ -+ -+ your content type -+ -+ -+ your content type is enabled -+ -+ -+ ask before activate your content type -+ -+ -+ your content type is disabled -+ -+ -+``` -+ -+* Reference it in `components/components_strings.grd` to have strings in native -+ -+``` -+ -+``` -+ -+* Reference it in `components/browser_ui/strings/android/browser_ui_strings.grd` to have the strings in java -+ -+``` -+ -+``` diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java index 4cd8246d1c608..3737c6c0a789d 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java @@ -1287,10 +1166,10 @@ index 4cd8246d1c608..3737c6c0a789d 100644 int[] descriptionIDs = { R.string.website_settings_category_protected_content_allowed_recommended, diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java -index 55326fff2442e..fde27fca7c176 100644 +index e71790e5af9a1..0ecf6f7c993a0 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java -@@ -306,6 +306,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -310,6 +310,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment @ContentSettingValues Integer contentSetting = website.site().getContentSetting( browserContextHandle, mCategory.getContentSettingsType()); @@ -1301,7 +1180,7 @@ index 55326fff2442e..fde27fca7c176 100644 if (contentSetting != null) { return ContentSettingValues.BLOCK == contentSetting; } -@@ -464,6 +468,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -469,6 +473,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment ? new HashSet<>(getArguments().getStringArrayList(EXTRA_SELECTED_DOMAINS)) : null; @@ -1309,7 +1188,7 @@ index 55326fff2442e..fde27fca7c176 100644 configureGlobalToggles(); if (mCategory.getType() == SiteSettingsCategory.Type.REQUEST_DESKTOP_SITE) { RecordUserAction.record("DesktopSiteContentSetting.SettingsPage.Entered"); -@@ -488,7 +493,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -493,7 +498,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment if (queryHasChanged) getInfoForOrigins(); }); @@ -1318,7 +1197,7 @@ index 55326fff2442e..fde27fca7c176 100644 MenuItem help = menu.add( Menu.NONE, R.id.menu_id_site_settings_help, Menu.NONE, R.string.menu_help); help.setIcon(TraceEventVectorDrawableCompat.create( -@@ -499,6 +504,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -504,6 +509,12 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_id_site_settings_help) { @@ -1331,7 +1210,7 @@ index 55326fff2442e..fde27fca7c176 100644 if (mCategory.getType() == SiteSettingsCategory.Type.PROTECTED_MEDIA) { getSiteSettingsDelegate().launchProtectedContentHelpAndFeedbackActivity( getActivity()); -@@ -572,6 +583,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -577,6 +588,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment BrowserContextHandle browserContextHandle = getSiteSettingsDelegate().getBrowserContextHandle(); PrefService prefService = UserPrefs.get(browserContextHandle); @@ -1343,7 +1222,7 @@ index 55326fff2442e..fde27fca7c176 100644 if (BINARY_TOGGLE_KEY.equals(preference.getKey())) { assert !mCategory.isManaged(); boolean toggleValue = (boolean) newValue; -@@ -788,6 +804,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -796,6 +812,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment : R.string.website_settings_allowed_group_heading_request_desktop_site; break; } @@ -1352,7 +1231,7 @@ index 55326fff2442e..fde27fca7c176 100644 assert resource > 0; return getString(resource); } -@@ -909,6 +927,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -914,6 +932,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment default: break; } @@ -1361,17 +1240,24 @@ index 55326fff2442e..fde27fca7c176 100644 if (allowSpecifyingExceptions) { getPreferenceScreen().addPreference(new AddExceptionPreference(getStyledContext(), ADD_EXCEPTION_KEY, getAddExceptionDialogMessage(), mCategory, this)); -@@ -1082,6 +1102,9 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1085,8 +1105,16 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment + private boolean isBlocked() { + switch (mGlobalToggleLayout) { case GlobalToggleLayout.TRI_STATE_TOGGLE: ++ Preference triStateToggleImpl = ++ getPreferenceScreen().findPreference(TRI_STATE_TOGGLE_KEY); ++ if (triStateToggleImpl instanceof BromiteCustomTriStateSiteSettingsPreferenceImpl) { ++ Boolean blocked = BromiteCustomContentSettingImpl.considerException(mCategory, ++ ((BromiteCustomTriStateSiteSettingsPreferenceImpl)triStateToggleImpl).getCheckedSetting()); ++ if (blocked != null) return (boolean)blocked; ++ } TriStateSiteSettingsPreference triStateToggle = getPreferenceScreen().findPreference(TRI_STATE_TOGGLE_KEY); + if (triStateToggle == null) return true; -+ Boolean blocked = BromiteCustomContentSettingImpl.considerException(mCategory, triStateToggle.getCheckedSetting()); -+ if (blocked != null) return (boolean)blocked; return (triStateToggle.getCheckedSetting() == ContentSettingValues.BLOCK); case GlobalToggleLayout.FOUR_STATE_COOKIE_TOGGLE: FourStateCookieSettingsPreference fourStateCookieToggle = -@@ -1159,7 +1182,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1165,7 +1193,11 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment } else if (mCategory.getType() == SiteSettingsCategory.Type.THIRD_PARTY_COOKIES) { infoText.setSummary(R.string.website_settings_third_party_cookies_page_description); } else { @@ -1384,7 +1270,7 @@ index 55326fff2442e..fde27fca7c176 100644 } // Hide the anti-abuse text preferences, as needed. -@@ -1183,6 +1210,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1189,6 +1221,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment screen.removePreference(antiAbuseThingsToConsiderHeader); screen.removePreference(antiAbuseThingsToConsiderSectionOne); } @@ -1392,7 +1278,7 @@ index 55326fff2442e..fde27fca7c176 100644 if (permissionBlockedByOs) { maybeShowOsWarning(screen); -@@ -1335,7 +1363,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1352,7 +1385,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment getSiteSettingsDelegate().getBrowserContextHandle(), contentType); int[] descriptionIds = ContentSettingsResources.getTriStateSettingDescriptionIDs(contentType); @@ -1401,7 +1287,7 @@ index 55326fff2442e..fde27fca7c176 100644 } private void configureBinaryToggle(ChromeSwitchPreference binaryToggle, int contentType) { -@@ -1439,6 +1467,14 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment +@@ -1478,6 +1511,14 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment @ContentSettingValues Integer value = site.getContentSetting(browserContextHandle, contentSettingsType); @@ -1417,10 +1303,10 @@ index 55326fff2442e..fde27fca7c176 100644 new AlertDialog.Builder(getContext(), R.style.ThemeOverlay_BrowserUI_AlertDialog) .setTitle(getContext().getString( diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -index f9364005dfe51..47527a056459f 100644 +index 29e435b3fd6f1..3261f2f4b80d9 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -@@ -46,6 +46,7 @@ import org.chromium.content_public.browser.ContentFeatureMap; +@@ -44,6 +44,7 @@ import org.chromium.content_public.browser.BrowserContextHandle; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -1428,7 +1314,7 @@ index f9364005dfe51..47527a056459f 100644 /** * Shows the permissions and other settings for a particular website. -@@ -171,7 +172,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -169,7 +170,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment case ContentSettingsType.CLIPBOARD_READ_WRITE: return "clipboard_permission_list"; default: @@ -1437,7 +1323,7 @@ index f9364005dfe51..47527a056459f 100644 } } -@@ -516,7 +517,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -519,7 +520,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment private void setupContentSettingsPreferences() { mMaxPermissionOrder = findPreference(PREF_PERMISSIONS_HEADER).getOrder(); @@ -1447,7 +1333,7 @@ index f9364005dfe51..47527a056459f 100644 Preference preference = new ChromeSwitchPreference(getStyledContext()); preference.setKey(getPreferenceKey(type)); -@@ -956,14 +958,22 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -957,14 +959,22 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment private void setupContentSettingsPreference(Preference preference, @ContentSettingValues @Nullable Integer value, boolean isEmbargoed) { @@ -1473,7 +1359,7 @@ index f9364005dfe51..47527a056459f 100644 switchPreference.setOnPreferenceChangeListener(this); @ContentSettingsType int contentType = getContentSettingsTypeFromPreferenceKey(preference.getKey()); -@@ -1125,7 +1135,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1113,7 +1123,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment public @ContentSettingsType int getContentSettingsTypeFromPreferenceKey(String preferenceKey) { if (mPreferenceMap == null) { mPreferenceMap = new HashMap<>(); @@ -1482,7 +1368,7 @@ index f9364005dfe51..47527a056459f 100644 String key = getPreferenceKey(type); if (key != null) { mPreferenceMap.put(key, type); -@@ -1167,7 +1177,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1155,7 +1165,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment } mSite.setContentSetting(browserContextHandle, type, permission); @@ -1491,7 +1377,7 @@ index f9364005dfe51..47527a056459f 100644 preference.setIcon(getContentSettingsIcon(type, permission)); if (mWebsiteSettingsObserver != null) { -@@ -1197,7 +1207,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1185,7 +1195,7 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment // TODO(mvanouwerkerk): Refactor this class so that it does not depend on the screen state // for its logic. This class should maintain its own data model, and only update the screen // after a change is made. @@ -1501,7 +1387,7 @@ index f9364005dfe51..47527a056459f 100644 if (key != null) { removePreferenceSafely(key); diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java -index 21b3c682d1fe5..effdf0e5e577b 100644 +index 578a6a3b8a28c..189420227bc7b 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java @@ -37,6 +37,7 @@ public class SiteSettings extends SiteSettingsPreferenceFragment @@ -1530,10 +1416,10 @@ index 21b3c682d1fe5..effdf0e5e577b 100644 Preference p = findPreference(prefCategory); int contentType = SiteSettingsCategory.contentSettingsType(prefCategory); // p can be null if the Preference was removed in configurePreferences. -@@ -130,10 +131,13 @@ public class SiteSettings extends SiteSettingsPreferenceFragment - p.setSummary(ContentSettingsResources.getDesktopSiteListSummary(checked)); - } else if (Type.AUTO_DARK_WEB_CONTENT == prefCategory) { - p.setSummary(ContentSettingsResources.getAutoDarkWebContentListSummary(checked)); +@@ -133,10 +134,13 @@ public class SiteSettings extends SiteSettingsPreferenceFragment + } else if (Type.ZOOM == prefCategory) { + // Don't want to set a summary for Zoom because we don't want any message to display + // under the Zoom row on site settings. - } else if (requiresTriStateSetting) { - p.setSummary(ContentSettingsResources.getCategorySummary(setting)); } else { @@ -1548,28 +1434,28 @@ index 21b3c682d1fe5..effdf0e5e577b 100644 if (prefCategory != Type.THIRD_PARTY_COOKIES) { diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java -index 57be3c740517a..48cf9a3220b4a 100644 +index cc2951ae1d3a7..247879dc4fb5f 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsCategory.java @@ -47,7 +47,7 @@ public class SiteSettingsCategory { Type.PROTECTED_MEDIA, Type.SENSORS, Type.SOUND, Type.USB, Type.VIRTUAL_REALITY, Type.USE_STORAGE, Type.AUTO_DARK_WEB_CONTENT, Type.REQUEST_DESKTOP_SITE, Type.FEDERATED_IDENTITY_API, Type.THIRD_PARTY_COOKIES, Type.SITE_DATA, Type.ANTI_ABUSE, -- Type.NUM_ENTRIES}) -+ Type.NUM_ENTRIES_CHROMIUM}) +- Type.ZOOM, Type.NUM_ENTRIES}) ++ Type.ZOOM, Type.NUM_ENTRIES_CHROMIUM}) @Retention(RetentionPolicy.SOURCE) public @interface Type { // All updates here must also be reflected in {@link #preferenceKey(int) -@@ -84,7 +84,7 @@ public class SiteSettingsCategory { +@@ -85,7 +85,7 @@ public class SiteSettingsCategory { /** * Number of handled categories used for calculating array sizes. */ -- int NUM_ENTRIES = 29; -+ int NUM_ENTRIES_CHROMIUM = 29; +- int NUM_ENTRIES = 30; ++ int NUM_ENTRIES_CHROMIUM = 30; } private final BrowserContextHandle mBrowserContextHandle; -@@ -128,6 +128,9 @@ public class SiteSettingsCategory { +@@ -129,6 +129,9 @@ public class SiteSettingsCategory { } else { permission = ""; } @@ -1579,7 +1465,7 @@ index 57be3c740517a..48cf9a3220b4a 100644 return new SiteSettingsCategory(browserContextHandle, type, permission); } -@@ -136,7 +139,7 @@ public class SiteSettingsCategory { +@@ -137,7 +140,7 @@ public class SiteSettingsCategory { @ContentSettingsType int contentSettingsType) { assert contentSettingsType != -1; assert Type.ALL_SITES == 0; @@ -1588,7 +1474,7 @@ index 57be3c740517a..48cf9a3220b4a 100644 if (contentSettingsType(i) == contentSettingsType) { return createFromType(browserContextHandle, i); } -@@ -147,7 +150,7 @@ public class SiteSettingsCategory { +@@ -148,7 +151,7 @@ public class SiteSettingsCategory { public static SiteSettingsCategory createFromPreferenceKey( BrowserContextHandle browserContextHandle, String preferenceKey) { assert Type.ALL_SITES == 0; @@ -1597,8 +1483,8 @@ index 57be3c740517a..48cf9a3220b4a 100644 if (preferenceKey(i).equals(preferenceKey)) { return createFromType(browserContextHandle, i); } -@@ -217,8 +220,7 @@ public class SiteSettingsCategory { - case Type.USE_STORAGE: +@@ -219,8 +222,7 @@ public class SiteSettingsCategory { + case Type.ZOOM: return ContentSettingsType.DEFAULT; // Conversion unavailable. } - assert false; @@ -1607,9 +1493,9 @@ index 57be3c740517a..48cf9a3220b4a 100644 } /** -@@ -301,8 +303,12 @@ public class SiteSettingsCategory { - case Type.THIRD_PARTY_COOKIES: - return "third_party_cookies"; +@@ -305,8 +307,12 @@ public class SiteSettingsCategory { + case Type.ZOOM: + return "zoom"; default: + { + String value = BromiteCustomContentSettingImpl.getPreferenceKey(type); @@ -1621,10 +1507,10 @@ index 57be3c740517a..48cf9a3220b4a 100644 } diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java -index c76ae6c622426..72b854bbfc5d2 100644 +index 7227a4a2fa9fd..6cb7c3c3e489c 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettingsDelegate.java -@@ -163,6 +163,8 @@ public interface SiteSettingsDelegate { +@@ -173,6 +173,8 @@ public interface SiteSettingsDelegate { */ String getFirstPartySetOwner(String memberOrigin); @@ -1679,10 +1565,10 @@ index c0e93626ebe95..0f97a83df19f9 100644 mAllowed.setDescriptionText(getContext().getText(mDescriptionIds[0])); mAsk.setDescriptionText(getContext().getText(mDescriptionIds[1])); diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -index 321055086e372..c8b0349d29f6f 100644 +index d2ae37792afbe..9925708cb07e0 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -@@ -244,6 +244,12 @@ public final class Website implements WebsiteEntry { +@@ -245,6 +245,12 @@ public final class Website implements WebsiteEntry { RecordUserAction.record("SoundContentSetting.UnmuteBy.SiteSettings"); } } @@ -1696,10 +1582,10 @@ index 321055086e372..c8b0349d29f6f 100644 // mContentSettingException above because this will trigger the actual change // on the PrefServiceBridge. diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java -index 30dba4968c021..b0532383c9dcb 100644 +index dfb46c41ba4de..0d9411fbe877c 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePermissionsFetcher.java -@@ -94,7 +94,7 @@ public class WebsitePermissionsFetcher { +@@ -93,7 +93,7 @@ public class WebsitePermissionsFetcher { case ContentSettingsType.USB_GUARD: return WebsitePermissionsType.CHOSEN_OBJECT_INFO; default: @@ -1708,7 +1594,7 @@ index 30dba4968c021..b0532383c9dcb 100644 } } -@@ -210,7 +210,7 @@ public class WebsitePermissionsFetcher { +@@ -209,7 +209,7 @@ public class WebsitePermissionsFetcher { if (SiteSettingsFeatureList.isEnabled(SiteSettingsFeatureList.SITE_DATA_IMPROVEMENTS)) { queue.add(new CookiesInfoFetcher()); } @@ -1718,10 +1604,10 @@ index 30dba4968c021..b0532383c9dcb 100644 } } diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java -index 2e763118b77c8..dcc01ad43a1f7 100644 +index f5bbcc371d01e..5a076d74e90ee 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java -@@ -244,7 +244,7 @@ public class WebsitePreferenceBridge { +@@ -263,7 +263,7 @@ public class WebsitePreferenceBridge { case ContentSettingsType.PROTECTED_MEDIA_IDENTIFIER: return true; default: @@ -1730,7 +1616,7 @@ index 2e763118b77c8..dcc01ad43a1f7 100644 } } -@@ -259,7 +259,6 @@ public class WebsitePreferenceBridge { +@@ -278,7 +278,6 @@ public class WebsitePreferenceBridge { public static boolean isCategoryEnabled(BrowserContextHandle browserContextHandle, @ContentSettingsType int contentSettingsType) { @@ -1807,7 +1693,7 @@ index 0000000000000..5174b09c2273b @@ -0,0 +1 @@ +this file is intentionally empty diff --git a/components/content_settings/android/BUILD.gn b/components/content_settings/android/BUILD.gn -index 20cf274384b75..386f434003d25 100644 +index 1b5122cbfc37c..1501e0fdf459f 100644 --- a/components/content_settings/android/BUILD.gn +++ b/components/content_settings/android/BUILD.gn @@ -52,6 +52,7 @@ android_library("content_settings_enums_java") { @@ -1819,10 +1705,10 @@ index 20cf274384b75..386f434003d25 100644 "../core/browser/cookie_settings.h", "../core/common/content_settings.h", diff --git a/components/content_settings/core/browser/BUILD.gn b/components/content_settings/core/browser/BUILD.gn -index 978c739d7e2a8..0631cf9561273 100644 +index 03c3d6a249733..0806e73d22997 100644 --- a/components/content_settings/core/browser/BUILD.gn +++ b/components/content_settings/core/browser/BUILD.gn -@@ -83,6 +83,13 @@ static_library("browser") { +@@ -85,6 +85,13 @@ static_library("browser") { } configs += [ "//build/config/compiler:wexit_time_destructors" ] @@ -1844,7 +1730,7 @@ index 0000000000000..5174b09c2273b @@ -0,0 +1 @@ +this file is intentionally empty diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc -index cd3c538dd1bd3..512cabe0e75e1 100644 +index fcadea2d1b216..30b49ba374407 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc @@ -15,6 +15,7 @@ @@ -1855,7 +1741,7 @@ index cd3c538dd1bd3..512cabe0e75e1 100644 namespace content_settings { -@@ -598,6 +599,8 @@ void ContentSettingsRegistry::Init() { +@@ -609,6 +610,8 @@ void ContentSettingsRegistry::Init() { WebsiteSettingsRegistry::ALL_PLATFORMS, ContentSettingsInfo::INHERIT_IN_INCOGNITO, ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS); @@ -1865,10 +1751,10 @@ index cd3c538dd1bd3..512cabe0e75e1 100644 void ContentSettingsRegistry::Register( diff --git a/components/content_settings/core/browser/content_settings_uma_util.cc b/components/content_settings/core/browser/content_settings_uma_util.cc -index 762454cfa1fcb..e95eef156080b 100644 +index 6516306b9d9ad..2789325c54b24 100644 --- a/components/content_settings/core/browser/content_settings_uma_util.cc +++ b/components/content_settings/core/browser/content_settings_uma_util.cc -@@ -171,8 +171,9 @@ void RecordContentSettingsHistogram(const std::string& name, +@@ -173,8 +173,9 @@ void RecordContentSettingsHistogram(const std::string& name, } int ContentSettingTypeToHistogramValue(ContentSettingsType content_setting) { @@ -1880,7 +1766,7 @@ index 762454cfa1fcb..e95eef156080b 100644 auto* found = kHistogramValue.find(content_setting); diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc -index d08e21807bba2..2e9e9dd690dfe 100644 +index 24cf880990791..ab48ce7c18779 100644 --- a/components/content_settings/core/browser/content_settings_utils.cc +++ b/components/content_settings/core/browser/content_settings_utils.cc @@ -14,6 +14,7 @@ @@ -1902,18 +1788,18 @@ index d08e21807bba2..2e9e9dd690dfe 100644 + if (info->is_renderer_content_setting()) { + ContentSettingRuleSource rule; + rule.type = (int32_t)info->type(); -+ map->GetSettingsForOneType(info->type(), &rule.rules); ++ rule.rules = map->GetSettingsForOneType(info->type()); + rules->settings_rules.push_back(rule); + } + } #if !BUILDFLAG(IS_ANDROID) - map->GetSettingsForOneType(ContentSettingsType::IMAGES, - &(rules->image_rules)); + rules->image_rules = map->GetSettingsForOneType(ContentSettingsType::IMAGES); + rules->mixed_content_rules = diff --git a/components/content_settings/core/browser/website_settings_info.h b/components/content_settings/core/browser/website_settings_info.h -index 471c529f503d8..ab72090dfe0ec 100644 +index cc62dac2249ed..8e6b7d76b9b3b 100644 --- a/components/content_settings/core/browser/website_settings_info.h +++ b/components/content_settings/core/browser/website_settings_info.h -@@ -120,6 +120,30 @@ class WebsiteSettingsInfo { +@@ -125,6 +125,30 @@ class WebsiteSettingsInfo { ScopingType scoping_type() const { return scoping_type_; } IncognitoBehavior incognito_behavior() const { return incognito_behavior_; } @@ -1944,7 +1830,7 @@ index 471c529f503d8..ab72090dfe0ec 100644 private: const ContentSettingsType type_; const std::string name_; -@@ -131,6 +155,17 @@ class WebsiteSettingsInfo { +@@ -136,6 +160,17 @@ class WebsiteSettingsInfo { const LossyStatus lossy_status_; const ScopingType scoping_type_; const IncognitoBehavior incognito_behavior_; @@ -1963,7 +1849,7 @@ index 471c529f503d8..ab72090dfe0ec 100644 } // namespace content_settings diff --git a/components/content_settings/core/browser/website_settings_registry.cc b/components/content_settings/core/browser/website_settings_registry.cc -index a797d9fe7be72..8bbadff0f560c 100644 +index 06bb66b0ed718..f6a529cb2a75b 100644 --- a/components/content_settings/core/browser/website_settings_registry.cc +++ b/components/content_settings/core/browser/website_settings_registry.cc @@ -45,6 +45,12 @@ const WebsiteSettingsInfo* WebsiteSettingsRegistry::Get( @@ -1992,10 +1878,10 @@ index 5720db05aaa94..1554148209159 100644 // Register a new website setting. This maps an origin to an arbitrary diff --git a/components/content_settings/core/common/BUILD.gn b/components/content_settings/core/common/BUILD.gn -index a727343298d26..fcc74bb1998eb 100644 +index 6940cf8d7ee28..bc1cc06df6aa5 100644 --- a/components/content_settings/core/common/BUILD.gn +++ b/components/content_settings/core/common/BUILD.gn -@@ -51,6 +51,13 @@ static_library("common") { +@@ -52,6 +52,13 @@ static_library("common") { if (use_blink) { deps += [ "//components/privacy_sandbox:features" ] } @@ -2064,7 +1950,7 @@ index bb69093c65f0c..b2a65c796bcfd 100644 +ContentSettingRuleSource::ContentSettingRuleSource( + const ContentSettingRuleSource&) = default; diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h -index 9af4d2b8395ca..aff0752c46bbf 100644 +index 1e3ed23beb4a1..d86bd42849330 100644 --- a/components/content_settings/core/common/content_settings.h +++ b/components/content_settings/core/common/content_settings.h @@ -66,10 +66,20 @@ struct ContentSettingPatternSource { @@ -2089,10 +1975,10 @@ index 9af4d2b8395ca..aff0752c46bbf 100644 // Filters all the rules by matching the primary pattern with // |outermost_main_frame_url|. Any new type added below that needs to match diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom -index 89509a26e8b54..c286edaf9854b 100644 +index 62f98ef3e7fc7..5fe7497d823a0 100644 --- a/components/content_settings/core/common/content_settings.mojom +++ b/components/content_settings/core/common/content_settings.mojom -@@ -78,6 +78,11 @@ struct RuleMetaData { +@@ -79,6 +79,11 @@ struct RuleMetaData { mojo_base.mojom.TimeDelta lifetime; }; @@ -2104,7 +1990,7 @@ index 89509a26e8b54..c286edaf9854b 100644 // This mirrors the C++ type in content_settings.h. struct ContentSettingPatternSource { ContentSettingsPattern primary_pattern; -@@ -90,6 +95,7 @@ struct ContentSettingPatternSource { +@@ -91,6 +96,7 @@ struct ContentSettingPatternSource { // This mirrors the C++ type in content_settings.h. struct RendererContentSettingRules { @@ -2113,10 +1999,10 @@ index 89509a26e8b54..c286edaf9854b 100644 array script_rules; array popup_redirect_rules; diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc -index 8d6ebd223bb55..ab8b8bdf5aa2a 100644 +index efdb0f63bfaac..29e9ec758372e 100644 --- a/components/content_settings/core/common/content_settings_mojom_traits.cc +++ b/components/content_settings/core/common/content_settings_mojom_traits.cc -@@ -153,12 +153,22 @@ bool StructTraitsmetadata) && data.ReadSource(&out->source); } @@ -2141,10 +2027,10 @@ index 8d6ebd223bb55..ab8b8bdf5aa2a 100644 data.ReadPopupRedirectRules(&out->popup_redirect_rules) && data.ReadMixedContentRules(&out->mixed_content_rules) && diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h -index 286f4955032f2..1811c4b51332c 100644 +index 49479aa938d9f..f027ef2ba75c4 100644 --- a/components/content_settings/core/common/content_settings_mojom_traits.h +++ b/components/content_settings/core/common/content_settings_mojom_traits.h -@@ -165,10 +165,34 @@ struct StructTraits< +@@ -169,10 +169,34 @@ struct StructTraits< ContentSettingPatternSource* out); }; @@ -2193,12 +2079,12 @@ index c8a95b3341a74..b37b65a8e9f53 100644 #endif // COMPONENTS_CONTENT_SETTINGS_CORE_COMMON_CONTENT_SETTINGS_PARAM_TRAITS_H_ diff --git a/components/content_settings/core/common/content_settings_types.h b/components/content_settings/core/common/content_settings_types.h -index e238be9d538dd..aceaefec82ea5 100644 +index 3fe2cfc56bb5b..b798db90f56ee 100644 --- a/components/content_settings/core/common/content_settings_types.h +++ b/components/content_settings/core/common/content_settings_types.h -@@ -331,7 +331,9 @@ enum class ContentSettingsType : int32_t { - // https://github.com/screen-share/capture-all-screens - ALL_SCREEN_CAPTURE, +@@ -343,7 +343,9 @@ enum class ContentSettingsType : int32_t { + // Setting for supporting 3PCD. + TPCD_SUPPORT, - NUM_TYPES, + NUM_TYPES_CHROMIUM, @@ -2300,7 +2186,7 @@ index d7f0078ff0d68..e2c68173872eb 100644 break; default: diff --git a/components/page_info/android/page_info_controller_android.cc b/components/page_info/android/page_info_controller_android.cc -index 126d202ff7355..1271dd5e4a6b1 100644 +index 90bbf0b66c598..257104ea67a99 100644 --- a/components/page_info/android/page_info_controller_android.cc +++ b/components/page_info/android/page_info_controller_android.cc @@ -11,6 +11,7 @@ @@ -2311,7 +2197,7 @@ index 126d202ff7355..1271dd5e4a6b1 100644 #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/page_info/android/jni_headers/PageInfoController_jni.h" -@@ -151,6 +152,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( +@@ -146,6 +147,15 @@ void PageInfoControllerAndroid::SetPermissionInfo( ContentSettingsType::FEDERATED_IDENTITY_API); } @@ -2327,7 +2213,7 @@ index 126d202ff7355..1271dd5e4a6b1 100644 std::map user_specified_settings_to_display; -@@ -204,6 +214,14 @@ absl::optional PageInfoControllerAndroid::GetSettingToDisplay( +@@ -199,6 +209,14 @@ absl::optional PageInfoControllerAndroid::GetSettingToDisplay( return permission.setting; } @@ -2343,18 +2229,18 @@ index 126d202ff7355..1271dd5e4a6b1 100644 // are set to the default. if (permission.type == ContentSettingsType::ADS) { diff --git a/components/page_info/page_info.cc b/components/page_info/page_info.cc -index 68340f351dd3d..76bffe277e7db 100644 +index 18dd31f524a09..0be5287fa5328 100644 --- a/components/page_info/page_info.cc +++ b/components/page_info/page_info.cc -@@ -27,6 +27,7 @@ +@@ -24,6 +24,7 @@ #include "components/browsing_data/content/browsing_data_helper.h" - #include "components/browsing_data/content/local_storage_helper.h" + #include "components/browsing_data/core/features.h" #include "components/content_settings/browser/page_specific_content_settings.h" +#include "components/content_settings/core/browser/website_settings_registry.h" #include "components/content_settings/browser/ui/cookie_controls_controller.h" #include "components/content_settings/core/browser/content_settings_registry.h" #include "components/content_settings/core/browser/content_settings_uma_util.h" -@@ -1191,6 +1192,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, +@@ -1230,6 +1231,14 @@ void PageInfo::PopulatePermissionInfo(PermissionInfo& permission_info, // applies to permissions listed in |kPermissionType|. bool PageInfo::ShouldShowPermission( const PageInfo::PermissionInfo& info) const { @@ -2369,7 +2255,7 @@ index 68340f351dd3d..76bffe277e7db 100644 // Note |ContentSettingsType::ADS| will show up regardless of its default // value when it has been activated on the current origin. if (info.type == ContentSettingsType::ADS) { -@@ -1279,7 +1288,19 @@ void PageInfo::PresentSitePermissions() { +@@ -1318,7 +1327,19 @@ void PageInfo::PresentSitePermissions() { HostContentSettingsMap* content_settings = GetContentSettings(); DCHECK(web_contents_); @@ -2391,7 +2277,7 @@ index 68340f351dd3d..76bffe277e7db 100644 permission_info.type = type; diff --git a/components/page_info/page_info_ui.cc b/components/page_info/page_info_ui.cc -index 84dc85fc3d973..68b2669d1e761 100644 +index 59af8d65b18cd..1a74b8c104413 100644 --- a/components/page_info/page_info_ui.cc +++ b/components/page_info/page_info_ui.cc @@ -13,6 +13,7 @@ @@ -2399,10 +2285,10 @@ index 84dc85fc3d973..68b2669d1e761 100644 #include "build/chromeos_buildflags.h" #include "components/content_settings/core/common/content_settings.h" +#include "components/content_settings/core/browser/website_settings_registry.h" - #include "components/omnibox/common/omnibox_features.h" #include "components/page_info/core/features.h" #include "components/page_info/page_info.h" -@@ -576,6 +577,12 @@ PageInfoUI::~PageInfoUI() = default; + #include "components/page_info/page_info_ui_delegate.h" +@@ -571,6 +572,12 @@ PageInfoUI::~PageInfoUI() = default; // static std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { @@ -2415,7 +2301,7 @@ index 84dc85fc3d973..68b2669d1e761 100644 for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id); -@@ -587,6 +594,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { +@@ -582,6 +589,12 @@ std::u16string PageInfoUI::PermissionTypeToUIString(ContentSettingsType type) { // static std::u16string PageInfoUI::PermissionTypeToUIStringMidSentence( ContentSettingsType type) { @@ -2428,7 +2314,7 @@ index 84dc85fc3d973..68b2669d1e761 100644 for (const PermissionUIInfo& info : GetContentSettingsUIInfo()) { if (info.type == type) return l10n_util::GetStringUTF16(info.string_id_mid_sentence); -@@ -977,6 +990,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { +@@ -990,6 +1003,11 @@ bool PageInfoUI::ContentSettingsTypeInPageInfo(ContentSettingsType type) { if (info.type == type) return true; } @@ -2441,7 +2327,7 @@ index 84dc85fc3d973..68b2669d1e761 100644 } diff --git a/components/site_settings_strings.grdp b/components/site_settings_strings.grdp -index efc94cdfee436..198197f2cd2d4 100644 +index 87f46eaa4aaec..b796301adf69d 100644 --- a/components/site_settings_strings.grdp +++ b/components/site_settings_strings.grdp @@ -1,5 +1,6 @@ @@ -2475,7 +2361,7 @@ index 99f89fab0ee0d..104a40c996742 100644 virtual bool AllowAutoDarkWebContent(bool enabled_per_settings) { return enabled_per_settings; diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc -index d2bd394b1d577..06b1a5ad0fad4 100644 +index 8786828814f17..efc08516fd1bb 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc @@ -68,6 +68,22 @@ @@ -2502,7 +2388,7 @@ index d2bd394b1d577..06b1a5ad0fad4 100644 Agent* agent, bool is_window) diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h -index e811d5d3bf6f3..31a7d41d1c871 100644 +index 2ffaab0313a09..72f9eca8d4a84 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.h +++ b/third_party/blink/renderer/core/execution_context/execution_context.h @@ -43,6 +43,7 @@ @@ -2525,10 +2411,10 @@ index e811d5d3bf6f3..31a7d41d1c871 100644 enum ReasonForCallingCanExecuteScripts { kAboutToExecuteScript, diff --git a/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java b/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java -index dbd9983de7104..23df8d3c4616b 100644 +index 9b90caff96aae..0ac85d7fc5522 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerSiteSettingsDelegate.java -@@ -155,6 +155,9 @@ public class WebLayerSiteSettingsDelegate +@@ -163,6 +163,9 @@ public class WebLayerSiteSettingsDelegate @Override public void dismissPrivacySandboxSnackbar() {} diff --git a/bromite/build/patches/Dictionary-suggestions-for-the-Omnibox.patch b/bromite/build/patches/Dictionary-suggestions-for-the-Omnibox.patch index 1c9f4dcc..68e03277 100644 --- a/bromite/build/patches/Dictionary-suggestions-for-the-Omnibox.patch +++ b/bromite/build/patches/Dictionary-suggestions-for-the-Omnibox.patch @@ -1,4 +1,4 @@ -From 52987da24cd6557064fd32d781208150bd894b39 Mon Sep 17 00:00:00 2001 +From a1b4bb0be4ef4ff2780e29451219d9a26e828260 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 19 Mar 2022 10:53:24 +0100 Subject: [PATCH 161/192] Dictionary suggestions for the Omnibox @@ -965,10 +965,10 @@ index 0000000000000..642274f4139dc + } +} diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java -index 8c267e141680f..8f73637af61b2 100644 +index 3cb15e87e2f00..ff39876f0c47f 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java -@@ -227,8 +227,7 @@ public abstract class UrlBar extends AutocompleteEditText { +@@ -228,8 +228,7 @@ public abstract class UrlBar extends AutocompleteEditText { setFocusableInTouchMode(mAllowFocus); }); diff --git a/bromite/build/patches/Disable-Accessibility-service-by-default.patch b/bromite/build/patches/Disable-Accessibility-service-by-default.patch index e6f00926..7dc5d2c0 100644 --- a/bromite/build/patches/Disable-Accessibility-service-by-default.patch +++ b/bromite/build/patches/Disable-Accessibility-service-by-default.patch @@ -1,4 +1,4 @@ -From 77cb3d7e03a44943dda406e2790de1bccb0c653b Mon Sep 17 00:00:00 2001 +From 9a30c712627894ae82e0de05b127ffc5fbe54672 Mon Sep 17 00:00:00 2001 From: uazo Date: Mon, 8 Nov 2021 09:47:23 +0000 Subject: [PATCH 146/192] Disable Accessibility service by default @@ -13,10 +13,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 4 files changed, 19 insertions(+) diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index ca0b52dd3fed4..92bd8e92b6d5b 100644 +index 2d4640dd3b79b..8b4b9dd0d71a7 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1736,6 +1736,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1763,6 +1763,12 @@ Your Google account may have other forms of browsing history like searches and a Check now @@ -30,7 +30,7 @@ index ca0b52dd3fed4..92bd8e92b6d5b 100644 An error occurred. diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml -index d3d6c8ec9d436..62207fd4bec14 100644 +index 2fc5bcc4e2976..6758a46475034 100644 --- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml @@ -7,6 +7,11 @@ found in the LICENSE file. @@ -46,10 +46,10 @@ index d3d6c8ec9d436..62207fd4bec14 100644 android:key="text_scale" android:title="@string/font_size" diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -index 2cc361badfd1d..97ccef87e5829 100644 +index 2e582921f433d..b603b4ed77374 100644 --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -19,6 +19,9 @@ import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; +@@ -18,6 +18,9 @@ import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.CustomDividerFragment; import org.chromium.components.browser_ui.settings.SettingsUtils; @@ -60,10 +60,10 @@ index 2cc361badfd1d..97ccef87e5829 100644 * Fragment to keep track of all the accessibility related preferences. */ diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java -index 263ab932de02d..d5a2d1800ae8f 100644 +index 94f718a619cea..f7740f3073e57 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java -@@ -909,6 +909,11 @@ public class WebContentsAccessibilityImpl extends AccessibilityNodeProviderCompa +@@ -1024,6 +1024,11 @@ public class WebContentsAccessibilityImpl extends AccessibilityNodeProviderCompa structure.setChildCount(0); return; } diff --git a/bromite/build/patches/Disable-AsyncDNS-by-default.patch b/bromite/build/patches/Disable-AsyncDNS-by-default.patch index 3ff5755d..279179fe 100644 --- a/bromite/build/patches/Disable-AsyncDNS-by-default.patch +++ b/bromite/build/patches/Disable-AsyncDNS-by-default.patch @@ -1,4 +1,4 @@ -From a23811699e79d65a5571d0afd6604cf4db68ad71 Mon Sep 17 00:00:00 2001 +From b320f1c8c6b83ce2df7e0fb9e3a7e48453af87eb Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 26 Mar 2022 16:41:55 +0100 Subject: [PATCH 162/192] Disable AsyncDNS by default @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc -index 63b4a3b4ba62c..94e27ef3b2a61 100644 +index 0c8bf807c0c72..9ca342a78a9e6 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -66,13 +66,8 @@ BASE_FEATURE(kAppShimNewCloseBehavior, +@@ -67,13 +67,8 @@ BASE_FEATURE(kAppShimNewCloseBehavior, // Enables the built-in DNS resolver. BASE_FEATURE(kAsyncDns, diff --git a/bromite/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch b/bromite/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch index 1e16a7a1..10963e01 100644 --- a/bromite/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch +++ b/bromite/build/patches/Disable-DRM-media-origin-IDs-preprovisioning.patch @@ -1,4 +1,4 @@ -From e1cc3019e66d675b6495de92ea8152e8c6cf461f Mon Sep 17 00:00:00 2001 +From 9adf439f2bc0ad070f4c6c96b24e27fbfffa6fa9 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 24 Jan 2020 09:46:48 +0100 Subject: [PATCH 103/192] Disable DRM media origin IDs preprovisioning @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc -index 14c4fd5fefbd7..3352c21226ff9 100644 +index 2b16d6450bbcf..2c8a257f5ea4a 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -1041,8 +1041,8 @@ BASE_FEATURE(kMediaDrmPersistentLicense, +@@ -1056,8 +1056,8 @@ BASE_FEATURE(kMediaDrmPersistentLicense, // MediaDrmBridge. If disabled, MediaDrmBridge will get unprovisioned origin IDs // which will trigger provisioning process after MediaDrmBridge is created. BASE_FEATURE(kMediaDrmPreprovisioning, diff --git a/bromite/build/patches/Disable-FLoC-and-privacy-sandbox.patch b/bromite/build/patches/Disable-FLoC-and-privacy-sandbox.patch index 3219afe2..e51c02a4 100644 --- a/bromite/build/patches/Disable-FLoC-and-privacy-sandbox.patch +++ b/bromite/build/patches/Disable-FLoC-and-privacy-sandbox.patch @@ -1,4 +1,4 @@ -From 784033815fe817ac36281958c992111a8675b4cb Mon Sep 17 00:00:00 2001 +From cd0796fe4b022b3c1035be512cf6fc208f58a739 Mon Sep 17 00:00:00 2001 From: uazo Date: Sat, 13 Nov 2021 09:17:06 +0000 Subject: [PATCH 068/192] Disable FLoC and privacy sandbox @@ -21,10 +21,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 7 files changed, 27 insertions(+), 24 deletions(-) diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index ec6770ba975b1..37dab0611a399 100644 +index 67bd7b6e8e458..31cfbab55ccf5 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -3395,6 +3395,9 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed( +@@ -3424,6 +3424,9 @@ bool ChromeContentBrowserClient::IsAttributionReportingOperationAllowed( const url::Origin* source_origin, const url::Origin* destination_origin, const url::Origin* reporting_origin) { @@ -59,7 +59,7 @@ index 3db58b630b6c7..cafef6a7d3549 100644 if (!identity_manager || diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc -index 078c2911936b5..cd18116c63d8d 100644 +index 2d23e7eb77c25..f497cd0403f85 100644 --- a/components/history/core/browser/history_backend.cc +++ b/components/history/core/browser/history_backend.cc @@ -669,18 +669,7 @@ void HistoryBackend::SetBrowsingTopicsAllowed(ContextID context_id, @@ -83,7 +83,7 @@ index 078c2911936b5..cd18116c63d8d 100644 } diff --git a/components/privacy_sandbox/privacy_sandbox_features.cc b/components/privacy_sandbox/privacy_sandbox_features.cc -index 1ab0c5b5c90d9..6ac84b20478d0 100644 +index 3d4e7ecbea694..bcf2c813c904e 100644 --- a/components/privacy_sandbox/privacy_sandbox_features.cc +++ b/components/privacy_sandbox/privacy_sandbox_features.cc @@ -7,8 +7,8 @@ @@ -118,10 +118,10 @@ index 1ab0c5b5c90d9..6ac84b20478d0 100644 BASE_FEATURE(kPrivacySandboxFirstPartySetsUI, "PrivacySandboxFirstPartySetsUI", diff --git a/components/privacy_sandbox/privacy_sandbox_prefs.cc b/components/privacy_sandbox/privacy_sandbox_prefs.cc -index ede1f3542483a..52e53ca7e51d2 100644 +index 2fe3b544a62d6..4eaf5eb62a747 100644 --- a/components/privacy_sandbox/privacy_sandbox_prefs.cc +++ b/components/privacy_sandbox/privacy_sandbox_prefs.cc -@@ -108,7 +108,7 @@ namespace privacy_sandbox { +@@ -11,7 +11,7 @@ namespace privacy_sandbox { void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref( @@ -131,10 +131,10 @@ index ede1f3542483a..52e53ca7e51d2 100644 registry->RegisterBooleanPref(prefs::kPrivacySandboxApisEnabledV2, false); registry->RegisterBooleanPref(prefs::kPrivacySandboxM1ConsentDecisionMade, diff --git a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc b/components/privacy_sandbox/privacy_sandbox_settings_impl.cc -index 0aec405bea65d..0412f5f1bdac8 100644 +index f8a46ce4ad650..0ed953465a6f8 100644 --- a/components/privacy_sandbox/privacy_sandbox_settings_impl.cc +++ b/components/privacy_sandbox/privacy_sandbox_settings_impl.cc -@@ -170,7 +170,8 @@ PrivacySandboxSettingsImpl::GetFinchDisabledTopics() { +@@ -204,7 +204,8 @@ PrivacySandboxSettingsImpl::GetFinchDisabledTopics() { return finch_disabled_topics_; } @@ -144,7 +144,7 @@ index 0aec405bea65d..0412f5f1bdac8 100644 // M1 specific if (base::FeatureList::IsEnabled(privacy_sandbox::kPrivacySandboxSettings4)) { Status status = GetM1TopicAllowedStatus(); -@@ -221,7 +222,8 @@ bool PrivacySandboxSettingsImpl::IsTopicsAllowedForContext( +@@ -261,7 +262,8 @@ bool PrivacySandboxSettingsImpl::IsTopicsAllowedForContext( IsPrivacySandboxEnabledForContext(top_frame_origin, url); } @@ -154,7 +154,7 @@ index 0aec405bea65d..0412f5f1bdac8 100644 const auto& blocked_topics = pref_service_->GetList(prefs::kPrivacySandboxBlockedTopics); -@@ -463,7 +465,8 @@ void PrivacySandboxSettingsImpl::ClearFledgeJoiningAllowedSettings( +@@ -517,7 +519,8 @@ void PrivacySandboxSettingsImpl::ClearFledgeJoiningAllowedSettings( } bool PrivacySandboxSettingsImpl::IsFledgeJoiningAllowed( @@ -164,7 +164,7 @@ index 0aec405bea65d..0412f5f1bdac8 100644 ScopedDictPrefUpdate scoped_pref_update( pref_service_, prefs::kPrivacySandboxFledgeJoinBlocked); auto& pref_data = scoped_pref_update.Get(); -@@ -595,7 +598,8 @@ bool PrivacySandboxSettingsImpl::IsPrivateAggregationAllowed( +@@ -672,7 +675,8 @@ bool PrivacySandboxSettingsImpl::IsPrivateAggregationAllowed( reporting_origin.GetURL()); } @@ -174,7 +174,7 @@ index 0aec405bea65d..0412f5f1bdac8 100644 PrivacySandboxSettingsImpl::Status status = GetPrivacySandboxAllowedStatus(); if (!IsAllowed(status)) { return false; -@@ -633,7 +637,8 @@ void PrivacySandboxSettingsImpl::SetTopicsBlockedForTesting() { +@@ -710,7 +714,8 @@ void PrivacySandboxSettingsImpl::SetTopicsBlockedForTesting() { pref_service_->SetBoolean(prefs::kPrivacySandboxApisEnabledV2, false); } @@ -184,7 +184,7 @@ index 0aec405bea65d..0412f5f1bdac8 100644 pref_service_->SetBoolean(prefs::kPrivacySandboxApisEnabledV2, enabled); } -@@ -695,7 +700,10 @@ bool PrivacySandboxSettingsImpl::IsPrivacySandboxEnabledForContext( +@@ -772,7 +777,10 @@ bool PrivacySandboxSettingsImpl::IsPrivacySandboxEnabledForContext( net::CookieSettingOverrides()); } @@ -196,7 +196,7 @@ index 0aec405bea65d..0412f5f1bdac8 100644 pref_service_->SetTime(prefs::kPrivacySandboxTopicsDataAccessibleSince, base::Time::Now()); -@@ -708,6 +716,7 @@ PrivacySandboxSettingsImpl::Status +@@ -785,6 +793,7 @@ PrivacySandboxSettingsImpl::Status PrivacySandboxSettingsImpl::GetSiteAccessAllowedStatus( const url::Origin& top_frame_origin, const GURL& url) const { diff --git a/bromite/build/patches/Disable-NTP-remote-suggestions-by-default.patch b/bromite/build/patches/Disable-NTP-remote-suggestions-by-default.patch index 2722b991..ca1e4a56 100644 --- a/bromite/build/patches/Disable-NTP-remote-suggestions-by-default.patch +++ b/bromite/build/patches/Disable-NTP-remote-suggestions-by-default.patch @@ -1,4 +1,4 @@ -From 4697fdcde60cadc96617200c3199c5e1af5e7b86 Mon Sep 17 00:00:00 2001 +From 3e13f38977e419f0f547c0c412b6d31ef46ae170 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 12 Oct 2017 08:15:17 +0200 Subject: [PATCH 033/192] Disable NTP remote suggestions by default diff --git a/bromite/build/patches/Disable-PrivacyGuide.patch b/bromite/build/patches/Disable-PrivacyGuide.patch index 51f16d78..edbcf987 100644 --- a/bromite/build/patches/Disable-PrivacyGuide.patch +++ b/bromite/build/patches/Disable-PrivacyGuide.patch @@ -1,4 +1,4 @@ -From a7332c79b2bd86833e0e9326dc079bd66c632ff4 Mon Sep 17 00:00:00 2001 +From bdbda91702a634523531fc7551392f27d0d898db Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 31 Jul 2022 22:13:11 +0200 Subject: [PATCH 180/192] Disable PrivacyGuide @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc -index 32ca6ba1c975c..09f9f87805e0e 100644 +index 6c655f22d2f46..2153a9b5f5a84 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -479,8 +479,8 @@ BASE_FEATURE(kHaTSDesktopDevToolsIssuesCSP, +@@ -480,8 +480,8 @@ BASE_FEATURE(kPrivacyGuide3, // Enables or disables the Happiness Tracking System for Desktop Privacy Guide. BASE_FEATURE(kHappinessTrackingSurveysForDesktopPrivacyGuide, @@ -23,8 +23,8 @@ index 32ca6ba1c975c..09f9f87805e0e 100644 const base::FeatureParam kHappinessTrackingSurveysForDesktopPrivacyGuideTime{ &kHappinessTrackingSurveysForDesktopPrivacyGuide, "settings-time", -@@ -949,8 +949,8 @@ BASE_FEATURE(kPrerenderFallbackToPreconnect, - base::FEATURE_DISABLED_BY_DEFAULT); +@@ -992,8 +992,8 @@ BASE_FEATURE(kPrintPreviewSetupAssistance, + #endif BASE_FEATURE(kPrivacyGuideAndroid, - "PrivacyGuideAndroid", diff --git a/bromite/build/patches/Disable-StartSurface-feature.patch b/bromite/build/patches/Disable-StartSurface-feature.patch index 476f2314..6e41711a 100644 --- a/bromite/build/patches/Disable-StartSurface-feature.patch +++ b/bromite/build/patches/Disable-StartSurface-feature.patch @@ -1,4 +1,4 @@ -From 12347af237cda9e27947518470e18d14b2ea14de Mon Sep 17 00:00:00 2001 +From 2d15e2726df41f73e921204a79724c3253444ec2 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 16 Nov 2022 11:18:07 +0100 Subject: [PATCH 188/192] Disable StartSurface feature @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index 3dd86ddb7783e..1159b67bb8244 100644 +index ea6d5fd491953..c77305eed83df 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -1109,8 +1109,8 @@ BASE_FEATURE(kResizeOnlyActiveTab, +@@ -1127,8 +1127,8 @@ BASE_FEATURE(kResizeOnlyActiveTab, BASE_FEATURE(kSpareTab, "SpareTab", base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kStartSurfaceAndroid, @@ -27,10 +27,10 @@ index 3dd86ddb7783e..1159b67bb8244 100644 BASE_FEATURE(kFeedPositionAndroid, "FeedPositionAndroid", diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index e579f1d77c8cd..ef770459444d1 100644 +index 241a0c003119d..16c4a2d0905c7 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -584,7 +584,7 @@ public abstract class ChromeFeatureList { +@@ -591,7 +591,7 @@ public abstract class ChromeFeatureList { new CachedFlag(SHOULD_IGNORE_INTENT_SKIP_INTERNAL_CHECK, true); public static final CachedFlag sSpareTab = new CachedFlag(SPARE_TAB, false); public static final CachedFlag sStartSurfaceAndroid = new CachedFlag( diff --git a/bromite/build/patches/Disable-TLS-resumption.patch b/bromite/build/patches/Disable-TLS-resumption.patch index 01d6d58c..a5553520 100644 --- a/bromite/build/patches/Disable-TLS-resumption.patch +++ b/bromite/build/patches/Disable-TLS-resumption.patch @@ -1,4 +1,4 @@ -From c3623273c84160d8efee875ec7e30819bfbf0e2f Mon Sep 17 00:00:00 2001 +From 8f638a7854c3ef7d720d6b99d623e9ccd59f464a Mon Sep 17 00:00:00 2001 From: uazo Date: Thu, 24 Mar 2022 10:08:00 +0000 Subject: [PATCH 167/192] Disable TLS resumption @@ -38,10 +38,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 9 files changed, 130 insertions(+), 1 deletion(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 39918ceecb34f..34f018070336b 100644 +index 0006633c72b7b..92ef357be1694 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5284,6 +5284,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5346,6 +5346,12 @@ const FeatureEntry kFeatureEntries[] = { {"enable-tls13-kyber", flag_descriptions::kEnableTLS13KyberName, flag_descriptions::kEnableTLS13KyberDescription, kOsAll, FEATURE_VALUE_TYPE(net::features::kPostQuantumKyber)}, @@ -52,13 +52,13 @@ index 39918ceecb34f..34f018070336b 100644 + flag_descriptions::kLogTLSResumptionDescription, kOsAll, + FEATURE_VALUE_TYPE(net::features::kLogTLSResumption)}, #if BUILDFLAG(IS_ANDROID) - {"feed-bottom-sync-banner", flag_descriptions::kFeedBottomSyncBannerName, - flag_descriptions::kFeedBottomSyncBannerDescription, kOsAndroid, + {"feed-boc-signin-interstitial", + flag_descriptions::kFeedBoCSigninInterstitialName, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 802af883f2789..2a4e23a152fd8 100644 +index 7b2a885c9a4cc..1f7381558bc09 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1077,6 +1077,14 @@ const char kAccessibilityAcceleratorNotificationsTimeoutDescription[] = +@@ -1111,6 +1111,14 @@ const char kAccessibilityAcceleratorNotificationsTimeoutDescription[] = "shortcut (docked magnifier, screen magnifier and high contrast) to time " "out instead of remaining pinned."; @@ -74,10 +74,10 @@ index 802af883f2789..2a4e23a152fd8 100644 const char kAccessibilityServiceDescription[] = "This option enables the experimental Accessibility Service and runs some " diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 9b6c6ef4e61ea..21b507937cbec 100644 +index fb4a3613f4249..eb34c2821d18c 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -615,6 +615,12 @@ extern const char kEnablePreinstalledWebAppDuplicationFixerDescription[]; +@@ -636,6 +636,12 @@ extern const char kDevicePostureDescription[]; extern const char kEnableTLS13EarlyDataName[]; extern const char kEnableTLS13EarlyDataDescription[]; @@ -91,10 +91,10 @@ index 9b6c6ef4e61ea..21b507937cbec 100644 extern const char kEnableTLS13KyberDescription[]; diff --git a/net/base/features.cc b/net/base/features.cc -index 68c4f33cc65a6..40744f7569e3f 100644 +index 640f5b8f93f2b..de5a9d7603a73 100644 --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -66,6 +66,14 @@ const base::FeatureParam kUseDnsHttpsSvcbSecureExtraTimeMin{ +@@ -67,6 +67,14 @@ const base::FeatureParam kUseDnsHttpsSvcbSecureExtraTimeMin{ &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbSecureExtraTimeMin", base::Milliseconds(5)}; @@ -110,10 +110,10 @@ index 68c4f33cc65a6..40744f7569e3f 100644 "UseDnsHttpsSvcbAlpn", base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/net/base/features.h b/net/base/features.h -index f59980eae8f21..1fbe4fb3e16ce 100644 +index 47a793b517622..8f60b820ebcf6 100644 --- a/net/base/features.h +++ b/net/base/features.h -@@ -99,6 +99,12 @@ NET_EXPORT BASE_DECLARE_FEATURE(kSHA1ServerSignature); +@@ -107,6 +107,12 @@ NET_EXPORT BASE_DECLARE_FEATURE(kSHA1ServerSignature); // Enables TLS 1.3 early data. NET_EXPORT BASE_DECLARE_FEATURE(kEnableTLS13EarlyData); @@ -127,10 +127,10 @@ index f59980eae8f21..1fbe4fb3e16ce 100644 // https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-13 NET_EXPORT BASE_DECLARE_FEATURE(kEncryptedClientHello); diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc -index 35db4d7cc86fc..5e5edf9821c10 100644 +index dceb9c8c04c1c..db63a4e42352f 100644 --- a/net/http/http_network_session.cc +++ b/net/http/http_network_session.cc -@@ -213,6 +213,7 @@ HttpNetworkSession::HttpNetworkSession(const HttpNetworkSessionParams& params, +@@ -208,6 +208,7 @@ HttpNetworkSession::HttpNetworkSession(const HttpNetworkSessionParams& params, next_protos_.push_back(kProtoHTTP11); @@ -139,10 +139,10 @@ index 35db4d7cc86fc..5e5edf9821c10 100644 context.quic_context->params()->max_server_configs_stored_in_properties); http_server_properties_->SetBrokenAlternativeServicesDelayParams( diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc -index 17039c10074ae..c6ee950a7f746 100644 +index 621ea811f2141..ce58719746160 100644 --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc -@@ -71,6 +71,7 @@ +@@ -70,6 +70,7 @@ #include "net/third_party/quiche/src/quiche/quic/core/quic_utils.h" #include "net/third_party/quiche/src/quiche/quic/platform/api/quic_flags.h" #include "third_party/boringssl/src/include/openssl/aead.h" @@ -150,7 +150,7 @@ index 17039c10074ae..c6ee950a7f746 100644 #include "url/gurl.h" #include "url/scheme_host_port.h" #include "url/url_constants.h" -@@ -197,6 +198,38 @@ std::set HostsFromOrigins(std::set origins) { +@@ -196,6 +197,38 @@ std::set HostsFromOrigins(std::set origins) { } // namespace @@ -189,7 +189,7 @@ index 17039c10074ae..c6ee950a7f746 100644 // Refcounted class that owns quic::QuicCryptoClientConfig and tracks how many // consumers are using it currently. When the last reference is freed, the // QuicCryptoClientConfigHandle informs the owning QuicStreamFactory, moves it -@@ -2365,7 +2398,7 @@ QuicStreamFactory::CreateCryptoConfigHandle( +@@ -2355,7 +2388,7 @@ QuicStreamFactory::CreateCryptoConfigHandle( sct_auditing_delegate_, HostsFromOrigins(params_.origins_to_force_quic_on), actual_network_anonymization_key), @@ -197,9 +197,9 @@ index 17039c10074ae..c6ee950a7f746 100644 + std::make_unique(), this); quic::QuicCryptoClientConfig* crypto_config = crypto_config_owner->config(); - crypto_config->set_user_agent_id(params_.user_agent_id); + crypto_config->AddCanonicalSuffix(".c.youtube.com"); diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc -index 9aa3f2607292a..924adbdbc776d 100644 +index 9d7134c1cf605..c93e6572f459c 100644 --- a/net/socket/ssl_client_socket_impl.cc +++ b/net/socket/ssl_client_socket_impl.cc @@ -380,7 +380,33 @@ SSLClientSocketImpl::SSLClientSocketImpl( @@ -281,7 +281,7 @@ index 9aa3f2607292a..924adbdbc776d 100644 UMA_HISTOGRAM_ENUMERATION("Net.SSLHandshakeDetails", details); // Measure TLS connections that implement the renegotiation_info extension. -@@ -1746,6 +1803,8 @@ bool SSLClientSocketImpl::IsRenegotiationAllowed() const { +@@ -1734,6 +1791,8 @@ bool SSLClientSocketImpl::IsRenegotiationAllowed() const { } bool SSLClientSocketImpl::IsCachingEnabled() const { diff --git a/bromite/build/patches/Disable-UA-full-version.patch b/bromite/build/patches/Disable-UA-full-version.patch index 113b2ff9..557f7a23 100644 --- a/bromite/build/patches/Disable-UA-full-version.patch +++ b/bromite/build/patches/Disable-UA-full-version.patch @@ -1,4 +1,4 @@ -From 0ad8e26f90367832a5f8e514d76ead71c4af1c23 Mon Sep 17 00:00:00 2001 +From 88051684f4448f1c8d404c21590c3e1cc3389a47 Mon Sep 17 00:00:00 2001 From: uazo Date: Wed, 16 Feb 2022 14:28:58 +0000 Subject: [PATCH 160/192] Disable UA full version @@ -12,19 +12,19 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/third_party/blink/renderer/core/frame/navigator_ua_data.cc b/third_party/blink/renderer/core/frame/navigator_ua_data.cc -index b735361975585..4b87e4be1c4c6 100644 +index 0a8e6c4d7a198..b5c64bb6f24fd 100644 --- a/third_party/blink/renderer/core/frame/navigator_ua_data.cc +++ b/third_party/blink/renderer/core/frame/navigator_ua_data.cc -@@ -6,6 +6,8 @@ - +@@ -7,6 +7,8 @@ #include "base/compiler_specific.h" #include "base/task/single_thread_task_runner.h" + #include "third_party/blink/public/common/features.h" +#include "base/version.h" +#include "base/strings/strcat.h" #include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h" #include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h" #include "third_party/blink/public/common/privacy_budget/identifiable_surface.h" -@@ -39,6 +41,16 @@ void MaybeRecordMetric(bool record_identifiability, +@@ -40,6 +42,16 @@ void MaybeRecordMetric(bool record_identifiability, .Record(execution_context->UkmRecorder()); } @@ -41,7 +41,7 @@ index b735361975585..4b87e4be1c4c6 100644 } // namespace NavigatorUAData::NavigatorUAData(ExecutionContext* context) -@@ -77,7 +89,7 @@ void NavigatorUAData::SetFullVersionList( +@@ -78,7 +90,7 @@ void NavigatorUAData::SetFullVersionList( const UserAgentBrandList& full_version_list) { for (const auto& brand_version : full_version_list) { AddBrandFullVersion(String::FromUTF8(brand_version.brand), @@ -50,7 +50,7 @@ index b735361975585..4b87e4be1c4c6 100644 } } -@@ -99,7 +111,7 @@ void NavigatorUAData::SetModel(const String& model) { +@@ -100,7 +112,7 @@ void NavigatorUAData::SetModel(const String& model) { } void NavigatorUAData::SetUAFullVersion(const String& ua_full_version) { diff --git a/bromite/build/patches/Disable-add-to-home-screen-prompt.patch b/bromite/build/patches/Disable-add-to-home-screen-prompt.patch index b8e958b4..d049c27d 100644 --- a/bromite/build/patches/Disable-add-to-home-screen-prompt.patch +++ b/bromite/build/patches/Disable-add-to-home-screen-prompt.patch @@ -1,4 +1,4 @@ -From 7c72dc4a6fdfd0f40cb32b1f97b0b875bee7ebe5 Mon Sep 17 00:00:00 2001 +From 87c861361f598efb55a6206f818b6481ac2c73ec Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 28 Sep 2022 00:54:10 +0200 Subject: [PATCH 185/192] Disable add to home screen prompt diff --git a/bromite/build/patches/Disable-all-predictors-code.patch b/bromite/build/patches/Disable-all-predictors-code.patch index b509a49f..426698d8 100644 --- a/bromite/build/patches/Disable-all-predictors-code.patch +++ b/bromite/build/patches/Disable-all-predictors-code.patch @@ -1,4 +1,4 @@ -From 487f7ff6888b8381cd70eb190591262e1a1b9112 Mon Sep 17 00:00:00 2001 +From 4797902ca7b82286cf20dbd3818da9eecc47cfb1 Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 25 Jan 2022 12:22:52 +0000 Subject: [PATCH 157/192] Disable all predictors code @@ -6,11 +6,13 @@ Subject: [PATCH 157/192] Disable all predictors code Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/browser_features.cc | 12 ++--- + chrome/browser/browser_features.cc | 16 +++---- .../ranking/history_clusters_module_ranker.cc | 3 +- .../chrome_hints_manager.cc | 1 + .../optimization_guide_keyed_service.cc | 1 - + .../browser/predictors/loading_predictor.cc | 4 +- .../predictors/loading_predictor_config.cc | 4 +- + .../browser/predictors/predictors_features.cc | 14 ++---- chrome/common/chrome_features.cc | 10 ++-- .../optimization_guide/core/hints_fetcher.cc | 1 + .../optimization_guide/core/hints_manager.cc | 5 ++ @@ -21,13 +23,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/permissions/features.cc | 8 ++-- third_party/blink/common/features.cc | 8 +--- .../platform/runtime_enabled_features.json5 | 2 +- - 15 files changed, 56 insertions(+), 55 deletions(-) + 17 files changed, 63 insertions(+), 70 deletions(-) diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_features.cc -index cd6e4e6a2a097..29667afccb004 100644 +index 41ed7f27c4c01..218655a1f83bd 100644 --- a/chrome/browser/browser_features.cc +++ b/chrome/browser/browser_features.cc -@@ -233,17 +233,17 @@ BASE_FEATURE(kIncomingCallNotifications, +@@ -239,22 +239,22 @@ BASE_FEATURE(kIncomingCallNotifications, // Enables omnibox trigger prerendering. BASE_FEATURE(kOmniboxTriggerForPrerender2, @@ -41,6 +43,13 @@ index cd6e4e6a2a097..29667afccb004 100644 - "BookmarkTriggerForPrerender2", - base::FEATURE_DISABLED_BY_DEFAULT); + "BookmarkTriggerForPrerender2", // always disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // in bromite + + // Enables New Tab Page trigger prerendering. + BASE_FEATURE(kNewTabPageTriggerForPrerender2, +- "NewTabPageTriggerForPrerender2", +- base::FEATURE_DISABLED_BY_DEFAULT); ++ "NewTabPageTriggerForPrerender2", // always disabled + base::FEATURE_DISABLED_BY_DEFAULT); // in bromite BASE_FEATURE(kSupportSearchSuggestionForPrerender2, @@ -80,10 +89,10 @@ index 98344c633c0ce..4ac74f6c858ef 100644 if (prediction->prediction_source() != NavigationPredictorKeyedService::PredictionSource:: diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc -index f66e3018bf5a0..96b1564e0cc5f 100644 +index 9833842067c97..2a4cbed1e4d63 100644 --- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc +++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc -@@ -332,7 +332,6 @@ void OptimizationGuideKeyedService::RemoveObserverForOptimizationTargetModel( +@@ -331,7 +331,6 @@ void OptimizationGuideKeyedService::RemoveObserverForOptimizationTargetModel( void OptimizationGuideKeyedService::RegisterOptimizationTypes( const std::vector& optimization_types) { @@ -91,26 +100,88 @@ index f66e3018bf5a0..96b1564e0cc5f 100644 } optimization_guide::OptimizationGuideDecision +diff --git a/chrome/browser/predictors/loading_predictor.cc b/chrome/browser/predictors/loading_predictor.cc +index f74c0b4f56dbf..e0969ad435c22 100644 +--- a/chrome/browser/predictors/loading_predictor.cc ++++ b/chrome/browser/predictors/loading_predictor.cc +@@ -184,7 +184,7 @@ ResourcePrefetchPredictor* LoadingPredictor::resource_prefetch_predictor() { + } + + PreconnectManager* LoadingPredictor::preconnect_manager() { +- if (shutdown_) { ++ if ((true)) { + return nullptr; + } + +@@ -200,7 +200,7 @@ PrefetchManager* LoadingPredictor::prefetch_manager() { + if (!base::FeatureList::IsEnabled(features::kLoadingPredictorPrefetch)) + return nullptr; + +- if (shutdown_) { ++ if ((true)) { + return nullptr; + } + diff --git a/chrome/browser/predictors/loading_predictor_config.cc b/chrome/browser/predictors/loading_predictor_config.cc -index 780490b628eca..9a40d6d0cb971 100644 +index 7a340a75ecc27..2080b3f648385 100644 --- a/chrome/browser/predictors/loading_predictor_config.cc +++ b/chrome/browser/predictors/loading_predictor_config.cc -@@ -12,8 +12,8 @@ +@@ -13,8 +13,8 @@ namespace predictors { - BASE_FEATURE(kSpeculativePreconnectFeature, -- "SpeculativePreconnect", + bool IsLoadingPredictorEnabled(Profile* profile) { +- // Disabled for off-the-record. Policy choice, not a technical limitation. +- return profile && !profile->IsOffTheRecord(); ++ // Disabled for all profiles ++ return false; + } + + bool IsPreconnectAllowed(Profile* profile) { +diff --git a/chrome/browser/predictors/predictors_features.cc b/chrome/browser/predictors/predictors_features.cc +index 3c111e603dd30..58464c18f989f 100644 +--- a/chrome/browser/predictors/predictors_features.cc ++++ b/chrome/browser/predictors/predictors_features.cc +@@ -11,8 +11,8 @@ namespace features { + + // Whether local predictions should be used to make preconnect predictions. + BASE_FEATURE(kLoadingPredictorUseLocalPredictions, +- "LoadingPredictorUseLocalPredictions", - base::FEATURE_ENABLED_BY_DEFAULT); -+ "SpeculativePreconnect", // always disabled -+ base::FEATURE_DISABLED_BY_DEFAULT); // in bromite ++ "LoadingPredictorUseLocalPredictions", // disabled by ++ base::FEATURE_DISABLED_BY_DEFAULT); // default + + // Modifies loading predictor so that it only learns about subresources and + // origins that are high priority. +@@ -39,11 +39,7 @@ BASE_FEATURE(kLoadingPredictorDisregardAlwaysAccessesNetwork, + + const base::FeatureState + kLoadingPredictorUseOptimizationGuideDefaultFeatureState = +-#if BUILDFLAG(IS_ANDROID) +- base::FEATURE_ENABLED_BY_DEFAULT; +-#else +- base::FEATURE_DISABLED_BY_DEFAULT; +-#endif ++ base::FEATURE_DISABLED_BY_DEFAULT; - // Returns whether the speculative preconnect feature is enabled. - bool IsPreconnectFeatureEnabled() { + // Modifies loading predictor so that it can also use predictions coming from + // the optimization guide. +@@ -52,11 +48,7 @@ BASE_FEATURE(kLoadingPredictorUseOptimizationGuide, + kLoadingPredictorUseOptimizationGuideDefaultFeatureState); + + const base::FeatureState kLoadingPredictorPrefetchDefaultFeatureState = +-#if BUILDFLAG(IS_ANDROID) +- base::FEATURE_ENABLED_BY_DEFAULT; +-#else + base::FEATURE_DISABLED_BY_DEFAULT; +-#endif + + // Modifies loading predictor so that it does prefetches of subresources instead + // of preconnects. diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc -index fde137ae760a7..63b4a3b4ba62c 100644 +index bbc36d38466f0..0c8bf807c0c72 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -922,8 +922,8 @@ BASE_FEATURE(kPermissionAuditing, +@@ -958,8 +958,8 @@ BASE_FEATURE(kPermissionAuditing, // Enables using the prediction service for permission prompts. We will keep // this feature in order to allow us to update the holdback chance via finch. BASE_FEATURE(kPermissionPredictions, @@ -121,7 +192,7 @@ index fde137ae760a7..63b4a3b4ba62c 100644 // The holdback chance is 30% but it can also be configured/updated // through finch if needed. -@@ -934,8 +934,8 @@ const base::FeatureParam kPermissionPredictionsHoldbackChance( +@@ -970,8 +970,8 @@ const base::FeatureParam kPermissionPredictionsHoldbackChance( // Enables using the prediction service for geolocation permission prompts. BASE_FEATURE(kPermissionGeolocationPredictions, @@ -132,21 +203,21 @@ index fde137ae760a7..63b4a3b4ba62c 100644 const base::FeatureParam kPermissionGeolocationPredictionsHoldbackChance( -@@ -951,7 +951,7 @@ BASE_FEATURE(kPluginVm, "PluginVm", base::FEATURE_DISABLED_BY_DEFAULT); +@@ -987,7 +987,7 @@ BASE_FEATURE(kPluginVm, "PluginVm", base::FEATURE_DISABLED_BY_DEFAULT); // Allows Chrome to do preconnect when prerender fails. BASE_FEATURE(kPrerenderFallbackToPreconnect, "PrerenderFallbackToPreconnect", - base::FEATURE_ENABLED_BY_DEFAULT); + base::FEATURE_DISABLED_BY_DEFAULT); - BASE_FEATURE(kPrivacyGuideAndroid, - "PrivacyGuideAndroid", + #if BUILDFLAG(IS_CHROMEOS) + // Enable improved printer state and error state messaging for Print Preview. diff --git a/components/optimization_guide/core/hints_fetcher.cc b/components/optimization_guide/core/hints_fetcher.cc -index 47a32bccceeb7..85dac79832360 100644 +index 5d924924a1ffd..d2fd1a0e93536 100644 --- a/components/optimization_guide/core/hints_fetcher.cc +++ b/components/optimization_guide/core/hints_fetcher.cc -@@ -180,6 +180,7 @@ bool HintsFetcher::FetchOptimizationGuideServiceHints( - const std::string& locale, +@@ -181,6 +181,7 @@ bool HintsFetcher::FetchOptimizationGuideServiceHints( + absl::optional access_token, bool skip_cache, HintsFetchedCallback hints_fetched_callback) { + if ((true)) return false; @@ -154,10 +225,10 @@ index 47a32bccceeb7..85dac79832360 100644 DCHECK_GT(optimization_types.size(), 0u); request_context_ = request_context; diff --git a/components/optimization_guide/core/hints_manager.cc b/components/optimization_guide/core/hints_manager.cc -index 703161085a17b..f21d45a9a947c 100644 +index 2aefa81dfc121..2125ac32fd7d0 100644 --- a/components/optimization_guide/core/hints_manager.cc +++ b/components/optimization_guide/core/hints_manager.cc -@@ -357,6 +357,7 @@ void HintsManager::Shutdown() { +@@ -383,6 +383,7 @@ void HintsManager::Shutdown() { OptimizationGuideDecision HintsManager::GetOptimizationGuideDecisionFromOptimizationTypeDecision( OptimizationTypeDecision optimization_type_decision) { @@ -165,15 +236,15 @@ index 703161085a17b..f21d45a9a947c 100644 switch (optimization_type_decision) { case OptimizationTypeDecision::kAllowedByOptimizationFilter: case OptimizationTypeDecision::kAllowedByHint: -@@ -1063,6 +1064,7 @@ void HintsManager::CanApplyOptimizationOnDemand( +@@ -1091,6 +1092,7 @@ void HintsManager::CanApplyOptimizationOnDemand( proto::RequestContext request_context, OnDemandOptimizationGuideDecisionRepeatingCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if ((true)) return; // no consent on bromite - // This set contains URLs that require some information to be fetched, whether - // that be a URL-keyed hint or a host-keyed hint. -@@ -1378,6 +1380,9 @@ OptimizationTypeDecision HintsManager::CanApplyOptimization( + InsertionOrderedSet urls_to_fetch; + InsertionOrderedSet hosts_to_fetch; +@@ -1363,6 +1365,9 @@ OptimizationTypeDecision HintsManager::CanApplyOptimization( bool skip_cache, OptimizationMetadata* optimization_metadata) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -184,10 +255,10 @@ index 703161085a17b..f21d45a9a947c 100644 ScopedCanApplyOptimizationLogger scoped_logger( optimization_type, navigation_url, optimization_guide_logger_); diff --git a/components/optimization_guide/core/optimization_guide_features.cc b/components/optimization_guide/core/optimization_guide_features.cc -index a43702a4de264..34ad4e223cc53 100644 +index 77d50ef41859e..dec8dc8f50b65 100644 --- a/components/optimization_guide/core/optimization_guide_features.cc +++ b/components/optimization_guide/core/optimization_guide_features.cc -@@ -87,17 +87,17 @@ bool IsSupportedLocaleForFeature( +@@ -90,17 +90,17 @@ bool IsSupportedLocaleForFeature( // Enables the syncing of the Optimization Hints component, which provides // hints for what optimizations can be applied on a page load. BASE_FEATURE(kOptimizationHints, @@ -211,7 +282,7 @@ index a43702a4de264..34ad4e223cc53 100644 // Enables performance info in the context menu and fetching from a remote // Optimization Guide Service. -@@ -107,17 +107,13 @@ BASE_FEATURE(kContextMenuPerformanceInfoAndRemoteHintFetching, +@@ -110,17 +110,13 @@ BASE_FEATURE(kContextMenuPerformanceInfoAndRemoteHintFetching, // Enables the prediction of optimization targets. BASE_FEATURE(kOptimizationTargetPrediction, @@ -233,7 +304,7 @@ index a43702a4de264..34ad4e223cc53 100644 ); // Enables page content to be annotated. -@@ -127,8 +123,8 @@ BASE_FEATURE(kPageContentAnnotations, +@@ -130,8 +126,8 @@ BASE_FEATURE(kPageContentAnnotations, // Enables fetching page metadata from the remote Optimization Guide service. BASE_FEATURE(kRemotePageMetadata, @@ -244,7 +315,7 @@ index a43702a4de264..34ad4e223cc53 100644 // Enables the page entities model to be annotated on every page load. BASE_FEATURE(kPageEntitiesPageContentAnnotations, -@@ -152,8 +148,8 @@ BASE_FEATURE(kPageEntitiesModelResetOnShutdown, +@@ -155,8 +151,8 @@ BASE_FEATURE(kPageEntitiesModelResetOnShutdown, // Enables push notification of hints. BASE_FEATURE(kPushNotifications, @@ -255,7 +326,7 @@ index a43702a4de264..34ad4e223cc53 100644 // This feature flag does not turn off any behavior, it is only used for // experiment parameters. -@@ -166,9 +162,9 @@ BASE_FEATURE(kOptimizationGuideMetadataValidation, +@@ -169,9 +165,9 @@ BASE_FEATURE(kOptimizationGuideMetadataValidation, "OptimizationGuideMetadataValidation", base::FEATURE_DISABLED_BY_DEFAULT); @@ -266,9 +337,9 @@ index a43702a4de264..34ad4e223cc53 100644 + "PageVisibilityBatchAnnotations", // by default + base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite - BASE_FEATURE(kPageContentAnnotationsValidation, - "PageContentAnnotationsValidation", -@@ -176,7 +172,7 @@ BASE_FEATURE(kPageContentAnnotationsValidation, + BASE_FEATURE(kTextEmbeddingBatchAnnotations, + "TextEmbeddingBatchAnnotations", +@@ -183,7 +179,7 @@ BASE_FEATURE(kPageContentAnnotationsValidation, BASE_FEATURE(kPreventLongRunningPredictionModels, "PreventLongRunningPredictionModels", @@ -277,7 +348,7 @@ index a43702a4de264..34ad4e223cc53 100644 BASE_FEATURE(kOptimizationGuideUseContinueOnShutdownForPageContentAnnotations, "OptimizationGuideUseContinueOnShutdownForPageContentAnnotations", -@@ -211,8 +207,8 @@ BASE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata, +@@ -218,8 +214,8 @@ BASE_FEATURE(kPageContentAnnotationsPersistSalientImageMetadata, // Killswitch for fetching on search results from a remote Optimization Guide // Service. BASE_FEATURE(kOptimizationGuideFetchingForSRP, @@ -288,7 +359,7 @@ index a43702a4de264..34ad4e223cc53 100644 // Enables the model store to save relative paths computed from the base model // store dir. Storing as relative path in the model store is needed for IOS, -@@ -456,7 +452,7 @@ size_t MaxURLKeyedHintCacheSize() { +@@ -468,7 +464,7 @@ size_t MaxURLKeyedHintCacheSize() { bool ShouldPersistHintsToDisk() { return GetFieldTrialParamByFeatureAsBool(kOptimizationHints, @@ -296,7 +367,7 @@ index a43702a4de264..34ad4e223cc53 100644 + "persist_hints_to_disk", false); } - bool ShouldOverrideOptimizationTargetDecisionForMetricsPurposes( + bool EnabledPersonalizedMetadata(proto::RequestContext request_context) { diff --git a/components/optimization_guide/core/prediction_model_download_manager.cc b/components/optimization_guide/core/prediction_model_download_manager.cc index 229fdcec284b7..31e4e34a480fc 100644 --- a/components/optimization_guide/core/prediction_model_download_manager.cc @@ -362,10 +433,10 @@ index d1b9b5eaf3d13..b682756c8f7f3 100644 declare_args() { diff --git a/components/permissions/features.cc b/components/permissions/features.cc -index 29fdcda93821d..67a29a36079e2 100644 +index 10131fd18865a..83dade37d5fd4 100644 --- a/components/permissions/features.cc +++ b/components/permissions/features.cc -@@ -82,12 +82,12 @@ BASE_FEATURE(kFailFastQuietChip, +@@ -92,12 +92,12 @@ BASE_FEATURE(kFailFastQuietChip, // When enabled, use the value of the `service_url` FeatureParam as the url // for the Web Permission Predictions Service. BASE_FEATURE(kPermissionPredictionServiceUseUrlOverride, @@ -383,10 +454,10 @@ index 29fdcda93821d..67a29a36079e2 100644 BASE_FEATURE(kPermissionOnDeviceGeolocationPredictions, "PermissionOnDeviceGeolocationPredictions", diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc -index 22d8d79b0f164..326fd977fec66 100644 +index 60b2d25f35ab1..d1412f4e4a300 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1105,12 +1105,8 @@ BASE_FEATURE(kMemoryCacheStrongReferenceSingleUnload, +@@ -1179,12 +1179,8 @@ BASE_FEATURE(kMemoryCacheStrongReferenceSingleUnload, // in the first viewport after the page load and the metrics of the clicked // anchor element will be extracted and recorded. BASE_FEATURE(kNavigationPredictor, @@ -402,10 +473,10 @@ index 22d8d79b0f164..326fd977fec66 100644 BASE_FEATURE(kNewBaseUrlInheritanceBehavior, diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index b6ece31b2715e..0bb65a2b50389 100644 +index b60686fa4fed6..7d2c6e2587f45 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2840,7 +2840,7 @@ +@@ -2831,7 +2831,7 @@ { // https://crbug.com/1126305 name: "Prerender2", diff --git a/bromite/build/patches/Disable-all-promo-dialogs.patch b/bromite/build/patches/Disable-all-promo-dialogs.patch index 4fb974c0..e5b49d0f 100644 --- a/bromite/build/patches/Disable-all-promo-dialogs.patch +++ b/bromite/build/patches/Disable-all-promo-dialogs.patch @@ -1,19 +1,23 @@ -From 22b0b7eb8c6f965ef42399ef1ad52a17ac2e6d5e Mon Sep 17 00:00:00 2001 +From e0916397439d2b6a605b479a328ab1a752442378 Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 12 Jun 2018 15:09:26 +0200 Subject: [PATCH 045/192] Disable all promo dialogs +License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - .../chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java | 1 + - .../ui/views/user_education/browser_feature_promo_controller.cc | 1 + - components/user_education/common/feature_promo_registry.cc | 1 + - 3 files changed, 3 insertions(+) + .../chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java | 1 + + chrome/browser/ui/browser_ui_prefs.cc | 2 +- + chrome/browser/ui/ui_features.cc | 2 +- + .../ui/views/user_education/browser_feature_promo_controller.cc | 1 + + .../chrome/browser/user_education/UserEducationHelper.java | 1 + + components/user_education/common/feature_promo_registry.cc | 1 + + 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -index 25e2ad32e6928..cec87d49f1b0b 100644 +index 7f494b05c003f..e6263844f95a2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -959,6 +959,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -943,6 +943,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { } private boolean maybeShowPromo() { @@ -21,6 +25,32 @@ index 25e2ad32e6928..cec87d49f1b0b 100644 // Only one promo can be shown in one run to avoid nagging users too much. if (FullScreenSyncPromoUtil.launchPromoIfNeeded(mActivity, SyncConsentActivityLauncherImpl.get(), VersionInfo.getProductMajorVersion())) { +diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc +index 44a39c3fffa9d..3024320b2d014 100644 +--- a/chrome/browser/ui/browser_ui_prefs.cc ++++ b/chrome/browser/ui/browser_ui_prefs.cc +@@ -143,7 +143,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { + + registry->RegisterBooleanPref(prefs::kEnterpriseHardwarePlatformAPIEnabled, + false); +- registry->RegisterBooleanPref(prefs::kUserFeedbackAllowed, true); ++ registry->RegisterBooleanPref(prefs::kUserFeedbackAllowed, false); + registry->RegisterBooleanPref( + prefs::kExternalProtocolDialogShowAlwaysOpenCheckbox, true); + registry->RegisterBooleanPref(prefs::kScreenCaptureAllowed, true); +diff --git a/chrome/browser/ui/ui_features.cc b/chrome/browser/ui/ui_features.cc +index 5aa67c3a622ee..45e477d0e2ede 100644 +--- a/chrome/browser/ui/ui_features.cc ++++ b/chrome/browser/ui/ui_features.cc +@@ -25,7 +25,7 @@ BASE_FEATURE(kDesktopPWAsAppHomePage, + #endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) + + // Enables Chrome Labs menu in the toolbar. See https://crbug.com/1145666 +-BASE_FEATURE(kChromeLabs, "ChromeLabs", base::FEATURE_ENABLED_BY_DEFAULT); ++BASE_FEATURE(kChromeLabs, "ChromeLabs", base::FEATURE_DISABLED_BY_DEFAULT); + const char kChromeLabsActivationParameterName[] = + "chrome_labs_activation_percentage"; + const base::FeatureParam kChromeLabsActivationPercentage{ diff --git a/chrome/browser/ui/views/user_education/browser_feature_promo_controller.cc b/chrome/browser/ui/views/user_education/browser_feature_promo_controller.cc index ad76a9ba16d37..bfba407116a43 100644 --- a/chrome/browser/ui/views/user_education/browser_feature_promo_controller.cc @@ -33,6 +63,18 @@ index ad76a9ba16d37..bfba407116a43 100644 // Temporarily turn off IPH in incognito as a concern was raised that // the IPH backend ignores incognito and writes to the parent profile. // See https://bugs.chromium.org/p/chromium/issues/detail?id=1128728#c30 +diff --git a/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java b/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java +index e76247934a281..9f348944b981d 100644 +--- a/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java ++++ b/chrome/browser/user_education/java/src/org/chromium/chrome/browser/user_education/UserEducationHelper.java +@@ -71,6 +71,7 @@ public class UserEducationHelper { + } + + private void showIPH(Tracker tracker, IPHCommand iphCommand) { ++ if ((true)) return; + // Activity was destroyed; don't show IPH. + View anchorView = iphCommand.anchorView; + if (mActivity.isFinishing() || mActivity.isDestroyed() || anchorView == null) { diff --git a/components/user_education/common/feature_promo_registry.cc b/components/user_education/common/feature_promo_registry.cc index a5975eee695fe..82cc5c52c1149 100644 --- a/components/user_education/common/feature_promo_registry.cc diff --git a/bromite/build/patches/Disable-conversion-measurement-api.patch b/bromite/build/patches/Disable-conversion-measurement-api.patch index 5cc4002c..c1495cfc 100644 --- a/bromite/build/patches/Disable-conversion-measurement-api.patch +++ b/bromite/build/patches/Disable-conversion-measurement-api.patch @@ -1,4 +1,4 @@ -From 806e08753c5328b952f5de0772c688eba80c5012 Mon Sep 17 00:00:00 2001 +From cd0ed8270d8cc0142d6d463016ea3ec5b709fbf6 Mon Sep 17 00:00:00 2001 From: uazo Date: Mon, 15 Nov 2021 09:43:29 +0000 Subject: [PATCH 147/192] Disable conversion measurement api @@ -24,21 +24,21 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../attribution_storage_sql.cc | 8 +- content/browser/storage_partition_impl.cc | 8 +- content/public/android/BUILD.gn | 2 - - .../browser/AttributionOsLevelManager.java | 168 +----------------- + .../browser/AttributionOsLevelManager.java | 225 ++---------------- .../public/browser/navigation_controller.cc | 1 - content/public/common/content_features.cc | 4 +- content/renderer/render_thread_impl.cc | 5 +- .../attribution/request_headers_internal.cc | 1 + .../network/public/cpp/attribution_utils.cc | 2 + services/network/public/cpp/features.cc | 6 +- - third_party/blink/common/features.cc | 26 +-- + third_party/blink/common/features.cc | 26 +- .../platform/runtime_enabled_features.json5 | 7 + ui/base/ui_base_features.cc | 2 +- ui/events/android/motion_event_android.cc | 6 +- - 23 files changed, 78 insertions(+), 215 deletions(-) + 23 files changed, 89 insertions(+), 261 deletions(-) diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml -index e3f6f8386669d..3cc2300fd07f5 100644 +index 8260fd5d4887b..c532881bf74fc 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml @@ -39,7 +39,6 @@ by a child template that "extends" this file. @@ -84,7 +84,7 @@ index 965a283dea477..c774dc1fb309a 100644 } diff --git a/content/browser/aggregation_service/aggregatable_report_sender.cc b/content/browser/aggregation_service/aggregatable_report_sender.cc -index 1515d11529017..ea8e30de07ff7 100644 +index 9a5cee24d633e..d5c98cce09b22 100644 --- a/content/browser/aggregation_service/aggregatable_report_sender.cc +++ b/content/browser/aggregation_service/aggregatable_report_sender.cc @@ -136,19 +136,18 @@ void AggregatableReportSender::SendReport(const GURL& url, @@ -130,11 +130,11 @@ index f192669530ffc..e6f89aebda65d 100644 const base::FeatureParam kPrivacySandboxAggregationServiceTrustedServerUrlAwsParam{ diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc -index ff37a858ffd08..e99e1a5019568 100644 +index 0febdc84c8984..a6715a243250a 100644 --- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc +++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc -@@ -446,6 +446,11 @@ void AttributionDataHostManagerImpl::ParseSource( - RegistrarAndHeader header) { +@@ -499,6 +499,11 @@ void AttributionDataHostManagerImpl::ParseSource( + Registrar registrar) { DCHECK(it != registrations_.end()); + if ((true)) { @@ -142,14 +142,14 @@ index ff37a858ffd08..e99e1a5019568 100644 + return; + } + - switch (header.registrar) { + switch (registrar) { case Registrar::kWeb: if (!network::HasAttributionWebSupport( diff --git a/content/browser/attribution_reporting/attribution_host.cc b/content/browser/attribution_reporting/attribution_host.cc -index 10d1d0a403900..c647df1c540e8 100644 +index 462e47c6472e9..56d890722e883 100644 --- a/content/browser/attribution_reporting/attribution_host.cc +++ b/content/browser/attribution_reporting/attribution_host.cc -@@ -390,6 +390,7 @@ void AttributionHost::RegisterNavigationDataHost( +@@ -359,6 +359,7 @@ void AttributionHost::RegisterNavigationDataHost( return; } @@ -170,7 +170,7 @@ index 35ffe6f5cf08b..7509a628dde0d 100644 GetContentClient()->browser()->IsWebAttributionReportingAllowed(); switch (GetApiState()) { diff --git a/content/browser/attribution_reporting/attribution_report_network_sender.cc b/content/browser/attribution_reporting/attribution_report_network_sender.cc -index 98fdfa98dbbdc..e9facc3fea34f 100644 +index 93048effd8ef4..17ae2517084f6 100644 --- a/content/browser/attribution_reporting/attribution_report_network_sender.cc +++ b/content/browser/attribution_reporting/attribution_report_network_sender.cc @@ -89,6 +89,9 @@ void AttributionReportNetworkSender::SendReport(GURL url, @@ -183,7 +183,7 @@ index 98fdfa98dbbdc..e9facc3fea34f 100644 auto resource_request = std::make_unique(); resource_request->url = std::move(url); resource_request->headers = std::move(headers); -@@ -162,6 +165,12 @@ void AttributionReportNetworkSender::OnReportSent( +@@ -164,6 +167,12 @@ void AttributionReportNetworkSender::OnReportSent( ReportSentCallback sent_callback, UrlLoaderList::iterator it, scoped_refptr headers) { @@ -197,10 +197,10 @@ index 98fdfa98dbbdc..e9facc3fea34f 100644 // Consider a non-200 HTTP code as a non-internal error. diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc -index 5098af89e95ad..af6ffb9b74cc1 100644 +index 2ff48a8edf985..4655da1163d23 100644 --- a/content/browser/attribution_reporting/attribution_storage_sql.cc +++ b/content/browser/attribution_reporting/attribution_storage_sql.cc -@@ -629,14 +629,16 @@ StorableSource::Result ThrottleResultToStorableSourceResult( +@@ -682,14 +682,16 @@ StorableSource::Result DestinationRateLimitResultToStorableSourceResult( } } @@ -221,10 +221,10 @@ index 5098af89e95ad..af6ffb9b74cc1 100644 .page_size = 4096, .cache_size = 32}), diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc -index 710d5ce9e029e..b7e87c276c3b5 100644 +index 6eb273a7efe22..c410a929c30af 100644 --- a/content/browser/storage_partition_impl.cc +++ b/content/browser/storage_partition_impl.cc -@@ -1430,13 +1430,7 @@ void StoragePartitionImpl::Initialize( +@@ -1485,13 +1485,7 @@ void StoragePartitionImpl::Initialize( bucket_manager_ = std::make_unique(this); @@ -240,7 +240,7 @@ index 710d5ce9e029e..b7e87c276c3b5 100644 if (base::FeatureList::IsEnabled(blink::features::kInterestGroupStorage)) { // Auction worklets on non-Android use dedicated processes; on Android due diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn -index a4ac4a630d47f..031bc174d4cbd 100644 +index e9eac84b98522..a4dd28bcb81fb 100644 --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn @@ -179,8 +179,6 @@ android_library("content_full_java") { @@ -253,7 +253,7 @@ index a4ac4a630d47f..031bc174d4cbd 100644 "//third_party/blink/public/common:common_java", "//third_party/blink/public/mojom:android_mojo_bindings_java", diff --git a/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java b/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java -index a5a8fd3431f42..43b852b1b744e 100644 +index 56b89026845cd..21c1dba4b7c34 100644 --- a/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java +++ b/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java @@ -12,17 +12,6 @@ import android.os.Process; @@ -274,7 +274,7 @@ index a5a8fd3431f42..43b852b1b744e 100644 import org.chromium.base.ContextUtils; import org.chromium.base.Log; -@@ -46,6 +35,8 @@ import java.util.concurrent.TimeoutException; +@@ -48,6 +37,8 @@ import java.util.concurrent.TimeoutException; */ @JNINamespace("content") public class AttributionOsLevelManager { @@ -283,7 +283,7 @@ index a5a8fd3431f42..43b852b1b744e 100644 private static final String TAG = "AttributionManager"; // TODO: replace with constant in android.Manifest.permission once it becomes available in U. private static final String PERMISSION_ACCESS_ADSERVICES_ATTRIBUTION = -@@ -87,12 +78,7 @@ public class AttributionOsLevelManager { +@@ -91,12 +82,7 @@ public class AttributionOsLevelManager { } private MeasurementManagerFutures getManager() { @@ -297,7 +297,7 @@ index a5a8fd3431f42..43b852b1b744e 100644 } private void onRegistrationCompleted( -@@ -117,40 +103,6 @@ public class AttributionOsLevelManager { +@@ -121,46 +107,6 @@ public class AttributionOsLevelManager { } } @@ -321,7 +321,13 @@ index a5a8fd3431f42..43b852b1b744e 100644 - } else if (thrown instanceof IOException) { - result = RegistrationResult.ERROR_IO; - } else if (thrown instanceof IllegalStateException) { -- result = RegistrationResult.ERROR_ILLEGAL_STATE; +- // The Android API doesn't break out this error as a separate exception so we +- // are forced to inspect the message for now. +- if (thrown.getMessage().toLowerCase(Locale.US).contains("background")) { +- result = RegistrationResult.ERROR_BACKGROUND_CALLER; +- } else { +- result = RegistrationResult.ERROR_ILLEGAL_STATE; +- } - } else if (thrown instanceof SecurityException) { - result = RegistrationResult.ERROR_SECURITY; - } else if (thrown instanceof TimeoutException) { @@ -338,10 +344,21 @@ index a5a8fd3431f42..43b852b1b744e 100644 /** * Registers a web attribution source with native, see `registerWebSourceAsync()`: * https://developer.android.com/reference/androidx/privacysandbox/ads/adservices/java/measurement/MeasurementManagerFutures. -@@ -169,13 +121,6 @@ public class AttributionOsLevelManager { - requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); - return; - } +@@ -168,24 +114,8 @@ public class AttributionOsLevelManager { + @CalledByNative + private void registerWebAttributionSource(int requestId, GURL registrationUrl, + GURL topLevelOrigin, boolean isDebugKeyAllowed, MotionEvent event) { +- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { +- onRegistrationCompleted( +- requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); +- return; +- } +- MeasurementManagerFutures mm = getManager(); +- if (mm == null) { +- onRegistrationCompleted( +- requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); +- return; +- } - ListenableFuture future = mm.registerWebSourceAsync(new WebSourceRegistrationRequest( - Arrays.asList(new WebSourceParams( - Uri.parse(registrationUrl.getSpec()), isDebugKeyAllowed)), @@ -349,33 +366,63 @@ index a5a8fd3431f42..43b852b1b744e 100644 - /*appDestination=*/null, /*webDestination=*/null, - /*verifiedDestination=*/null)); - addRegistrationFutureCallback(requestId, RegistrationType.SOURCE, future); ++ onRegistrationCompleted( ++ requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); } /** -@@ -195,9 +140,7 @@ public class AttributionOsLevelManager { - requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); - return; - } +@@ -194,20 +124,9 @@ public class AttributionOsLevelManager { + */ + @CalledByNative + private void registerAttributionSource(int requestId, GURL registrationUrl, MotionEvent event) { +- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { +- onRegistrationCompleted( +- requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); +- return; +- } +- MeasurementManagerFutures mm = getManager(); +- if (mm == null) { +- onRegistrationCompleted( +- requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); +- return; +- } - ListenableFuture future = - mm.registerSourceAsync(Uri.parse(registrationUrl.getSpec()), event); - addRegistrationFutureCallback(requestId, RegistrationType.SOURCE, future); -+ onRegistrationCompleted(requestId, RegistrationType.SOURCE, RegistrationResult.SUCCESS); ++ onRegistrationCompleted( ++ requestId, RegistrationType.SOURCE, RegistrationResult.ERROR_INTERNAL); ++ return; } /** -@@ -219,11 +162,6 @@ public class AttributionOsLevelManager { - requestId, RegistrationType.TRIGGER, RegistrationResult.ERROR_INTERNAL); - return; - } +@@ -217,23 +136,9 @@ public class AttributionOsLevelManager { + @CalledByNative + private void registerWebAttributionTrigger( + int requestId, GURL registrationUrl, GURL topLevelOrigin, boolean isDebugKeyAllowed) { +- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { +- onRegistrationCompleted( +- requestId, RegistrationType.TRIGGER, RegistrationResult.ERROR_INTERNAL); +- return; +- } +- +- MeasurementManagerFutures mm = getManager(); +- if (mm == null) { +- onRegistrationCompleted( +- requestId, RegistrationType.TRIGGER, RegistrationResult.ERROR_INTERNAL); +- return; +- } - ListenableFuture future = mm.registerWebTriggerAsync(new WebTriggerRegistrationRequest( - Arrays.asList(new WebTriggerParams( - Uri.parse(registrationUrl.getSpec()), isDebugKeyAllowed)), - Uri.parse(topLevelOrigin.getSpec()))); - addRegistrationFutureCallback(requestId, RegistrationType.TRIGGER, future); ++ onRegistrationCompleted( ++ requestId, RegistrationType.TRIGGER, RegistrationResult.ERROR_INTERNAL); ++ return; } private void onDataDeletionCompleted(int requestId) { -@@ -248,77 +186,7 @@ public class AttributionOsLevelManager { +@@ -258,77 +163,7 @@ public class AttributionOsLevelManager { onDataDeletionCompleted(requestId); return; } @@ -454,10 +501,27 @@ index a5a8fd3431f42..43b852b1b744e 100644 } /** -@@ -343,32 +211,6 @@ public class AttributionOsLevelManager { +@@ -339,6 +174,10 @@ public class AttributionOsLevelManager { + private static void getMeasurementApiStatus() { + ThreadUtils.assertOnBackgroundThread(); + ++ if ((true)) { ++ AttributionOsLevelManagerJni.get().onMeasurementStateReturned(0); ++ return; ++ } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + AttributionOsLevelManagerJni.get().onMeasurementStateReturned(0); + return; +@@ -350,38 +189,6 @@ public class AttributionOsLevelManager { AttributionOsLevelManagerJni.get().onMeasurementStateReturned(0); return; } +- MeasurementManagerFutures mm = +- MeasurementManagerFutures.from(ContextUtils.getApplicationContext()); +- if (mm == null) { +- AttributionOsLevelManagerJni.get().onMeasurementStateReturned(0); +- return; +- } - - ListenableFuture future = null; - try { @@ -500,10 +564,10 @@ index d9b40d65b208c..d95a8ec9fc023 100644 #if DCHECK_IS_ON() DCHECK(input.Valid()); diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc -index e898044531df1..2141094ae7f24 100644 +index 27ab49c489110..94f73fffeb6f3 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -864,8 +864,8 @@ BASE_FEATURE(kPrivacySandboxAdsAPIsM1Override, +@@ -816,8 +816,8 @@ BASE_FEATURE(kPrivacySandboxAdsAPIsM1Override, // FLEDGE, Topics, along with a number of other features actively in development // within these APIs. BASE_FEATURE(kPrivacySandboxAdsAPIsOverride, @@ -515,10 +579,10 @@ index e898044531df1..2141094ae7f24 100644 // Enables Private Network Access checks for all types of web workers. // diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc -index f09b49f3bd04f..ed2980ca5685a 100644 +index a736741e993a3..e84dfb4e3f159 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc -@@ -927,6 +927,9 @@ void RenderThreadImpl::InitializeRenderer( +@@ -924,6 +924,9 @@ void RenderThreadImpl::InitializeRenderer( GetContentClient()->renderer()->DidSetUserAgent(user_agent); user_agent_metadata_ = user_agent_metadata; cors_exempt_header_list_ = cors_exempt_header_list; @@ -528,7 +592,7 @@ index f09b49f3bd04f..ed2980ca5685a 100644 attribution_support_ = attribution_support; blink::WebVector web_cors_exempt_header_list( -@@ -1834,7 +1837,7 @@ RenderThreadImpl::GetAttributionReportingSupport() { +@@ -1829,7 +1832,7 @@ RenderThreadImpl::GetAttributionReportingSupport() { void RenderThreadImpl::SetAttributionReportingSupport( network::mojom::AttributionSupport attribution_support) { @@ -570,10 +634,10 @@ index bb0e5a0aa81e2..4574744bcaf6b 100644 case mojom::AttributionSupport::kWeb: case mojom::AttributionSupport::kWebAndOs: diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc -index 04c71eae29989..73196507acb55 100644 +index b9683742c4385..0538a4f7f55b0 100644 --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc -@@ -141,9 +141,9 @@ BASE_FEATURE(kAttributionReportingReportVerification, +@@ -154,9 +154,9 @@ BASE_FEATURE(kAttributionReportingReportVerification, // Gate access to Attribution Reporting cross app and web APIs that allow // registering with a native attribution API. @@ -587,10 +651,10 @@ index 04c71eae29989..73196507acb55 100644 // Enables preprocessing requests with the Private State Tokens API Fetch flags // set, and handling their responses, according to the protocol. diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc -index d8ee524219b40..22d8d79b0f164 100644 +index 68af5b10d69f8..60b2d25f35ab1 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -288,8 +288,8 @@ const base::FeatureParam kBoostImagePriorityTightMediumLimit{ +@@ -298,8 +298,8 @@ const base::FeatureParam kBoostImagePriorityTightMediumLimit{ // https://github.com/patcg-individual-drafts/topics // Kill switch for the Topics API. BASE_FEATURE(kBrowsingTopics, @@ -601,7 +665,7 @@ index d8ee524219b40..22d8d79b0f164 100644 // If enabled, the check for whether the IP address is publicly routable will be // bypassed when determining the eligibility for a page to be included in topics -@@ -304,14 +304,14 @@ BASE_FEATURE(kBrowsingTopicsBypassIPIsPubliclyRoutableCheck, +@@ -314,14 +314,14 @@ BASE_FEATURE(kBrowsingTopicsBypassIPIsPubliclyRoutableCheck, // either a valid Origin Trial token exists or `kPrivacySandboxAdsAPIsOverride` // is enabled.) BASE_FEATURE(kBrowsingTopicsDocumentAPI, @@ -620,7 +684,7 @@ index d8ee524219b40..22d8d79b0f164 100644 // The number of epochs from where to calculate the topics to give to a // requesting contexts. const base::FeatureParam kBrowsingTopicsNumberOfEpochsToExpose{ -@@ -524,8 +524,8 @@ BASE_FEATURE(kContentCaptureConstantStreaming, +@@ -547,8 +547,8 @@ BASE_FEATURE(kContentCaptureConstantStreaming, // Controls whether the Conversion Measurement API infrastructure is enabled. BASE_FEATURE(kConversionMeasurement, @@ -631,7 +695,7 @@ index d8ee524219b40..22d8d79b0f164 100644 BASE_FEATURE(kCorrectFloatExtensionTestForWebGL, "CorrectFloatExtensionTestForWebGL", -@@ -1274,16 +1274,16 @@ const base::FeatureParam kPrewarmFantasy = {&kPrewarmDefaultFontFamilies, +@@ -1361,16 +1361,16 @@ const base::FeatureParam kPrewarmFantasy = {&kPrewarmDefaultFontFamilies, "prewarm_fantasy", false}; #endif @@ -652,9 +716,9 @@ index d8ee524219b40..22d8d79b0f164 100644 + base::FEATURE_DISABLED_BY_DEFAULT); // in bromite // Selectively allows the JavaScript API to be disabled in just one of the - // contexts. + // contexts. The Protected Audience param's name has not been updated (from diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index 6efd74f613fb6..93aa660ce4dce 100644 +index fd85875c0c88a..0aa29d0af5dae 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 @@ -215,6 +215,13 @@ @@ -672,10 +736,10 @@ index 6efd74f613fb6..93aa660ce4dce 100644 name: "AbortSignalAny", status: "stable", diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc -index cfaf09df6c8b7..80f69ef884756 100644 +index 4f6ece0bebe74..c87150ed84c62 100644 --- a/ui/base/ui_base_features.cc +++ b/ui/base/ui_base_features.cc -@@ -500,7 +500,7 @@ BASE_FEATURE(kMacClipboardWriteImageWithPng, +@@ -553,7 +553,7 @@ BASE_FEATURE(kMacClipboardWriteImageWithPng, // We want to experiment with disabling it to align with CR2023 designs. BASE_FEATURE(kCr2023MacFontSmoothing, "Cr2023MacFontSmoothing", @@ -685,7 +749,7 @@ index cfaf09df6c8b7..80f69ef884756 100644 } // namespace features diff --git a/ui/events/android/motion_event_android.cc b/ui/events/android/motion_event_android.cc -index e1d2ad235fe04..4c51164ee1b7d 100644 +index 0e181c48eb3db..ee09e4988913c 100644 --- a/ui/events/android/motion_event_android.cc +++ b/ui/events/android/motion_event_android.cc @@ -162,7 +162,11 @@ int ToEventFlags(int meta_state, int button_state) { diff --git a/bromite/build/patches/Disable-crash-reporting.patch b/bromite/build/patches/Disable-crash-reporting.patch index 14e9ccfb..e9eab8e8 100644 --- a/bromite/build/patches/Disable-crash-reporting.patch +++ b/bromite/build/patches/Disable-crash-reporting.patch @@ -1,4 +1,4 @@ -From d36cb8d8feb884f70dff5881cefe1aab997c7256 Mon Sep 17 00:00:00 2001 +From 6065d7ce9eb186bc9f74ec4b70c9ae11464df2eb Mon Sep 17 00:00:00 2001 From: uazo Date: Sat, 9 Apr 2022 21:43:35 +0200 Subject: [PATCH 165/192] Disable crash reporting @@ -9,10 +9,10 @@ Subject: [PATCH 165/192] Disable crash reporting 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 73656cb2a4a08..9941afb9b7e5f 100644 +index 96975c06356ef..d769aadbd5360 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -2627,6 +2627,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( +@@ -2639,6 +2639,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches( base::NumberToString(pid)); } #endif @@ -21,10 +21,10 @@ index 73656cb2a4a08..9941afb9b7e5f 100644 std::string switch_value; std::unique_ptr client_info = diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc -index 546015d33d41a..f3a3428be44c8 100644 +index 85c17b41d0b8f..7f72d9e284cca 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -275,8 +275,8 @@ BASE_FEATURE(kCooperativeScheduling, +@@ -278,8 +278,8 @@ BASE_FEATURE(kCooperativeScheduling, // Enables crash reporting via Reporting API. // https://www.w3.org/TR/reporting/#crash-report BASE_FEATURE(kCrashReporting, diff --git a/bromite/build/patches/Disable-feeds-support-by-default.patch b/bromite/build/patches/Disable-feeds-support-by-default.patch index 20a3fc0d..6385895c 100644 --- a/bromite/build/patches/Disable-feeds-support-by-default.patch +++ b/bromite/build/patches/Disable-feeds-support-by-default.patch @@ -1,4 +1,4 @@ -From f035b5fc26025df2fb24255b16e24520b9e8e08d Mon Sep 17 00:00:00 2001 +From 77b4b30f3e2f4103e6e7da6735d2b58a608f3084 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 19 Dec 2019 22:52:53 +0100 Subject: [PATCH 101/192] Disable feeds support by default @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedFeatures.java b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedFeatures.java -index 8df8dd4505338..a715da9aadf82 100644 +index 129d11c56c8a4..67985d3e00f48 100644 --- a/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedFeatures.java +++ b/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedFeatures.java -@@ -48,13 +48,7 @@ public final class FeedFeatures { +@@ -44,13 +44,7 @@ public final class FeedFeatures { * the user is signed in and confirms it's not a child profile. */ public static boolean isWebFeedUIEnabled() { @@ -31,10 +31,10 @@ index 8df8dd4505338..a715da9aadf82 100644 public static boolean shouldUseWebFeedAwarenessIPH() { diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc -index 3f085d35dd38a..be3300aa542aa 100644 +index fc5b25621319d..7d4642bec22d4 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -1682,10 +1682,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -1780,10 +1780,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, supervised_user::SupervisedUserService::RegisterProfilePrefs(registry); #endif @@ -72,7 +72,7 @@ index 7bde29b80583c..287343a86b8e2 100644 } diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc -index b6ec563a009c7..4f733e7964e09 100644 +index b1bda3fc9a693..2057c116dc802 100644 --- a/components/feed/feed_feature_list.cc +++ b/components/feed/feed_feature_list.cc @@ -17,14 +17,14 @@ diff --git a/bromite/build/patches/Disable-fetching-of-all-field-trials.patch b/bromite/build/patches/Disable-fetching-of-all-field-trials.patch index 6fe5e885..b1ad3f8c 100644 --- a/bromite/build/patches/Disable-fetching-of-all-field-trials.patch +++ b/bromite/build/patches/Disable-fetching-of-all-field-trials.patch @@ -1,4 +1,4 @@ -From 6082f4860c3fec7ec9c4256a179eac5d752c0c41 Mon Sep 17 00:00:00 2001 +From fb6d29b07d5cc0df6567b68ee2f1ab7695a155eb Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 8 Jul 2018 18:16:34 +0200 Subject: [PATCH 070/192] Disable fetching of all field trials @@ -19,20 +19,20 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/variations/net/BUILD.gn | 2 -- .../variations/net/omnibox_http_headers.cc | 4 +-- .../variations/net/variations_http_headers.cc | 3 ++ - .../service/variations_field_trial_creator.cc | 4 ++- + .../variations_field_trial_creator_base.cc | 8 ++--- .../variations/service/variations_service.cc | 15 ++------- .../browser/loader/url_loader_throttles.cc | 7 ---- .../origin_trials/origin_trials_utils.cc | 2 +- content/public/common/content_features.cc | 4 +-- .../variations_render_thread_observer.cc | 9 ------ .../renderer/core/loader/document_loader.cc | 7 ---- - 18 files changed, 29 insertions(+), 78 deletions(-) + 18 files changed, 29 insertions(+), 82 deletions(-) diff --git a/android_webview/common/aw_features.cc b/android_webview/common/aw_features.cc -index c996d797aca09..63128e8b99311 100644 +index 55d6f5170f18f..df813f9f18ac9 100644 --- a/android_webview/common/aw_features.cc +++ b/android_webview/common/aw_features.cc -@@ -96,8 +96,8 @@ BASE_FEATURE(kWebViewJavaJsBridgeMojo, +@@ -97,8 +97,8 @@ BASE_FEATURE(kWebViewMetricsFiltering, // Field trial feature for controlling support of Origin Trials on WebView. BASE_FEATURE(kWebViewOriginTrials, @@ -44,10 +44,10 @@ index c996d797aca09..63128e8b99311 100644 // Whether to record size of the embedding app's data directory to the UMA // histogram Android.WebView.AppDataDirectorySize. diff --git a/android_webview/nonembedded/BUILD.gn b/android_webview/nonembedded/BUILD.gn -index ef04f4096cd2e..ff45c6402fb56 100644 +index 3f24e744aec72..24f6b2eb77a7c 100644 --- a/android_webview/nonembedded/BUILD.gn +++ b/android_webview/nonembedded/BUILD.gn -@@ -100,7 +100,6 @@ android_library("services_java") { +@@ -103,7 +103,6 @@ android_library("services_java") { sources = [ "java/src/org/chromium/android_webview/services/AwMinidumpUploadJobService.java", "java/src/org/chromium/android_webview/services/AwMinidumpUploaderDelegate.java", @@ -55,7 +55,7 @@ index ef04f4096cd2e..ff45c6402fb56 100644 "java/src/org/chromium/android_webview/services/ComponentUpdaterResetSafeModeAction.java", "java/src/org/chromium/android_webview/services/ComponentUpdaterSafeModeUtils.java", "java/src/org/chromium/android_webview/services/ComponentsProviderPathUtil.java", -@@ -119,7 +118,6 @@ android_library("services_java") { +@@ -122,7 +121,6 @@ android_library("services_java") { "java/src/org/chromium/android_webview/services/SafeModeService.java", "java/src/org/chromium/android_webview/services/SafeModeVariationsSeedContentProvider.java", "java/src/org/chromium/android_webview/services/StartupFeatureMetadataHolder.java", @@ -77,19 +77,19 @@ index 2403d7d5d9b7b..c45552ba6936e 100644 }; diff --git a/chrome/browser/metrics/chrome_browser_sampling_trials.cc b/chrome/browser/metrics/chrome_browser_sampling_trials.cc -index a9c2c6ca68a68..9c3fab5be3b87 100644 +index 6291f4819ed21..f4615aff581ab 100644 --- a/chrome/browser/metrics/chrome_browser_sampling_trials.cc +++ b/chrome/browser/metrics/chrome_browser_sampling_trials.cc -@@ -54,6 +54,8 @@ void CreateFallbackSamplingTrial( - const std::string& feature_name, +@@ -55,6 +55,8 @@ void CreateFallbackSamplingTrial( const int sampled_in_rate_per_mille, + const bool starts_active, base::FeatureList* feature_list) { + if ((true)) + return; scoped_refptr trial( base::FieldTrialList::FactoryGetFieldTrial( trial_name, /*total_probability=*/1000, "Default", entropy_provider)); -@@ -93,6 +95,8 @@ void CreateFallbackUkmSamplingTrial( +@@ -98,6 +100,8 @@ void CreateFallbackUkmSamplingTrial( const base::FieldTrial::EntropyProvider& entropy_provider, bool is_stable_channel, base::FeatureList* feature_list) { @@ -99,10 +99,10 @@ index a9c2c6ca68a68..9c3fab5be3b87 100644 static const char kSampledGroup_Other[] = "Sampled_NoSeed_Other"; const char* sampled_group = kSampledGroup_Other; diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc -index 5ab6515b16029..665ba62717a82 100644 +index 08550e6c776b5..e2d13207087d4 100644 --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -721,7 +721,6 @@ void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams( +@@ -771,7 +771,6 @@ void SystemNetworkContextManager::AddSSLConfigToNetworkContextParams( void SystemNetworkContextManager::ConfigureDefaultNetworkContextParams( network::mojom::NetworkContextParams* network_context_params) { @@ -111,7 +111,7 @@ index 5ab6515b16029..665ba62717a82 100644 network_context_params->enable_brotli = true; diff --git a/components/ukm/ukm_recorder_impl.cc b/components/ukm/ukm_recorder_impl.cc -index d1fff74ca6ce4..77521a563c857 100644 +index b1e5d0ae0019a..53c6eac9a31fd 100644 --- a/components/ukm/ukm_recorder_impl.cc +++ b/components/ukm/ukm_recorder_impl.cc @@ -166,6 +166,9 @@ bool HasUnknownMetrics(const builders::DecodeMap& decode_map, @@ -138,10 +138,10 @@ index 2a09a78a0ebbb..50dd0ea424486 100644 .edit() .remove(VARIATIONS_FIRST_RUN_SEED_BASE64) diff --git a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java -index 4a2afc8aeaf24..176110e257cb4 100644 +index 1a1173f338a72..231c763c73b72 100644 --- a/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java +++ b/components/variations/android/java/src/org/chromium/components/variations/firstrun/VariationsSeedFetcher.java -@@ -451,35 +451,13 @@ public class VariationsSeedFetcher { +@@ -453,35 +453,13 @@ public class VariationsSeedFetcher { */ public void fetchSeed(String restrictMode, String milestone, String channel) { assert !ThreadUtils.runningOnUiThread(); @@ -181,7 +181,7 @@ index 4a2afc8aeaf24..176110e257cb4 100644 } private void recordFetchResultOrCode(int resultOrCode) { -@@ -523,7 +501,7 @@ public class VariationsSeedFetcher { +@@ -525,7 +503,7 @@ public class VariationsSeedFetcher { * @param curSeedInfo optional currently saved seed info to set the `If-None-Match` header. * @return the object holds the request result and seed data with its related header fields. */ @@ -232,30 +232,48 @@ index 2818ede04d78a..7a9718c86f750 100644 AppendOmniboxOnDeviceSuggestionsHeaderIfNeeded(url, resource_request_); // Note the criteria for attaching client experiment headers: -diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc -index bfddf3a8eb07d..471caac8c7247 100644 ---- a/components/variations/service/variations_field_trial_creator.cc -+++ b/components/variations/service/variations_field_trial_creator.cc -@@ -142,7 +142,8 @@ Study::CpuArchitecture GetCurrentCpuArchitecture() { - // "--variations-server-url" switches are passed. It is however possible to - // apply the testing config as well as specify additional field trials (using - // "--force-fieldtrials") by using the "--enable-field-trial-config" switch. --bool ShouldUseFieldTrialTestingConfig(const base::CommandLine* command_line) { -+bool ShouldUseFieldTrialTestingConfig(const base::CommandLine* command_line) { // disabled in Bromite -+ if ((true)) return false; - #if BUILDFLAG(GOOGLE_CHROME_BRANDING) - return command_line->HasSwitch(switches::kEnableFieldTrialTestingConfig); - #else -@@ -530,6 +531,7 @@ Study::FormFactor VariationsFieldTrialCreator::GetCurrentFormFactor() { +diff --git a/components/variations/service/variations_field_trial_creator_base.cc b/components/variations/service/variations_field_trial_creator_base.cc +index 1684ca313ab4b..58d5743d4fa2a 100644 +--- a/components/variations/service/variations_field_trial_creator_base.cc ++++ b/components/variations/service/variations_field_trial_creator_base.cc +@@ -118,6 +118,7 @@ Study::CpuArchitecture GetCurrentCpuArchitecture() { } #if BUILDFLAG(FIELDTRIAL_TESTING_ENABLED) +#error FIELDTRIAL_TESTING_ENABLED should be disabled. - void VariationsFieldTrialCreator::ApplyFieldTrialTestingConfig( - base::FeatureList* feature_list) { - VLOG(1) << "Applying FieldTrialTestingConfig"; + // Determines whether the field trial testing config defined in + // testing/variations/fieldtrial_testing_config.json should be applied. If the + // "disable_fieldtrial_testing_config" GN flag is set to true, then the testing +@@ -302,11 +303,6 @@ bool VariationsFieldTrialCreatorBase::SetUpFieldTrials( + safe_seed_manager); + } + +- platform_field_trials->SetUpClientSideFieldTrials( +- used_seed, *entropy_providers, feature_list.get()); +- +- platform_field_trials->RegisterFeatureOverrides(feature_list.get()); +- + base::FeatureList::SetInstance(std::move(feature_list)); + + // For testing Variations Safe Mode, maybe crash here. +@@ -585,6 +581,7 @@ bool VariationsFieldTrialCreatorBase::CreateTrialsFromSeed( + const EntropyProviders& entropy_providers, + base::FeatureList* feature_list, + SafeSeedManagerInterface* safe_seed_manager) { ++ if ((true)) return false; + // This histogram name uses "VariationsFieldTrialCreator" rather than + // "VariationsFieldTrialCreatorBase" for consistency with historical data + TRACE_EVENT0("startup", "VariationsFieldTrialCreator::CreateTrialsFromSeed"); +@@ -678,6 +675,7 @@ bool VariationsFieldTrialCreatorBase::CreateTrialsFromSeed( + + void VariationsFieldTrialCreatorBase::LoadSeedFromJsonFile( + const base::FilePath& json_seed_path) { ++ if ((true)) return; + VLOG(1) << "Loading seed from JSON file:" << json_seed_path; + JSONFileValueDeserializer file_deserializer(json_seed_path); + int error_code; diff --git a/components/variations/service/variations_service.cc b/components/variations/service/variations_service.cc -index c7afae315af9b..b97e4d3936325 100644 +index 81018bfe6da0e..1f4fe87b53fc5 100644 --- a/components/variations/service/variations_service.cc +++ b/components/variations/service/variations_service.cc @@ -220,17 +220,8 @@ bool GetInstanceManipulations(const net::HttpResponseHeaders* headers, @@ -326,10 +344,10 @@ index 8811a163777c4..2db95d00dd2e3 100644 } size_t iter = 0; diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc -index 40f469c7129f1..dfce060a70d49 100644 +index d078a75e81d22..906c06cca4f34 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -791,8 +791,8 @@ BASE_FEATURE(kPepperCrossOriginRedirectRestriction, +@@ -753,8 +753,8 @@ BASE_FEATURE(kPepperCrossOriginRedirectRestriction, // things before receiving the response, for instance it can affect the next // navigation's network request. BASE_FEATURE(kPersistentOriginTrials, @@ -361,10 +379,10 @@ index 661dd436c023f..eaecf81365909 100644 void VariationsRenderThreadObserver::RegisterMojoInterfaces( diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc -index 0062a38167824..ea4b2695762b6 100644 +index 0adc2775842a1..39407a0bee521 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc -@@ -188,13 +188,6 @@ Vector CopyInitiatorOriginTrials( +@@ -191,13 +191,6 @@ Vector CopyInitiatorOriginTrials( WebVector CopyInitiatorOriginTrials( const Vector& initiator_origin_trial_features) { WebVector result; diff --git a/bromite/build/patches/Disable-idle-detection.patch b/bromite/build/patches/Disable-idle-detection.patch index 7d33de37..22b1cb8b 100644 --- a/bromite/build/patches/Disable-idle-detection.patch +++ b/bromite/build/patches/Disable-idle-detection.patch @@ -1,4 +1,4 @@ -From 05e121f8ca4e53940abed1cc75032fe13c65987a Mon Sep 17 00:00:00 2001 +From ade14eee289ccb1ecbfc2739e4aa57ed6dbbb0db Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 19 Feb 2022 12:01:33 +0100 Subject: [PATCH 152/192] Disable idle detection @@ -10,10 +10,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc -index 2141094ae7f24..546015d33d41a 100644 +index 94f73fffeb6f3..85c17b41d0b8f 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -552,7 +552,7 @@ BASE_FEATURE(kHandleRendererThreadTypeChangesInBrowser, +@@ -525,7 +525,7 @@ BASE_FEATURE(kHandleRendererThreadTypeChangesInBrowser, // This is intended as a kill switch for the Idle Detection feature. To enable // this feature, the experimental web platform features flag should be set, // or the site should obtain an Origin Trial token. @@ -23,10 +23,10 @@ index 2141094ae7f24..546015d33d41a 100644 // A feature flag for the memory-backed code cache. BASE_FEATURE(kInMemoryCodeCache, diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index 93aa660ce4dce..b6ece31b2715e 100644 +index 0aa29d0af5dae..b60686fa4fed6 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2014,10 +2014,9 @@ +@@ -1963,10 +1963,9 @@ base_feature: "none", }, { diff --git a/bromite/build/patches/Disable-lock-icon-in-address-bar-by-default.patch b/bromite/build/patches/Disable-lock-icon-in-address-bar-by-default.patch index 1df1e3d2..2d55d6da 100644 --- a/bromite/build/patches/Disable-lock-icon-in-address-bar-by-default.patch +++ b/bromite/build/patches/Disable-lock-icon-in-address-bar-by-default.patch @@ -1,4 +1,4 @@ -From 879ce60e0e6befeb2eb30dfb38ba944dddf84475 Mon Sep 17 00:00:00 2001 +From 2dec569f1c8a1c8100dbdf5cb85731665e21e899 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 8 Oct 2021 00:30:26 +0200 Subject: [PATCH 141/192] Disable lock icon in address bar by default @@ -9,15 +9,15 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc -index 05fa6f318d2f6..cfb75ed80c184 100644 +index c444b8e4ebfac..d9661ed024f01 100644 --- a/components/omnibox/common/omnibox_features.cc +++ b/components/omnibox/common/omnibox_features.cc -@@ -603,8 +603,8 @@ BASE_FEATURE(kOmniboxModernizeVisualUpdate, - - // Experiment to introduce new security indicators for HTTPS. +@@ -470,8 +470,8 @@ BASE_FEATURE(kOmniboxModernizeVisualUpdate, + // used, on non-Android platforms this is controlled through the + // ChromeRefresh2023 flag. BASE_FEATURE(kUpdatedConnectionSecurityIndicators, - "OmniboxUpdatedConnectionSecurityIndicators", -- base::FEATURE_DISABLED_BY_DEFAULT); +- base::FEATURE_ENABLED_BY_DEFAULT); + "OmniboxUpdatedConnectionSecurityIndicators", // enabled by default + base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite diff --git a/bromite/build/patches/Disable-media-router-and-remoting-by-default.patch b/bromite/build/patches/Disable-media-router-and-remoting-by-default.patch index 24e55d61..d537a84c 100644 --- a/bromite/build/patches/Disable-media-router-and-remoting-by-default.patch +++ b/bromite/build/patches/Disable-media-router-and-remoting-by-default.patch @@ -1,4 +1,4 @@ -From 4243f05897568e0f1439fa71cfb3f79cf7ba6fdf Mon Sep 17 00:00:00 2001 +From c5527d9aff5aa15846b72a0b60e248bf0969f4c7 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Thu, 4 Jul 2019 19:08:52 -0400 Subject: [PATCH 088/192] Disable media router and remoting by default @@ -41,10 +41,10 @@ index b0c08749791e6..58b0d943012e0 100644 media_router::prefs::kMediaRouterShowCastSessionsStartedByOtherDevices, true); diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc -index b1f6f22bed680..272a2c513816c 100644 +index bce1a287d7513..2de1d788b43b8 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc -@@ -419,7 +419,7 @@ void ProfileImpl::RegisterProfilePrefs( +@@ -413,7 +413,7 @@ void ProfileImpl::RegisterProfilePrefs( #endif registry->RegisterBooleanPref(prefs::kForceEphemeralProfiles, false); diff --git a/bromite/build/patches/Disable-minidump-upload-scheduling.patch b/bromite/build/patches/Disable-minidump-upload-scheduling.patch index d17e45af..0a5eaeef 100644 --- a/bromite/build/patches/Disable-minidump-upload-scheduling.patch +++ b/bromite/build/patches/Disable-minidump-upload-scheduling.patch @@ -1,4 +1,4 @@ -From 937a22cdea535b56e4bfa44d8480a282ccafa96c Mon Sep 17 00:00:00 2001 +From e118060d7963855530c56df56b5b793cc0d27d67 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 27 Feb 2022 23:58:22 +0100 Subject: [PATCH 154/192] Disable minidump upload scheduling @@ -10,10 +10,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoint_fetcher/endpoint_fetcher.cc -index f477449945422..13c84dcceb371 100644 +index 6fa68a102c1f2..0e18108d742c7 100644 --- a/components/endpoint_fetcher/endpoint_fetcher.cc +++ b/components/endpoint_fetcher/endpoint_fetcher.cc -@@ -355,7 +355,7 @@ void EndpointFetcher::OnResponseFetched( +@@ -366,7 +366,7 @@ void EndpointFetcher::OnResponseFetched( } } else { std::string net_error = net::ErrorToString(net_error_code); diff --git a/bromite/build/patches/Disable-offline-pages-in-CCT.patch b/bromite/build/patches/Disable-offline-pages-in-CCT.patch index 756b5c72..9c1007a0 100644 --- a/bromite/build/patches/Disable-offline-pages-in-CCT.patch +++ b/bromite/build/patches/Disable-offline-pages-in-CCT.patch @@ -1,4 +1,4 @@ -From 8380f5c9a3a0724e033bef57d274a671f3fad04f Mon Sep 17 00:00:00 2001 +From 55c755e331be1c5c8e5985645fb5ed7455640d14 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 30 May 2019 03:37:45 +0200 Subject: [PATCH 087/192] Disable offline pages in CCT diff --git a/bromite/build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch b/bromite/build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch index 0f3949cf..24e154b0 100644 --- a/bromite/build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch +++ b/bromite/build/patches/Disable-omission-of-URL-elements-in-Omnibox.patch @@ -1,4 +1,4 @@ -From 7d1d151eaf898dc74b63bc9a0acf7b5997c0e317 Mon Sep 17 00:00:00 2001 +From 2a4d1c658b8327183fa33f7fbb5c9f12daa823ea Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 11 Oct 2017 23:24:58 +0200 Subject: [PATCH 029/192] Disable omission of URL elements in Omnibox diff --git a/bromite/build/patches/Disable-plugins-enumeration.patch b/bromite/build/patches/Disable-plugins-enumeration.patch index 777bb977..436b8169 100644 --- a/bromite/build/patches/Disable-plugins-enumeration.patch +++ b/bromite/build/patches/Disable-plugins-enumeration.patch @@ -1,4 +1,4 @@ -From 32b0032a238d53259c455bbd10ea4ed84e65b6db Mon Sep 17 00:00:00 2001 +From 48ef52e4384ea2fba73a4e0cb5ea8991d6d5b9c9 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 22 Mar 2018 22:38:00 +0100 Subject: [PATCH 071/192] Disable plugins enumeration @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 deletions(-) diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc -index 51ac02abf2f2e..0d679c340fff5 100644 +index 83f126adc28e8..336215b71f630 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc -@@ -2057,9 +2057,7 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() { +@@ -2051,9 +2051,7 @@ WebContentSettingsClient* LocalFrame::GetContentSettingsClient() { } PluginData* LocalFrame::GetPluginData() const { diff --git a/bromite/build/patches/Disable-references-to-fonts.googleapis.com.patch b/bromite/build/patches/Disable-references-to-fonts.googleapis.com.patch index 9c5d404b..daa61850 100644 --- a/bromite/build/patches/Disable-references-to-fonts.googleapis.com.patch +++ b/bromite/build/patches/Disable-references-to-fonts.googleapis.com.patch @@ -1,4 +1,4 @@ -From ab34a59b4c0ecf137eb5f0222eddbbb116643fe6 Mon Sep 17 00:00:00 2001 +From c5745a2198605cddcf03a96751e2a26ffb82b3ce Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 15 Oct 2017 21:45:46 +0200 Subject: [PATCH 034/192] Disable references to fonts.googleapis.com diff --git a/bromite/build/patches/Disable-requests-for-single-word-Omnibar-searches.patch b/bromite/build/patches/Disable-requests-for-single-word-Omnibar-searches.patch index 86ab3b20..20e1c6b6 100644 --- a/bromite/build/patches/Disable-requests-for-single-word-Omnibar-searches.patch +++ b/bromite/build/patches/Disable-requests-for-single-word-Omnibar-searches.patch @@ -1,4 +1,4 @@ -From 8ae675daf659ce4ab8eeb8f22e7806826a6468a8 Mon Sep 17 00:00:00 2001 +From ecf1941668543049f5b213b9f508c22d2c0efde7 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 27 Oct 2019 10:21:19 +0100 Subject: [PATCH 095/192] Disable requests for single-word Omnibar searches @@ -7,14 +7,30 @@ Patch from https://github.com/Eloston/ungoogled-chromium/issues/814#issuecomment License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../ui/omnibox/chrome_omnibox_navigation_observer.cc | 7 ------- - 1 file changed, 7 deletions(-) + .../ui/omnibox/chrome_omnibox_navigation_observer.cc | 9 ++------- + 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc b/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc -index c1ee2a52d9534..18e3963a63550 100644 +index c1ee2a52d9534..5fda16c1e5d77 100644 --- a/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc +++ b/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc -@@ -252,13 +252,6 @@ ChromeOmniboxNavigationObserver::ChromeOmniboxNavigationObserver( +@@ -76,6 +76,7 @@ bool OnlyChangeIsFromHTTPToHTTPS(const GURL& origin, const GURL& destination) { + return origin_with_https == destination; + } + ++#if BUILDFLAG(IS_ANDROID) + // Choose the appropriate URLLoaderFactory: either an explicitly specified or a + // default for the given profile. + network::mojom::URLLoaderFactory* GetURLLoaderFactory( +@@ -87,6 +88,7 @@ network::mojom::URLLoaderFactory* GetURLLoaderFactory( + ->GetURLLoaderFactoryForBrowserProcess() + .get(); + } ++#endif + + // Helper to keep ChromeOmniboxNavigationObserver alive while the initiated + // navigation is pending. +@@ -252,13 +254,6 @@ ChromeOmniboxNavigationObserver::ChromeOmniboxNavigationObserver( profile_(profile), show_infobar_(std::move(show_infobar)) { NavigationUserData::CreateForNavigationHandle(navigation, this); diff --git a/bromite/build/patches/Disable-safety-check.patch b/bromite/build/patches/Disable-safety-check.patch index c0f408f9..44a5fc69 100644 --- a/bromite/build/patches/Disable-safety-check.patch +++ b/bromite/build/patches/Disable-safety-check.patch @@ -1,4 +1,4 @@ -From b8c0a4d612f6337387d80733e7f4abdceb4bf3af Mon Sep 17 00:00:00 2001 +From b97cd8880128a4e57c86a340c00258d3804689b3 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 6 Mar 2022 17:39:15 +0100 Subject: [PATCH 156/192] Disable safety check @@ -7,48 +7,48 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/android/BUILD.gn | 5 ----- chrome/android/chrome_java_sources.gni | 1 - - chrome/android/java/res/xml/main_preferences.xml | 5 ----- + chrome/android/java/res/xml/main_preferences.xml | 7 +------ .../chrome/browser/settings/SettingsActivity.java | 9 --------- .../chrome/browser/settings/SettingsLauncherImpl.java | 5 +---- chrome/browser/BUILD.gn | 1 - .../browser/omnibox/suggestions/action/OmniboxPedal.java | 3 --- - 7 files changed, 1 insertion(+), 28 deletions(-) + 7 files changed, 2 insertions(+), 29 deletions(-) diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn -index 26397ae336444..50967a14f3337 100644 +index 8194a946c15c6..ceac4c4145d0a 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -370,7 +370,6 @@ if (current_toolchain == default_toolchain) { +@@ -376,7 +376,6 @@ if (current_toolchain == default_toolchain) { "//chrome/browser/recent_tabs:helper_java", "//chrome/browser/recent_tabs:java", "//chrome/browser/safe_browsing/android:java", - "//chrome/browser/safety_check/android:java", + "//chrome/browser/screenshot_monitor:java", "//chrome/browser/search_engines/android:java", "//chrome/browser/search_resumption:java", - "//chrome/browser/segmentation_platform:factory_java", -@@ -974,8 +973,6 @@ if (current_toolchain == default_toolchain) { +@@ -987,8 +986,6 @@ if (current_toolchain == default_toolchain) { "//chrome/browser/recent_tabs:java", "//chrome/browser/recent_tabs:junit", "//chrome/browser/recent_tabs/internal:junit", - "//chrome/browser/safety_check/android:java", - "//chrome/browser/safety_check/android:junit", + "//chrome/browser/screenshot_monitor:java", "//chrome/browser/search_engines/android:java", "//chrome/browser/search_resumption:junit", - "//chrome/browser/segmentation_platform:factory_java", -@@ -1552,8 +1549,6 @@ if (current_toolchain == default_toolchain) { +@@ -1578,8 +1575,6 @@ if (current_toolchain == default_toolchain) { "//chrome/browser/recent_tabs/internal:javatests", "//chrome/browser/safe_browsing/android:java", "//chrome/browser/safe_browsing/android:javatests", - "//chrome/browser/safety_check/android:java", - "//chrome/browser/safety_check/android:javatests", + "//chrome/browser/screenshot_monitor:java", "//chrome/browser/search_engines/android:java", "//chrome/browser/selection/android:javatests", - "//chrome/browser/settings:java", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index 600aa5a6f8bbe..beae59fba1f9f 100644 +index 7c5779f77bf09..58dc23a53747b 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -977,7 +977,6 @@ chrome_java_sources = [ +@@ -986,7 +986,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingPasswordReuseDialogBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingReferringAppBridge.java", "java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingSettingsLauncher.java", @@ -57,26 +57,31 @@ index 600aa5a6f8bbe..beae59fba1f9f 100644 "java/src/org/chromium/chrome/browser/searchwidget/SearchActivityLocationBarLayout.java", "java/src/org/chromium/chrome/browser/searchwidget/SearchBoxDataProvider.java", diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml -index f63a36cc04a6e..6ac62fbc63f75 100644 +index 683735e9a721d..49b562b49eebc 100644 --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -62,11 +62,6 @@ found in the LICENSE file. +@@ -67,15 +67,10 @@ found in the LICENSE file. android:key="privacy" - android:order="10" + android:order="11" android:title="@string/prefs_privacy_security"/> - + Date: Fri, 24 Jan 2020 19:17:22 +0100 Subject: [PATCH 104/192] Disable smart selection by default @@ -42,10 +42,10 @@ index ddeb5a8302a4e..4b60e666be488 100644 mOptionalSelectionClient = SelectionClient.createSmartSelectionClient(webContents); SelectionPopupController controller = diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index e69b3a78e7d56..0e5f5023303d4 100644 +index 26ad6f888a5e3..d97a6c7597fa6 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -185,6 +185,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -190,6 +190,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kCCTClientDataHeader, &kCCTFeatureUsage, &kCCTIncognito, @@ -53,8 +53,8 @@ index e69b3a78e7d56..0e5f5023303d4 100644 &kCCTIncognitoAvailableToThirdParty, &kCCTIntentFeatureOverrides, &kCCTNewDownloadTab, -@@ -1025,6 +1026,10 @@ BASE_FEATURE(kDiscoverFeedMultiColumn, - "DiscoverFeedMultiColumn", +@@ -1043,6 +1044,10 @@ BASE_FEATURE(kTabGridLayoutAndroid, + "TabGridLayoutAndroid", base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kChromeSmartSelection, @@ -65,10 +65,10 @@ index e69b3a78e7d56..0e5f5023303d4 100644 "TabStripRedesign", base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h -index 8d723beac8ee8..4a1926037e1f9 100644 +index 120623eb985aa..67043a24ceb69 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -65,6 +65,7 @@ BASE_DECLARE_FEATURE(kCCTToolbarCustomizations); +@@ -70,6 +70,7 @@ BASE_DECLARE_FEATURE(kCCTToolbarCustomizations); BASE_DECLARE_FEATURE(kDontAutoHideBrowserControls); BASE_DECLARE_FEATURE(kCacheDeprecatedSystemLocationSetting); BASE_DECLARE_FEATURE(kChromeNewDownloadTab); @@ -77,10 +77,10 @@ index 8d723beac8ee8..4a1926037e1f9 100644 BASE_DECLARE_FEATURE(kChromeSharingHub); BASE_DECLARE_FEATURE(kChromeSharingHubLaunchAdjacent); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index eedd6878b1232..e6a5136eeadc1 100644 +index c287e9b0bf4b8..8c2d77a951291 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -180,6 +180,7 @@ public abstract class ChromeFeatureList { +@@ -187,6 +187,7 @@ public abstract class ChromeFeatureList { public static final String CCT_REAL_TIME_ENGAGEMENT_SIGNALS_ALTERNATIVE_IMPL = "CCTRealTimeEngagementSignalsAlternativeImpl"; public static final String CCT_REDIRECT_PRECONNECT = "CCTRedirectPreconnect"; @@ -89,10 +89,10 @@ index eedd6878b1232..e6a5136eeadc1 100644 public static final String CCT_REPORT_PARALLEL_REQUEST_STATUS = "CCTReportParallelRequestStatus"; diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java -index 95e2a1a3b760c..e4de67243ca71 100644 +index 3b3999bb0247a..f7e578541bd33 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java -@@ -884,7 +884,7 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper +@@ -1120,7 +1120,7 @@ public class SelectionPopupControllerImpl extends ActionModeCallbackHelper */ @Override public boolean canWebSearch() { @@ -102,10 +102,10 @@ index 95e2a1a3b760c..e4de67243ca71 100644 } diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json -index bce7b0cb61698..bb74fb624b616 100644 +index 9d900d3d7feb9..067a93741550e 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json -@@ -3416,6 +3416,21 @@ +@@ -3806,6 +3806,21 @@ ] } ], diff --git a/bromite/build/patches/Disable-some-signed-exchange-features.patch b/bromite/build/patches/Disable-some-signed-exchange-features.patch index 327baeab..8e8a805f 100644 --- a/bromite/build/patches/Disable-some-signed-exchange-features.patch +++ b/bromite/build/patches/Disable-some-signed-exchange-features.patch @@ -1,4 +1,4 @@ -From c754654db45fe3e255dd7c4b814ccf7dfccac2cb Mon Sep 17 00:00:00 2001 +From 7a26c197c0700064bcc6148d242858e85c326a49 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 2 Nov 2019 16:22:56 +0100 Subject: [PATCH 096/192] Disable some signed exchange features @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc -index 5a15cbd8dca5e..450b9445e0323 100644 +index 05793c65d17ee..fd732b1f573cb 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -1171,14 +1171,14 @@ BASE_FEATURE(kShouldAllowFirstPartyStorageKeyOverrideFromEmbedder, +@@ -1161,14 +1161,14 @@ BASE_FEATURE(kShouldAllowFirstPartyStorageKeyOverrideFromEmbedder, // Signed Exchange Reporting for distributors // https://www.chromestatus.com/feature/5687904902840320 BASE_FEATURE(kSignedExchangeReportingForDistributors, diff --git a/bromite/build/patches/Disable-support-for-RAR-files-inspection.patch b/bromite/build/patches/Disable-support-for-RAR-files-inspection.patch index c98aae69..a84d208b 100644 --- a/bromite/build/patches/Disable-support-for-RAR-files-inspection.patch +++ b/bromite/build/patches/Disable-support-for-RAR-files-inspection.patch @@ -1,19 +1,19 @@ -From 0c1c39c8715f9d15a57aec3b756da26a0eafd672 Mon Sep 17 00:00:00 2001 +From 4dc698ead68c19992d4c6a9ea98c7b0b011c64bd Mon Sep 17 00:00:00 2001 From: Michael Gilbert Date: Wed, 21 Nov 2018 02:37:35 +0000 Subject: [PATCH 111/192] Disable support for RAR files inspection License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../download_protection/file_analyzer.cc | 2 +- - .../services/file_util/safe_archive_analyzer.cc | 17 +++-------------- - .../services/file_util/safe_archive_analyzer.h | 2 -- - chrome/utility/safe_browsing/BUILD.gn | 2 -- - .../utility/safe_browsing/archive_analyzer.cc | 2 +- - 5 files changed, 5 insertions(+), 20 deletions(-) + .../download_protection/file_analyzer.cc | 2 +- + .../file_util/safe_archive_analyzer.cc | 18 +++--------------- + .../services/file_util/safe_archive_analyzer.h | 2 -- + chrome/utility/safe_browsing/BUILD.gn | 2 -- + .../utility/safe_browsing/archive_analyzer.cc | 2 +- + 5 files changed, 5 insertions(+), 21 deletions(-) diff --git a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc -index 3faf0c83a2dc0..f98022692394e 100644 +index 50eba544fd1ae..368ddd8bd9ac6 100644 --- a/chrome/browser/safe_browsing/download_protection/file_analyzer.cc +++ b/chrome/browser/safe_browsing/download_protection/file_analyzer.cc @@ -78,7 +78,7 @@ void FileAnalyzer::Start(const base::FilePath& target_path, @@ -26,10 +26,10 @@ index 3faf0c83a2dc0..f98022692394e 100644 } else if (inspection_type == DownloadFileType::DMG) { StartExtractDmgFeatures(); diff --git a/chrome/services/file_util/safe_archive_analyzer.cc b/chrome/services/file_util/safe_archive_analyzer.cc -index cecafd1297e9f..86c5ed143ae6b 100644 +index 93342e28ae447..9fe1537828e64 100644 --- a/chrome/services/file_util/safe_archive_analyzer.cc +++ b/chrome/services/file_util/safe_archive_analyzer.cc -@@ -70,20 +70,9 @@ void SafeArchiveAnalyzer::AnalyzeRarFile( +@@ -74,23 +74,11 @@ void SafeArchiveAnalyzer::AnalyzeRarFile( mojo::PendingRemote temp_file_getter, AnalyzeRarFileCallback callback) { DCHECK(rar_file.IsValid()); @@ -44,17 +44,20 @@ index cecafd1297e9f..86c5ed143ae6b 100644 - weak_factory_.GetWeakPtr()); - timeout_timer_.Start(FROM_HERE, kArchiveAnalysisTimeout, this, - &SafeArchiveAnalyzer::Timeout); ++ LOG(FATAL) << "AnalyzeRarFile is disabled in this build"; ++ safe_browsing::ArchiveAnalyzerResults results; + // TODO(crbug/1466287): Update RAR analyzer to use passwords and provide the + // password here. - rar_analyzer_.Analyze(std::move(rar_file), base::FilePath(), +- /*password=*/absl::nullopt, - std::move(analysis_finished_callback), - std::move(temp_file_getter_callback), &results_); -+ LOG(FATAL) << "AnalyzeRarFile is disabled in this build"; -+ safe_browsing::ArchiveAnalyzerResults results; + std::move(callback).Run(results); } void SafeArchiveAnalyzer::AnalyzeSevenZipFile( diff --git a/chrome/services/file_util/safe_archive_analyzer.h b/chrome/services/file_util/safe_archive_analyzer.h -index a67216728d1d8..7cbca2e414f04 100644 +index 0caa4d6ee0325..4ae82079a67bf 100644 --- a/chrome/services/file_util/safe_archive_analyzer.h +++ b/chrome/services/file_util/safe_archive_analyzer.h @@ -7,7 +7,6 @@ @@ -65,7 +68,7 @@ index a67216728d1d8..7cbca2e414f04 100644 #include "chrome/utility/safe_browsing/seven_zip_analyzer.h" #include "chrome/utility/safe_browsing/zip_analyzer.h" #include "mojo/public/cpp/bindings/remote.h" -@@ -63,7 +62,6 @@ class SafeArchiveAnalyzer : public chrome::mojom::SafeArchiveAnalyzer { +@@ -65,7 +64,6 @@ class SafeArchiveAnalyzer : public chrome::mojom::SafeArchiveAnalyzer { void Timeout(); safe_browsing::ZipAnalyzer zip_analyzer_; @@ -74,7 +77,7 @@ index a67216728d1d8..7cbca2e414f04 100644 #if BUILDFLAG(IS_MAC) safe_browsing::dmg::DMGAnalyzer dmg_analyzer_; diff --git a/chrome/utility/safe_browsing/BUILD.gn b/chrome/utility/safe_browsing/BUILD.gn -index 7fcd1cb6b1a65..22b51de7528ec 100644 +index 4050fb8069e5c..373076fdfb5c5 100644 --- a/chrome/utility/safe_browsing/BUILD.gn +++ b/chrome/utility/safe_browsing/BUILD.gn @@ -31,8 +31,6 @@ source_set("safe_browsing") { @@ -87,7 +90,7 @@ index 7fcd1cb6b1a65..22b51de7528ec 100644 "seven_zip_analyzer.h", "zip_analyzer.cc", diff --git a/chrome/utility/safe_browsing/archive_analyzer.cc b/chrome/utility/safe_browsing/archive_analyzer.cc -index cf5204f7a6342..25d8025f31b8c 100644 +index 606f7023ddf87..69a5de94ffb80 100644 --- a/chrome/utility/safe_browsing/archive_analyzer.cc +++ b/chrome/utility/safe_browsing/archive_analyzer.cc @@ -24,7 +24,7 @@ namespace safe_browsing { diff --git a/bromite/build/patches/Disable-text-fragments-by-default.patch b/bromite/build/patches/Disable-text-fragments-by-default.patch index 0b26da6e..0d195aa4 100644 --- a/bromite/build/patches/Disable-text-fragments-by-default.patch +++ b/bromite/build/patches/Disable-text-fragments-by-default.patch @@ -1,4 +1,4 @@ -From 3dc5ef64ccc466a4cb05e73f4f63478743b18641 Mon Sep 17 00:00:00 2001 +From b441f1f396e0a40a681d787f661081cbe48a677a Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 22 Aug 2020 12:46:20 +0200 Subject: [PATCH 119/192] Disable text fragments by default @@ -21,10 +21,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 10 files changed, 33 insertions(+), 4 deletions(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index c8281fb205bed..882bdf4812a77 100644 +index 23846b7990c17..edc33c9c6b9bf 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -6778,6 +6778,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -6901,6 +6901,11 @@ const FeatureEntry kFeatureEntries[] = { "")}, #endif @@ -37,10 +37,10 @@ index c8281fb205bed..882bdf4812a77 100644 {"enable-web-authentication-chromeos-authenticator", flag_descriptions::kEnableWebAuthenticationChromeOSAuthenticatorName, diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 765ea119bd066..94d6104b5f8d3 100644 +index ab1f33fc70420..0c67d85c164df 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -3018,6 +3018,11 @@ +@@ -3148,6 +3148,11 @@ "owners": [ "robsc", "napper", "alanlxl" ], "expiry_milestone": 130 }, @@ -53,10 +53,10 @@ index 765ea119bd066..94d6104b5f8d3 100644 "name": "enable-neural-stylus-palm-rejection", "owners": [ "robsc", "napper", "adlr" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 45aca653489b0..62faa62ae5767 100644 +index e755510a401cd..bb42b389a5589 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1432,6 +1432,10 @@ extern const char kDropInputEventsBeforeFirstPaintDescription[] = +@@ -1486,6 +1486,10 @@ const char kDropInputEventsBeforeFirstPaintDescription[] = "intentionally interact with elements on that page. By dropping the events " "we prevent accidental interaction with a page the user has not seen yet."; @@ -68,10 +68,10 @@ index 45aca653489b0..62faa62ae5767 100644 "Enables CSS selector fragment anchors"; const char kEnableCssSelectorFragmentAnchorDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 49b1a1fed9138..b8dfb1abc8d80 100644 +index ed06c2f0f619f..88e690dad1b42 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -798,6 +798,9 @@ extern const char kExperimentalRgbKeyboardPatternsDescription[]; +@@ -832,6 +832,9 @@ extern const char kExperimentalRgbKeyboardPatternsDescription[]; extern const char kRetailCouponsName[]; extern const char kRetailCouponsDescription[]; @@ -95,11 +95,11 @@ index 475a46589eecb..0e9cfc24accbe 100644 registry->RegisterDoublePref(browser_ui::prefs::kWebKitFontScaleFactor, 1.0); registry->RegisterBooleanPref(browser_ui::prefs::kWebKitForceEnableZoom, diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc -index cb11504fa88c5..513d84aeca0c4 100644 +index 26ce4a01376cf..bf469ba421e52 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc -@@ -294,6 +294,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() { - raw_ref(autofill::features::kAutofillSharedAutofill)}, +@@ -284,6 +284,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() { + {wf::EnableSharedAutofill, raw_ref(features::kAutofillSharedAutofill)}, {wf::EnableTouchDragAndContextMenu, raw_ref(features::kTouchDragAndContextMenu)}, + {wf::EnableTextFragmentIdentifiers, @@ -108,10 +108,10 @@ index cb11504fa88c5..513d84aeca0c4 100644 raw_ref(features::kUserActivationSameOriginVisibility)}, {wf::EnableVideoPlaybackQuality, raw_ref(features::kVideoPlaybackQuality)}, diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc -index d4cf1f50f0c96..d8ee524219b40 100644 +index 9e0801e355390..68af5b10d69f8 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -744,6 +744,11 @@ BASE_FEATURE(kFastPathPaintPropertyUpdates, +@@ -787,6 +787,11 @@ BASE_FEATURE(kExtendScriptResourceLifetime, // trials. BASE_FEATURE(kFencedFrames, "FencedFrames", base::FEATURE_DISABLED_BY_DEFAULT); @@ -124,10 +124,10 @@ index d4cf1f50f0c96..d8ee524219b40 100644 BASE_FEATURE(kFileHandlingIcons, "FileHandlingIcons", diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h -index 0b65cc09007b4..131c3ca2705c9 100644 +index 0be0e4712487d..793c70c41896d 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h -@@ -345,6 +345,7 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kDispatchBeforeUnloadOnFreeze); +@@ -352,6 +352,7 @@ BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kDispatchBeforeUnloadOnFreeze); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kDisplayLocking); BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kDropInputEventsBeforeFirstPaint); @@ -136,10 +136,10 @@ index 0b65cc09007b4..131c3ca2705c9 100644 BLINK_COMMON_EXPORT BASE_DECLARE_FEATURE(kDroppedTouchSequenceIncludesTouchEnd); diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc -index d978075fd0050..3e8c9681237d6 100644 +index f255a4fb30fbd..15e3c38e35bf9 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -4396,9 +4396,14 @@ void Document::SetURL(const KURL& url) { +@@ -4412,9 +4412,14 @@ void Document::SetURL(const KURL& url) { TRACE_EVENT1("navigation", "Document::SetURL", "url", new_url.GetString().Utf8()); @@ -155,10 +155,10 @@ index d978075fd0050..3e8c9681237d6 100644 url_ = new_url; UpdateBaseURL(); diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index 19db42a2982d1..eaba99e5b6eec 100644 +index 9a36374db163d..f5d8699b53384 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -3512,10 +3512,9 @@ +@@ -3537,10 +3537,9 @@ }, { name: "TextFragmentIdentifiers", diff --git a/bromite/build/patches/Disable-the-DIAL-repeating-discovery.patch b/bromite/build/patches/Disable-the-DIAL-repeating-discovery.patch index 94f90045..07736caa 100644 --- a/bromite/build/patches/Disable-the-DIAL-repeating-discovery.patch +++ b/bromite/build/patches/Disable-the-DIAL-repeating-discovery.patch @@ -1,4 +1,4 @@ -From 213b593563051baac53dff485617ea174f6386ef Mon Sep 17 00:00:00 2001 +From 4ecfbe27392c4134d0d1dfcbad8c17c8f5c9442a Mon Sep 17 00:00:00 2001 From: Blaise Date: Sun, 23 Aug 2020 14:32:55 -0500 Subject: [PATCH 114/192] Disable the DIAL repeating discovery diff --git a/bromite/build/patches/Disable-third-party-origin-trials.patch b/bromite/build/patches/Disable-third-party-origin-trials.patch index be77658d..c6b816d8 100644 --- a/bromite/build/patches/Disable-third-party-origin-trials.patch +++ b/bromite/build/patches/Disable-third-party-origin-trials.patch @@ -1,4 +1,4 @@ -From a63d845a29262d56d971da6208d98d08936c0559 Mon Sep 17 00:00:00 2001 +From 07588625cc6998c23638a1bdab81a341aa98797f Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 4 Nov 2021 09:19:24 +0100 Subject: [PATCH 144/192] Disable third-party origin trials @@ -63,10 +63,10 @@ index 68ba1512c7527..7220b4de79e24 100644 std::set disabled_features_; std::set disabled_tokens_; diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc -index a09b5bc4973fc..31d669475b398 100644 +index da87a4f823d6f..4a328d868a460 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc -@@ -8195,7 +8195,6 @@ void NavigationRequest::RestartBackForwardCachedNavigationImpl() { +@@ -8211,7 +8211,6 @@ void NavigationRequest::SetSourceSiteInstanceToInitiatorIfNeeded() { void NavigationRequest::ForceEnableOriginTrials( const std::vector& trials) { DCHECK(!HasCommitted()); @@ -75,10 +75,10 @@ index a09b5bc4973fc..31d669475b398 100644 network::CrossOriginEmbedderPolicy diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc -index 556f5310719f9..bdd88aaf2cea9 100644 +index 94d3c751277e0..2104bf3ee528f 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc -@@ -474,10 +474,6 @@ void FillNavigationParamsRequest( +@@ -475,10 +475,6 @@ void FillNavigationParamsRequest( common_params.initiator_origin.value(); } @@ -89,7 +89,7 @@ index 556f5310719f9..bdd88aaf2cea9 100644 navigation_params->was_discarded = commit_params.was_discarded; navigation_params->document_ukm_source_id = commit_params.document_ukm_source_id; -@@ -505,12 +501,6 @@ void FillNavigationParamsRequest( +@@ -506,12 +502,6 @@ void FillNavigationParamsRequest( navigation_params->had_transient_user_activation = common_params.has_user_gesture; @@ -102,7 +102,7 @@ index 556f5310719f9..bdd88aaf2cea9 100644 if (!commit_params.early_hints_preloaded_resources.empty()) { navigation_params->early_hints_preloaded_resources = WebVector(); for (const auto& resource : commit_params.early_hints_preloaded_resources) { -@@ -572,11 +562,6 @@ blink::mojom::CommonNavigationParamsPtr MakeCommonNavigationParams( +@@ -573,11 +563,6 @@ blink::mojom::CommonNavigationParamsPtr MakeCommonNavigationParams( info->url_request.GetURLRequestExtraData().get()); DCHECK(url_request_extra_data); @@ -114,7 +114,7 @@ index 556f5310719f9..bdd88aaf2cea9 100644 blink::NavigationDownloadPolicy download_policy; download_policy.ApplyDownloadFramePolicy( info->is_opener_navigation, info->url_request.HasUserGesture(), -@@ -599,7 +584,7 @@ blink::mojom::CommonNavigationParamsPtr MakeCommonNavigationParams( +@@ -600,7 +585,7 @@ blink::mojom::CommonNavigationParamsPtr MakeCommonNavigationParams( info->url_request.HasUserGesture(), info->url_request.HasTextFragmentToken(), info->should_check_main_world_content_security_policy, @@ -166,10 +166,10 @@ index 60c7e0e9d330f..b4494711ccce5 100644 return policy && policy->IsOriginTrialsSupported() && policy->IsOriginSecure(url); diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc -index ea4b2695762b6..d89b9a0352d4c 100644 +index 39407a0bee521..664fab519a4bd 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc -@@ -175,13 +175,6 @@ BASE_FEATURE(kLoadNotificationsForSameDocumentNavigations, +@@ -178,13 +178,6 @@ BASE_FEATURE(kLoadNotificationsForSameDocumentNavigations, Vector CopyInitiatorOriginTrials( const WebVector& initiator_origin_trial_features) { Vector result; @@ -183,7 +183,7 @@ index ea4b2695762b6..d89b9a0352d4c 100644 return result; } -@@ -194,18 +187,12 @@ WebVector CopyInitiatorOriginTrials( +@@ -197,18 +190,12 @@ WebVector CopyInitiatorOriginTrials( Vector CopyForceEnabledOriginTrials( const WebVector& force_enabled_origin_trials) { Vector result; @@ -202,7 +202,7 @@ index ea4b2695762b6..d89b9a0352d4c 100644 return result; } -@@ -2777,10 +2764,6 @@ void DocumentLoader::CreateParserPostCommit() { +@@ -2809,10 +2796,6 @@ void DocumentLoader::CreateParserPostCommit() { OriginTrialFeature::kTouchEventFeatureDetection); } @@ -227,7 +227,7 @@ index 87799a9be9ba7..6392c2df5dd48 100644 // For meta tags injected by script, process the token with the origin of the // external script, if available. Get the top 3 script urls from the stack, as diff --git a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc -index b8d44b35fb0d2..144157b923704 100644 +index b793add749d8f..9444224ad5ccb 100644 --- a/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc +++ b/third_party/blink/renderer/core/origin_trials/origin_trial_context.cc @@ -315,6 +315,9 @@ void OriginTrialContext::AddToken(const String& token) { diff --git a/bromite/build/patches/Disable-update-scheduler.patch b/bromite/build/patches/Disable-update-scheduler.patch index 0c224a63..e136296a 100644 --- a/bromite/build/patches/Disable-update-scheduler.patch +++ b/bromite/build/patches/Disable-update-scheduler.patch @@ -1,4 +1,4 @@ -From e01b6ca1ef394f48393245b370a3635bca69459b Mon Sep 17 00:00:00 2001 +From b37ad10a77ecf3a402cb1f3d63bddbf38bea6ee3 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 27 Oct 2018 17:54:01 +0200 Subject: [PATCH 046/192] Disable update scheduler diff --git a/bromite/build/patches/Disable-various-metrics.patch b/bromite/build/patches/Disable-various-metrics.patch index 3aa81e67..a651cb61 100644 --- a/bromite/build/patches/Disable-various-metrics.patch +++ b/bromite/build/patches/Disable-various-metrics.patch @@ -1,4 +1,4 @@ -From 2ee14eda673768b110b276c742dd0e974a715ef2 Mon Sep 17 00:00:00 2001 +From 53dd27ad7e8a3b523f20259afdbb2802e9e03190 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 25 Apr 2018 10:23:51 +0200 Subject: [PATCH 083/192] Disable various metrics @@ -15,23 +15,25 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/browser_process_impl.cc | 2 +- chrome/browser/chrome_content_browser_client.cc | 15 --------------- .../chrome_metrics_services_manager_client.cc | 8 ++++---- + .../browser/ui/search/ntp_user_data_logger.cc | 4 ---- components/ntp_tiles/BUILD.gn | 3 --- + .../ntp_tiles/custom_links_manager_impl.cc | 1 - components/ntp_tiles/most_visited_sites.cc | 2 -- services/metrics/public/cpp/ukm_recorder.cc | 2 +- - 8 files changed, 7 insertions(+), 44 deletions(-) + 10 files changed, 7 insertions(+), 49 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivityBase.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivityBase.java -index dba5e82eb6903..12540824348a1 100644 +index acff31fc619da..5998d035d5303 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivityBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivityBase.java -@@ -56,7 +56,7 @@ public abstract class FirstRunActivityBase +@@ -57,7 +57,7 @@ public abstract class FirstRunActivityBase static final String SHOW_SEARCH_ENGINE_PAGE = "ShowSearchEnginePage"; static final String SHOW_SYNC_CONSENT_PAGE = "ShowSyncConsent"; - public static final boolean DEFAULT_METRICS_AND_CRASH_REPORTING = true; + public static final boolean DEFAULT_METRICS_AND_CRASH_REPORTING = false; - private static PolicyLoadListenerFactory sPolicyLoadListenerFactory; + private static PolicyLoadListenerFactory sPolicyLoadListenerFactoryForTesting; diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/browser/android/ntp/most_visited_sites_bridge.cc index 9067505ec7b1d..7c43354d6db74 100644 @@ -90,10 +92,10 @@ index 9067505ec7b1d..7c43354d6db74 100644 static jlong JNI_MostVisitedSitesBridge_Init( diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc -index 92f8eedd1aade..742b994c42c22 100644 +index 3b06387899b58..f9685a83129c0 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc -@@ -1020,7 +1020,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) { +@@ -1042,7 +1042,7 @@ void BrowserProcessImpl::RegisterPrefs(PrefRegistrySimple* registry) { #endif // BUILDFLAG(IS_CHROMEOS_ASH) registry->RegisterBooleanPref(metrics::prefs::kMetricsReportingEnabled, @@ -103,10 +105,10 @@ index 92f8eedd1aade..742b994c42c22 100644 } diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 37dab0611a399..0eb57812e41fa 100644 +index 31cfbab55ccf5..73a2196674c69 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -78,7 +78,6 @@ +@@ -79,7 +79,6 @@ #include "chrome/browser/hid/chrome_hid_delegate.h" #include "chrome/browser/interstitials/enterprise_util.h" #include "chrome/browser/lifetime/browser_shutdown.h" @@ -114,7 +116,7 @@ index 37dab0611a399..0eb57812e41fa 100644 #include "chrome/browser/media/audio_service_util.h" #include "chrome/browser/media/router/media_router_feature.h" #include "chrome/browser/media/webrtc/audio_debug_recordings_handler.h" -@@ -4895,16 +4894,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation( +@@ -4972,16 +4971,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation( content::NavigationHandle* handle) { std::vector> throttles; @@ -131,7 +133,7 @@ index 37dab0611a399..0eb57812e41fa 100644 #if BUILDFLAG(ENABLE_SUPERVISED_USERS) MaybeAddThrottle( SupervisedUserNavigationThrottle::MaybeCreateThrottleFor(handle), -@@ -4983,10 +4972,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation( +@@ -5066,10 +5055,6 @@ ChromeContentBrowserClient::CreateThrottlesForNavigation( throttle_manager->MaybeAppendNavigationThrottles(handle, &throttles); } @@ -168,8 +170,32 @@ index 7f9ef976e28d6..60c970b24268a 100644 #endif // BUILDFLAG(IS_ANDROID) // Name of the variations param that defines the sampling rate. +diff --git a/chrome/browser/ui/search/ntp_user_data_logger.cc b/chrome/browser/ui/search/ntp_user_data_logger.cc +index 93ca3237b7fb0..7162898a48498 100644 +--- a/chrome/browser/ui/search/ntp_user_data_logger.cc ++++ b/chrome/browser/ui/search/ntp_user_data_logger.cc +@@ -394,8 +394,6 @@ void NTPUserDataLogger::LogMostVisitedImpression( + + void NTPUserDataLogger::LogMostVisitedNavigation( + const ntp_tiles::NTPTileImpression& impression) { +- ntp_tiles::metrics::RecordTileClick(impression); +- + // Records the action. This will be available as a time-stamped stream + // server-side and can be used to compute time-to-long-dwell. + base::RecordAction(base::UserMetricsAction("MostVisited_Clicked")); +@@ -424,10 +422,8 @@ void NTPUserDataLogger::EmitNtpStatistics(base::TimeDelta load_time, + if (!impression.has_value()) { + break; + } +- ntp_tiles::metrics::RecordTileImpression(*impression); + ++tiles_count; + } +- ntp_tiles::metrics::RecordPageImpression(tiles_count); + + DVLOG(1) << "Emitting NTP load time: " << load_time << ", " + << "number of tiles: " << tiles_count; diff --git a/components/ntp_tiles/BUILD.gn b/components/ntp_tiles/BUILD.gn -index 2820f7b039a1a..73a843f299b79 100644 +index 884831eeb40ff..12d1512f0862a 100644 --- a/components/ntp_tiles/BUILD.gn +++ b/components/ntp_tiles/BUILD.gn @@ -23,8 +23,6 @@ static_library("ntp_tiles") { @@ -181,7 +207,7 @@ index 2820f7b039a1a..73a843f299b79 100644 "most_visited_sites.cc", "most_visited_sites.h", "ntp_tile.cc", -@@ -93,7 +91,6 @@ source_set("unit_tests") { +@@ -92,7 +90,6 @@ source_set("unit_tests") { "custom_links_manager_impl_unittest.cc", "custom_links_store_unittest.cc", "icon_cacher_impl_unittest.cc", @@ -189,11 +215,23 @@ index 2820f7b039a1a..73a843f299b79 100644 "most_visited_sites_unittest.cc", "popular_sites_impl_unittest.cc", ] +diff --git a/components/ntp_tiles/custom_links_manager_impl.cc b/components/ntp_tiles/custom_links_manager_impl.cc +index 3182efeacbcbd..420c9eef49b01 100644 +--- a/components/ntp_tiles/custom_links_manager_impl.cc ++++ b/components/ntp_tiles/custom_links_manager_impl.cc +@@ -203,7 +203,6 @@ void CustomLinksManagerImpl::RemoveCustomLinksForPreinstalledApps() { + } + } + if (default_app_links_deleted) { +- metrics::RecordsMigratedDefaultAppDeleted(DeletedTileType::kCustomLink); + prefs_->SetBoolean(prefs::kCustomLinksForPreinstalledAppsRemoved, true); + } + } diff --git a/components/ntp_tiles/most_visited_sites.cc b/components/ntp_tiles/most_visited_sites.cc -index 762e82011effb..9f0d15cbbc0a3 100644 +index 1b09a3421d6fa..cb42a6676a6bc 100644 --- a/components/ntp_tiles/most_visited_sites.cc +++ b/components/ntp_tiles/most_visited_sites.cc -@@ -703,8 +703,6 @@ void MostVisitedSites::SaveTilesAndNotify( +@@ -702,8 +702,6 @@ void MostVisitedSites::SaveTilesAndNotify( : new_tiles; if (fixed_tiles.size() != new_tiles.size()) { diff --git a/bromite/build/patches/Do-not-build-API-keys-infobar.patch b/bromite/build/patches/Do-not-build-API-keys-infobar.patch index 273b4e5b..fa8139c4 100644 --- a/bromite/build/patches/Do-not-build-API-keys-infobar.patch +++ b/bromite/build/patches/Do-not-build-API-keys-infobar.patch @@ -1,18 +1,19 @@ -From eea8f354968b23eedef250039d7ab6cd93653da1 Mon Sep 17 00:00:00 2001 +From b582a7df15a4782203f224ac417dfd1f2b28892a Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 23 Jul 2021 15:05:19 +0200 Subject: [PATCH 076/192] Do not build API keys infobar License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/ui/BUILD.gn | 2 -- - 1 file changed, 2 deletions(-) + chrome/browser/ui/BUILD.gn | 2 -- + chrome/browser/ui/startup/infobar_utils.cc | 3 --- + 2 files changed, 5 deletions(-) diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn -index c8ef769387df2..1aeb7411a92d5 100644 +index 9b37cf6098ee0..4ce6bd61ca6f9 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -1417,8 +1417,6 @@ static_library("ui") { +@@ -1351,8 +1351,6 @@ static_library("ui") { "singleton_tabs.h", "startup/automation_infobar_delegate.cc", "startup/automation_infobar_delegate.h", @@ -21,6 +22,20 @@ index c8ef769387df2..1aeb7411a92d5 100644 "startup/infobar_utils.cc", "startup/infobar_utils.h", "startup/launch_mode_recorder.cc", +diff --git a/chrome/browser/ui/startup/infobar_utils.cc b/chrome/browser/ui/startup/infobar_utils.cc +index f9db2b29eb594..ee8aba32783fe 100644 +--- a/chrome/browser/ui/startup/infobar_utils.cc ++++ b/chrome/browser/ui/startup/infobar_utils.cc +@@ -139,9 +139,6 @@ void AddInfoBarsIfNecessary(Browser* browser, + infobars::ContentInfoBarManager* infobar_manager = + infobars::ContentInfoBarManager::FromWebContents(web_contents); + +- if (!google_apis::HasAPIKeyConfigured()) +- GoogleApiKeysInfoBarDelegate::Create(infobar_manager); +- + if (ObsoleteSystem::IsObsoleteNowOrSoon()) { + PrefService* local_state = g_browser_process->local_state(); + if (!local_state || -- 2.34.1 diff --git a/bromite/build/patches/Do-not-compile-QR-code-sharing.patch b/bromite/build/patches/Do-not-compile-QR-code-sharing.patch index 2716b53b..1deb8a69 100644 --- a/bromite/build/patches/Do-not-compile-QR-code-sharing.patch +++ b/bromite/build/patches/Do-not-compile-QR-code-sharing.patch @@ -1,23 +1,35 @@ -From 162d7fd05c1e455768d8db79a39789c97557abe1 Mon Sep 17 00:00:00 2001 +From d36794665f1ce0eecb3885aa6e3da3c1b2fe4222 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 27 Feb 2020 23:23:59 +0100 Subject: [PATCH 013/192] Do not compile QR code sharing License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- + chrome/android/BUILD.gn | 1 - .../chrome/browser/ui/RootUiCoordinator.java | 5 ----- chrome/browser/share/BUILD.gn | 2 -- - chrome/browser/share/android/BUILD.gn | 1 - ...omeProvidedSharingOptionsProviderBase.java | 19 ------------------- .../qrcode/scan_tab/QrCodeScanMediator.java | 11 ----------- chrome/browser/share/android/java_sources.gni | 18 ------------------ 6 files changed, 56 deletions(-) +diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn +index e94b329c0f9e2..0f34edf84f7a8 100644 +--- a/chrome/android/BUILD.gn ++++ b/chrome/android/BUILD.gn +@@ -3296,7 +3296,6 @@ generate_jni("chrome_jni_headers") { + "../browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextBridge.java", + "../browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/LongScreenshotsTabService.java", + "../browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/LongScreenshotsTabServiceFactory.java", +- "../browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QRCodeGenerationRequest.java", + "../browser/share/android/java/src/org/chromium/chrome/browser/share/screenshot/EditorScreenshotTask.java", + "../browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/MetricsRecorder.java", + "../browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/NotificationManager.java", diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -index aceb72f31686d..513a11dc63b35 100644 +index 2ffa8d1564c30..391cb52f0ee45 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -@@ -107,7 +107,6 @@ import org.chromium.chrome.browser.share.ShareButtonController; +@@ -111,7 +111,6 @@ import org.chromium.chrome.browser.share.ShareButtonController; import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.share.ShareDelegate.ShareOrigin; import org.chromium.chrome.browser.share.ShareUtils; @@ -25,7 +37,7 @@ index aceb72f31686d..513a11dc63b35 100644 import org.chromium.chrome.browser.share.scroll_capture.ScrollCaptureManager; import org.chromium.chrome.browser.tab.AccessibilityVisibilityHandler; import org.chromium.chrome.browser.tab.AutofillSessionLifetimeController; -@@ -527,10 +526,6 @@ public class RootUiCoordinator +@@ -534,10 +533,6 @@ public class RootUiCoordinator } public void onAttachFragment(Fragment fragment) { @@ -37,7 +49,7 @@ index aceb72f31686d..513a11dc63b35 100644 @Override diff --git a/chrome/browser/share/BUILD.gn b/chrome/browser/share/BUILD.gn -index 1df5d26f90471..7e5fc119e9178 100644 +index 3c2e0367168c6..89387a35ea6f9 100644 --- a/chrome/browser/share/BUILD.gn +++ b/chrome/browser/share/BUILD.gn @@ -43,8 +43,6 @@ source_set("share") { @@ -49,18 +61,6 @@ index 1df5d26f90471..7e5fc119e9178 100644 ] deps += [ ":jni_headers", -diff --git a/chrome/browser/share/android/BUILD.gn b/chrome/browser/share/android/BUILD.gn -index 1af29f816267b..fba80b43c2040 100644 ---- a/chrome/browser/share/android/BUILD.gn -+++ b/chrome/browser/share/android/BUILD.gn -@@ -40,7 +40,6 @@ generate_jni("jni_headers") { - "java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextBridge.java", - "java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/LongScreenshotsTabService.java", - "java/src/org/chromium/chrome/browser/share/long_screenshots/bitmap_generation/LongScreenshotsTabServiceFactory.java", -- "java/src/org/chromium/chrome/browser/share/qrcode/QRCodeGenerationRequest.java", - "java/src/org/chromium/chrome/browser/share/screenshot/EditorScreenshotTask.java", - "java/src/org/chromium/chrome/browser/share/send_tab_to_self/MetricsRecorder.java", - "java/src/org/chromium/chrome/browser/share/send_tab_to_self/NotificationManager.java", diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderBase.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderBase.java index 892ce088a3eb5..9a24cac51b093 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/ChromeProvidedSharingOptionsProviderBase.java diff --git a/bromite/build/patches/Do-not-hide-component-extensions.patch b/bromite/build/patches/Do-not-hide-component-extensions.patch index dc0116da..7f52adfe 100644 --- a/bromite/build/patches/Do-not-hide-component-extensions.patch +++ b/bromite/build/patches/Do-not-hide-component-extensions.patch @@ -1,4 +1,4 @@ -From f71049990d37bcec29bc6239e3a6b16abaaed26d Mon Sep 17 00:00:00 2001 +From 3a33bbdaab487dd9f4dcc8fa65a0217ec9789544 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 12 Oct 2017 08:09:24 +0200 Subject: [PATCH 031/192] Do not hide component extensions @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/browser/api/management/management_api.cc b/extensions/browser/api/management/management_api.cc -index ea518e691c5fa..1718bca1de891 100644 +index f1b873301012c..6747ec29f7edb 100644 --- a/extensions/browser/api/management/management_api.cc +++ b/extensions/browser/api/management/management_api.cc -@@ -73,7 +73,8 @@ AutoConfirmForTest auto_confirm_for_test = DO_NOT_SKIP; +@@ -74,7 +74,8 @@ AutoConfirmForTest auto_confirm_for_test = DO_NOT_SKIP; // Returns true if the extension should be exposed via the chrome.management // API. bool ShouldExposeViaManagementAPI(const Extension& extension) { diff --git a/bromite/build/patches/Do-not-ignore-download-location-prompt-setting.patch b/bromite/build/patches/Do-not-ignore-download-location-prompt-setting.patch index 8713ea8f..b486cf97 100644 --- a/bromite/build/patches/Do-not-ignore-download-location-prompt-setting.patch +++ b/bromite/build/patches/Do-not-ignore-download-location-prompt-setting.patch @@ -1,4 +1,4 @@ -From ff6bbce966ea2f6fdd04b53a7007df73d2e3b343 Mon Sep 17 00:00:00 2001 +From 229601c995c285acc669204e75bcc52e554be191 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 20 Jan 2019 06:20:10 +0100 Subject: [PATCH 059/192] Do not ignore download location prompt setting diff --git a/bromite/build/patches/Do-not-link-with-libatomic.patch b/bromite/build/patches/Do-not-link-with-libatomic.patch index 4b322618..9db3c0dc 100644 --- a/bromite/build/patches/Do-not-link-with-libatomic.patch +++ b/bromite/build/patches/Do-not-link-with-libatomic.patch @@ -1,4 +1,4 @@ -From df445e88b4e29982459ffa3bde80ee70ea449acc Mon Sep 17 00:00:00 2001 +From 599d52b8d837731591ab351cf295b03b9311072a Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 11 Jan 2022 13:59:32 +0000 Subject: [PATCH 003/192] Do not link with libatomic @@ -13,10 +13,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/BUILD.gn b/base/BUILD.gn -index 304223b58a706..c58a907bef5c7 100644 +index 6e6f24e479cce..1105542f17366 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn -@@ -1152,7 +1152,7 @@ component("base") { +@@ -1114,7 +1114,7 @@ component("base") { # more robust check for this. if (!use_sysroot && (is_android || is_chromeos || (is_linux && !is_castos)) && host_toolchain != "//build/toolchain/cros:host") { diff --git a/bromite/build/patches/Do-not-store-passwords-by-default.patch b/bromite/build/patches/Do-not-store-passwords-by-default.patch index 6f409374..11c6344c 100644 --- a/bromite/build/patches/Do-not-store-passwords-by-default.patch +++ b/bromite/build/patches/Do-not-store-passwords-by-default.patch @@ -1,4 +1,4 @@ -From 03234eedbfc1b7adc4052ca88852ade9cb0f7f2d Mon Sep 17 00:00:00 2001 +From d368c28a49f5a805969e31e3f13087f836c52eb2 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 11 Oct 2017 23:17:17 +0200 Subject: [PATCH 032/192] Do not store passwords by default @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc -index fe288c49814cd..76cb26868c6b6 100644 +index 9d79f22c58136..041c43159aa07 100644 --- a/components/password_manager/core/browser/password_manager.cc +++ b/components/password_manager/core/browser/password_manager.cc -@@ -257,14 +257,14 @@ base::CallbackListSubscription AddSyncEnabledOrDisabledCallback( +@@ -237,14 +237,14 @@ base::CallbackListSubscription AddSyncEnabledOrDisabledCallback( void PasswordManager::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( @@ -29,7 +29,7 @@ index fe288c49814cd..76cb26868c6b6 100644 user_prefs::PrefRegistrySyncable::SYNCABLE_PRIORITY_PREF); registry->RegisterStringPref(prefs::kSyncPasswordHash, std::string(), PrefRegistry::NO_REGISTRATION_FLAGS); -@@ -307,9 +307,9 @@ void PasswordManager::RegisterProfilePrefs( +@@ -287,9 +287,9 @@ void PasswordManager::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref(prefs::kPasswordsPrefWithNewLabelUsed, false); #if BUILDFLAG(IS_ANDROID) diff --git a/bromite/build/patches/DoH-improvements.patch b/bromite/build/patches/DoH-improvements.patch index be34b3cb..d24fd36b 100644 --- a/bromite/build/patches/DoH-improvements.patch +++ b/bromite/build/patches/DoH-improvements.patch @@ -1,4 +1,4 @@ -From c3f15ff6cfd0503fdb1f19890a7a6fd0b7003ff7 Mon Sep 17 00:00:00 2001 +From b37647c9a6a6583834292b1f08b97d0ce5680700 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 26 Sep 2020 14:23:19 +0100 Subject: [PATCH 097/192] DoH improvements @@ -83,10 +83,10 @@ index db550a7b6ed01..9ce967588fe6f 100644 return config; } diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc -index 793a253da3482..6f8c7d8f1d2ed 100644 +index e46d04ff04f4f..56ea02a151d98 100644 --- a/net/dns/host_resolver_manager.cc +++ b/net/dns/host_resolver_manager.cc -@@ -3141,6 +3141,7 @@ void HostResolverManager::SetDnsConfigOverrides(DnsConfigOverrides overrides) { +@@ -3149,6 +3149,7 @@ void HostResolverManager::SetDnsConfigOverrides(DnsConfigOverrides overrides) { bool changed = dns_client_->SetConfigOverrides(std::move(overrides)); if (changed) { diff --git a/bromite/build/patches/Enable-Certificate-Transparency.patch b/bromite/build/patches/Enable-Certificate-Transparency.patch index e9f50c6e..3ec8cf5e 100644 --- a/bromite/build/patches/Enable-Certificate-Transparency.patch +++ b/bromite/build/patches/Enable-Certificate-Transparency.patch @@ -1,4 +1,4 @@ -From ccaa6661d87e29c30cf191b66ef7e2c1f77648d9 Mon Sep 17 00:00:00 2001 +From 780e595331ac9bca263cae06aa8406b093acd8d4 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 10 Jun 2022 14:20:02 +0200 Subject: [PATCH 171/192] Enable Certificate Transparency @@ -9,57 +9,84 @@ by default. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/about_flags.cc | 7 +++++++ - chrome/browser/browser_features.cc | 4 ++-- - chrome/browser/flag_descriptions.cc | 4 ++++ - chrome/browser/flag_descriptions.h | 3 +++ - chrome/browser/net/system_network_context_manager.cc | 4 ---- - chrome/browser/ssl/sct_reporting_service.cc | 5 +++++ - chrome/common/chrome_features.cc | 6 +----- - net/http/transport_security_state.cc | 5 +++-- - net/url_request/report_sender.cc | 3 ++- - services/network/network_context.cc | 2 +- - services/network/sct_auditing/sct_auditing_handler.cc | 2 ++ - 11 files changed, 30 insertions(+), 15 deletions(-) + chrome/browser/about_flags.cc | 5 +++++ + chrome/browser/browser_features.cc | 13 +++++++------ + chrome/browser/browser_features.h | 1 + + chrome/browser/flag_descriptions.cc | 4 ++++ + chrome/browser/flag_descriptions.h | 3 +++ + .../browser/net/system_network_context_manager.cc | 6 +----- + chrome/browser/ssl/sct_reporting_service.cc | 5 +++++ + chrome/common/chrome_features.cc | 10 ++-------- + net/http/transport_security_state.cc | 5 +++-- + net/url_request/report_sender.cc | 3 ++- + services/network/network_context.cc | 2 +- + .../network/sct_auditing/sct_auditing_handler.cc | 2 ++ + 12 files changed, 36 insertions(+), 23 deletions(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 5ac70d2698356..56cb2b77f61d7 100644 +index 1a967fcb42c29..44da6cb71e131 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9403,6 +9403,13 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9520,6 +9520,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWebMidiDescription, kOsAll, FEATURE_VALUE_TYPE(features::kWebMidi)}, -+#if BUILDFLAG(IS_ANDROID) + {"certificate-transparency-enabled", + flag_descriptions::kCTEnabledName, -+ flag_descriptions::kCTEnabledDescription, kOsAndroid, -+ FEATURE_VALUE_TYPE(features::kCertificateTransparencyAndroid)}, -+#endif ++ flag_descriptions::kCTEnabledDescription, kOsAll, ++ FEATURE_VALUE_TYPE(features::kCertificateTransparency)}, + #if BUILDFLAG(IS_CHROMEOS_ASH) {"dns-over-https-with-identifiers-reuse-old-policy", flag_descriptions::kDnsOverHttpsWithIdentifiersReuseOldPolicyName, diff --git a/chrome/browser/browser_features.cc b/chrome/browser/browser_features.cc -index 29667afccb004..15ef5d9c1ed1f 100644 +index 218655a1f83bd..ca907c7e621ef 100644 --- a/chrome/browser/browser_features.cc +++ b/chrome/browser/browser_features.cc -@@ -168,8 +168,8 @@ BASE_FEATURE(kWebUsbDeviceDetection, - #if BUILDFLAG(IS_ANDROID) - // Enables Certificate Transparency on Android. - BASE_FEATURE(kCertificateTransparencyAndroid, -- "CertificateTransparencyAndroid", -- base::FEATURE_ENABLED_BY_DEFAULT); -+ "CertificateTransparencyAndroid", // must be enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite +@@ -71,6 +71,11 @@ BASE_FEATURE(kEnableUniveralLinks, + base::FEATURE_ENABLED_BY_DEFAULT); #endif ++// Enables Certificate Transparency ++BASE_FEATURE(kCertificateTransparency, ++ "CertificateTransparency", // must be enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ + #if BUILDFLAG(IS_CHROMEOS_ASH) + // Enables reading and writing PWA notification permissions from quick settings + // menu. +@@ -171,12 +176,8 @@ BASE_FEATURE(kWebUsbDeviceDetection, + // update the list of accepted logs. Embedders who are planning to enable this + // should first reach out to chrome-certificate-transparency@google.com. + BASE_FEATURE(kCertificateTransparencyAskBeforeEnabling, +- "CertificateTransparencyAskBeforeEnabling", +-#if BUILDFLAG(GOOGLE_CHROME_BRANDING) +- base::FEATURE_ENABLED_BY_DEFAULT); +-#else +- base::FEATURE_DISABLED_BY_DEFAULT); +-#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) ++ "CertificateTransparencyAskBeforeEnabling", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // by default + BASE_FEATURE(kLargeFaviconFromGoogle, + "LargeFaviconFromGoogle", +diff --git a/chrome/browser/browser_features.h b/chrome/browser/browser_features.h +index 12de2bca3565f..e9a6089bc4e43 100644 +--- a/chrome/browser/browser_features.h ++++ b/chrome/browser/browser_features.h +@@ -57,6 +57,7 @@ BASE_DECLARE_FEATURE(kTabCaptureBlueBorderCrOS); + + BASE_DECLARE_FEATURE(kWebUsbDeviceDetection); + ++BASE_DECLARE_FEATURE(kCertificateTransparency); + BASE_DECLARE_FEATURE(kCertificateTransparencyAskBeforeEnabling); + + BASE_DECLARE_FEATURE(kLargeFaviconFromGoogle); diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 67f722d51a426..9e96327b981b0 100644 +index df16e84247120..904b49fb2aee3 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -7368,6 +7368,10 @@ const char kAutofillCreditCardUploadDescription[] = +@@ -7552,6 +7552,10 @@ const char kAutofillCreditCardUploadDescription[] = #endif // defined(TOOLKIT_VIEWS) || BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) @@ -71,10 +98,10 @@ index 67f722d51a426..9e96327b981b0 100644 const char kElasticOverscrollDescription[] = "Enables Elastic Overscrolling on touchscreens and precision touchpads."; diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 8b08d96cda94d..cf7b181c66c19 100644 +index 269c8f89b2640..10f2b5f489f77 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -4264,6 +4264,9 @@ extern const char kAutofillCreditCardUploadDescription[]; +@@ -4372,6 +4372,9 @@ extern const char kAutofillCreditCardUploadDescription[]; #endif // defined(TOOLKIT_VIEWS) || BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) @@ -85,24 +112,26 @@ index 8b08d96cda94d..cf7b181c66c19 100644 extern const char kElasticOverscrollDescription[]; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc -index 1c6249a2916c0..a67a548f1c6ea 100644 +index fa2add9bc913d..38c2892fd1baf 100644 --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -901,7 +901,6 @@ void SystemNetworkContextManager::SetEnableCertificateTransparencyForTesting( +@@ -909,7 +909,6 @@ void SystemNetworkContextManager::SetEnableCertificateTransparencyForTesting( bool SystemNetworkContextManager::IsCertificateTransparencyEnabled() { if (certificate_transparency_enabled_for_testing_.has_value()) return certificate_transparency_enabled_for_testing_.value(); --#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OFFICIAL_BUILD) - // TODO(carlosil): Figure out if we can/should remove the OFFICIAL_BUILD and - // GOOGLE_CHROME_BRANDING checks now that enforcement does not rely on build - // dates, and allow embedders to enforce. -@@ -915,9 +914,6 @@ bool SystemNetworkContextManager::IsCertificateTransparencyEnabled() { - #else - return true; - #endif // BUILDFLAG(IS_ANDROID) +-#if defined(OFFICIAL_BUILD) + // TODO(carlosil): Figure out if we can/should remove the OFFICIAL_BUILD + // check now that enforcement does not rely on build dates. + // Certificate Transparency is enabled: +@@ -917,10 +916,7 @@ bool SystemNetworkContextManager::IsCertificateTransparencyEnabled() { + // - on an opt-in basis for other builds and embedders, controlled with the + // kCertificateTransparencyAskBeforeEnabling flag + return base::FeatureList::IsEnabled( +- features::kCertificateTransparencyAskBeforeEnabling); -#else - return false; --#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OFFICIAL_BUILD) +-#endif // defined(OFFICIAL_BUILD) ++ features::kCertificateTransparency); } #if BUILDFLAG(CHROME_ROOT_STORE_OPTIONAL) @@ -123,22 +152,36 @@ index 2ae51b59c8bdb..4de8c49c266bd 100644 !base::FeatureList::IsEnabled(features::kSCTAuditing)) { return network::mojom::SCTAuditingMode::kDisabled; diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc -index 94e27ef3b2a61..32ca6ba1c975c 100644 +index 9ca342a78a9e6..6c655f22d2f46 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -1025,11 +1025,7 @@ BASE_FEATURE(kSchedulerConfiguration, +@@ -1070,15 +1070,9 @@ BASE_FEATURE(kSchedulerConfiguration, + base::FEATURE_DISABLED_BY_DEFAULT); + #endif // BUILDFLAG(IS_CHROMEOS_ASH) - // Controls whether SCT audit reports are queued and the rate at which they - // should be sampled. Default sampling rate is 1/10,000 certificates. --#if BUILDFLAG(IS_ANDROID) --BASE_FEATURE(kSCTAuditing, "SCTAuditing", base::FEATURE_DISABLED_BY_DEFAULT); --#else +-// Controls whether SCT audit reports are queued and the rate at which they +-// should be sampled. Default sampling rate is 1/10,000 certificates. +-#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && !BUILDFLAG(IS_ANDROID) -BASE_FEATURE(kSCTAuditing, "SCTAuditing", base::FEATURE_ENABLED_BY_DEFAULT); +-#else + // This requires backend infrastructure and a data collection policy. + // Non-Chrome builds should not use Chrome's infrastructure. + BASE_FEATURE(kSCTAuditing, "SCTAuditing", base::FEATURE_DISABLED_BY_DEFAULT); -#endif -+BASE_FEATURE(kSCTAuditing, "SCTAuditing", base::FEATURE_DISABLED_BY_DEFAULT); // disabled in Bromite constexpr base::FeatureParam kSCTAuditingSamplingRate{ &kSCTAuditing, "sampling_rate", 0.0001}; +@@ -1087,8 +1081,8 @@ constexpr base::FeatureParam kSCTAuditingSamplingRate{ + // about an SCT seen in the wild. If it hasn't been seen, then it is considered + // a security incident and uploaded to Google. + BASE_FEATURE(kSCTAuditingHashdance, +- "SCTAuditingHashdance", +- base::FEATURE_ENABLED_BY_DEFAULT); ++ "SCTAuditingHashdance", // disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // by default + + // An estimated high bound for the time it takes Google to ingest updates to an + // SCT log. Chrome will wait for at least this time plus the Log's Maximum Merge diff --git a/net/http/transport_security_state.cc b/net/http/transport_security_state.cc index 84d67ed5cd3b9..79dff539d47b6 100644 --- a/net/http/transport_security_state.cc @@ -177,10 +220,10 @@ index dfd21c673a657..138dd7c0a728e 100644 void ReportSender::OnResponseStarted(URLRequest* request, int net_error) { diff --git a/services/network/network_context.cc b/services/network/network_context.cc -index 0ce1a36654b69..cbf346e3ea6b0 100644 +index 58b88637a0999..f76e5e0a7e0cc 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc -@@ -2624,7 +2624,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( +@@ -2684,7 +2684,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext( // TransportSecurityState. Since no requests have been made yet, safe to do // this even after the call to Build(). diff --git a/bromite/build/patches/Enable-ECH-by-default.patch b/bromite/build/patches/Enable-ECH-by-default.patch index 037e4be7..c91c7bc8 100644 --- a/bromite/build/patches/Enable-ECH-by-default.patch +++ b/bromite/build/patches/Enable-ECH-by-default.patch @@ -1,4 +1,4 @@ -From 4431bbcc6b25cccb6549a4c4358b8748e41d6bec Mon Sep 17 00:00:00 2001 +From 79e4991fa5e53c13f6eb94019b7c0f993e09b9bc Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 30 Oct 2022 18:11:19 +0100 Subject: [PATCH 187/192] Enable ECH by default @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net/base/features.cc b/net/base/features.cc -index 40744f7569e3f..d8cae62eb3fe3 100644 +index de5a9d7603a73..f22e090e18625 100644 --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -87,12 +87,12 @@ BASE_FEATURE(kEnableTLS13EarlyData, +@@ -96,12 +96,12 @@ BASE_FEATURE(kEnableTLS13EarlyData, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kEncryptedClientHello, diff --git a/bromite/build/patches/Enable-HEVC-by-default.patch b/bromite/build/patches/Enable-HEVC-by-default.patch index 3c81a0a8..8b9318e9 100644 --- a/bromite/build/patches/Enable-HEVC-by-default.patch +++ b/bromite/build/patches/Enable-HEVC-by-default.patch @@ -1,4 +1,4 @@ -From 90cf4642be0fdaca56f7efe79e54300bfc7cc3fe Mon Sep 17 00:00:00 2001 +From 5ff5d05c5cc5194703ce111b8bff7aaa33e5a754 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Tue, 27 Sep 2022 23:39:54 +0200 Subject: [PATCH 182/192] Enable HEVC by default @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc -index a2a99a11eb82f..a1d1408a6571d 100644 +index c1c11e4a8b615..b0f70902948c2 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc @@ -333,8 +333,8 @@ BASE_FEATURE(kEnableTabMuting, @@ -23,8 +23,8 @@ index a2a99a11eb82f..a1d1408a6571d 100644 + "PlatformHEVCDecoderSupport", // must be enabled + base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) - // Enables HEVC hardware accelerated encoding for Windows and Mac. + #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_ANDROID) + // Enables HEVC hardware accelerated encoding for Windows, Mac, and Android. -- 2.34.1 diff --git a/bromite/build/patches/Enable-PermuteTLSExtensions-by-default.patch b/bromite/build/patches/Enable-PermuteTLSExtensions-by-default.patch index d0dc86d6..94809a7a 100644 --- a/bromite/build/patches/Enable-PermuteTLSExtensions-by-default.patch +++ b/bromite/build/patches/Enable-PermuteTLSExtensions-by-default.patch @@ -1,4 +1,4 @@ -From 2142b27d9f2549e5625f72f9a6b16151d5777662 Mon Sep 17 00:00:00 2001 +From 8355a5385ce21fc29af968f2c807a9d2b8e81062 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 2 Dec 2022 01:18:14 +0100 Subject: [PATCH 189/192] Enable PermuteTLSExtensions by default @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/base/features.cc b/net/base/features.cc -index d8cae62eb3fe3..5633a23cda38a 100644 +index f22e090e18625..81cbba7c6f90d 100644 --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -148,8 +148,8 @@ BASE_FEATURE(kTLS13KeyUpdate, +@@ -163,8 +163,8 @@ BASE_FEATURE(kTLS13KeyUpdate, base::FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kPermuteTLSExtensions, diff --git a/bromite/build/patches/Enable-StrictOriginIsolation-and-SitePerProcess.patch b/bromite/build/patches/Enable-StrictOriginIsolation-and-SitePerProcess.patch index 469f23ba..da76738e 100644 --- a/bromite/build/patches/Enable-StrictOriginIsolation-and-SitePerProcess.patch +++ b/bromite/build/patches/Enable-StrictOriginIsolation-and-SitePerProcess.patch @@ -1,4 +1,4 @@ -From 3c913055c5c4b52b61102331cc95b97574434ef6 Mon Sep 17 00:00:00 2001 +From ca7da1939bda887527800111443f5b22753ecb78 Mon Sep 17 00:00:00 2001 From: uazo Date: Sat, 29 Jan 2022 15:25:19 +0000 Subject: [PATCH 084/192] Enable StrictOriginIsolation and SitePerProcess @@ -18,10 +18,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index cdfb2bbef0c12..9e75f8cb271ec 100644 +index 53968d336c2cd..369639078193d 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -4772,9 +4772,6 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4831,9 +4831,6 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kSiteIsolationForPasswordSitesDescription, kOsAndroid, FEATURE_VALUE_TYPE( site_isolation::features::kSiteIsolationForPasswordSites)}, @@ -32,10 +32,10 @@ index cdfb2bbef0c12..9e75f8cb271ec 100644 {"enable-isolated-web-apps", flag_descriptions::kEnableIsolatedWebAppsName, flag_descriptions::kEnableIsolatedWebAppsDescription, kOsAll, diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 0eb57812e41fa..36567be1403fe 100644 +index 73a2196674c69..08f87ec1efc93 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -1572,7 +1572,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs( +@@ -1580,7 +1580,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs( registry->RegisterFilePathPref(prefs::kDiskCacheDir, base::FilePath()); registry->RegisterIntegerPref(prefs::kDiskCacheSize, 0); registry->RegisterStringPref(prefs::kIsolateOrigins, std::string()); @@ -44,7 +44,7 @@ index 0eb57812e41fa..36567be1403fe 100644 registry->RegisterBooleanPref(prefs::kTabFreezingEnabled, true); registry->RegisterIntegerPref(prefs::kSCTAuditingHashdanceReportCount, 0); registry->RegisterBooleanPref( -@@ -1594,7 +1594,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( +@@ -1603,7 +1603,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( // user policy in addition to the same named ones in Local State (which are // used for mapping the command-line flags). registry->RegisterStringPref(prefs::kIsolateOrigins, std::string()); @@ -54,10 +54,10 @@ index 0eb57812e41fa..36567be1403fe 100644 site_isolation::prefs::kUserTriggeredIsolatedOrigins); registry->RegisterDictionaryPref( diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc -index 159da4c74161c..fde137ae760a7 100644 +index 3f72898d5a97e..bbc36d38466f0 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc -@@ -1076,12 +1076,8 @@ BASE_FEATURE(kSecurityKeyAttestationPrompt, +@@ -1120,12 +1120,8 @@ const base::FeatureParam kSCTLogMaxIngestionRandomDelay{ // TODO(alexmos): Move this and the other site isolation features below to // browser_features, as they are only used on the browser side. BASE_FEATURE(kSitePerProcess, @@ -101,10 +101,10 @@ index 9073df6b8e779..a957f695a5754 100644 return CachedDisableSiteIsolation(site_isolation_mode); } diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc -index dfce060a70d49..5a15cbd8dca5e 100644 +index 906c06cca4f34..05793c65d17ee 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -1255,8 +1255,8 @@ BASE_FEATURE(kStopVideoCaptureOnScreenLock, +@@ -1251,8 +1251,8 @@ BASE_FEATURE(kStopVideoCaptureOnScreenLock, // Controls whether site isolation should use origins instead of scheme and // eTLD+1. BASE_FEATURE(kStrictOriginIsolation, diff --git a/bromite/build/patches/Enable-darken-websites-checkbox-in-themes.patch b/bromite/build/patches/Enable-darken-websites-checkbox-in-themes.patch index e2c290f5..3f2f634e 100644 --- a/bromite/build/patches/Enable-darken-websites-checkbox-in-themes.patch +++ b/bromite/build/patches/Enable-darken-websites-checkbox-in-themes.patch @@ -1,4 +1,4 @@ -From 0093d7c8af7892a236ec6ede6ba6edaab0ec8b49 Mon Sep 17 00:00:00 2001 +From 92635b7e458e9b0ea2a270c9c6d416318b0bb4bc Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 20 Aug 2020 20:15:34 +0200 Subject: [PATCH 112/192] Enable darken websites checkbox in themes @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 949773a2c7ff2..765ea119bd066 100644 +index a6d5da2c7c3a6..ab1f33fc70420 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -1427,9 +1427,9 @@ +@@ -1512,9 +1512,9 @@ "expiry_milestone": 125 }, { @@ -29,7 +29,7 @@ index 949773a2c7ff2..765ea119bd066 100644 { "name": "data-retention-policies-disable-sync-types-needed", diff --git a/components/content_settings/core/common/features.cc b/components/content_settings/core/common/features.cc -index 1506e3d757bb3..51934c7b69028 100644 +index f7426168ee634..9e62c9072fcd9 100644 --- a/components/content_settings/core/common/features.cc +++ b/components/content_settings/core/common/features.cc @@ -19,8 +19,8 @@ BASE_FEATURE(kImprovedCookieControls, diff --git a/bromite/build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch b/bromite/build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch index 86a42a65..e3bed44e 100644 --- a/bromite/build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch +++ b/bromite/build/patches/Enable-fwrapv-in-Clang-for-non-UBSan-builds.patch @@ -1,4 +1,4 @@ -From c802222a17303fd5bb88e8785fc6db4253417a83 Mon Sep 17 00:00:00 2001 +From 23b7d49779aee76dbc702d70ff99a03de911b2c4 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Thu, 22 Dec 2016 07:15:34 -0500 Subject: [PATCH 022/192] Enable -fwrapv in Clang for non-UBSan builds @@ -44,10 +44,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 4 insertions(+) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn -index 22d9a36093435..9b978b20e084e 100644 +index fb9c1e178b9da..fc4905b3f4ee0 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn -@@ -378,6 +378,10 @@ config("compiler") { +@@ -377,6 +377,10 @@ config("compiler") { } } diff --git a/bromite/build/patches/Enable-native-Android-autofill.patch b/bromite/build/patches/Enable-native-Android-autofill.patch index 80de3076..e136b314 100644 --- a/bromite/build/patches/Enable-native-Android-autofill.patch +++ b/bromite/build/patches/Enable-native-Android-autofill.patch @@ -1,4 +1,4 @@ -From c4783fcc71233b4676f632e7edd735bbde540218 Mon Sep 17 00:00:00 2001 +From 3ad95cd335188cb2b446dc17418e53357afd0533 Mon Sep 17 00:00:00 2001 From: uazo Date: Sun, 24 Oct 2021 16:54:04 +0000 Subject: [PATCH 078/192] Enable native Android autofill @@ -54,11 +54,11 @@ index 1324713845cbe..9ae7dc6c17032 100644 // static diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn -index df2bc05800680..3260936d6597d 100644 +index 0f34edf84f7a8..ff2fb13bb9395 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -392,6 +392,7 @@ if (current_toolchain == default_toolchain) { - "//chrome/browser/ui/android/favicon:java", +@@ -400,6 +400,7 @@ if (current_toolchain == default_toolchain) { + "//chrome/browser/ui/android/hats:java", "//chrome/browser/ui/android/layouts:java", "//chrome/browser/ui/android/layouts/glue:java", + "//components/android_autofill/browser:java", @@ -66,10 +66,10 @@ index df2bc05800680..3260936d6597d 100644 "//chrome/browser/ui/android/management:java", "//chrome/browser/ui/android/multiwindow:java", diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java -index 14cc4058f6236..34c5de4e017d9 100644 +index ce2ed31861217..c74b0cf4e4f53 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java -@@ -60,6 +60,11 @@ import java.lang.annotation.Retention; +@@ -62,6 +62,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Locale; @@ -81,7 +81,7 @@ index 14cc4058f6236..34c5de4e017d9 100644 /** * The "Passwords" screen in Settings, which allows the user to enable or disable password saving, * to view saved passwords (just the username and URL), and to delete saved passwords. -@@ -67,7 +72,7 @@ import java.util.Locale; +@@ -69,7 +74,7 @@ import java.util.Locale; public class PasswordSettings extends PreferenceFragmentCompat implements PasswordListObserver, Preference.OnPreferenceClickListener, SyncService.SyncStateChangedListener, FragmentHelpAndFeedbackLauncher, @@ -90,7 +90,7 @@ index 14cc4058f6236..34c5de4e017d9 100644 @IntDef({TrustedVaultBannerState.NOT_SHOWN, TrustedVaultBannerState.OFFER_OPT_IN, TrustedVaultBannerState.OPTED_IN}) @Retention(RetentionPolicy.SOURCE) -@@ -94,6 +99,12 @@ public class PasswordSettings extends PreferenceFragmentCompat +@@ -96,6 +101,12 @@ public class PasswordSettings extends PreferenceFragmentCompat public static final String PREF_TRUSTED_VAULT_BANNER = "trusted_vault_banner"; public static final String PREF_KEY_MANAGE_ACCOUNT_LINK = "manage_account_link"; @@ -103,7 +103,7 @@ index 14cc4058f6236..34c5de4e017d9 100644 private static final String PREF_KEY_CATEGORY_SAVED_PASSWORDS = "saved_passwords"; private static final String PREF_KEY_CATEGORY_EXCEPTIONS = "exceptions"; private static final String PREF_KEY_SAVED_PASSWORDS_NO_TEXT = "saved_passwords_no_text"; -@@ -129,6 +140,8 @@ public class PasswordSettings extends PreferenceFragmentCompat +@@ -128,6 +139,8 @@ public class PasswordSettings extends PreferenceFragmentCompat private Preference mLinkPref; private Menu mMenu; @@ -112,7 +112,7 @@ index 14cc4058f6236..34c5de4e017d9 100644 private @ManagePasswordsReferrer int mManagePasswordsReferrer; private HelpAndFeedbackLauncher mHelpAndFeedbackLauncher; private Profile mProfile; -@@ -304,6 +317,7 @@ public class PasswordSettings extends PreferenceFragmentCompat +@@ -303,6 +316,7 @@ public class PasswordSettings extends PreferenceFragmentCompat } createSavePasswordsSwitch(); @@ -120,7 +120,7 @@ index 14cc4058f6236..34c5de4e017d9 100644 createAutoSignInCheckbox(); if (mTrustedVaultBannerState == TrustedVaultBannerState.OPTED_IN) { -@@ -557,6 +571,71 @@ public class PasswordSettings extends PreferenceFragmentCompat +@@ -556,6 +570,71 @@ public class PasswordSettings extends PreferenceFragmentCompat getPrefService().getBoolean(Pref.CREDENTIALS_ENABLE_SERVICE)); } @@ -193,7 +193,7 @@ index 14cc4058f6236..34c5de4e017d9 100644 ChromeSwitchPreference autoSignInSwitch = new ChromeSwitchPreference(getStyledContext(), null); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java -index b4b243adcb426..a72f0a8a5b1be 100644 +index 08918b8c1b991..86e45f241697a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java @@ -76,6 +76,17 @@ import org.chromium.ui.base.WindowAndroid; @@ -223,7 +223,7 @@ index b4b243adcb426..a72f0a8a5b1be 100644 /** * Creates an instance of a {@link TabImpl}. * -@@ -795,6 +808,11 @@ public class TabImpl implements Tab { +@@ -798,6 +811,11 @@ public class TabImpl implements Tab { for (TabObserver observer : mObservers) observer.onDestroyed(this); mObservers.clear(); @@ -235,7 +235,7 @@ index b4b243adcb426..a72f0a8a5b1be 100644 mUserDataHost.destroy(); mTabViewManager.destroy(); hideNativePage(false, null); -@@ -1400,6 +1418,16 @@ public class TabImpl implements Tab { +@@ -1386,6 +1404,16 @@ public class TabImpl implements Tab { return tabsPtrArray; } @@ -252,7 +252,7 @@ index b4b243adcb426..a72f0a8a5b1be 100644 /** * Initializes the {@link WebContents}. Completes the browser content components initialization * around a native WebContents pointer. -@@ -1449,6 +1477,28 @@ public class TabImpl implements Tab { +@@ -1435,6 +1463,28 @@ public class TabImpl implements Tab { mDelegateFactory.createContextMenuPopulatorFactory(this), this)); mWebContents.notifyRendererPreferenceUpdate(); @@ -290,10 +290,10 @@ index b4b243adcb426..a72f0a8a5b1be 100644 } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java -index fb96aa1e12d49..02e2129327f64 100644 +index 16c12477bbcb2..2dd82870cdd5f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java -@@ -22,6 +22,10 @@ import org.chromium.ui.dragdrop.DragAndDropBrowserDelegate; +@@ -21,6 +21,10 @@ import org.chromium.ui.dragdrop.DragAndDropBrowserDelegate; import org.chromium.ui.dragdrop.DragAndDropDelegate; import org.chromium.ui.dragdrop.DragStateTracker; @@ -304,7 +304,7 @@ index fb96aa1e12d49..02e2129327f64 100644 /** * Implementation of the abstract class {@link ViewAndroidDelegate} for Chrome. */ -@@ -87,6 +91,16 @@ public class TabViewAndroidDelegate extends ViewAndroidDelegate { +@@ -86,6 +90,16 @@ public class TabViewAndroidDelegate extends ViewAndroidDelegate { mTab.onBackgroundColorChanged(color); } @@ -322,10 +322,10 @@ index fb96aa1e12d49..02e2129327f64 100644 public void onTopControlsChanged( int topControlsOffsetY, int contentOffsetY, int topControlsMinHeightOffsetY) { diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 48d31e421412b..ed170329bcba9 100644 +index 3e503cb91f5c0..f2e4217b94d1c 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -2528,6 +2528,13 @@ static_library("browser") { +@@ -2552,6 +2552,13 @@ static_library("browser") { deps += [ "//chrome/browser/error_reporting" ] } @@ -340,7 +340,7 @@ index 48d31e421412b..ed170329bcba9 100644 deps += [ "//ui/events/ozone", diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc -index f41de1f16657a..6d475fbbe5c3a 100644 +index 6b872163f25e6..5027dd50b7bfb 100644 --- a/chrome/browser/android/tab_android.cc +++ b/chrome/browser/android/tab_android.cc @@ -68,6 +68,13 @@ @@ -357,9 +357,9 @@ index f41de1f16657a..6d475fbbe5c3a 100644 using base::android::AttachCurrentThread; using base::android::ConvertUTF8ToJavaString; using base::android::JavaParamRef; -@@ -504,3 +511,11 @@ static void JNI_TabImpl_Init(JNIEnv* env, const JavaParamRef& obj) { +@@ -506,3 +513,11 @@ static void JNI_TabImpl_Init(JNIEnv* env, // This will automatically bind to the Java object and pass ownership there. - new TabAndroid(env, obj); + new TabAndroid(env, obj, id); } + +void TabAndroid::InitializeAutofillIfNecessary(JNIEnv* env) { @@ -370,10 +370,10 @@ index f41de1f16657a..6d475fbbe5c3a 100644 + } +} diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_android.h -index 419959a47c00c..644150cfecc3c 100644 +index 739b77f36f13d..813d4cf0a5474 100644 --- a/chrome/browser/android/tab_android.h +++ b/chrome/browser/android/tab_android.h -@@ -167,6 +167,8 @@ class TabAndroid : public base::SupportsUserData { +@@ -169,6 +169,8 @@ class TabAndroid : public base::SupportsUserData { void SetDevToolsAgentHost(scoped_refptr host); @@ -383,10 +383,10 @@ index 419959a47c00c..644150cfecc3c 100644 JavaObjectWeakGlobalRef weak_java_tab_; diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 12be7b1638ce0..2e6990a5ad26a 100644 +index ede3464db7602..84e4f93b0c56f 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -616,6 +616,12 @@ CHAR_LIMIT guidelines: +@@ -619,6 +619,12 @@ CHAR_LIMIT guidelines: Save passwords @@ -400,10 +400,10 @@ index 12be7b1638ce0..2e6990a5ad26a 100644 Auto Sign-in diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc -index 4f915f43fda21..aa2bb9cc74029 100644 +index 3a13b3381ab09..85d5f78f3fdb1 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc -@@ -1188,7 +1188,13 @@ ChromeAutofillClient::ChromeAutofillClient(content::WebContents* web_contents) +@@ -1270,7 +1270,13 @@ ChromeAutofillClient::ChromeAutofillClient(content::WebContents* web_contents) web_contents, base::BindRepeating(&BrowserDriverInitHook, this, @@ -419,7 +419,7 @@ index 4f915f43fda21..aa2bb9cc74029 100644 log_manager_( // TODO(crbug.com/928595): Replace the closure with a callback to the diff --git a/components/android_autofill/browser/android_autofill_manager.cc b/components/android_autofill/browser/android_autofill_manager.cc -index d2bf47e17e36e..72f3d059964ed 100644 +index 02c0c6d545e7d..87ef7f43b392b 100644 --- a/components/android_autofill/browser/android_autofill_manager.cc +++ b/components/android_autofill/browser/android_autofill_manager.cc @@ -19,7 +19,7 @@ using base::TimeTicks; @@ -432,10 +432,10 @@ index d2bf47e17e36e..72f3d059964ed 100644 driver->GetAutofillAgent()->SetSecureContextRequired(true); driver->GetAutofillAgent()->SetFocusRequiresScroll(false); diff --git a/components/android_autofill/browser/android_autofill_manager.h b/components/android_autofill/browser/android_autofill_manager.h -index 1a4d4b261b98a..f7ece0009610f 100644 +index e5f43576d7b1d..054a31b249b8d 100644 --- a/components/android_autofill/browser/android_autofill_manager.h +++ b/components/android_autofill/browser/android_autofill_manager.h -@@ -85,12 +85,12 @@ class AndroidAutofillManager : public AutofillManager { +@@ -86,12 +86,12 @@ class AndroidAutofillManager : public AutofillManager { const FieldTypeGroup field_type_group, const url::Origin& triggered_origin); @@ -451,10 +451,10 @@ index 1a4d4b261b98a..f7ece0009610f 100644 bool known_success, mojom::SubmissionSource source) override; diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc -index bce90eb0d00f1..b271026e7f51a 100644 +index f2313388eba8d..4db6c8a0db918 100644 --- a/components/autofill/content/browser/content_autofill_driver.cc +++ b/components/autofill/content/browser/content_autofill_driver.cc -@@ -400,6 +400,8 @@ void ContentAutofillDriver::FormsSeen( +@@ -406,6 +406,8 @@ void ContentAutofillDriver::FormsSeen( const std::vector& removed_forms) { target->autofill_manager_->OnFormsSeen(WithNewVersion(updated_forms), removed_forms); @@ -463,7 +463,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -427,6 +429,10 @@ void ContentAutofillDriver::FormSubmitted( +@@ -433,6 +435,10 @@ void ContentAutofillDriver::FormSubmitted( } target->autofill_manager_->OnFormSubmitted( WithNewVersion(form), known_success, submission_source); @@ -474,7 +474,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -448,6 +454,10 @@ void ContentAutofillDriver::TextFieldDidChange(const FormData& raw_form, +@@ -454,6 +460,10 @@ void ContentAutofillDriver::TextFieldDidChange(const FormData& raw_form, base::TimeTicks timestamp) { target->autofill_manager_->OnTextFieldDidChange( WithNewVersion(form), field, bounding_box, timestamp); @@ -485,7 +485,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -467,6 +477,10 @@ void ContentAutofillDriver::TextFieldDidScroll(const FormData& raw_form, +@@ -473,6 +483,10 @@ void ContentAutofillDriver::TextFieldDidScroll(const FormData& raw_form, const FormFieldData& field, const gfx::RectF& bounding_box) { target->autofill_manager_->OnTextFieldDidScroll(WithNewVersion(form), field, bounding_box); @@ -496,7 +496,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -487,6 +501,10 @@ void ContentAutofillDriver::SelectControlDidChange( +@@ -493,6 +507,10 @@ void ContentAutofillDriver::SelectControlDidChange( const FormFieldData& field, const gfx::RectF& bounding_box) { target->autofill_manager_->OnSelectControlDidChange( WithNewVersion(form), field, bounding_box); @@ -507,7 +507,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -509,6 +527,10 @@ void ContentAutofillDriver::AskForValuesToFill( +@@ -515,6 +533,10 @@ void ContentAutofillDriver::AskForValuesToFill( AutofillSuggestionTriggerSource trigger_source) { target->autofill_manager_->OnAskForValuesToFill( WithNewVersion(form), field, bounding_box, trigger_source); @@ -518,7 +518,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -520,12 +542,16 @@ void ContentAutofillDriver::HidePopup() { +@@ -526,12 +548,16 @@ void ContentAutofillDriver::HidePopup() { DCHECK(!target->IsPrerendering()) << "We should never affect UI while prerendering"; target->autofill_manager_->OnHidePopup(); @@ -535,7 +535,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 } void ContentAutofillDriver::FocusNoLongerOnForm(bool had_interacted_form) { -@@ -555,6 +581,10 @@ void ContentAutofillDriver::FocusOnFormField(const FormData& raw_form, +@@ -561,6 +587,10 @@ void ContentAutofillDriver::FocusOnFormField(const FormData& raw_form, const FormFieldData& field, const gfx::RectF& bounding_box) { target->autofill_manager_->OnFocusOnFormField(WithNewVersion(form), field, bounding_box); @@ -546,7 +546,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -569,6 +599,10 @@ void ContentAutofillDriver::DidFillAutofillFormData(const FormData& raw_form, +@@ -575,6 +605,10 @@ void ContentAutofillDriver::DidFillAutofillFormData(const FormData& raw_form, base::TimeTicks timestamp) { target->autofill_manager_->OnDidFillAutofillFormData( WithNewVersion(form), timestamp); @@ -557,7 +557,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -579,6 +613,8 @@ void ContentAutofillDriver::DidPreviewAutofillFormData() { +@@ -585,6 +619,8 @@ void ContentAutofillDriver::DidPreviewAutofillFormData() { autofill_router().DidPreviewAutofillFormData( this, [](ContentAutofillDriver* target) { target->autofill_manager_->OnDidPreviewAutofillFormData(); @@ -566,7 +566,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -589,6 +625,8 @@ void ContentAutofillDriver::DidEndTextFieldEditing() { +@@ -595,6 +631,8 @@ void ContentAutofillDriver::DidEndTextFieldEditing() { autofill_router().DidEndTextFieldEditing( this, [](ContentAutofillDriver* target) { target->autofill_manager_->OnDidEndTextFieldEditing(); @@ -575,18 +575,18 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -602,6 +640,10 @@ void ContentAutofillDriver::SelectFieldOptionsDidChange( +@@ -608,6 +646,10 @@ void ContentAutofillDriver::SelectOrSelectMenuFieldOptionsDidChange( [](ContentAutofillDriver* target, const FormData& form) { - target->autofill_manager_->OnSelectFieldOptionsDidChange( + target->autofill_manager_->OnSelectOrSelectMenuFieldOptionsDidChange( WithNewVersion(form)); + if (target->secondary_autofill_manager_) { -+ target->secondary_autofill_manager_->OnSelectFieldOptionsDidChange( ++ target->secondary_autofill_manager_->OnSelectOrSelectMenuFieldOptionsDidChange( + WithNewVersion(form)); + } }); } -@@ -621,6 +663,10 @@ void ContentAutofillDriver::JavaScriptChangedAutofilledValue( +@@ -627,6 +669,10 @@ void ContentAutofillDriver::JavaScriptChangedAutofilledValue( const FormFieldData& field, const std::u16string& old_value) { target->autofill_manager_->OnJavaScriptChangedAutofilledValue( WithNewVersion(form), field, old_value); @@ -597,7 +597,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 }); } -@@ -628,6 +674,8 @@ void ContentAutofillDriver::OnContextMenuShownInFieldCallback( +@@ -634,6 +680,8 @@ void ContentAutofillDriver::OnContextMenuShownInFieldCallback( const FormGlobalId& form_global_id, const FieldGlobalId& field_global_id) { autofill_manager_->OnContextMenuShownInField(form_global_id, field_global_id); @@ -606,7 +606,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 } void ContentAutofillDriver::OnContextMenuShownInField( -@@ -649,6 +697,8 @@ void ContentAutofillDriver::Reset() { +@@ -655,6 +703,8 @@ void ContentAutofillDriver::Reset() { owner_->autofill_router().UnregisterDriver(this, /*driver_is_dying=*/false); autofill_manager_->Reset(); @@ -616,7 +616,7 @@ index bce90eb0d00f1..b271026e7f51a 100644 const mojo::AssociatedRemote& diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h -index bb3e11056c660..2e3d30fcabb46 100644 +index 055be41b4939d..547327b7cdad8 100644 --- a/components/autofill/content/browser/content_autofill_driver.h +++ b/components/autofill/content/browser/content_autofill_driver.h @@ -126,10 +126,13 @@ class ContentAutofillDriver : public AutofillDriver, @@ -634,7 +634,7 @@ index bb3e11056c660..2e3d30fcabb46 100644 content::RenderFrameHost* render_frame_host() { return &*render_frame_host_; } const content::RenderFrameHost* render_frame_host() const { -@@ -336,6 +339,10 @@ class ContentAutofillDriver : public AutofillDriver, +@@ -339,6 +342,10 @@ class ContentAutofillDriver : public AutofillDriver, std::unique_ptr autofill_manager_ = nullptr; @@ -646,7 +646,7 @@ index bb3e11056c660..2e3d30fcabb46 100644 mojo::AssociatedReceiver receiver_{this}; diff --git a/components/autofill/content/browser/content_autofill_driver_factory.cc b/components/autofill/content/browser/content_autofill_driver_factory.cc -index 3a347f922f85a..8b6d595a78fb5 100644 +index cd57de3fa124d..f49805a22d0b6 100644 --- a/components/autofill/content/browser/content_autofill_driver_factory.cc +++ b/components/autofill/content/browser/content_autofill_driver_factory.cc @@ -14,6 +14,7 @@ @@ -677,7 +677,7 @@ index 3a347f922f85a..8b6d595a78fb5 100644 driver->GetAutofillAgent()->EnableHeavyFormDataScraping(); } diff --git a/components/autofill/content/browser/content_autofill_driver_factory.h b/components/autofill/content/browser/content_autofill_driver_factory.h -index 150ede33e0ead..b175462ee39ff 100644 +index 799a438b1b5f2..84ee299720499 100644 --- a/components/autofill/content/browser/content_autofill_driver_factory.h +++ b/components/autofill/content/browser/content_autofill_driver_factory.h @@ -35,6 +35,7 @@ class ContentAutofillDriver; @@ -689,10 +689,10 @@ index 150ede33e0ead..b175462ee39ff 100644 // Manages lifetime of ContentAutofillDriver. Owned by ContentAutofillClient, diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc -index b567d8d105d98..3b3d6131630a0 100644 +index d87c83db50b93..121c2219d8da6 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc -@@ -779,7 +779,10 @@ void PasswordAutofillAgent::UpdateStateForTextChange( +@@ -822,7 +822,10 @@ void PasswordAutofillAgent::UpdateStateForTextChange( void PasswordAutofillAgent::TrackAutofilledElement( const blink::WebFormControlElement& element) { @@ -705,12 +705,12 @@ index b567d8d105d98..3b3d6131630a0 100644 void PasswordAutofillAgent::FillPasswordSuggestion( diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc -index ac51c1ab20768..74ce5a3a71b9c 100644 +index 6b99236349bc5..a563b571f9149 100644 --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc -@@ -126,6 +126,10 @@ const char kAutofillPaymentMethodsMandatoryReauthPromoShownCounter[] = - "autofill.payment_methods_mandatory_reauth_promo_counter"; - #endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) +@@ -133,6 +133,10 @@ const char kAutofillUsingVirtualViewStructure[] = + "autofill.using_virtual_view_structure"; + #endif // BUILDFLAG(IS_ANDROID) +// Boolean that is true to enable native Android Autofill +const char kAutofillAndroidEnabled[] = "autofill.android_autofill_enabled"; @@ -719,22 +719,22 @@ index ac51c1ab20768..74ce5a3a71b9c 100644 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { // Synced prefs. Used for cross-device choices, e.g., credit card Autofill. registry->RegisterBooleanPref( -@@ -158,6 +162,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -164,6 +168,8 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterBooleanPref( prefs::kAutofillCreditCardFidoAuthOfferCheckboxState, true); #endif - registry->RegisterBooleanPref(prefs::kAutofillWalletImportEnabled, true); + registry->RegisterBooleanPref(prefs::kAutofillAndroidEnabled, true); + registry->RegisterBooleanPref(prefs::kAutofillAndroidIncognitoEnabled, false); registry->RegisterIntegerPref( prefs::kAutofillLastVersionDisusedCreditCardsDeleted, 0); registry->RegisterIntegerPref(prefs::kAutocompleteLastVersionRetentionPolicy, diff --git a/components/autofill/core/common/autofill_prefs.h b/components/autofill/core/common/autofill_prefs.h -index f395407e8d2a0..864937316a0b9 100644 +index dfe0c1ab725ac..266ecdfecbc75 100644 --- a/components/autofill/core/common/autofill_prefs.h +++ b/components/autofill/core/common/autofill_prefs.h -@@ -46,6 +46,8 @@ extern const char kAutofillUploadEvents[]; +@@ -43,6 +43,8 @@ extern const char kAutofillUploadEncodingSeed[]; + extern const char kAutofillUploadEvents[]; extern const char kAutofillUploadEventsLastResetTimestamp[]; - extern const char kAutofillWalletImportEnabled[]; extern const char kAutocompleteLastVersionRetentionPolicy[]; +extern const char kAutofillAndroidEnabled[]; +extern const char kAutofillAndroidIncognitoEnabled[]; @@ -811,10 +811,10 @@ index 17482e0338285..d42234d302efb 100644 + } } diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java -index 454eb50e76104..849fdd41bca62 100644 +index 9394236df6aa3..6eca97140eee6 100644 --- a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java +++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java -@@ -29,6 +29,10 @@ import org.chromium.ui.dragdrop.DragStateTracker; +@@ -30,6 +30,10 @@ import org.chromium.ui.dragdrop.DragStateTracker; import org.chromium.ui.dragdrop.DropDataAndroid; import org.chromium.ui.mojom.CursorType; @@ -825,9 +825,9 @@ index 454eb50e76104..849fdd41bca62 100644 /** * Class to acquire, position, and remove anchor views from the implementing View. */ -@@ -620,4 +624,8 @@ public class ViewAndroidDelegate { - public static void setDragAndDropDelegateForTest(DragAndDropDelegate testDelegate) { - sDragAndDropTestDelegate = testDelegate; +@@ -621,4 +625,8 @@ public class ViewAndroidDelegate { + sDragAndDropDelegateForTesting = testDelegate; + ResettersForTesting.register(() -> sDragAndDropDelegateForTesting = null); } + + public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) {} diff --git a/bromite/build/patches/Enable-network-isolation-features.patch b/bromite/build/patches/Enable-network-isolation-features.patch index 4bc727cd..6e16d1f9 100644 --- a/bromite/build/patches/Enable-network-isolation-features.patch +++ b/bromite/build/patches/Enable-network-isolation-features.patch @@ -1,4 +1,4 @@ -From 96d30746d8ecded91ddfe32c2e2a1f84466c2387 Mon Sep 17 00:00:00 2001 +From 098d5ec3bdfa845842f8ea54a11eae8aa9557732 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 10 Dec 2020 21:52:35 +0100 Subject: [PATCH 121/192] Enable network isolation features @@ -10,78 +10,91 @@ PartitionNelAndReportingByNetworkIsolationKey License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - net/base/features.cc | 48 ++++++++++++------------- + net/base/features.cc | 68 ++++++++++++------------- services/network/public/cpp/features.cc | 2 +- - 2 files changed, 25 insertions(+), 25 deletions(-) + 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/net/base/features.cc b/net/base/features.cc -index 603a0f0e6b696..0de0f37320976 100644 +index 508e4dfdf52f1..8d37774c60d90 100644 --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -99,37 +99,37 @@ BASE_FEATURE(kSplitCacheByIncludeCredentials, +@@ -108,40 +108,40 @@ BASE_FEATURE(kSplitCacheByIncludeCredentials, "SplitCacheByIncludeCredentials", base::FEATURE_DISABLED_BY_DEFAULT); -BASE_FEATURE(kSplitCacheByNetworkIsolationKey, - "SplitCacheByNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kSplitCacheByNetworkIsolationKey, // must be enabled -+ "SplitCacheByNetworkIsolationKey", // enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - +- -BASE_FEATURE(kSplitCodeCacheByNetworkIsolationKey, - "SplitCodeCacheByNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kSplitCodeCacheByNetworkIsolationKey, // must be enabled -+ "SplitCodeCacheByNetworkIsolationKey", // enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - +- -BASE_FEATURE(kSplitHostCacheByNetworkIsolationKey, - "SplitHostCacheByNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kSplitHostCacheByNetworkIsolationKey, // must be -+ "SplitHostCacheByNetworkIsolationKey", // enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - +- -BASE_FEATURE(kPartitionConnectionsByNetworkIsolationKey, - "PartitionConnectionsByNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kPartitionConnectionsByNetworkIsolationKey, // must be -+ "PartitionConnectionsByNetworkIsolationKey", // enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - +- -BASE_FEATURE(kPartitionHttpServerPropertiesByNetworkIsolationKey, - "PartitionHttpServerPropertiesByNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kPartitionHttpServerPropertiesByNetworkIsolationKey, // must be -+ "PartitionHttpServerPropertiesByNetworkIsolationKey", // enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - +- -BASE_FEATURE(kPartitionSSLSessionsByNetworkIsolationKey, - "PartitionSSLSessionsByNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kPartitionSSLSessionsByNetworkIsolationKey, // must be -+ "PartitionSSLSessionsByNetworkIsolationKey", // enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - +- -BASE_FEATURE(kPartitionNelAndReportingByNetworkIsolationKey, - "PartitionNelAndReportingByNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); -+BASE_FEATURE(kPartitionNelAndReportingByNetworkIsolationKey, // must be -+ "PartitionNelAndReportingByNetworkIsolationKey", // enabled -+ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite - +- -BASE_FEATURE(kEnableCrossSiteFlagNetworkIsolationKey, - "EnableCrossSiteFlagNetworkIsolationKey", - base::FEATURE_DISABLED_BY_DEFAULT); +-BASE_FEATURE(kEnableFrameSiteSharedOpaqueNetworkIsolationKey, +- "EnableFrameSiteSharedOpaqueNetworkIsolationKey", +- base::FEATURE_DISABLED_BY_DEFAULT); ++BASE_FEATURE(kSplitCacheByNetworkIsolationKey, // must be enabled ++ "SplitCacheByNetworkIsolationKey", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ ++BASE_FEATURE(kSplitCodeCacheByNetworkIsolationKey, // must be enabled ++ "SplitCodeCacheByNetworkIsolationKey", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ ++BASE_FEATURE(kSplitHostCacheByNetworkIsolationKey, // must be ++ "SplitHostCacheByNetworkIsolationKey", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ ++BASE_FEATURE(kPartitionConnectionsByNetworkIsolationKey, // must be ++ "PartitionConnectionsByNetworkIsolationKey", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ ++BASE_FEATURE(kPartitionHttpServerPropertiesByNetworkIsolationKey, // must be ++ "PartitionHttpServerPropertiesByNetworkIsolationKey", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ ++BASE_FEATURE(kPartitionSSLSessionsByNetworkIsolationKey, // must be ++ "PartitionSSLSessionsByNetworkIsolationKey", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ ++BASE_FEATURE(kPartitionNelAndReportingByNetworkIsolationKey, // must be ++ "PartitionNelAndReportingByNetworkIsolationKey", // enabled ++ base::FEATURE_ENABLED_BY_DEFAULT); // in Bromite ++ +BASE_FEATURE(kEnableCrossSiteFlagNetworkIsolationKey, // must be + "EnableCrossSiteFlagNetworkIsolationKey", // disabled + base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite - - BASE_FEATURE(kTLS13KeyUpdate, - "TLS13KeyUpdate", ++BASE_FEATURE(kEnableFrameSiteSharedOpaqueNetworkIsolationKey, // must be ++ "EnableFrameSiteSharedOpaqueNetworkIsolationKey", // disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // in Bromite + BASE_FEATURE(kHttpCacheKeyingExperimentControlGroup, + "HttpCacheKeyingExperimentControlGroup", + base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/services/network/public/cpp/features.cc b/services/network/public/cpp/features.cc -index 2ea124300acf1..de284a289722f 100644 +index e743370a28421..3f10b50047298 100644 --- a/services/network/public/cpp/features.cc +++ b/services/network/public/cpp/features.cc @@ -95,7 +95,7 @@ BASE_FEATURE(kCoopRestrictPropertiesOriginTrial, diff --git a/bromite/build/patches/Enable-prefetch-privacy-changes-by-default.patch b/bromite/build/patches/Enable-prefetch-privacy-changes-by-default.patch index fd99067d..5ad44390 100644 --- a/bromite/build/patches/Enable-prefetch-privacy-changes-by-default.patch +++ b/bromite/build/patches/Enable-prefetch-privacy-changes-by-default.patch @@ -1,4 +1,4 @@ -From 833e84948c7572f1d0d649c293c5e087bcaae5b3 Mon Sep 17 00:00:00 2001 +From e43ad44a2fc53ed6e69f89cc8164e9ed92f0e01b Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 31 Jul 2020 08:27:26 +0200 Subject: [PATCH 110/192] Enable prefetch-privacy-changes by default @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc -index 1f417d4108564..d4cf1f50f0c96 100644 +index 3ed0e50f30098..9e0801e355390 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1225,8 +1225,8 @@ BASE_FEATURE(kPrefetchFontLookupTables, +@@ -1312,8 +1312,8 @@ BASE_FEATURE(kPrefetchFontLookupTables, // Prefetch request properties are updated to be privacy-preserving. See // crbug.com/988956. BASE_FEATURE(kPrefetchPrivacyChanges, diff --git a/bromite/build/patches/Enable-share-intent.patch b/bromite/build/patches/Enable-share-intent.patch index 9550dd49..8fc03549 100644 --- a/bromite/build/patches/Enable-share-intent.patch +++ b/bromite/build/patches/Enable-share-intent.patch @@ -1,4 +1,4 @@ -From 03e027d92bd0a21c1469ce8d2faef9f8b63f9d2c Mon Sep 17 00:00:00 2001 +From 389956a27ed64ab08072ef8eb1a8194cd4c6c96c Mon Sep 17 00:00:00 2001 From: uazo Date: Sun, 3 Oct 2021 16:18:24 +0000 Subject: [PATCH 135/192] Enable share intent @@ -31,10 +31,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/sharing/shared_intent/SharedIntentShareActivity.java diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni -index d858cf8935d43..eab1a62bded11 100644 +index b421f571bf6d2..1d9fa5b9779f2 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -603,6 +603,7 @@ chrome_java_resources = [ +@@ -607,6 +607,7 @@ chrome_java_resources = [ "java/res/layout/signin_activity.xml", "java/res/layout/status_indicator_container.xml", "java/res/layout/suggestions_tile_view_condensed.xml", @@ -43,10 +43,10 @@ index d858cf8935d43..eab1a62bded11 100644 "java/res/layout/sync_custom_passphrase.xml", "java/res/layout/sync_enter_passphrase.xml", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index 64f830b41843b..4c88ae68cd6fd 100644 +index 4fff6772328e4..87ddc92e24f7e 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -1013,6 +1013,7 @@ chrome_java_sources = [ +@@ -1023,6 +1023,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/signin/SyncConsentActivity.java", "java/src/org/chromium/chrome/browser/signin/SyncConsentActivityLauncherImpl.java", "java/src/org/chromium/chrome/browser/signin/SyncConsentFragment.java", @@ -55,10 +55,10 @@ index 64f830b41843b..4c88ae68cd6fd 100644 "java/src/org/chromium/chrome/browser/site_settings/CookieControlsServiceBridge.java", "java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java", diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml -index 6c87b503d89bb..e3f6f8386669d 100644 +index 8974f51e25548..8260fd5d4887b 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -243,12 +243,6 @@ by a child template that "extends" this file. +@@ -241,12 +241,6 @@ by a child template that "extends" this file. @@ -71,7 +71,7 @@ index 6c87b503d89bb..e3f6f8386669d 100644 -@@ -374,6 +368,24 @@ by a child template that "extends" this file. +@@ -361,6 +355,24 @@ by a child template that "extends" this file. @@ -190,10 +190,10 @@ index 0000000000000..2b80c2863b96f + + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -index 3f26f41d07644..5f788c4b39cc5 100644 +index 060fb0b2e2265..4a0340b7dff77 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -@@ -210,6 +210,9 @@ public class IntentHandler { +@@ -209,6 +209,9 @@ public class IntentHandler { private static final String EXTRA_TAB_LAUNCH_TYPE = "org.chromium.chrome.browser.tab_launch_type"; @@ -203,7 +203,7 @@ index 3f26f41d07644..5f788c4b39cc5 100644 /** * A hash code for the URL to verify intent data hasn't been modified. */ -@@ -1517,6 +1520,17 @@ public class IntentHandler { +@@ -1504,6 +1507,17 @@ public class IntentHandler { return IntentUtils.safeGetSerializableExtra(intent, EXTRA_TAB_LAUNCH_TYPE); } @@ -221,7 +221,7 @@ index 3f26f41d07644..5f788c4b39cc5 100644 /** * Creates an Intent that will launch a ChromeTabbedActivity on the new tab page. The Intent * will be trusted and therefore able to launch Incognito tabs. -@@ -1641,7 +1655,7 @@ public class IntentHandler { +@@ -1628,7 +1642,7 @@ public class IntentHandler { String headers = getExtraHeadersFromIntent(intent); headers = maybeAddAdditionalContentHeaders(intent, url, headers); @@ -231,10 +231,10 @@ index 3f26f41d07644..5f788c4b39cc5 100644 String postDataType = IntentUtils.safeGetStringExtra(intent, IntentHandler.EXTRA_POST_DATA_TYPE); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -index 8be68f2d60ad4..e754e7d4f610a 100644 +index f07514c71d290..7e06987625a3a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -465,8 +465,8 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega +@@ -425,8 +425,8 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega /*incognito*/true); newIntent.setData(mIntent.getData()); newIntent.setPackage(applicationContext.getPackageName()); @@ -391,10 +391,10 @@ index 0000000000000..526a88ab0f607 + } +} diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index d34516bd368ff..3c37c215ff3a2 100644 +index f56710802c16a..adaf8a1350291 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9806,6 +9806,10 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9895,6 +9895,10 @@ const FeatureEntry kFeatureEntries[] = { features::kBrokerFileOperationsOnDiskCacheInNetworkService)}, #if BUILDFLAG(IS_ANDROID) @@ -406,10 +406,10 @@ index d34516bd368ff..3c37c215ff3a2 100644 flag_descriptions::kCommerceHintAndroidName, flag_descriptions::kCommerceHintAndroidDescription, kOsAndroid, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 628a323966e5d..d7098f8bfcb67 100644 +index 8deefef5e23a4..a0754d0ed5723 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3119,6 +3119,11 @@ const char kIsolateOriginsDescription[] = +@@ -3181,6 +3181,11 @@ const char kIsolateOriginsDescription[] = "Requires dedicated processes for an additional set of origins, " "specified as a comma-separated list."; @@ -422,10 +422,10 @@ index 628a323966e5d..d7098f8bfcb67 100644 "Change web-facing behaviors that prevent origin-level isolation"; const char kIsolationByDefaultDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index e2983aac9ef68..d05257e5c29aa 100644 +index 978a9c4dcd81c..4bc4ddb5ce607 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1779,6 +1779,9 @@ extern const char kIsolateOriginsDescription[]; +@@ -1828,6 +1828,9 @@ extern const char kIsolateOriginsDescription[]; extern const char kIsolationByDefaultName[]; extern const char kIsolationByDefaultDescription[]; @@ -436,10 +436,10 @@ index e2983aac9ef68..d05257e5c29aa 100644 extern const char kSiteIsolationOptOutName[]; extern const char kSiteIsolationOptOutDescription[]; diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index b7c3b47e7fab2..f84b2a89734f6 100644 +index 45fb8f39dd1dd..a4df42cb6db67 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -271,6 +271,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -278,6 +278,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kReengagementNotification, &kSearchReadyOmniboxFeature, &kRelatedSearches, @@ -447,7 +447,7 @@ index b7c3b47e7fab2..f84b2a89734f6 100644 &kReportParentalControlSitesChild, &kRequestDesktopSiteDefaults, &kRequestDesktopSiteDefaultsControl, -@@ -974,6 +975,10 @@ BASE_FEATURE(kScrollToTLDOptimization, +@@ -992,6 +993,10 @@ BASE_FEATURE(kScrollToTLDOptimization, "ScrollToTLDOptimization", base::FEATURE_DISABLED_BY_DEFAULT); @@ -459,11 +459,11 @@ index b7c3b47e7fab2..f84b2a89734f6 100644 "ShowScrollableMVTOnNTPAndroid", base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h -index d37e3e41ba30a..9b7e7d58d56e9 100644 +index f279afd2d62f0..2fedf540a3efb 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -156,6 +156,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsLogging); - BASE_DECLARE_FEATURE(kRequestDesktopSitePerSiteIph); +@@ -164,6 +164,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsDowngrade); + BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsLogging); BASE_DECLARE_FEATURE(kRestoreTabsOnFRE); BASE_DECLARE_FEATURE(kSearchReadyOmniboxFeature); +BASE_DECLARE_FEATURE(kSharedIntentUI); @@ -471,22 +471,22 @@ index d37e3e41ba30a..9b7e7d58d56e9 100644 BASE_DECLARE_FEATURE(kShowScrollableMVTOnNTPAndroid); BASE_DECLARE_FEATURE(kFeedPositionAndroid); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index 5e9a79513b9a6..9ff2cd358d1e2 100644 +index d0d1a4271442a..21a3d8def69d6 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -381,6 +381,7 @@ public abstract class ChromeFeatureList { - public static final String QUIET_NOTIFICATION_PROMPTS = "QuietNotificationPrompts"; +@@ -391,6 +391,7 @@ public abstract class ChromeFeatureList { public static final String REACHED_CODE_PROFILER = "ReachedCodeProfiler"; + public static final String READALOUD = "ReadAloud"; public static final String READER_MODE_IN_CCT = "ReaderModeInCCT"; + public static final String SHARED_INTENT_UI = "SharedIntentUI"; public static final String RECORD_SUPPRESSION_METRICS = "RecordSuppressionMetrics"; public static final String RECOVER_FROM_NEVER_SAVE_ANDROID = "RecoverFromNeverSaveAndroid_LAUNCHED"; diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 781ff28c92b1b..ca0b52dd3fed4 100644 +index 7b03fb86276ab..2d4640dd3b79b 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -5088,6 +5088,19 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

diff --git a/bromite/build/patches/Enable-third-party-storage-partitioning.patch b/bromite/build/patches/Enable-third-party-storage-partitioning.patch index 3d39b95c..5e01094c 100644 --- a/bromite/build/patches/Enable-third-party-storage-partitioning.patch +++ b/bromite/build/patches/Enable-third-party-storage-partitioning.patch @@ -1,4 +1,4 @@ -From 55db99d4feefaadea8e21f79a4ff9daee9df464b Mon Sep 17 00:00:00 2001 +From 89fdb4b7004cf003781f479830eb9d829cdc2ff5 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 3 Dec 2022 12:02:20 +0100 Subject: [PATCH 190/192] Enable third-party storage partitioning @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/base/features.cc b/net/base/features.cc -index 5633a23cda38a..d67b6405c03a1 100644 +index 81cbba7c6f90d..3b8d88e612bd9 100644 --- a/net/base/features.cc +++ b/net/base/features.cc -@@ -278,8 +278,8 @@ BASE_FEATURE(kBlockSetCookieHeader, +@@ -294,8 +294,8 @@ BASE_FEATURE(kBlockSetCookieHeader, // Enables partitioning of third party storage (IndexedDB, CacheStorage, etc.) // by the top level site to reduce fingerprinting. BASE_FEATURE(kThirdPartyStoragePartitioning, diff --git a/bromite/build/patches/Experimental-user-scripts-support.patch b/bromite/build/patches/Experimental-user-scripts-support.patch index 297b9f93..2a35bb88 100644 --- a/bromite/build/patches/Experimental-user-scripts-support.patch +++ b/bromite/build/patches/Experimental-user-scripts-support.patch @@ -1,4 +1,4 @@ -From bcf20ff9dca6b972f1324747e9dd105fe58979dc Mon Sep 17 00:00:00 2001 +From ba86bad2b560bf7f1e7e2d65663681586dcc9edd Mon Sep 17 00:00:00 2001 From: uazo Date: Fri, 13 Aug 2021 17:10:47 +0000 Subject: [PATCH 142/192] Experimental user scripts support @@ -33,22 +33,22 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/download/DownloadUtils.java | 6 + .../init/ProcessInitializationHandler.java | 3 + chrome/android/java_sources.gni | 3 + - chrome/browser/BUILD.gn | 5 + - chrome/browser/about_flags.cc | 5 + + chrome/browser/BUILD.gn | 7 + + chrome/browser/about_flags.cc | 7 + chrome/browser/flag_descriptions.cc | 5 + chrome/browser/flag_descriptions.h | 3 + - chrome/browser/prefs/browser_prefs.cc | 2 + - chrome/browser/profiles/BUILD.gn | 1 + - ...hrome_browser_main_extra_parts_profiles.cc | 3 + - chrome/browser/profiles/profile_manager.cc | 9 + - chrome/browser/profiles/renderer_updater.cc | 10 +- - chrome/browser/profiles/renderer_updater.h | 1 + - .../webui/chrome_web_ui_controller_factory.cc | 3 + + chrome/browser/prefs/browser_prefs.cc | 4 + + chrome/browser/profiles/BUILD.gn | 3 + + ...hrome_browser_main_extra_parts_profiles.cc | 7 + + chrome/browser/profiles/profile_manager.cc | 13 + + chrome/browser/profiles/renderer_updater.cc | 19 +- + chrome/browser/profiles/renderer_updater.h | 3 + + .../webui/chrome_web_ui_controller_factory.cc | 5 + chrome/chrome_paks.gni | 2 + chrome/common/renderer_configuration.mojom | 1 + - chrome/renderer/BUILD.gn | 1 + - .../chrome_content_renderer_client.cc | 37 + - .../renderer/chrome_render_thread_observer.cc | 3 + + chrome/renderer/BUILD.gn | 6 + + .../chrome_content_renderer_client.cc | 55 ++ + .../renderer/chrome_render_thread_observer.cc | 5 + components/components_strings.grd | 1 + components/user_scripts/README.md | 150 ++++ components/user_scripts/android/BUILD.gn | 83 ++ @@ -85,7 +85,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../user_scripts/browser/user_script_prefs.h | 62 ++ .../browser/userscripts_browser_client.cc | 78 ++ .../browser/userscripts_browser_client.h | 62 ++ - components/user_scripts/common/BUILD.gn | 49 ++ + components/user_scripts/common/BUILD.gn | 48 ++ components/user_scripts/common/constants.h | 15 + components/user_scripts/common/error_utils.cc | 54 ++ components/user_scripts/common/error_utils.h | 24 + @@ -136,7 +136,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../renderer/web_ui_injection_host.h | 27 + .../strings/userscripts_strings.grdp | 54 ++ tools/gritsettings/resource_ids.spec | 6 + - 108 files changed, 9435 insertions(+), 1 deletion(-) + 108 files changed, 9488 insertions(+), 1 deletion(-) create mode 100644 components/user_scripts/README.md create mode 100755 components/user_scripts/android/BUILD.gn create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml @@ -224,7 +224,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html create mode 100755 components/user_scripts/strings/userscripts_strings.grdp diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn -index b25a4bb15e7c9..e36c8b5fd8a5d 100644 +index 04622b7bf6f1f..8a1fa40a1e7aa 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn @@ -236,6 +236,9 @@ if (current_toolchain == default_toolchain) { @@ -237,7 +237,7 @@ index b25a4bb15e7c9..e36c8b5fd8a5d 100644 } android_library("app_hooks_java") { -@@ -540,6 +543,7 @@ if (current_toolchain == default_toolchain) { +@@ -550,6 +553,7 @@ if (current_toolchain == default_toolchain) { "//components/ukm/android:java", "//components/url_formatter/android:url_formatter_java", "//components/user_prefs/android:java", @@ -246,10 +246,10 @@ index b25a4bb15e7c9..e36c8b5fd8a5d 100644 "//components/variations/android:variations_java", "//components/version_info/android:version_constants_java", diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml -index 2b1e1e9a53fdd..f63a36cc04a6e 100644 +index 5f8ed2aba57cd..683735e9a721d 100644 --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -111,6 +111,11 @@ found in the LICENSE file. +@@ -116,6 +116,11 @@ found in the LICENSE file. android:key="useragent_settings" android:order="20" android:title="@string/prefs_useragent_settings"/> @@ -262,10 +262,10 @@ index 2b1e1e9a53fdd..f63a36cc04a6e 100644 android:fragment="org.chromium.chrome.browser.language.settings.LanguageSettings" android:key="languages" diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java -index 0b93ad2be69dd..09a5d38be70ff 100644 +index 440a6d8685fd4..fec71889e9bc0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java -@@ -71,6 +71,7 @@ import org.chromium.content_public.browser.WebContents; +@@ -72,6 +72,7 @@ import org.chromium.ui.UiUtils; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.widget.Toast; import org.chromium.url.GURL; @@ -325,26 +325,28 @@ index a5f30237c3bfa..ba61e355c51b2 100644 + +chrome_java_sources += userscripts_java_sources diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index ed170329bcba9..f83e383af24a4 100644 +index f2e4217b94d1c..38787b5f4c80e 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -3478,6 +3478,11 @@ static_library("browser") { +@@ -3523,6 +3523,13 @@ static_library("browser") { ] deps += [ "//chrome/android/modules/dev_ui/provider:native" ] } -+ deps += [ -+ "//components/user_scripts/common", -+ "//components/user_scripts/browser", -+ "//components/user_scripts/android", -+ ] ++ if (is_android) { ++ deps += [ ++ "//components/user_scripts/common", ++ "//components/user_scripts/browser", ++ "//components/user_scripts/android", ++ ] ++ } } else { #!is_android sources += [ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 6fa09cb90a0fd..478daa01b7820 100644 +index feaa4584c8a98..aba0e2e89e817 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -163,6 +163,7 @@ +@@ -161,6 +161,7 @@ #include "components/ui_devtools/switches.h" #include "components/variations/service/google_groups_updater_service.h" #include "components/variations/variations_switches.h" @@ -352,22 +354,24 @@ index 6fa09cb90a0fd..478daa01b7820 100644 #include "components/version_info/version_info.h" #include "components/viz/common/features.h" #include "components/viz/common/switches.h" -@@ -8149,6 +8150,10 @@ const FeatureEntry kFeatureEntries[] = { - FEATURE_VALUE_TYPE(ash::features::kClipboardHistoryLongpress)}, +@@ -8312,6 +8313,12 @@ const FeatureEntry kFeatureEntries[] = { + FEATURE_VALUE_TYPE(ash::features::kClipboardHistoryUrlTitles)}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) ++#if BUILDFLAG(IS_ANDROID) + {"enable-userscripts-log", flag_descriptions::kEnableLoggingUserScriptsName, + flag_descriptions::kEnableLoggingUserScriptsDescription, kOsDesktop | kOsAndroid, + FEATURE_VALUE_TYPE(user_scripts::features::kEnableLoggingUserScripts)}, ++#endif + #if BUILDFLAG(IS_WIN) {"enable-media-foundation-video-capture", flag_descriptions::kEnableMediaFoundationVideoCaptureName, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 9dbfaabbd6868..e456a80c51e45 100644 +index 4fd26779df83e..b614f7bf72e08 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -7203,6 +7203,11 @@ const char kUseOutOfProcessVideoDecodingDescription[] = +@@ -7381,6 +7381,11 @@ const char kUseOutOfProcessVideoDecodingDescription[] = "enabled in ash-chrome)."; #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) @@ -380,10 +384,10 @@ index 9dbfaabbd6868..e456a80c51e45 100644 const char kWebShareName[] = "Web Share"; const char kWebShareDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 01b5525f35078..5b9efb4086fd9 100644 +index e21404e9bc26f..f1afb602b881e 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -4123,6 +4123,9 @@ extern const char kQuickCommandsDescription[]; +@@ -4228,6 +4228,9 @@ extern const char kQuickCommandsDescription[]; #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || // defined (OS_FUCHSIA) @@ -394,10 +398,10 @@ index 01b5525f35078..5b9efb4086fd9 100644 extern const char kWebShareName[]; extern const char kWebShareDescription[]; diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc -index be3300aa542aa..f4a0124c34e27 100644 +index 7d4642bec22d4..5f5880a8f79b6 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -253,6 +253,7 @@ +@@ -257,6 +257,7 @@ #include "components/permissions/contexts/geolocation_permission_context_android.h" #include "components/query_tiles/tile_service_prefs.h" #include "components/webapps/browser/android/install_prompt_prefs.h" @@ -405,76 +409,88 @@ index be3300aa542aa..f4a0124c34e27 100644 #else // BUILDFLAG(IS_ANDROID) #include "chrome/browser/cart/cart_service.h" #include "chrome/browser/companion/core/promo_handler.h" -@@ -1633,6 +1634,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -1731,6 +1732,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, translate::TranslatePrefs::RegisterProfilePrefs(registry); omnibox::RegisterProfilePrefs(registry); ZeroSuggestProvider::RegisterProfilePrefs(registry); ++#if BUILDFLAG(IS_ANDROID) + user_scripts::UserScriptsPrefs::RegisterProfilePrefs(registry); ++#endif #if !BUILDFLAG(IS_ANDROID) && BUILDFLAG(GOOGLE_CHROME_BRANDING) promos_utils::RegisterProfilePrefs(registry); diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn -index e8f8f22f3d76c..d1dc70952a5f5 100644 +index e8f8f22f3d76c..b64e05273c918 100644 --- a/chrome/browser/profiles/BUILD.gn +++ b/chrome/browser/profiles/BUILD.gn -@@ -57,6 +57,7 @@ source_set("profile") { - "//components/profile_metrics", - "//components/sync/service", - "//components/variations", -+ "//components/user_scripts/browser", +@@ -60,6 +60,9 @@ source_set("profile") { "//content/public/browser", "//extensions/buildflags", ] ++ if (is_android) { ++ deps += [ "//components/user_scripts/browser" ] ++ } + if (enable_extensions) { + deps += [ "//extensions/browser" ] + } diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -index 8a666f005bb07..13e71469e88ab 100644 +index 30cf8620c9c4e..1ac481691bef9 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -450,6 +450,8 @@ +@@ -457,6 +457,10 @@ #include "chrome/browser/offline_pages/request_coordinator_factory.h" #endif ++#if BUILDFLAG(IS_ANDROID) +#include "components/user_scripts/browser/userscripts_browser_client.h" ++#endif + namespace chrome { void AddProfilesExtraParts(ChromeBrowserMainParts* main_parts) { -@@ -1062,6 +1064,7 @@ void ChromeBrowserMainExtraPartsProfiles:: +@@ -1112,6 +1116,9 @@ void ChromeBrowserMainExtraPartsProfiles:: #endif WebDataServiceFactory::GetInstance(); webrtc_event_logging::WebRtcEventLogManagerKeyedServiceFactory::GetInstance(); ++#if BUILDFLAG(IS_ANDROID) + user_scripts::UserScriptsBrowserClient::GetInstance(); ++#endif } void ChromeBrowserMainExtraPartsProfiles::PreProfileInit() { diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc -index 9eb766c7a5818..140aa34b84745 100644 +index ad64bc75b7383..26b23873b37f4 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc -@@ -106,6 +106,8 @@ +@@ -106,6 +106,10 @@ #include "extensions/common/manifest.h" #endif ++#if BUILDFLAG(IS_ANDROID) +#include "components/user_scripts/browser/userscripts_browser_client.h" ++#endif + #if BUILDFLAG(ENABLE_SESSION_SERVICE) #include "chrome/browser/sessions/app_session_service_factory.h" #include "chrome/browser/sessions/session_service_factory.h" -@@ -1488,6 +1490,13 @@ void ProfileManager::DoFinalInitForServices(Profile* profile, +@@ -1493,6 +1497,15 @@ void ProfileManager::DoFinalInitForServices(Profile* profile, #endif #endif + ++#if BUILDFLAG(IS_ANDROID) + user_scripts::UserScriptsBrowserClient* userscript_client = + user_scripts::UserScriptsBrowserClient::GetInstance(); + if (userscript_client) { + userscript_client->SetProfile(profile); + } ++#endif + #if BUILDFLAG(ENABLE_SUPERVISED_USERS) // Initialization needs to happen after extension system initialization (for // extension::ManagementPolicy) and InitProfileUserPrefs (for setting the diff --git a/chrome/browser/profiles/renderer_updater.cc b/chrome/browser/profiles/renderer_updater.cc -index 884e79cd54e0d..be6cea71a7d46 100644 +index 884e79cd54e0d..72aabc880dd79 100644 --- a/chrome/browser/profiles/renderer_updater.cc +++ b/chrome/browser/profiles/renderer_updater.cc @@ -39,6 +39,8 @@ @@ -486,68 +502,81 @@ index 884e79cd54e0d..be6cea71a7d46 100644 RendererUpdater::RendererUpdater(Profile* profile) : profile_(profile), is_off_the_record_(profile_->IsOffTheRecord()), -@@ -76,6 +78,7 @@ RendererUpdater::RendererUpdater(Profile* profile) +@@ -76,6 +78,9 @@ RendererUpdater::RendererUpdater(Profile* profile) force_youtube_restrict_.Init(policy::policy_prefs::kForceYouTubeRestrict, pref_service); allowed_domains_for_apps_.Init(prefs::kAllowedDomainsForApps, pref_service); ++#if BUILDFLAG(IS_ANDROID) + activate_userscripts_.Init(user_scripts::prefs::kUserScriptsEnabled, pref_service); ++#endif pref_change_registrar_.Init(pref_service); pref_change_registrar_.Add( -@@ -90,6 +93,10 @@ RendererUpdater::RendererUpdater(Profile* profile) +@@ -90,6 +95,12 @@ RendererUpdater::RendererUpdater(Profile* profile) prefs::kAllowedDomainsForApps, base::BindRepeating(&RendererUpdater::UpdateAllRenderers, base::Unretained(this))); ++#if BUILDFLAG(IS_ANDROID) + pref_change_registrar_.Add( + user_scripts::prefs::kUserScriptsEnabled, + base::BindRepeating(&RendererUpdater::UpdateAllRenderers, + base::Unretained(this))); ++#endif } RendererUpdater::~RendererUpdater() { -@@ -242,5 +249,6 @@ chrome::mojom::DynamicParamsPtr RendererUpdater::CreateRendererDynamicParams() +@@ -242,5 +253,11 @@ chrome::mojom::DynamicParamsPtr RendererUpdater::CreateRendererDynamicParams() GetBoundSessionParams(), #endif force_google_safesearch_.GetValue(), force_youtube_restrict_.GetValue(), - allowed_domains_for_apps_.GetValue()); + allowed_domains_for_apps_.GetValue(), -+ activate_userscripts_.GetValue()); ++#if BUILDFLAG(IS_ANDROID) ++ activate_userscripts_.GetValue() ++#else ++ false ++#endif ++ ); } diff --git a/chrome/browser/profiles/renderer_updater.h b/chrome/browser/profiles/renderer_updater.h -index cdd3f2239d836..ff72722b7b911 100644 +index cdd3f2239d836..a904514cd37fa 100644 --- a/chrome/browser/profiles/renderer_updater.h +++ b/chrome/browser/profiles/renderer_updater.h -@@ -108,6 +108,7 @@ class RendererUpdater : public KeyedService, +@@ -108,6 +108,9 @@ class RendererUpdater : public KeyedService, // Prefs that we sync to the renderers. BooleanPrefMember force_google_safesearch_; ++#if BUILDFLAG(IS_ANDROID) + BooleanPrefMember activate_userscripts_; ++#endif IntegerPrefMember force_youtube_restrict_; StringPrefMember allowed_domains_for_apps_; }; diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc -index a3bca2f687432..80414d0e433ff 100644 +index b448dcb118d41..ecc5b1601c8e9 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc -@@ -100,6 +100,7 @@ - #include "components/signin/public/base/signin_buildflags.h" +@@ -101,6 +101,7 @@ + #include "components/signin/public/base/signin_switches.h" #include "components/site_engagement/content/site_engagement_service.h" #include "components/supervised_user/core/common/buildflags.h" +#include "components/user_scripts/browser/ui/user_scripts_ui.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/common/content_client.h" -@@ -528,6 +529,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, +@@ -532,6 +533,10 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUIVersionHost) return &NewWebUI; ++#if BUILDFLAG(IS_ANDROID) + if (url.host_piece() == user_scripts::kChromeUIUserScriptsHost) + return &NewWebUI; ++#endif #if !BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_CHROMEOS) diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni -index 7b939af86e260..25d27905dc144 100644 +index 98d206b764d92..0d98e7079d94f 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni @@ -121,6 +121,7 @@ template("chrome_extra_paks") { @@ -579,105 +608,125 @@ index 950f9599de5e5..71417fe885889 100644 // Allows the renderer to notify the browser process that requests in renderer diff --git a/chrome/renderer/BUILD.gn b/chrome/renderer/BUILD.gn -index 76f0adaaa659d..5d01f6a913546 100644 +index 5bf67204d5006..73463b19fd29b 100644 --- a/chrome/renderer/BUILD.gn +++ b/chrome/renderer/BUILD.gn -@@ -154,6 +154,7 @@ static_library("renderer") { - "//components/content_capture/common", - "//components/content_capture/renderer", - "//components/content_settings/common:mojom", -+ "//components/user_scripts/renderer", - "//components/content_settings/renderer", - "//components/continuous_search/renderer", - "//components/dom_distiller/content/renderer", +@@ -233,6 +233,12 @@ static_library("renderer") { + "//v8", + ] + ++ if (is_android) { ++ deps += [ ++ "//components/user_scripts/renderer", ++ ] ++ } ++ + data_deps = [ "//tools/v8_context_snapshot" ] + + configs += [ "//build/config/compiler:wexit_time_destructors" ] diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc -index 43fc365662842..e230e455920b5 100644 +index 8d02ca21674b1..efef7a84641b0 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc -@@ -252,6 +252,9 @@ +@@ -252,6 +252,11 @@ #include "chrome/renderer/media/chrome_key_systems.h" #endif ++#if BUILDFLAG(IS_ANDROID) +#include "components/user_scripts/common/user_scripts_features.h" +#include "components/user_scripts/renderer/user_scripts_renderer_client.h" ++#endif + using autofill::AutofillAgent; using autofill::PasswordAutofillAgent; using autofill::PasswordGenerationAgent; -@@ -428,6 +431,12 @@ void ChromeContentRendererClient::RenderThreadStarted() { +@@ -428,6 +433,14 @@ void ChromeContentRendererClient::RenderThreadStarted() { WebString::FromASCII(extensions::kExtensionScheme)); #endif ++#if BUILDFLAG(IS_ANDROID) + user_scripts::UserScriptsRendererClient* userscript_client = + user_scripts::UserScriptsRendererClient::GetInstance(); + if (userscript_client) { + userscript_client->RenderThreadStarted(GetChromeObserver()); + } ++#endif + #if BUILDFLAG(ENABLE_SPELLCHECK) if (!spellcheck_) InitSpellCheck(); -@@ -596,6 +605,13 @@ void ChromeContentRendererClient::RenderFrameCreated( +@@ -601,6 +614,15 @@ void ChromeContentRendererClient::RenderFrameCreated( render_frame, registry); #endif ++#if BUILDFLAG(IS_ANDROID) + user_scripts::UserScriptsRendererClient* userscript_client = + user_scripts::UserScriptsRendererClient::GetInstance(); + if (userscript_client) { + userscript_client->RenderFrameCreated( + render_frame, registry); + } ++#endif + #if BUILDFLAG(ENABLE_PPAPI) new PepperHelper(render_frame); #endif -@@ -1603,7 +1619,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart( - ChromeExtensionsRendererClient::GetInstance()->RunScriptsAtDocumentStart( +@@ -1599,6 +1621,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentStart( render_frame); // |render_frame| might be dead by now. -+ static_assert(false, "Compiler error: extensions cannot be enabled with user scripts"); #endif ++#if BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(ENABLE_EXTENSIONS) ++ static_assert(false, "Compiler error: extensions cannot be enabled with user scripts"); ++#endif + user_scripts::UserScriptsRendererClient* userscript_client = + user_scripts::UserScriptsRendererClient::GetInstance(); + if (userscript_client) { + userscript_client->RunScriptsAtDocumentStart( + render_frame); + } ++#endif } void ChromeContentRendererClient::RunScriptsAtDocumentEnd( -@@ -1612,7 +1635,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd( - ChromeExtensionsRendererClient::GetInstance()->RunScriptsAtDocumentEnd( +@@ -1608,6 +1641,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentEnd( render_frame); // |render_frame| might be dead by now. -+ static_assert(false, "Compiler error: extensions cannot be enabled with user scripts"); #endif ++#if BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(ENABLE_EXTENSIONS) ++ static_assert(false, "Compiler error: extensions cannot be enabled with user scripts"); ++#endif + user_scripts::UserScriptsRendererClient* userscript_client = + user_scripts::UserScriptsRendererClient::GetInstance(); + if (userscript_client) { + userscript_client->RunScriptsAtDocumentEnd( + render_frame); + } ++#endif } void ChromeContentRendererClient::RunScriptsAtDocumentIdle( -@@ -1621,7 +1651,14 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle( - ChromeExtensionsRendererClient::GetInstance()->RunScriptsAtDocumentIdle( +@@ -1617,6 +1661,17 @@ void ChromeContentRendererClient::RunScriptsAtDocumentIdle( render_frame); // |render_frame| might be dead by now. -+ static_assert(false, "Compiler error: extensions cannot be enabled with user scripts"); #endif ++#if BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(ENABLE_EXTENSIONS) ++ static_assert(false, "Compiler error: extensions cannot be enabled with user scripts"); ++#endif + user_scripts::UserScriptsRendererClient* userscript_client = + user_scripts::UserScriptsRendererClient::GetInstance(); + if (userscript_client) { + userscript_client->RunScriptsAtDocumentIdle( + render_frame); + } ++#endif } void ChromeContentRendererClient:: diff --git a/chrome/renderer/chrome_render_thread_observer.cc b/chrome/renderer/chrome_render_thread_observer.cc -index c32abc15c0b41..3cd5574b316ce 100644 +index c32abc15c0b41..24555c18adf6d 100644 --- a/chrome/renderer/chrome_render_thread_observer.cc +++ b/chrome/renderer/chrome_render_thread_observer.cc @@ -54,6 +54,8 @@ @@ -689,16 +738,18 @@ index c32abc15c0b41..3cd5574b316ce 100644 #if BUILDFLAG(IS_CHROMEOS_ASH) #include "chrome/renderer/ash_merge_session_loader_throttle.h" #endif -@@ -217,6 +219,7 @@ void ChromeRenderThreadObserver::SetConfiguration( +@@ -217,6 +219,9 @@ void ChromeRenderThreadObserver::SetConfiguration( chrome::mojom::DynamicParamsPtr params) { base::AutoLock lock(dynamic_params_lock_); dynamic_params_ = std::move(params); ++#if BUILDFLAG(IS_ANDROID) + user_scripts::UserScriptsRendererClient::GetInstance()->ConfigurationUpdated(); ++#endif } void ChromeRenderThreadObserver::OnRendererConfigurationAssociatedRequest( diff --git a/components/components_strings.grd b/components/components_strings.grd -index c102f8898fc46..a20aaa9940f3d 100644 +index e13fef4f13bee..5d7619b855d61 100644 --- a/components/components_strings.grd +++ b/components/components_strings.grd @@ -335,6 +335,7 @@ @@ -867,7 +918,7 @@ index 0000000000000..257241678f0f5 +See also: https://github.com/bromite/bromite/pull/857 diff --git a/components/user_scripts/android/BUILD.gn b/components/user_scripts/android/BUILD.gn new file mode 100755 -index 0000000000000..32e954c0eef0d +index 0000000000000..7ffea90435331 --- /dev/null +++ b/components/user_scripts/android/BUILD.gn @@ -0,0 +1,83 @@ @@ -937,8 +988,8 @@ index 0000000000000..32e954c0eef0d + "//third_party/androidx:androidx_core_core_java", + "//ui/android:ui_java", + ] ++ srcjar_deps = [ ":user_scripts_jni_headers" ] + resources_package = "org.chromium.components.user_scripts" -+ annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] +} + +source_set("android") { @@ -4380,10 +4431,10 @@ index 0000000000000..52b169c1e15ba +#endif // USERSCRIPTS_BROWSER_USERSCRIPTS_BROWSER_CLIENT_H_ diff --git a/components/user_scripts/common/BUILD.gn b/components/user_scripts/common/BUILD.gn new file mode 100755 -index 0000000000000..ccb6ffebb0ab6 +index 0000000000000..f15590635b8a0 --- /dev/null +++ b/components/user_scripts/common/BUILD.gn -@@ -0,0 +1,49 @@ +@@ -0,0 +1,48 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. @@ -4419,7 +4470,6 @@ index 0000000000000..ccb6ffebb0ab6 + ] + + public_deps = [ -+ "//components/services/app_service/public/cpp:app_file_handling", + "//content/public/common", + "//ipc", + "//skia", @@ -10545,10 +10595,10 @@ index 0000000000000..a512c68c96412 + + diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec -index a34293da90260..b283cd492acc6 100644 +index a327136986b82..919e222137c5f 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec -@@ -899,6 +899,12 @@ +@@ -907,6 +907,12 @@ "components/autofill/core/browser/autofill_address_rewriter_resources.grd":{ "includes": [6220] }, diff --git a/bromite/build/patches/Follow-only-system-dark-mode.patch b/bromite/build/patches/Follow-only-system-dark-mode.patch index 5804a653..d947ff80 100644 --- a/bromite/build/patches/Follow-only-system-dark-mode.patch +++ b/bromite/build/patches/Follow-only-system-dark-mode.patch @@ -1,4 +1,4 @@ -From e2fb13b8602f6f3b60e007de2cfcaf37e860a8fe Mon Sep 17 00:00:00 2001 +From b0c90d156c01cdfe8dcf10fc167f6b494ad298f3 Mon Sep 17 00:00:00 2001 From: krlvm <51774833+krlvm@users.noreply.github.com> Date: Mon, 4 Jul 2022 16:14:37 +0300 Subject: [PATCH 175/192] Follow only system dark mode diff --git a/bromite/build/patches/Guard-for-user-agent-reduction.patch b/bromite/build/patches/Guard-for-user-agent-reduction.patch index f4a21a1e..6b00cee4 100644 --- a/bromite/build/patches/Guard-for-user-agent-reduction.patch +++ b/bromite/build/patches/Guard-for-user-agent-reduction.patch @@ -1,4 +1,4 @@ -From 9072724e3e483a39c60d96f2f0e11a14d5c5047b Mon Sep 17 00:00:00 2001 +From 5262978342afd9211f9b88bdcd3a84196f48dc1f Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 10 Feb 2020 23:13:13 +0100 Subject: [PATCH 105/192] Guard for user-agent reduction @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 36567be1403fe..73656cb2a4a08 100644 +index 08f87ec1efc93..96975c06356ef 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -1630,7 +1630,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( +@@ -1639,7 +1639,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterIntegerPref( prefs::kUserAgentReduction, static_cast( @@ -56,10 +56,10 @@ index 5c99971335e9c..3d595bc7a24ee 100644 bool semicolon_inserted = false; if (include_android_model == IncludeAndroidModel::Include) { diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc -index 1aad8689c7f1a..1f417d4108564 100644 +index 6a5d3fe3a8ad0..3ed0e50f30098 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1349,8 +1349,8 @@ BASE_FEATURE(kReducedReferrerGranularity, +@@ -1439,8 +1439,8 @@ BASE_FEATURE(kReducedReferrerGranularity, const base::FeatureParam kUserAgentFrozenBuildVersion{ &kReduceUserAgentMinorVersion, "build_version", "0"}; @@ -71,10 +71,10 @@ index 1aad8689c7f1a..1f417d4108564 100644 &kReduceUserAgentPlatformOsCpu, "legacy_windows_platform", true}; diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index 6f93a0bc4295d..19db42a2982d1 100644 +index 9af38988b56ba..9a36374db163d 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2911,23 +2911,23 @@ +@@ -2912,23 +2912,23 @@ // If enabled, the deviceModel will be reduced to "K" and the // androidVersion will be reduced to a static "10" string in android // User-Agent string. diff --git a/bromite/build/patches/Hardening-against-incognito-mode-detection.patch b/bromite/build/patches/Hardening-against-incognito-mode-detection.patch index 9ffdadc1..5742fd3c 100644 --- a/bromite/build/patches/Hardening-against-incognito-mode-detection.patch +++ b/bromite/build/patches/Hardening-against-incognito-mode-detection.patch @@ -1,4 +1,4 @@ -From c55b3e9ed5c4f4ff0a80faf30c93cd95b8a7ea32 Mon Sep 17 00:00:00 2001 +From e5afc6c513250a4f7922b3c62a7f3065c143d791 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 5 Sep 2020 21:38:15 +0200 Subject: [PATCH 116/192] Hardening against incognito mode detection diff --git a/bromite/build/patches/History-number-of-days-privacy-setting.patch b/bromite/build/patches/History-number-of-days-privacy-setting.patch index 974ba96d..135558a4 100644 --- a/bromite/build/patches/History-number-of-days-privacy-setting.patch +++ b/bromite/build/patches/History-number-of-days-privacy-setting.patch @@ -1,4 +1,4 @@ -From 59300c52986c3ee6b0c6438d5d30b876d7df7103 Mon Sep 17 00:00:00 2001 +From 67a170eaaba8f339f9212f19fdf13dea3880c2eb Mon Sep 17 00:00:00 2001 From: uazo Date: Mon, 31 Jan 2022 12:49:39 +0000 Subject: [PATCH 069/192] History number of days privacy setting @@ -48,7 +48,7 @@ index bb0c084bca718..a55aceab20631 100644 android:key="can_make_payment" android:title="@string/can_make_payment_title" 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 -index c77adbfd1896e..3d299d1fae26c 100644 +index e2efe95eb3723..447224e584889 100644 --- 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,6 +49,7 @@ import org.chromium.chrome.browser.sync.settings.GoogleServicesSettings; @@ -77,8 +77,8 @@ index c77adbfd1896e..3d299d1fae26c 100644 + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - PrivacyPreferencesManagerImpl privacyPrefManager = -@@ -218,6 +224,40 @@ public class PrivacySettings extends PreferenceFragmentCompat + getActivity().setTitle(R.string.prefs_privacy_security); +@@ -214,6 +220,40 @@ public class PrivacySettings extends PreferenceFragmentCompat Preference syncAndServicesLink = findPreference(PREF_SYNC_AND_SERVICES_LINK); syncAndServicesLink.setSummary(buildSyncAndServicesLink()); @@ -119,7 +119,7 @@ index c77adbfd1896e..3d299d1fae26c 100644 Preference thirdPartyCookies = findPreference(PREF_THIRD_PARTY_COOKIES); if (thirdPartyCookies != null) { thirdPartyCookies.getExtras().putString( -@@ -405,6 +445,29 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -401,6 +441,29 @@ public class PrivacySettings extends PreferenceFragmentCompat privacyGuide.setTitle(privacyGuidePrefTitle); } @@ -163,10 +163,10 @@ index e47ca09045d2a..47136f880b6ff 100644 } diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc -index a3ee1846fcf77..b1f6f22bed680 100644 +index f3e41082fe306..bce1a287d7513 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc -@@ -372,6 +372,7 @@ std::unique_ptr Profile::CreateProfile(const base::FilePath& path, +@@ -368,6 +368,7 @@ std::unique_ptr Profile::CreateProfile(const base::FilePath& path, void ProfileImpl::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(prefs::kSavingBrowserHistoryDisabled, false); @@ -175,10 +175,10 @@ index a3ee1846fcf77..b1f6f22bed680 100644 registry->RegisterBooleanPref(policy::policy_prefs::kForceGoogleSafeSearch, false); diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 6c840e3b415fd..12be7b1638ce0 100644 +index 81cf2c14f3339..ede3464db7602 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1369,6 +1369,18 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1393,6 +1393,18 @@ Your Google account may have other forms of browsing history like searches and a Browsing history @@ -278,7 +278,7 @@ index e5ab0558806c7..4690d29d00885 100644 android:id="@+id/spinner" android:layout_height="wrap_content" diff --git a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java -index e49827f18de3b..aa3af9a4bad77 100644 +index 6b3c883de2f82..b4b2d36ebdc5b 100644 --- a/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java +++ b/components/browser_ui/settings/android/widget/java/src/org/chromium/components/browser_ui/settings/SpinnerPreference.java @@ -6,6 +6,7 @@ package org.chromium.components.browser_ui.settings; @@ -289,7 +289,7 @@ index e49827f18de3b..aa3af9a4bad77 100644 import android.util.AttributeSet; import android.view.View; import android.widget.AdapterView; -@@ -98,6 +99,12 @@ public class SpinnerPreference extends Preference { +@@ -96,6 +97,12 @@ public class SpinnerPreference extends Preference { super.onBindViewHolder(holder); ((TextView) holder.findViewById(R.id.title)).setText(getTitle()); @@ -341,7 +341,7 @@ index 21a36ef8331fa..741f6184c78c1 100644 bool more_to_expire = ExpireSomeOldHistory( GetCurrentExpirationTime(), reader, kNumExpirePerIteration); diff --git a/components/history/core/browser/expire_history_backend.h b/components/history/core/browser/expire_history_backend.h -index dfcab38a3832b..db37cc368a12b 100644 +index f0507cdd2e423..39fb2628ffbb6 100644 --- a/components/history/core/browser/expire_history_backend.h +++ b/components/history/core/browser/expire_history_backend.h @@ -79,6 +79,8 @@ class ExpireHistoryBackend { @@ -354,7 +354,7 @@ index dfcab38a3832b..db37cc368a12b 100644 void DeleteURL(const GURL& url, base::Time end_time); diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc -index cd18116c63d8d..1e765f7687039 100644 +index f497cd0403f85..9870582db088f 100644 --- a/components/history/core/browser/history_backend.cc +++ b/components/history/core/browser/history_backend.cc @@ -163,7 +163,7 @@ const int kMaxRedirectCount = 32; @@ -366,7 +366,7 @@ index cd18116c63d8d..1e765f7687039 100644 // The maximum number of days for which domain visit metrics are computed // each time HistoryBackend::GetDomainDiversity() is called. -@@ -1297,6 +1297,19 @@ void HistoryBackend::InitImpl( +@@ -1305,6 +1305,19 @@ void HistoryBackend::InitImpl( expirer_.StartExpiringOldStuff(base::Days(kExpireDaysThreshold)); } @@ -387,10 +387,10 @@ index cd18116c63d8d..1e765f7687039 100644 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { // TODO(sebmarchand): Check if MEMORY_PRESSURE_LEVEL_MODERATE should also be diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h -index 7ee6ac79483e0..709c3482f09ba 100644 +index 2019d6b8ad346..8e2a5194c8aeb 100644 --- a/components/history/core/browser/history_backend.h +++ b/components/history/core/browser/history_backend.h -@@ -220,6 +220,8 @@ class HistoryBackend : public base::RefCountedThreadSafe, +@@ -222,6 +222,8 @@ class HistoryBackend : public base::RefCountedThreadSafe, void Init(bool force_fail, const HistoryDatabaseParams& history_database_params); @@ -400,10 +400,10 @@ index 7ee6ac79483e0..709c3482f09ba 100644 // the refs owned by the delegate and any pending transaction, so it will // actually be deleted. diff --git a/components/history/core/browser/history_service.cc b/components/history/core/browser/history_service.cc -index 80febca912934..6b740b0bc5db2 100644 +index fd749699bc4f0..234051928002a 100644 --- a/components/history/core/browser/history_service.cc +++ b/components/history/core/browser/history_service.cc -@@ -36,6 +36,9 @@ +@@ -37,6 +37,9 @@ #include "base/time/time.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" @@ -413,7 +413,7 @@ index 80febca912934..6b740b0bc5db2 100644 #include "components/history/core/browser/download_row.h" #include "components/history/core/browser/features.h" #include "components/history/core/browser/history_backend.h" -@@ -1319,6 +1322,9 @@ void HistoryService::Cleanup() { +@@ -1339,6 +1342,9 @@ void HistoryService::Cleanup() { return; } @@ -423,7 +423,7 @@ index 80febca912934..6b740b0bc5db2 100644 NotifyHistoryServiceBeingDeleted(); weak_ptr_factory_.InvalidateWeakPtrs(); -@@ -1392,6 +1398,33 @@ bool HistoryService::Init( +@@ -1415,6 +1421,33 @@ bool HistoryService::Init( return true; } @@ -458,7 +458,7 @@ index 80febca912934..6b740b0bc5db2 100644 base::OnceCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); diff --git a/components/history/core/browser/history_service.h b/components/history/core/browser/history_service.h -index df1ffa74fa0a8..4eb3ae21d8400 100644 +index 0e14e7a93dd96..ef384ccf7fae9 100644 --- a/components/history/core/browser/history_service.h +++ b/components/history/core/browser/history_service.h @@ -34,6 +34,8 @@ @@ -479,7 +479,7 @@ index df1ffa74fa0a8..4eb3ae21d8400 100644 // Triggers the backend to load if it hasn't already, and then returns whether // it's finished loading. // Note: Virtual needed for mocking. -@@ -1129,6 +1133,10 @@ class HistoryService : public KeyedService, +@@ -1143,6 +1147,10 @@ class HistoryService : public KeyedService, raw_ptr local_device_info_provider_ = nullptr; diff --git a/bromite/build/patches/Ignore-enterprise-policies-for-secure-DNS.patch b/bromite/build/patches/Ignore-enterprise-policies-for-secure-DNS.patch index d907c0ad..087392cc 100644 --- a/bromite/build/patches/Ignore-enterprise-policies-for-secure-DNS.patch +++ b/bromite/build/patches/Ignore-enterprise-policies-for-secure-DNS.patch @@ -1,4 +1,4 @@ -From 38469456799ce6aefd1d3ffbe37f4ec55c7cdcf9 Mon Sep 17 00:00:00 2001 +From 6564ff807e98e8eb09a284cf824d585cea7f7502 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Tue, 26 Jan 2021 00:21:51 +0100 Subject: [PATCH 124/192] Ignore enterprise policies for secure DNS @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/chrome/browser/enterprise/util/android/java/src/org/chromium/chrome/browser/enterprise/util/EnterpriseInfo.java b/chrome/browser/enterprise/util/android/java/src/org/chromium/chrome/browser/enterprise/util/EnterpriseInfo.java -index 400f24d8a8ff3..9408e2bfcb4c5 100644 +index 9bb8baf39bd9c..35cf9786019a9 100644 --- a/chrome/browser/enterprise/util/android/java/src/org/chromium/chrome/browser/enterprise/util/EnterpriseInfo.java +++ b/chrome/browser/enterprise/util/android/java/src/org/chromium/chrome/browser/enterprise/util/EnterpriseInfo.java -@@ -81,13 +81,7 @@ public abstract class EnterpriseInfo { +@@ -83,13 +83,7 @@ public abstract class EnterpriseInfo { @CalledByNative public static void getManagedStateForNative() { Callback callback = (result) -> { diff --git a/bromite/build/patches/Improve-plain-text-rendering-on-mobile.patch b/bromite/build/patches/Improve-plain-text-rendering-on-mobile.patch index 78c12906..10fef8ea 100644 --- a/bromite/build/patches/Improve-plain-text-rendering-on-mobile.patch +++ b/bromite/build/patches/Improve-plain-text-rendering-on-mobile.patch @@ -1,4 +1,4 @@ -From e94ff509a099ebb00b52c5545701e687c794e7ba Mon Sep 17 00:00:00 2001 +From ab85a3601c94b50672c73187f6cdffe228b5be06 Mon Sep 17 00:00:00 2001 From: mauve Date: Mon, 30 May 2022 22:25:04 -0400 Subject: [PATCH 173/192] Improve plain text rendering on mobile diff --git a/bromite/build/patches/Increase-number-of-autocomplete-matches-to-10.patch b/bromite/build/patches/Increase-number-of-autocomplete-matches-to-10.patch index 058c6329..64139197 100644 --- a/bromite/build/patches/Increase-number-of-autocomplete-matches-to-10.patch +++ b/bromite/build/patches/Increase-number-of-autocomplete-matches-to-10.patch @@ -1,4 +1,4 @@ -From 83b2e8716351bf620fbb7874e425b6a22124243f Mon Sep 17 00:00:00 2001 +From 9d847c7a497bd300a48c5aa1563711a2aa630dd1 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 27 Oct 2019 10:18:39 +0100 Subject: [PATCH 094/192] Increase number of autocomplete matches to 10 @@ -8,14 +8,14 @@ Patch adapted from https://github.com/Eloston/ungoogled-chromium/issues/814#issu License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- components/omnibox/browser/autocomplete_result.cc | 5 +++-- - components/omnibox/browser/omnibox_field_trial.cc | 6 +++--- - 2 files changed, 6 insertions(+), 5 deletions(-) + components/omnibox/browser/omnibox_field_trial.cc | 6 +++++- + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/components/omnibox/browser/autocomplete_result.cc b/components/omnibox/browser/autocomplete_result.cc -index 6a623efb7b94e..9e0c7832a895b 100644 +index 7202d862daff7..4700cc0b1c86f 100644 --- a/components/omnibox/browser/autocomplete_result.cc +++ b/components/omnibox/browser/autocomplete_result.cc -@@ -84,10 +84,11 @@ constexpr size_t kMaxPedalMatchIndex = +@@ -85,10 +85,11 @@ constexpr size_t kMaxPedalMatchIndex = // static size_t AutocompleteResult::GetMaxMatches(bool is_zero_suggest) { @@ -30,30 +30,22 @@ index 6a623efb7b94e..9e0c7832a895b 100644 // By default, iPad has the same max as iPhone. // `kDefaultMaxAutocompleteMatches` defines a hard limit on the number of diff --git a/components/omnibox/browser/omnibox_field_trial.cc b/components/omnibox/browser/omnibox_field_trial.cc -index 29c7ba28819db..ac8739b8153fd 100644 +index 11850cde8878e..58c9644448715 100644 --- a/components/omnibox/browser/omnibox_field_trial.cc +++ b/components/omnibox/browser/omnibox_field_trial.cc -@@ -288,9 +288,9 @@ void OmniboxFieldTrial::GetDemotionsByType( +@@ -289,7 +289,11 @@ void OmniboxFieldTrial::GetDemotionsByType( size_t OmniboxFieldTrial::GetProviderMaxMatches( AutocompleteProvider::Type provider) { - size_t default_max_matches_per_provider = 3; -+ size_t default_max_matches_per_provider = 5; // was 3; this needs to be half the value of kDefaultMaxAutocompleteMatches from components/omnibox/browser/autocomplete_result.cc ++ size_t default_max_matches_per_provider = 5; ++ // was 3; this needs to be half the value of ++ // kDefaultMaxAutocompleteMatches from ++ // components/omnibox/browser/autocomplete_result.cc ++ if ((true)) return default_max_matches_per_provider; -- std::string param_value = base::GetFieldTrialParamValueByFeature( -+/* std::string param_value = base::GetFieldTrialParamValueByFeature( - omnibox::kUIExperimentMaxAutocompleteMatches, - OmniboxFieldTrial::kUIMaxAutocompleteMatchesByProviderParam); - -@@ -315,7 +315,7 @@ size_t OmniboxFieldTrial::GetProviderMaxMatches( - return v; - } - } -- } -+ }*/ - - return default_max_matches_per_provider; - } + std::string param_value; + if (OmniboxFieldTrial::IsMlUrlScoringEnabled()) { -- 2.34.1 diff --git a/bromite/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch b/bromite/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch index 7daddcf8..e449aa22 100644 --- a/bromite/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch +++ b/bromite/build/patches/Inject-scripts-for-AMP-tracking-ads-and-video.patch @@ -1,4 +1,4 @@ -From 408b265b7e8aed46c834c9e93a14a51308138721 Mon Sep 17 00:00:00 2001 +From 0c417ccf478418e1f2fae91ae8690afe990fd46f Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 28 Oct 2017 10:09:41 +0200 Subject: [PATCH 051/192] Inject scripts for AMP, tracking, ads and video @@ -11,21 +11,21 @@ Send a random key press to circumvent idle status detection License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- third_party/blink/renderer/core/dom/build.gni | 2 + - .../blink/renderer/core/dom/document.cc | 65 +++++++++++++++++++ + .../blink/renderer/core/dom/document.cc | 64 +++++++++++++++++++ .../blink/renderer/core/dom/document.h | 3 + .../core/dom/extensions/anti_amp_cure.h | 6 ++ .../core/dom/extensions/video_bg_play.h | 6 ++ .../renderer/core/html/html_script_element.cc | 5 ++ .../renderer/core/html/html_script_element.h | 1 + - 7 files changed, 88 insertions(+) + 7 files changed, 87 insertions(+) create mode 100644 third_party/blink/renderer/core/dom/extensions/anti_amp_cure.h create mode 100644 third_party/blink/renderer/core/dom/extensions/video_bg_play.h diff --git a/third_party/blink/renderer/core/dom/build.gni b/third_party/blink/renderer/core/dom/build.gni -index 158f5d3010642..9960761f94e21 100644 +index 42711ff246e8c..5b9261b721f96 100644 --- a/third_party/blink/renderer/core/dom/build.gni +++ b/third_party/blink/renderer/core/dom/build.gni -@@ -170,6 +170,8 @@ blink_core_sources_dom = [ +@@ -166,6 +166,8 @@ blink_core_sources_dom = [ "has_invalidation_flags.h", "icon_url.cc", "icon_url.h", @@ -35,10 +35,10 @@ index 158f5d3010642..9960761f94e21 100644 "id_target_observer.h", "id_target_observer_registry.cc", diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc -index 5e47f5d8e6e59..326349969f375 100644 +index c45935f24782d..3f79114aa7c46 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc -@@ -292,6 +292,7 @@ +@@ -293,6 +293,7 @@ #include "third_party/blink/renderer/core/page/scrolling/root_scroller_controller.h" #include "third_party/blink/renderer/core/page/scrolling/scroll_state_callback.h" #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h" @@ -46,7 +46,7 @@ index 5e47f5d8e6e59..326349969f375 100644 #include "third_party/blink/renderer/core/page/scrolling/snap_coordinator.h" #include "third_party/blink/renderer/core/page/scrolling/top_document_root_scroller_controller.h" #include "third_party/blink/renderer/core/page/spatial_navigation_controller.h" -@@ -368,6 +369,8 @@ +@@ -369,6 +370,8 @@ #include "third_party/blink/renderer/platform/wtf/text/string_buffer.h" #include "third_party/blink/renderer/platform/wtf/text/text_encoding_registry.h" @@ -55,7 +55,7 @@ index 5e47f5d8e6e59..326349969f375 100644 #ifndef NDEBUG using WeakDocumentSet = blink::HeapHashSet>; static WeakDocumentSet& LiveDocumentSet(); -@@ -7489,6 +7492,64 @@ void Document::OnPrepareToStopParsing() { +@@ -7442,6 +7445,64 @@ void Document::OnPrepareToStopParsing() { MilestoneForDelayedAsyncScript::kFinishedParsing); } @@ -120,19 +120,18 @@ index 5e47f5d8e6e59..326349969f375 100644 void Document::FinishedParsing() { DCHECK(!GetScriptableDocumentParser() || !parser_->IsParsing()); DCHECK(!GetScriptableDocumentParser() || ready_state_ != kLoading); -@@ -7540,6 +7601,10 @@ void Document::FinishedParsing() { +@@ -7508,6 +7569,9 @@ void Document::FinishedParsing() { + } frame->Loader().FinishedParsing(); - + if (!IsPrefetchOnly()) { + injectScripts(); + } -+ - if (ShouldMarkFontPerformance()) - FontPerformance::MarkDomContentLoaded(); + } + // Schedule dropping of the ElementDataCache. We keep it alive for a while diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h -index 88c64a875224a..ea3d4b7b120e7 100644 +index 1e66bb72dfeae..b1fe70f808431 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h @@ -2049,6 +2049,9 @@ class CORE_EXPORT Document : public ContainerNode, diff --git a/bromite/build/patches/Invalidate-components-public-key.patch b/bromite/build/patches/Invalidate-components-public-key.patch index 5ff9c41e..f465defb 100644 --- a/bromite/build/patches/Invalidate-components-public-key.patch +++ b/bromite/build/patches/Invalidate-components-public-key.patch @@ -1,4 +1,4 @@ -From 956ff535a66e08b03d50f93fb261eb2051d05afa Mon Sep 17 00:00:00 2001 +From eb2fca0c3342de137425e856c710c33381a1b0f4 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 10 Jun 2022 14:21:13 +0200 Subject: [PATCH 172/192] Invalidate components public key diff --git a/bromite/build/patches/JIT-site-settings.patch b/bromite/build/patches/JIT-site-settings.patch index 3a6e6959..95a8fe01 100644 --- a/bromite/build/patches/JIT-site-settings.patch +++ b/bromite/build/patches/JIT-site-settings.patch @@ -1,4 +1,4 @@ -From aa026a218b11eb79a7bdf70c1cda514b5efcbe7f Mon Sep 17 00:00:00 2001 +From 3293a041bb580e39bbc20db2be879839bb3c1a6b Mon Sep 17 00:00:00 2001 From: fgei Date: Sat, 29 Jan 2022 15:22:45 +0000 Subject: [PATCH 016/192] JIT site settings @@ -275,10 +275,10 @@ index 0000000000000..cdf9d0b9f250f + .set_blocked_exceptions_ui(IDS_WEBSITE_SETTINGS_ADD_SITE_DESCRIPTION_JAVASCRIPT_JIT_BLOCK) + .set_mid_sentence_ui(IDS_JAVASCRIPT_JIT_PERMISSION_TITLE); diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc -index cdf28d4c1aa2a..9a10470b51740 100644 +index fe872eb3a92a2..f91a59805f509 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc -@@ -515,7 +515,7 @@ void ContentSettingsRegistry::Init() { +@@ -526,7 +526,7 @@ void ContentSettingsRegistry::Init() { ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); Register(ContentSettingsType::JAVASCRIPT_JIT, "javascript-jit", diff --git a/bromite/build/patches/Keep-empty-tabs-between-sessions.patch b/bromite/build/patches/Keep-empty-tabs-between-sessions.patch index b3e579ed..2eba9b15 100644 --- a/bromite/build/patches/Keep-empty-tabs-between-sessions.patch +++ b/bromite/build/patches/Keep-empty-tabs-between-sessions.patch @@ -1,4 +1,4 @@ -From 9482675f70688ad5b145352e1855de7ec0da4c74 Mon Sep 17 00:00:00 2001 +From 61416c5cfa368075bcd642ca3b8f71e374a465d2 Mon Sep 17 00:00:00 2001 From: uazo Date: Wed, 27 Oct 2021 10:57:09 +0000 Subject: [PATCH 143/192] Keep empty tabs between sessions @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 2 files changed, 11 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java -index 7f9962ab40489..4c9e5d06f58d3 100644 +index 20cdf55ecf431..0d39fb0769009 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java @@ -805,14 +805,6 @@ public class TabPersistentStore { @@ -30,10 +30,10 @@ index 7f9962ab40489..4c9e5d06f58d3 100644 Tab fallbackTab = mTabCreatorManager.getTabCreator(isIncognito) .createNewTab(new LoadUrlParams(tabToRestore.url), diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java -index 3d6052e174571..8bee50db24919 100644 +index 0c069a602735c..851aba87f0673 100644 --- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java +++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/CriticalPersistedTabData.java -@@ -620,9 +620,6 @@ public class CriticalPersistedTabData extends PersistedTabData { +@@ -621,9 +621,6 @@ public class CriticalPersistedTabData extends PersistedTabData { if (getUrl() == null || getUrl().isEmpty()) { return false; } diff --git a/bromite/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch b/bromite/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch index d4618162..1e3fc331 100644 --- a/bromite/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch +++ b/bromite/build/patches/Keep-flag-to-allow-screenshots-in-Incognito-mode.patch @@ -1,4 +1,4 @@ -From 094b36c78c9f12ca33ab7c3cfaa7516cb573fa1f Mon Sep 17 00:00:00 2001 +From 26b9859259f7c1b7531bc90cf4f24acb3c643b2f Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 9 May 2020 08:33:15 +0200 Subject: [PATCH 064/192] Keep flag to allow screenshots in Incognito mode @@ -14,10 +14,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 8aa8868ee7d61..2703671751c7e 100644 +index e0b58d652fca4..698135f25d6b7 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -4706,9 +4706,9 @@ +@@ -4890,9 +4890,9 @@ "expiry_milestone": 120 }, { @@ -29,7 +29,7 @@ index 8aa8868ee7d61..2703671751c7e 100644 + "expiry_milestone": -1 // - }, { - "name": "indicate-account-storage-error-in-account-cell", + "name": "info-card-acknowledgement-tracking", -- 2.34.1 diff --git a/bromite/build/patches/Logcat-crash-reports-UI.patch b/bromite/build/patches/Logcat-crash-reports-UI.patch index 36b4f832..8fdf1b18 100644 --- a/bromite/build/patches/Logcat-crash-reports-UI.patch +++ b/bromite/build/patches/Logcat-crash-reports-UI.patch @@ -1,4 +1,4 @@ -From 0a5a71925090349b25fa364ff1113538d5d94107 Mon Sep 17 00:00:00 2001 +From f9b23220074e2b69ec65d7432e3f2bc07fa44a21 Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 15 Jun 2021 11:49:43 +0000 Subject: [PATCH 136/192] Logcat crash reports UI @@ -11,12 +11,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../crash_upload_list_android.h | 1 + chrome/browser/net/chrome_network_delegate.cc | 7 + chrome/browser/ui/BUILD.gn | 1 + - chrome/browser/ui/webui/crashes_ui.cc | 166 ++++++++++++++++-- + chrome/browser/ui/webui/crashes_ui.cc | 176 ++++++++++++++++-- .../crash/core/browser/crashes_ui_util.cc | 4 + .../crash/core/browser/crashes_ui_util.h | 2 + .../crash/core/browser/resources/crashes.css | 67 ++++++- .../crash/core/browser/resources/crashes.html | 17 ++ - .../crash/core/browser/resources/crashes.ts | 94 ++++------ + .../crash/core/browser/resources/crashes.ts | 94 +++------- components/crash_strings.grdp | 22 ++- .../minidump_uploader/CrashFileManager.java | 7 +- .../MinidumpUploadCallable.java | 21 +-- @@ -24,7 +24,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../upload_list/text_log_upload_list.cc | 1 + components/upload_list/upload_list.cc | 14 ++ components/upload_list/upload_list.h | 9 + - 18 files changed, 375 insertions(+), 134 deletions(-) + 18 files changed, 385 insertions(+), 134 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/crash/MinidumpUploadServiceImpl.java index 03e9446c93261..7185568b7794d 100644 @@ -163,10 +163,10 @@ index 136bb81baa984..8998b3680e053 100644 std::vector all_download_dirs = base::android::GetAllPrivateDownloadsDirectories(); diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn -index 1aeb7411a92d5..30d4d465ee354 100644 +index 4ce6bd61ca6f9..596b4e0d58b4b 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -751,6 +751,7 @@ static_library("ui") { +@@ -658,6 +658,7 @@ static_library("ui") { "//third_party/re2", "//third_party/webrtc_overrides:webrtc_component", "//third_party/zlib", @@ -175,10 +175,10 @@ index 1aeb7411a92d5..30d4d465ee354 100644 "//ui/base", "//ui/base:data_exchange", diff --git a/chrome/browser/ui/webui/crashes_ui.cc b/chrome/browser/ui/webui/crashes_ui.cc -index d555af6b7d22c..5aa1fc7b4558c 100644 +index d555af6b7d22c..6f0e451ceeec5 100644 --- a/chrome/browser/ui/webui/crashes_ui.cc +++ b/chrome/browser/ui/webui/crashes_ui.cc -@@ -37,6 +37,17 @@ +@@ -37,6 +37,19 @@ #include "google_apis/gaia/gaia_auth_util.h" #include "ui/base/resource/resource_bundle.h" @@ -189,14 +189,16 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 +#include "base/files/scoped_temp_dir.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" ++#if BUILDFLAG(IS_ANDROID) +#include "base/android/path_utils.h" ++#endif +#include "net/base/filename_util.h" +#include "third_party/zlib/google/zip.h" + #if BUILDFLAG(IS_CHROMEOS_ASH) #include "chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.h" #endif -@@ -72,6 +83,10 @@ void CreateAndAddCrashesUIHTMLSource(Profile* profile) { +@@ -72,6 +85,10 @@ void CreateAndAddCrashesUIHTMLSource(Profile* profile) { source->SetDefaultResource(IDR_CRASH_CRASHES_HTML); } @@ -207,7 +209,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 //////////////////////////////////////////////////////////////////////////////// // // CrashesDOMHandler -@@ -81,7 +96,7 @@ void CreateAndAddCrashesUIHTMLSource(Profile* profile) { +@@ -81,7 +98,7 @@ void CreateAndAddCrashesUIHTMLSource(Profile* profile) { // The handler for Javascript messages for the chrome://crashes/ page. class CrashesDOMHandler : public WebUIMessageHandler { public: @@ -216,7 +218,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 CrashesDOMHandler(const CrashesDOMHandler&) = delete; CrashesDOMHandler& operator=(const CrashesDOMHandler&) = delete; -@@ -97,6 +112,8 @@ class CrashesDOMHandler : public WebUIMessageHandler { +@@ -97,6 +114,8 @@ class CrashesDOMHandler : public WebUIMessageHandler { // Asynchronously fetches the list of crashes. Called from JS. void HandleRequestCrashes(const base::Value::List& args); @@ -225,7 +227,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 #if BUILDFLAG(IS_CHROMEOS_ASH) // Asynchronously triggers crash uploading. Called from JS. void HandleRequestUploads(const base::Value::List& args); -@@ -108,13 +125,26 @@ class CrashesDOMHandler : public WebUIMessageHandler { +@@ -108,14 +127,30 @@ class CrashesDOMHandler : public WebUIMessageHandler { // Asynchronously requests a user triggered upload. Called from JS. void HandleRequestSingleCrashUpload(const base::Value::List& args); @@ -252,9 +254,13 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 + : list_available_(false), first_load_(true), + web_contents_(web_contents) { upload_list_ = CreateCrashUploadList(); ++#if !BUILDFLAG(IS_ANDROID) ++ web_contents_ = nullptr; ++#endif } -@@ -141,10 +171,24 @@ void CrashesDOMHandler::RegisterMessages() { + CrashesDOMHandler::~CrashesDOMHandler() { +@@ -141,10 +176,24 @@ void CrashesDOMHandler::RegisterMessages() { crash_reporter::kCrashesUIRequestSingleCrashUpload, base::BindRepeating(&CrashesDOMHandler::HandleRequestSingleCrashUpload, base::Unretained(this))); @@ -279,7 +285,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 if (first_load_) { first_load_ = false; if (list_available_) -@@ -176,8 +220,7 @@ void CrashesDOMHandler::OnUploadListAvailable() { +@@ -176,8 +225,7 @@ void CrashesDOMHandler::OnUploadListAvailable() { } void CrashesDOMHandler::UpdateUI() { @@ -289,7 +295,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 bool system_crash_reporter = false; #if BUILDFLAG(IS_CHROMEOS) -@@ -225,14 +268,112 @@ void CrashesDOMHandler::UpdateUI() { +@@ -225,14 +273,117 @@ void CrashesDOMHandler::UpdateUI() { void CrashesDOMHandler::HandleRequestSingleCrashUpload( const base::Value::List& args) { @@ -305,6 +311,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 +} + +std::string CrashesDOMHandler::RequestSingleUpload(const std::string& local_id) const { ++#if BUILDFLAG(IS_ANDROID) + // get crash file path + std::string info_file_path = upload_list_->GetFilePathByLocalId(local_id); + if (info_file_path.empty()) { @@ -354,13 +361,14 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 + if (result) { + return zip_file_name.value(); + } -+ ++#endif + LOG(ERROR) << "Crash report: cannot create zip content"; + return std::string(); +} + +void CrashesDOMHandler::RequestSingleUploadCallback(const std::string& local_id, + const std::string& file_name) { ++#if BUILDFLAG(IS_ANDROID) + if (!file_name.empty()) { + upload_list_->RequestSingleUploadAsync(local_id); + @@ -368,6 +376,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 + web_contents_->GetController().LoadURL( + net::FilePathToFileURL(file_path), {}, {}, {}); + } ++#endif +} + +void CrashesDOMHandler::HandleRequestNewExtraction( @@ -392,6 +401,7 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 +} + +void CrashesDOMHandler::ClearAll() { ++#if BUILDFLAG(IS_ANDROID) + // get android crash report dir + base::FilePath cache_dir; + base::android::GetCacheDirectory(&cache_dir); @@ -405,10 +415,11 @@ index d555af6b7d22c..5aa1fc7b4558c 100644 + // remove all files, don't care for result + base::DeleteFile(full_name); + } ++#endif } } // namespace -@@ -244,7 +385,8 @@ void CrashesDOMHandler::HandleRequestSingleCrashUpload( +@@ -244,7 +395,8 @@ void CrashesDOMHandler::HandleRequestSingleCrashUpload( /////////////////////////////////////////////////////////////////////////////// CrashesUI::CrashesUI(content::WebUI* web_ui) : WebUIController(web_ui) { diff --git a/bromite/build/patches/Modify-default-preferences.patch b/bromite/build/patches/Modify-default-preferences.patch index 31a46121..ae047d2f 100644 --- a/bromite/build/patches/Modify-default-preferences.patch +++ b/bromite/build/patches/Modify-default-preferences.patch @@ -1,4 +1,4 @@ -From 2c9237200fc5c43d8e1bd1f530e4510bc2775116 Mon Sep 17 00:00:00 2001 +From 163dbb0c7e537b0358a3b682d463d7ff0c506c4a Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 2 May 2020 00:25:25 +0200 Subject: [PATCH 030/192] Modify default preferences @@ -29,7 +29,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html create mode 100644 components/bookmarks/browser/features.h diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 20160807af8ef..56b04efa90a61 100644 +index 6dd44c4958248..9f77b18dcbb73 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -76,6 +76,7 @@ @@ -38,9 +38,9 @@ index 20160807af8ef..56b04efa90a61 100644 #include "components/autofill/core/common/autofill_util.h" +#include "components/bookmarks/browser/features.h" #include "components/browser_sync/browser_sync_switches.h" - #include "components/browser_ui/site_settings/android/features.h" #include "components/browsing_data/core/features.h" -@@ -6388,6 +6389,11 @@ const FeatureEntry kFeatureEntries[] = { + #include "components/commerce/core/commerce_feature_list.h" +@@ -6486,6 +6487,11 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(features::kQuickSettingsPWANotifications)}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) @@ -53,7 +53,7 @@ index 20160807af8ef..56b04efa90a61 100644 flag_descriptions::kTabGroupsSaveDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kTabGroupsSave)}, diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc -index 2c0f2f93e7f75..f7e962d200aaf 100644 +index 1f282d686d46a..5e072854f05c1 100644 --- a/chrome/browser/background/background_mode_manager.cc +++ b/chrome/browser/background/background_mode_manager.cc @@ -359,7 +359,7 @@ BackgroundModeManager::~BackgroundModeManager() { @@ -66,10 +66,10 @@ index 2c0f2f93e7f75..f7e962d200aaf 100644 void BackgroundModeManager::RegisterProfile(Profile* profile) { diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index c9d9ffa8d77a3..575a03c861f02 100644 +index da2cf79ceae39..cc9cac35fcfed 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -1590,7 +1590,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs( +@@ -1599,7 +1599,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs( void ChromeContentBrowserClient::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(prefs::kDisable3DAPIs, false); @@ -79,10 +79,10 @@ index c9d9ffa8d77a3..575a03c861f02 100644 // user policy in addition to the same named ones in Local State (which are // used for mapping the command-line flags). diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 55bd823ade3ea..693f7e74241d0 100644 +index eaa2bde8998e8..c0f92c31f481b 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3224,6 +3224,10 @@ const char kTabGroupsContinuationAndroidName[] = "Tab Groups Continuation"; +@@ -3290,6 +3290,10 @@ const char kTabGroupsContinuationAndroidName[] = "Tab Groups Continuation"; const char kTabGroupsContinuationAndroidDescription[] = "Allows users to access continuation features in Tab Group on phones."; @@ -94,10 +94,10 @@ index 55bd823ade3ea..693f7e74241d0 100644 const char kTabGroupsSaveDescription[] = "Enables users to explicitly save and recall tab groups."; diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 370348d8ed4a1..4caa9120f4b66 100644 +index 5b2028c8146d4..e408454306339 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1829,6 +1829,9 @@ extern const char kCommerceMerchantViewerAndroidDescription[]; +@@ -1881,6 +1881,9 @@ extern const char kCommerceMerchantViewerAndroidDescription[]; extern const char kTabGroupsContinuationAndroidName[]; extern const char kTabGroupsContinuationAndroidDescription[]; @@ -108,10 +108,10 @@ index 370348d8ed4a1..4caa9120f4b66 100644 extern const char kTabGroupsSaveDescription[]; diff --git a/chrome/browser/prefetch/prefetch_prefs.h b/chrome/browser/prefetch/prefetch_prefs.h -index 02f682dc1eba1..2f36fa7fd1c08 100644 +index 482b0415a8c9c..d6931fabfc95d 100644 --- a/chrome/browser/prefetch/prefetch_prefs.h +++ b/chrome/browser/prefetch/prefetch_prefs.h -@@ -28,7 +28,7 @@ enum class NetworkPredictionOptions { +@@ -23,7 +23,7 @@ enum class NetworkPredictionOptions { kWifiOnlyDeprecated = 1, kDisabled = 2, kExtended = 3, @@ -147,7 +147,7 @@ index be0cc51c06486..28a616630afb2 100644

diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc -index 31af7b49a5d3f..672a78295f726 100644 +index 28732e323ec2e..ad96d0485b376 100644 --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc @@ -77,11 +77,11 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { @@ -166,21 +166,21 @@ index 31af7b49a5d3f..672a78295f726 100644 registry->RegisterDictionaryPref(prefs::kBrowserWindowPlacementPopup); registry->RegisterDictionaryPref(prefs::kAppWindowPlacement); diff --git a/components/bookmarks/browser/BUILD.gn b/components/bookmarks/browser/BUILD.gn -index bd2ce0dc2980b..d44e6e82da8fa 100644 +index 87bdfdf26fdc5..0c648649cb195 100644 --- a/components/bookmarks/browser/BUILD.gn +++ b/components/bookmarks/browser/BUILD.gn -@@ -19,6 +19,7 @@ static_library("browser") { - "bookmark_storage.h", +@@ -20,6 +20,7 @@ static_library("browser") { "bookmark_undo_provider.h", "bookmark_utils.h", + "bookmark_uuids.h", + "features.h", "history_bookmark_model.h", "model_loader.h", "scoped_group_bookmark_actions.h", -@@ -40,6 +41,7 @@ static_library("browser") { - "bookmark_node_data.cc", +@@ -42,6 +43,7 @@ static_library("browser") { "bookmark_storage.cc", "bookmark_utils.cc", + "bookmark_uuids.cc", + "features.cc", "model_loader.cc", "scoped_group_bookmark_actions.cc", @@ -260,10 +260,10 @@ index 0000000000000..5aa1e1ffce624 + +#endif // COMPONENTS_BOOKMARKS_BROWSER_FEATURES_H_ diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc -index 512cabe0e75e1..e9abbe1c606d5 100644 +index 30b49ba374407..c2e63e4c40fba 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc -@@ -235,7 +235,7 @@ void ContentSettingsRegistry::Init() { +@@ -237,7 +237,7 @@ void ContentSettingsRegistry::Init() { ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); Register(ContentSettingsType::BACKGROUND_SYNC, "background-sync", @@ -272,7 +272,7 @@ index 512cabe0e75e1..e9abbe1c606d5 100644 /*allowlisted_schemes=*/{}, /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK}, WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, -@@ -326,7 +326,7 @@ void ContentSettingsRegistry::Init() { +@@ -337,7 +337,7 @@ void ContentSettingsRegistry::Init() { // TODO(crbug.com/904439): Update this to "SECURE_ONLY" once // DeviceOrientationEvents and DeviceMotionEvents are only fired in secure // contexts. @@ -282,10 +282,10 @@ index 512cabe0e75e1..e9abbe1c606d5 100644 /*valid_settings=*/{CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK}, WebsiteSettingsInfo::TOP_ORIGIN_ONLY_SCOPE, diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc -index 5ae664478680d..100cd919a8323 100644 +index 442fc281b6cbf..a84422b6f36a3 100644 --- a/components/content_settings/core/browser/cookie_settings.cc +++ b/components/content_settings/core/browser/cookie_settings.cc -@@ -73,7 +73,7 @@ void CookieSettings::RegisterProfilePrefs( +@@ -72,7 +72,7 @@ void CookieSettings::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterIntegerPref( prefs::kCookieControlsMode, @@ -308,10 +308,10 @@ index 3196befc8c400..2caca44e2d4e7 100644 } diff --git a/components/safe_browsing/core/common/safe_browsing_prefs.cc b/components/safe_browsing/core/common/safe_browsing_prefs.cc -index 46efd8f5202cc..d6fd2d70a0a60 100644 +index 82c62b25c6bbb..1b728133e66de 100644 --- a/components/safe_browsing/core/common/safe_browsing_prefs.cc +++ b/components/safe_browsing/core/common/safe_browsing_prefs.cc -@@ -239,13 +239,13 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { +@@ -258,13 +258,13 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref( prefs::kSafeBrowsingSawInterstitialScoutReporting, false); registry->RegisterBooleanPref( @@ -344,10 +344,10 @@ index 1558c2342710e..8c687d3133f1f 100644 } diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc -index 88c273721354f..7209e4ebaad97 100644 +index dcc43d5006256..ae80cfe4aec94 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -946,8 +946,8 @@ const base::FeatureParam kInterestGroupStorageMaxOpsBeforeMaintenance{ +@@ -997,8 +997,8 @@ const base::FeatureParam kInterestGroupStorageMaxOpsBeforeMaintenance{ // the attribute. Note: At present, only iframes with origin-restricted // sandboxes are isolated. BASE_FEATURE(kIsolateSandboxedIframes, diff --git a/bromite/build/patches/Move-navigation-bar-to-bottom.patch b/bromite/build/patches/Move-navigation-bar-to-bottom.patch index 590e0134..c5cff734 100644 --- a/bromite/build/patches/Move-navigation-bar-to-bottom.patch +++ b/bromite/build/patches/Move-navigation-bar-to-bottom.patch @@ -1,4 +1,4 @@ -From 8f7eabd2e441b12a3ead5dad9c648269dfb22421 Mon Sep 17 00:00:00 2001 +From bcf94915646940247e789bc7441926dbdc13f641 Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 18 Jan 2022 07:43:32 +0000 Subject: [PATCH 168/192] Move navigation bar to bottom @@ -57,7 +57,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/flag_descriptions.cc | 4 + chrome/browser/flag_descriptions.h | 3 + .../flags/android/cached_feature_flags.cc | 18 +++++ - .../flags/android/chrome_feature_list.cc | 2 + + .../flags/android/chrome_feature_list.cc | 6 +- .../browser/flags/CachedFeatureFlags.java | 18 +++++ .../chrome/browser/flags/CachedFlag.java | 6 ++ .../browser/flags/ChromeFeatureList.java | 5 ++ @@ -70,7 +70,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../suggestions/AutocompleteCoordinator.java | 16 +++- .../suggestions/AutocompleteMediator.java | 7 +- .../DropdownItemViewInfoListManager.java | 15 +++- - .../OmniboxSuggestionsDropdown.java | 28 ++++++- + .../OmniboxSuggestionsDropdown.java | 30 +++++-- .../OmniboxSuggestionsDropdownEmbedder.java | 9 +++ .../strings/android_chrome_strings.grd | 6 ++ chrome/browser/ui/android/toolbar/BUILD.gn | 1 + @@ -89,10 +89,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../accessibility/AccessibilitySettings.java | 16 ++++ .../AccessibilitySettingsDelegate.java | 6 ++ .../render_widget_host_view_android.cc | 3 + - 76 files changed, 899 insertions(+), 64 deletions(-) + 76 files changed, 902 insertions(+), 67 deletions(-) diff --git a/cc/base/features.cc b/cc/base/features.cc -index 4cb3794305719..47030a04e44cd 100644 +index b62ce979d3fde..68f1816eb70ff 100644 --- a/cc/base/features.cc +++ b/cc/base/features.cc @@ -36,6 +36,10 @@ BASE_FEATURE(kSynchronizedScrolling, @@ -107,7 +107,7 @@ index 4cb3794305719..47030a04e44cd 100644 "RemoveMobileViewportDoubleTap", base::FEATURE_ENABLED_BY_DEFAULT); diff --git a/cc/base/features.h b/cc/base/features.h -index 0834191e7024c..38e1bbca44f99 100644 +index 5c3dfc97aadfa..545a3a4458d42 100644 --- a/cc/base/features.h +++ b/cc/base/features.h @@ -15,6 +15,7 @@ namespace features { @@ -143,10 +143,10 @@ index 643aa1058df3b..361fe75776964 100644 } diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc -index 256f599f8ad93..bdc8657c46821 100644 +index cc5461a832fed..fd90a7eed0295 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc -@@ -4213,6 +4213,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { +@@ -4247,6 +4247,9 @@ bool LayerTreeHostImpl::AnimateBrowserControls(base::TimeTicks time) { if (scroll_delta.IsZero()) return false; @@ -157,10 +157,10 @@ index 256f599f8ad93..bdc8657c46821 100644 // being fixed while the browser controls animate. viewport().ScrollBy(scroll_delta, diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -index 4dfd44ed96240..2bd881147fa55 100644 +index 45d95138c5e0c..62e39bb45c060 100644 --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java +++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -@@ -105,6 +105,9 @@ import org.chromium.ui.util.ColorUtils; +@@ -108,6 +108,9 @@ import org.chromium.ui.util.ColorUtils; import java.util.List; @@ -170,7 +170,7 @@ index 4dfd44ed96240..2bd881147fa55 100644 /** The mediator implements the logic to interact with the surfaces and caller. */ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View.OnClickListener, StartSurface.OnTabSelectingListener, BackPressHandler, -@@ -1378,6 +1381,8 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. +@@ -1390,6 +1393,8 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. } private void setTopMargin(int topMargin) { @@ -180,10 +180,10 @@ index 4dfd44ed96240..2bd881147fa55 100644 } diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java -index ce69116eaa90b..700a9308a54aa 100644 +index 98206c9212c65..4e07d82f6f06b 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiCoordinator.java -@@ -44,6 +44,7 @@ import org.chromium.components.feature_engagement.FeatureConstants; +@@ -45,6 +45,7 @@ import org.chromium.components.feature_engagement.FeatureConstants; import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; @@ -191,7 +191,7 @@ index ce69116eaa90b..700a9308a54aa 100644 import java.util.List; -@@ -139,7 +140,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T +@@ -143,7 +144,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T @Override public void initializeWithNative(Activity activity, BottomControlsCoordinator.BottomControlsVisibilityController visibilityController, @@ -200,8 +200,8 @@ index ce69116eaa90b..700a9308a54aa 100644 + TopUiThemeColorProvider topUiThemeColorProvider, ObservableSupplier tabSupplier) { try (TraceEvent e = TraceEvent.scoped("TabGroupUiCoordinator.initializeWithNative")) { mTabStripCoordinator = new TabListCoordinator(TabListCoordinator.TabListMode.STRIP, - mContext, mTabModelSelector, null, null, false, null, null, -@@ -176,7 +178,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T + mContext, mBrowserControlsStateProvider, mTabModelSelector, null, null, false, +@@ -180,7 +182,8 @@ public class TabGroupUiCoordinator implements TabGroupUiMediator.ResetHandler, T mMediator = new TabGroupUiMediator(mActivity, visibilityController, this, mModel, mTabModelSelector, mTabCreatorManager, mLayoutStateProviderSupplier, mIncognitoStateProvider, mTabGridDialogControllerSupplier, @@ -212,7 +212,7 @@ index ce69116eaa90b..700a9308a54aa 100644 TabGroupUtils.startObservingForCreationIPH(); diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java -index 9afde23aaa92a..2c7cc971abc11 100644 +index fa3ddb43ddf8c..983ce7dab9b20 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiMediator.java @@ -47,6 +47,12 @@ import org.chromium.url.GURL; @@ -281,7 +281,7 @@ index 9afde23aaa92a..2c7cc971abc11 100644 if (TabUiFeatureUtilities.isTabGroupsAndroidEnabled(mContext) && getTabsToShowForId(lastId).contains(tab)) { return; -@@ -204,6 +236,7 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -200,6 +232,7 @@ public class TabGroupUiMediator implements BackPressHandler { return; } resetTabStripWithRelatedTabsForId(currentTab.getId()); @@ -289,7 +289,7 @@ index 9afde23aaa92a..2c7cc971abc11 100644 } @Override -@@ -319,6 +352,8 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -315,6 +348,8 @@ public class TabGroupUiMediator implements BackPressHandler { resetTabStripWithRelatedTabsForId(tab.getId()); } @@ -298,7 +298,7 @@ index 9afde23aaa92a..2c7cc971abc11 100644 mBackPressStateSupplier = new ObservableSupplierImpl<>(); if (mTabGridDialogControllerSupplier != null) { mTabGridDialogControllerSupplier.onAvailable(controller -> { -@@ -332,6 +367,18 @@ public class TabGroupUiMediator implements BackPressHandler { +@@ -328,6 +363,18 @@ public class TabGroupUiMediator implements BackPressHandler { mModel.set(TabGroupUiProperties.LEFT_BUTTON_DRAWABLE_ID, drawableId); } @@ -408,18 +408,18 @@ index d4a237c002648..531dfe9a452bc 100644 } } diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java -index dcb46212993f5..4b6fdfaa3b64f 100644 +index 7cb82d3fecf9f..c1f10e73fb082 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java -@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.tasks.tab_management; - import static org.chromium.chrome.browser.tasks.tab_management.TabListModel.CardProperties.CARD_TYPE; +@@ -8,6 +8,7 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabListModel.Card + import android.app.Activity; import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -@@ -49,6 +50,9 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; +@@ -51,6 +52,9 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; import org.chromium.ui.widget.ViewLookupCachingFrameLayout; @@ -429,9 +429,9 @@ index dcb46212993f5..4b6fdfaa3b64f 100644 import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; -@@ -98,6 +102,74 @@ public class TabListCoordinator - private ItemTouchHelper mItemTouchHelper; - private OnItemTouchListener mOnItemTouchListener; +@@ -108,6 +112,74 @@ public class TabListCoordinator + private int mEmptyStateSubheadingResId; + private boolean mIsEmptyViewInitialized; + public class GridLayoutManagerDockBottom extends GridLayoutManager { + Context mContext; @@ -504,7 +504,7 @@ index dcb46212993f5..4b6fdfaa3b64f 100644 /** * Construct a coordinator for UI that shows a list of tabs. * @param mode Modes of showing the list of tabs. Can be used in GRID or STRIP. -@@ -246,6 +318,12 @@ public class TabListCoordinator +@@ -284,6 +356,12 @@ public class TabListCoordinator if (mMode == TabListMode.GRID) { GridLayoutManager gridLayoutManager = new GridLayoutManager(context, GRID_LAYOUT_SPAN_COUNT_COMPACT); @@ -517,7 +517,7 @@ index dcb46212993f5..4b6fdfaa3b64f 100644 mRecyclerView.setLayoutManager(gridLayoutManager); mMediator.registerOrientationListener(gridLayoutManager); mMediator.updateSpanCount( -@@ -507,6 +585,9 @@ public class TabListCoordinator +@@ -561,6 +639,9 @@ public class TabListCoordinator void prepareTabSwitcherView() { registerLayoutChangeListener(); mRecyclerView.prepareTabSwitcherView(); @@ -528,10 +528,10 @@ index dcb46212993f5..4b6fdfaa3b64f 100644 } diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java -index 56c60cf56f111..ed7982b489633 100644 +index 80931b0081c5f..d954df66f4fd0 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java -@@ -40,6 +40,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; +@@ -39,6 +39,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.chromium.base.Log; @@ -539,7 +539,7 @@ index 56c60cf56f111..ed7982b489633 100644 import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.tab_ui.R; -@@ -69,6 +70,8 @@ class TabListRecyclerView +@@ -68,6 +69,8 @@ class TabListRecyclerView public static final long BASE_ANIMATION_DURATION_MS = 218; public static final long FINAL_FADE_IN_DURATION_MS = 50; @@ -548,7 +548,7 @@ index 56c60cf56f111..ed7982b489633 100644 /** * Field trial parameter for downsampling scaling factor. */ -@@ -250,6 +253,7 @@ class TabListRecyclerView +@@ -265,6 +268,7 @@ class TabListRecyclerView ? FINAL_FADE_IN_DURATION_MS : BASE_ANIMATION_DURATION_MS; @@ -556,7 +556,7 @@ index 56c60cf56f111..ed7982b489633 100644 setAlpha(0); setVisibility(View.VISIBLE); mFadeInAnimator = ObjectAnimator.ofFloat(this, View.ALPHA, 1); -@@ -299,6 +303,11 @@ class TabListRecyclerView +@@ -314,6 +318,11 @@ class TabListRecyclerView } void setShadowVisibility(boolean shouldShowShadow) { @@ -568,7 +568,7 @@ index 56c60cf56f111..ed7982b489633 100644 if (mShadowImageView == null) { Context context = getContext(); mShadowImageView = new ImageView(context); -@@ -311,7 +320,10 @@ class TabListRecyclerView +@@ -326,7 +335,10 @@ class TabListRecyclerView if (getParent() instanceof FrameLayout) { // Add shadow for grid tab switcher. FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( @@ -580,7 +580,7 @@ index 56c60cf56f111..ed7982b489633 100644 mShadowImageView.setLayoutParams(params); mShadowImageView.setTranslationY(mShadowTopOffset); FrameLayout parent = (FrameLayout) getParent(); -@@ -339,6 +351,10 @@ class TabListRecyclerView +@@ -354,6 +366,10 @@ class TabListRecyclerView void setShadowTopOffset(int shadowTopOffset) { mShadowTopOffset = shadowTopOffset; @@ -591,7 +591,7 @@ index 56c60cf56f111..ed7982b489633 100644 if (mShadowImageView != null && getParent() instanceof FrameLayout) { // Since the shadow has no functionality, other than just existing visually, we can use -@@ -535,6 +551,7 @@ class TabListRecyclerView +@@ -550,6 +566,7 @@ class TabListRecyclerView mListener.finishedHiding(); } }); @@ -600,18 +600,18 @@ index 56c60cf56f111..ed7982b489633 100644 mFadeOutAnimator.start(); if (!animate) mFadeOutAnimator.end(); diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java -index 033f529d97a33..83b8bbf3314be 100644 +index 88116a03bda64..4736ab00641b0 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java -@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; +@@ -43,6 +43,7 @@ import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider + import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl; + import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; import org.chromium.chrome.browser.flags.ChromeFeatureList; ++import org.chromium.chrome.browser.flags.CachedFeatureFlags; import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthController; import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthManager; -+import org.chromium.chrome.browser.flags.CachedFeatureFlags; - import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher; - import org.chromium.chrome.browser.price_tracking.PriceTrackingUtilities; - import org.chromium.chrome.browser.tab.Tab; -@@ -498,11 +499,22 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView + import org.chromium.chrome.browser.layouts.LayoutStateProvider; +@@ -522,11 +523,22 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView updateTopControlsProperties(); mContainerViewModel.set( BOTTOM_CONTROLS_HEIGHT, browserControlsStateProvider.getBottomControlsHeight()); @@ -634,7 +634,7 @@ index 033f529d97a33..83b8bbf3314be 100644 if (backPressManager != null && BackPressManager.isEnabled()) { assert !mIsStartSurfaceEnabled || mIsStartSurfaceRefactorEnabled; backPressManager.addHandler(this, BackPressHandler.Type.TAB_SWITCHER); -@@ -625,6 +637,10 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView +@@ -647,6 +659,10 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView final int contentOffset = mBrowserControlsStateProvider.getContentOffset(); mContainerViewModel.set(TOP_MARGIN, contentOffset); @@ -723,10 +723,10 @@ index 7e35ced51b523..168965d4012cd 100644 public void addExtraPreferences(PreferenceFragmentCompat fragment) { if (ImageDescriptionsController.getInstance().shouldShowImageDescriptionsMenuItem()) { 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 -index 29470425403e0..a4df8fd41de18 100644 +index dd309ae5dcfd9..c5dcb677ce016 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java -@@ -254,6 +254,9 @@ import java.util.ArrayList; +@@ -253,6 +253,9 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -736,7 +736,7 @@ index 29470425403e0..a4df8fd41de18 100644 /** * A {@link AsyncInitializationActivity} that builds and manages a {@link CompositorViewHolder} * and associated classes. -@@ -770,6 +773,16 @@ public abstract class ChromeActivity +@@ -785,6 +788,16 @@ public abstract class ChromeActivity int toolbarLayoutId = getToolbarLayoutId(); if (toolbarLayoutId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) { controlContainer.initWithToolbar(toolbarLayoutId); @@ -754,7 +754,7 @@ index 29470425403e0..a4df8fd41de18 100644 } onInitialLayoutInflationComplete(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java -index 70318502dbd34..0574978d5e73f 100644 +index 59cac0792cbb0..3f5e2509cf4f1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java @@ -90,6 +90,8 @@ import org.chromium.ui.base.WindowAndroid; @@ -766,7 +766,7 @@ index 70318502dbd34..0574978d5e73f 100644 import java.util.ArrayList; import java.util.HashSet; -@@ -332,6 +334,10 @@ public class CompositorViewHolder extends FrameLayout +@@ -321,6 +323,10 @@ public class CompositorViewHolder extends FrameLayout @Override public void setCurrentTouchEventOffsets(float top) { EventForwarder forwarder = getEventForwarder(); @@ -777,7 +777,7 @@ index 70318502dbd34..0574978d5e73f 100644 if (forwarder != null) forwarder.setCurrentTouchEventOffsets(0, top); } -@@ -907,6 +913,9 @@ public class CompositorViewHolder extends FrameLayout +@@ -905,6 +911,9 @@ public class CompositorViewHolder extends FrameLayout int keyboardInset = mApplicationBottomInsetSupplier != null ? mApplicationBottomInsetSupplier.get().webContentsHeightInset : 0; @@ -788,7 +788,7 @@ index 70318502dbd34..0574978d5e73f 100644 int viewportInsets = controlsInsets + keyboardInset; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java -index 7fe3a533bfdd6..5b778a3b537eb 100644 +index aed800132af68..04b75df090a13 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChrome.java @@ -43,6 +43,8 @@ import org.chromium.components.browser_ui.widget.gesture.SwipeGestureListener.Sw @@ -800,7 +800,7 @@ index 7fe3a533bfdd6..5b778a3b537eb 100644 import java.util.List; -@@ -253,7 +255,10 @@ public class LayoutManagerChrome +@@ -261,7 +263,10 @@ public class LayoutManagerChrome @Override public SwipeHandler createToolbarSwipeHandler(boolean supportSwipeDown) { @@ -812,7 +812,7 @@ index 7fe3a533bfdd6..5b778a3b537eb 100644 } @Override -@@ -488,9 +493,11 @@ public class LayoutManagerChrome +@@ -496,9 +501,11 @@ public class LayoutManagerChrome private static final float SWIPE_RANGE_DEG = 25; private final boolean mSupportSwipeDown; @@ -825,7 +825,7 @@ index 7fe3a533bfdd6..5b778a3b537eb 100644 } @Override -@@ -522,6 +529,9 @@ public class LayoutManagerChrome +@@ -530,6 +537,9 @@ public class LayoutManagerChrome && mScrollDirection == ScrollDirection.DOWN) { RecordUserAction.record("MobileToolbarSwipeOpenStackView"); showLayout(LayoutType.TAB_SWITCHER, true); @@ -835,7 +835,7 @@ index 7fe3a533bfdd6..5b778a3b537eb 100644 } else if (mScrollDirection == ScrollDirection.LEFT || mScrollDirection == ScrollDirection.RIGHT) { startShowing(mToolbarSwipeLayout, true); -@@ -568,6 +578,8 @@ public class LayoutManagerChrome +@@ -576,6 +586,8 @@ public class LayoutManagerChrome direction = ScrollDirection.RIGHT; } else if (swipeAngle < 270 + SWIPE_RANGE_DEG && swipeAngle > 270 - SWIPE_RANGE_DEG) { direction = ScrollDirection.DOWN; @@ -844,20 +844,20 @@ index 7fe3a533bfdd6..5b778a3b537eb 100644 } return direction; -@@ -581,7 +593,7 @@ public class LayoutManagerChrome +@@ -589,7 +601,7 @@ public class LayoutManagerChrome return false; } - if (direction == ScrollDirection.DOWN) { + if (direction == ScrollDirection.DOWN || direction == ScrollDirection.UP) { - boolean isAccessibility = ChromeAccessibilityUtil.get().isAccessibilityEnabled(); + boolean isAccessibility = + DeviceClassManager.enableAccessibilityLayout(mHost.getContext()); return isTabSwitcherReady() && !isAccessibility; - } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java -index f02c82aab67d2..90326f225fed0 100644 +index 568ef23785037..06d5b6acb0c59 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerChromeTablet.java -@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer; +@@ -29,6 +29,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer; import org.chromium.chrome.features.start_surface.StartSurface; import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; @@ -865,7 +865,7 @@ index f02c82aab67d2..90326f225fed0 100644 import java.util.concurrent.Callable; -@@ -96,7 +97,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { +@@ -100,7 +101,8 @@ public class LayoutManagerChromeTablet extends LayoutManagerChrome { () -> mLayerTitleCache, tabModelStartupInfoSupplier, lifecycleDispatcher, multiInstanceManager, @@ -916,10 +916,10 @@ index 294336f035dc6..9427e469ae755 100644 } else if (mRightToolbarOverlay != null) { mRightToolbarOverlay.setManualVisibility(false); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -index 8019f907a9919..f30020d3b17ca 100644 +index 1f54d2d460251..f49ab8625e42a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java -@@ -514,7 +514,7 @@ public class StripLayoutHelper implements StripLayoutTab.StripLayoutTabDelegate +@@ -521,7 +521,7 @@ public class StripLayoutHelper implements StripLayoutTab.StripLayoutTabDelegate // position 0 is on the left. Account for that in the offset calculation. boolean isRtl = LocalizationUtils.isLayoutRtl(); boolean useUnadjustedScrollOffset = isRtl != isLeft; @@ -929,10 +929,10 @@ index 8019f907a9919..f30020d3b17ca 100644 if (offset <= 0.f) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -index 9fa4d80bb2551..8fe57d8609890 100644 +index f49ddd4b12d2c..1ae493f12d2ab 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -61,6 +61,9 @@ import org.chromium.ui.base.LocalizationUtils; +@@ -62,6 +62,9 @@ import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.base.PageTransition; import org.chromium.ui.resources.ResourceManager; import org.chromium.url.GURL; @@ -942,7 +942,7 @@ index 9fa4d80bb2551..8fe57d8609890 100644 import java.util.List; -@@ -151,9 +154,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -166,9 +169,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa private final String mDefaultTitle; private final Supplier mLayerTitleCacheSupplier; @@ -956,7 +956,7 @@ index 9fa4d80bb2551..8fe57d8609890 100644 if (mModelSelectorButton.onDown(x, y)) return; getActiveStripLayoutHelper().onDown(time(), x, y, fromMouse, buttons); } -@@ -171,12 +178,14 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -186,12 +193,14 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa @Override public void drag(float x, float y, float dx, float dy, float tx, float ty) { @@ -971,7 +971,7 @@ index 9fa4d80bb2551..8fe57d8609890 100644 long time = time(); if (mModelSelectorButton.click(x, y)) { mModelSelectorButton.handleClick(time); -@@ -187,11 +196,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -202,11 +211,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa @Override public void fling(float x, float y, float velocityX, float velocityY) { @@ -985,7 +985,7 @@ index 9fa4d80bb2551..8fe57d8609890 100644 getActiveStripLayoutHelper().onLongPress(time(), x, y); } -@@ -253,7 +264,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -283,7 +294,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa Supplier layerTitleCacheSupplier, ObservableSupplier tabModelStartupInfoSupplier, ActivityLifecycleDispatcher lifecycleDispatcher, @@ -995,7 +995,7 @@ index 9fa4d80bb2551..8fe57d8609890 100644 mUpdateHost = updateHost; mLayerTitleCacheSupplier = layerTitleCacheSupplier; mTabStripTreeProvider = new TabStripSceneLayer(context); -@@ -353,6 +365,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -387,6 +399,8 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa mModelSelectorButton, multiInstanceManager, toolbarContainerView); mIncognitoHelper = new StripLayoutHelper(context, managerHost, updateHost, renderHost, true, mModelSelectorButton, multiInstanceManager, toolbarContainerView); @@ -1004,22 +1004,22 @@ index 9fa4d80bb2551..8fe57d8609890 100644 if (tabModelStartupInfoSupplier != null) { if (tabModelStartupInfoSupplier.hasValue()) { -@@ -443,9 +457,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa - Tab selectedTab = mTabModelSelector.getCurrentModel().getTabAt( - mTabModelSelector.getCurrentModel().index()); - int selectedTabId = selectedTab == null ? TabModel.INVALID_TAB_INDEX : selectedTab.getId(); +@@ -480,9 +494,13 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa + int hoveredTabId = getActiveStripLayoutHelper().getLastHoveredTab() == null + ? TabModel.INVALID_TAB_INDEX + : getActiveStripLayoutHelper().getLastHoveredTab().getId(); + int topControlsHeight = 0; + if (mBrowserControlsManagerSupplier.get() != null) { + topControlsHeight = mBrowserControlsManagerSupplier.get().getTopControlsHeight(); + } mTabStripTreeProvider.pushAndUpdateStrip(this, mLayerTitleCacheSupplier.get(), resourceManager, getActiveStripLayoutHelper().getStripLayoutTabsToRender(), yOffset, -- selectedTabId); -+ selectedTabId, viewport.height(), topControlsHeight); +- selectedTabId, hoveredTabId); ++ selectedTabId, hoveredTabId, viewport.height(), topControlsHeight); return mTabStripTreeProvider; } -@@ -481,7 +499,17 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa +@@ -527,7 +545,17 @@ public class StripLayoutHelperManager implements SceneOverlay, PauseResumeWithNa mIncognitoHelper.onSizeChanged( mWidth, mHeight, orientationChanged, LayoutManagerImpl.time()); @@ -1039,10 +1039,10 @@ index 9fa4d80bb2551..8fe57d8609890 100644 } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/StaticTabSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/StaticTabSceneLayer.java -index 9e90f8ff19701..be9f5ecd6dfb2 100644 +index f5c93dd7efb3e..3d029a2ecf61c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/StaticTabSceneLayer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/StaticTabSceneLayer.java -@@ -12,6 +12,9 @@ import org.chromium.chrome.browser.layouts.scene_layer.SceneLayer; +@@ -13,6 +13,9 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyModel; @@ -1052,7 +1052,7 @@ index 9e90f8ff19701..be9f5ecd6dfb2 100644 /** * A SceneLayer to render a static tab. */ -@@ -45,7 +48,10 @@ public class StaticTabSceneLayer extends SceneLayer { +@@ -46,7 +49,10 @@ public class StaticTabSceneLayer extends SceneLayer { float x = model.get(LayoutTab.RENDER_X) * LayoutTab.sDpToPx; float y = model.get(LayoutTab.CONTENT_OFFSET) + model.get(LayoutTab.RENDER_Y) * LayoutTab.sDpToPx; @@ -1061,9 +1061,9 @@ index 9e90f8ff19701..be9f5ecd6dfb2 100644 + // the page content window never moves, it is fixed at the top + y = 0; + } + // Check isActiveLayout to prevent pushing a TAB_ID for a static layer that may already be + // invalidated by the next layout. StaticTabSceneLayerJni.get().updateTabLayer(mNativePtr, StaticTabSceneLayer.this, - model.get(LayoutTab.TAB_ID), model.get(LayoutTab.CAN_USE_LIVE_TEXTURE), - model.get(LayoutTab.BACKGROUND_COLOR), x, y, diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java index 5c8617646ceb3..99bb58b7c6c56 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java @@ -1104,10 +1104,10 @@ index 5c8617646ceb3..99bb58b7c6c56 100644 TabListSceneLayerJni.get().putTabLayer(mNativePtr, TabListSceneLayer.this, t.getId(), R.id.control_container, R.drawable.tabswitcher_border_frame_shadow, diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java -index 7195eeff3b330..b72c2fafb2162 100644 +index 1fb2704068969..c2e5371895510 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java -@@ -22,6 +22,10 @@ import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; +@@ -21,6 +21,10 @@ import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.resources.ResourceManager; @@ -1118,12 +1118,12 @@ index 7195eeff3b330..b72c2fafb2162 100644 /** * The Java component of what is basically a CC Layer that manages drawing the Tab Strip (which is -@@ -75,9 +79,23 @@ public class TabStripSceneLayer extends SceneOverlayLayer { - */ +@@ -78,9 +82,23 @@ public class TabStripSceneLayer extends SceneOverlayLayer { public void pushAndUpdateStrip(StripLayoutHelperManager layoutHelper, LayerTitleCache layerTitleCache, ResourceManager resourceManager, -- StripLayoutTab[] stripLayoutTabsToRender, float yOffset, int selectedTabId) { -+ StripLayoutTab[] stripLayoutTabsToRender, float yOffset, int selectedTabId, + StripLayoutTab[] stripLayoutTabsToRender, float yOffset, int selectedTabId, +- int hoveredTabId) { ++ int hoveredTabId, + float viewportHeight, int topControlsHeight) { if (mNativePtr == 0) return; - final boolean visible = yOffset > -layoutHelper.getHeight(); @@ -1174,7 +1174,7 @@ index e1eb094ba2413..6e365e7f5e3d5 100644 } else if (!show && getVisibility() != View.GONE && mCurrentAnimation != mAnimationLeave) { nextAnimator = mAnimationLeave; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java -index e1e40fcae6cf7..82d4da599f7f9 100644 +index d83fbb7b162b0..702d601284a19 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java @@ -48,6 +48,9 @@ import org.chromium.ui.util.TokenHolder; @@ -1212,7 +1212,7 @@ index e1e40fcae6cf7..82d4da599f7f9 100644 } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/messages/MessageContainerCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/messages/MessageContainerCoordinator.java -index 28c3aafdbbe69..6181c19e362d7 100644 +index 3efbe45479e39..a68bdb728f98d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/messages/MessageContainerCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/messages/MessageContainerCoordinator.java @@ -18,6 +18,10 @@ import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; @@ -1240,7 +1240,7 @@ index 28c3aafdbbe69..6181c19e362d7 100644 mContainer.setLayoutParams(params); } -@@ -120,6 +129,12 @@ public class MessageContainerCoordinator implements BrowserControlsStateProvider +@@ -129,6 +138,12 @@ public class MessageContainerCoordinator implements BrowserControlsStateProvider /** @return Offset of the message container from the top of the screen. */ private int getContainerTopOffset() { @@ -1254,10 +1254,10 @@ index 28c3aafdbbe69..6181c19e362d7 100644 final Resources res = mContainer.getResources(); return mControlsManager.getContentOffset() diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java -index a56a4a2f5463c..1eaefed632cec 100644 +index 48952ca1a8fe3..0fd2cdbc16feb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/ChromeTabModalPresenter.java -@@ -284,7 +284,7 @@ public class ChromeTabModalPresenter +@@ -282,7 +282,7 @@ public class ChromeTabModalPresenter Resources resources, BrowserControlsStateProvider provider) { int scrimVerticalMargin = resources.getDimensionPixelSize(R.dimen.tab_modal_scrim_vertical_margin); @@ -1267,19 +1267,19 @@ index a56a4a2f5463c..1eaefed632cec 100644 /** diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -index ed7ae289945c4..73fb1fb83a26c 100644 +index b510a7f676ae9..332ae6c1600fe 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -106,6 +106,8 @@ import org.chromium.content_public.browser.NavigationEntry; +@@ -106,6 +106,8 @@ import org.chromium.content_public.browser.NavigationController; + import org.chromium.content_public.browser.NavigationEntry; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; - import org.chromium.ui.mojom.WindowOpenDisposition; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.CachedFeatureFlags; import java.util.List; -@@ -573,10 +575,15 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -580,10 +582,15 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide // + topControlsDistanceToRest| will give the margin for the current animation frame. final int topControlsDistanceToRest = mBrowserControlsStateProvider.getContentOffset() - mBrowserControlsStateProvider.getTopControlsHeight(); @@ -1297,7 +1297,7 @@ index ed7ae289945c4..73fb1fb83a26c 100644 if (topMargin != layoutParams.topMargin || bottomMargin != layoutParams.bottomMargin) { layoutParams.topMargin = topMargin; -@@ -596,7 +603,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -603,7 +610,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide * strip. */ private int getToolbarExtraYOffset() { @@ -1376,10 +1376,10 @@ index 9c027307da180..eaa377a33e5b8 100644 layoutParams.topMargin = topMargin; layoutParams.bottomMargin = bottomMargin; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java -index 8402ef0104175..bf3d9224ed31e 100644 +index 998dbfdace538..f87d4cb79bcb9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java -@@ -85,6 +85,11 @@ import org.chromium.ui.base.WindowDelegate; +@@ -86,6 +86,11 @@ import org.chromium.ui.base.WindowDelegate; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.url.GURL; @@ -1391,7 +1391,7 @@ index 8402ef0104175..bf3d9224ed31e 100644 import java.lang.ref.WeakReference; /** Queries the user's default search engine and shows autocomplete suggestions. */ -@@ -211,6 +216,12 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -212,6 +217,12 @@ public class SearchActivity extends AsyncInitializationActivity mSearchBox = (SearchActivityLocationBarLayout) mContentView.findViewById( R.id.search_location_bar); mAnchorView = mContentView.findViewById(R.id.toolbar); @@ -1404,7 +1404,7 @@ index 8402ef0104175..bf3d9224ed31e 100644 updateAnchorViewLayout(); // Create status bar color controller and assign to search activity. -@@ -236,7 +247,7 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -237,7 +248,7 @@ public class SearchActivity extends AsyncInitializationActivity getOnBackPressedDispatcher().addCallback(this, backPressManager.getCallback()); } // clang-format off @@ -1414,10 +1414,10 @@ index 8402ef0104175..bf3d9224ed31e 100644 mSearchBoxDataProvider, null, new WindowDelegate(getWindow()), getWindowAndroid(), /*activityTabSupplier=*/() -> null, getModalDialogManagerSupplier(), diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java -index 58dcedbc632f4..73054d3a5dbef 100644 +index fad623956278b..70cb699711e84 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java -@@ -321,6 +321,11 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity +@@ -323,6 +323,11 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity if (fragment instanceof INeedSnackbarManager) { ((INeedSnackbarManager)fragment).setSnackbarManager(mSnackbarManager); } @@ -1430,10 +1430,10 @@ index 58dcedbc632f4..73054d3a5dbef 100644 } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java -index aa792e6e31dae..53f41d631a9d1 100644 +index 2a282036033ac..82f0f5d1c695d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorCoordinator.java -@@ -25,6 +25,11 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; +@@ -24,6 +24,11 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.resources.dynamics.ViewResourceAdapter; @@ -1445,7 +1445,7 @@ index aa792e6e31dae..53f41d631a9d1 100644 /** * The coordinator for a status indicator that is positioned below the status bar and is persistent. * Typically used to relay status, e.g. indicate user is offline. -@@ -174,6 +179,11 @@ public class StatusIndicatorCoordinator { +@@ -173,6 +178,11 @@ public class StatusIndicatorCoordinator { private void initialize() { final ViewStub stub = mActivity.findViewById(R.id.status_indicator_stub); final ViewResourceFrameLayout root = (ViewResourceFrameLayout) stub.inflate(); @@ -1483,10 +1483,10 @@ index 88207ad7b20f9..b46c3614b5b26 100644 mNativePtr, StatusIndicatorSceneLayer.this, resourceManager, mResourceId, offset); return this; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -index c587bef89e22e..ecfbd4732ae14 100644 +index 37065641f06e0..2465697699804 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -179,6 +179,9 @@ import org.chromium.url.GURL; +@@ -184,6 +184,9 @@ import org.chromium.url.GURL; import java.util.List; @@ -1496,8 +1496,8 @@ index c587bef89e22e..ecfbd4732ae14 100644 /** * Contains logic for managing the toolbar visual component. This class manages the interactions * with the rest of the application to ensure the toolbar is always visually up to date. -@@ -647,7 +650,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve - mEphemeralTabCoordinatorSupplier); +@@ -661,7 +664,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve + mIncognitoStateProvider.isIncognitoSelected())); // clang-format off LocationBarCoordinator locationBarCoordinator = new LocationBarCoordinator( - mActivity.findViewById(R.id.location_bar), toolbarLayout, profileSupplier, @@ -1505,7 +1505,7 @@ index c587bef89e22e..ecfbd4732ae14 100644 PrivacyPreferencesManagerImpl.getInstance(), mLocationBarModel, mActionModeController.getActionModeCallback(), new WindowDelegate(mActivity.getWindow()), windowAndroid, mActivityTabProvider, -@@ -904,11 +907,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -929,11 +932,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve // the height won't be measured by the background image. if (mControlContainer.getBackground() == null) { setControlContainerTopMargin(getToolbarExtraYOffset()); @@ -1519,7 +1519,7 @@ index c587bef89e22e..ecfbd4732ae14 100644 mControlContainer.removeOnLayoutChangeListener(mLayoutChangeListener); mLayoutChangeListener = null; } -@@ -1328,13 +1333,25 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -1354,13 +1359,25 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve return ((LocationBarCoordinator) mLocationBar).getUrlBarTextWithoutAutocomplete(); } @@ -1542,12 +1542,12 @@ index c587bef89e22e..ecfbd4732ae14 100644 + mBottomRoot = ((ViewStub) mActivity.findViewById(R.id.bottom_controls_stub)).inflate(); + MoveBottomBarOverTopBar(); mTabGroupUi = TabManagementDelegateProvider.getDelegate().createTabGroupUi(mActivity, -- root.findViewById(R.id.bottom_container_slot), mIncognitoStateProvider, -+ mBottomRoot.findViewById(R.id.bottom_container_slot), mIncognitoStateProvider, - mScrimCoordinator, mOmniboxFocusStateSupplier, mBottomSheetController, - mActivityLifecycleDispatcher, mIsWarmOnResumeSupplier, mTabModelSelector, - mTabContentManager, mCompositorViewHolder, -@@ -1342,8 +1359,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +- root.findViewById(R.id.bottom_container_slot), mBrowserControlsSizer, ++ mBottomRoot.findViewById(R.id.bottom_container_slot), mBrowserControlsSizer, + mIncognitoStateProvider, mScrimCoordinator, mOmniboxFocusStateSupplier, + mBottomSheetController, mActivityLifecycleDispatcher, mIsWarmOnResumeSupplier, + mTabModelSelector, mTabContentManager, mCompositorViewHolder, +@@ -1368,8 +1385,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve mLayoutStateProviderSupplier, mSnackbarManager); var bottomControlsCoordinator = new BottomControlsCoordinator(mActivity, mWindowAndroid, mLayoutManager, mCompositorViewHolder.getResourceManager(), mBrowserControlsSizer, @@ -1559,7 +1559,7 @@ index c587bef89e22e..ecfbd4732ae14 100644 mBottomControlsCoordinatorSupplier.set(bottomControlsCoordinator); bottomControlsCoordinator.getHandleBackPressChangedSupplier().addObserver( (x) -> { onBackPressStateChanged(); }); -@@ -2156,6 +2174,15 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -2188,6 +2206,15 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve private void setControlContainerTopMargin(int margin) { final ViewGroup.MarginLayoutParams layoutParams = ((ViewGroup.MarginLayoutParams) mControlContainer.getLayoutParams()); @@ -1617,7 +1617,7 @@ index da998e3942fcb..b68bee60e0ca0 100644 - mBrowserControlsStateProvider.getBottomControlsHeight(); offsetFromControls -= mViewportInsetSupplier.get().viewVisibleHeightInset; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java -index 1da8446439990..e9f4ad6f8b226 100644 +index 6227ab709b510..a5752b080fbc6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/system/StatusBarColorController.java @@ -8,10 +8,14 @@ import android.content.Context; @@ -1632,13 +1632,13 @@ index 1da8446439990..e9f4ad6f8b226 100644 +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.CachedFeatureFlags; + - import org.chromium.base.ApiCompatibilityUtils; - import org.chromium.base.BuildInfo; import org.chromium.base.CallbackController; -@@ -441,6 +445,12 @@ public class StatusBarColorController + import org.chromium.base.supplier.ObservableSupplier; + import org.chromium.chrome.R; +@@ -432,6 +436,12 @@ public class StatusBarColorController boolean needsDarkStatusBarIcons = !ColorUtils.shouldUseLightForegroundOnBackground(color); - ApiCompatibilityUtils.setStatusBarIconColor(root, needsDarkStatusBarIcons); - ApiCompatibilityUtils.setStatusBarColor(window, color); + UiUtils.setStatusBarIconColor(root, needsDarkStatusBarIcons); + UiUtils.setStatusBarColor(window, color); + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled() && + Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + UiUtils.setNavigationBarIconColor(window.getDecorView().getRootView(), @@ -1649,10 +1649,10 @@ index 1da8446439990..e9f4ad6f8b226 100644 /** diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 34f018070336b..5e2a1e49ae57f 100644 +index 92ef357be1694..bc1a9f986ff8c 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -7916,6 +7916,11 @@ const FeatureEntry kFeatureEntries[] = { +@@ -8076,6 +8076,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWindowsScrollingPersonalityDescription, kOsAll, FEATURE_VALUE_TYPE(features::kWindowsScrollingPersonality)}, @@ -1661,11 +1661,11 @@ index 34f018070336b..5e2a1e49ae57f 100644 + flag_descriptions::kMoveTopToolbarToBottomDescription, kOsAndroid, + FEATURE_VALUE_TYPE(features::kMoveTopToolbarToBottom)}, + - {"scroll-unification", flag_descriptions::kScrollUnificationName, - flag_descriptions::kScrollUnificationDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kScrollUnification)}, + #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) + {"elastic-overscroll", flag_descriptions::kElasticOverscrollName, + flag_descriptions::kElasticOverscrollDescription, kOsWin | kOsAndroid, diff --git a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc -index 5aae6590a4bd0..975a223979f6a 100644 +index 8b89be17c519d..231686b7fa6e7 100644 --- a/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc +++ b/chrome/browser/android/compositor/scene_layer/tab_strip_scene_layer.cc @@ -17,6 +17,7 @@ @@ -1752,10 +1752,10 @@ index 99a60c3b88aed..6bceee73e71d1 100644 * @return The minimum visible height top controls can have in pixels. */ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 2a4e23a152fd8..b846a68f779ca 100644 +index 1f7381558bc09..1c8b73b87da7f 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -1957,6 +1957,10 @@ const char kImprovedKeyboardShortcutsDescription[] = +@@ -1989,6 +1989,10 @@ const char kImprovedKeyboardShortcutsDescription[] = "Ensure keyboard shortcuts work consistently with international keyboard " "layouts and deprecate legacy shortcuts."; @@ -1767,10 +1767,10 @@ index 2a4e23a152fd8..b846a68f779ca 100644 "Enable Incognito downloads warning"; const char kIncognitoDownloadsWarningDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 21b507937cbec..aee54e948fb96 100644 +index eb34c2821d18c..39c1bc44ac2ef 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1095,6 +1095,9 @@ extern const char kImprovedIncognitoScreenshotDescription[]; +@@ -1123,6 +1123,9 @@ extern const char kImprovedIncognitoScreenshotDescription[]; extern const char kImprovedKeyboardShortcutsName[]; extern const char kImprovedKeyboardShortcutsDescription[]; @@ -1814,7 +1814,7 @@ index 0f41c49ec8e4f..a925ec3db98fc 100644 + flags_storage.CommitPendingWrites(); +} diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index 972880a0581c5..3dd86ddb7783e 100644 +index 13cee4e1c3135..ea6d5fd491953 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc @@ -10,6 +10,7 @@ @@ -1825,7 +1825,7 @@ index 972880a0581c5..3dd86ddb7783e 100644 #include "base/no_destructor.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/feature_guide/notifications/feature_notification_guide_service.h" -@@ -247,6 +248,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -252,6 +253,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kInstantStart, &kLensCameraAssistedSearch, &kLensOnQuickActionSearchWidget, @@ -1833,11 +1833,22 @@ index 972880a0581c5..3dd86ddb7783e 100644 &kNotificationPermissionVariant, &kNotificationPermissionBottomSheet, &kOfflineIndicatorV2, +@@ -870,8 +872,8 @@ BASE_FEATURE(kOmniboxCacheSuggestionResources, + base::FEATURE_DISABLED_BY_DEFAULT); + + BASE_FEATURE(kOmniboxConsumesImeInsets, +- "OmniboxConsumesImeInsets", +- base::FEATURE_ENABLED_BY_DEFAULT); ++ "OmniboxConsumesImeInsets", // disabled ++ base::FEATURE_DISABLED_BY_DEFAULT); // by default + + BASE_FEATURE(kOmniboxNoopEditUrlSuggestionClicks, + "OmniboxNoopEditUrlSuggestionClicks", diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java -index e6b13568d1027..08a8d223bf045 100644 +index 8886877d08236..034b3f2f7e8ab 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFeatureFlags.java -@@ -139,6 +139,23 @@ public class CachedFeatureFlags { +@@ -142,6 +142,23 @@ public class CachedFeatureFlags { CachedFeatureFlagsJni.get().isNetworkServiceWarmUpEnabled()); } @@ -1870,7 +1881,7 @@ index e6b13568d1027..08a8d223bf045 100644 void setAdBlockFiltersURL(String url); String getAdBlockFiltersURL(); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java -index 7fb4e194b1093..17b57824e9457 100644 +index 5301abd919114..4d96511407db5 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/CachedFlag.java @@ -114,6 +114,12 @@ public class CachedFlag extends Flag { @@ -1887,10 +1898,10 @@ index 7fb4e194b1093..17b57824e9457 100644 * Caches the value of the feature from {@link ChromeFeatureList} to SharedPrefs. */ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index a8846ad414712..e579f1d77c8cd 100644 +index 6e3530badef81..241a0c003119d 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -310,6 +310,8 @@ public abstract class ChromeFeatureList { +@@ -315,6 +315,8 @@ public abstract class ChromeFeatureList { "MessagesForAndroidPermissionUpdate"; public static final String SEARCH_READY_OMNIBOX = "SearchReadyOmnibox"; public static final String METRICS_SETTINGS_ANDROID = "MetricsSettingsAndroid"; @@ -1899,7 +1910,7 @@ index a8846ad414712..e579f1d77c8cd 100644 public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; -@@ -567,6 +569,8 @@ public abstract class ChromeFeatureList { +@@ -574,6 +576,8 @@ public abstract class ChromeFeatureList { new CachedFlag(PRIVACY_GUIDE_POST_MVP, false); public static final CachedFlag sOmniboxMatchToolbarAndStatusBarColor = new CachedFlag(OMNIBOX_MATCH_TOOLBAR_AND_STATUS_BAR_COLOR, false); @@ -1908,7 +1919,7 @@ index a8846ad414712..e579f1d77c8cd 100644 public static final CachedFlag sOmniboxModernizeVisualUpdate = new CachedFlag(OMNIBOX_MODERNIZE_VISUAL_UPDATE, false); public static final CachedFlag sOmniboxMostVisitedTilesAddRecycledViewPool = -@@ -662,6 +666,7 @@ public abstract class ChromeFeatureList { +@@ -670,6 +674,7 @@ public abstract class ChromeFeatureList { sInstantStart, sInterestFeedV2, sPrivacyGuidePostMVP, @@ -1917,10 +1928,10 @@ index a8846ad414712..e579f1d77c8cd 100644 sOmniboxModernizeVisualUpdate, sOmniboxMostVisitedTilesAddRecycledViewPool, diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc -index f4a0124c34e27..06513ddc28ed5 100644 +index 5f5880a8f79b6..73131bc510d20 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc -@@ -1930,7 +1930,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, +@@ -2037,7 +2037,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, #if BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault, @@ -1930,7 +1941,7 @@ index f4a0124c34e27..06513ddc28ed5 100644 registry->RegisterTimePref(prefs::kDIPSTimerLastUpdate, base::Time()); diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java -index 726e0f37df49b..1fa5032a42837 100644 +index 270267ef3fdd1..9413a6c486712 100644 --- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java +++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenu.java @@ -12,6 +12,7 @@ import android.graphics.Color; @@ -2006,7 +2017,7 @@ index 726e0f37df49b..1fa5032a42837 100644 if (availableScreenSpace <= 0 && sExceptionReporter != null) { String logMessage = String.format( diff --git a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java -index 6061992b96731..945630874ec39 100644 +index d27e463b70baa..2d76fd79cc4b8 100644 --- a/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java +++ b/chrome/browser/ui/android/appmenu/internal/java/src/org/chromium/chrome/browser/ui/appmenu/AppMenuHandlerImpl.java @@ -19,6 +19,8 @@ import androidx.annotation.VisibleForTesting; @@ -2035,7 +2046,7 @@ index 6061992b96731..945630874ec39 100644 new ContextThemeWrapper(mContext, R.style.OverflowMenuThemeOverlay); diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -index f16a29455a70a..378626ba1a735 100644 +index 57196951523dd..dd436f5e94c56 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java @@ -91,6 +91,7 @@ public class LocationBarCoordinator @@ -2046,7 +2057,7 @@ index f16a29455a70a..378626ba1a735 100644 private LocationBarMediator mLocationBarMediator; private View mUrlBar; private View mDeleteButton; -@@ -144,7 +145,7 @@ public class LocationBarCoordinator +@@ -145,7 +146,7 @@ public class LocationBarCoordinator * @param reportExceptionCallback A {@link Callback} to report exceptions. * @param backPressManager The {@link BackPressManager} for intercepting back press. */ @@ -2055,7 +2066,7 @@ index f16a29455a70a..378626ba1a735 100644 ObservableSupplier profileObservableSupplier, PrivacyPreferencesManager privacyPreferencesManager, LocationBarDataProvider locationBarDataProvider, ActionMode.Callback actionModeCallback, -@@ -176,11 +177,12 @@ public class LocationBarCoordinator +@@ -177,11 +178,12 @@ public class LocationBarCoordinator mActivityLifecycleDispatcher = activityLifecycleDispatcher; mActivityLifecycleDispatcher.register(this); mAutocompleteAnchorView = autocompleteAnchorView; @@ -2070,7 +2081,7 @@ index f16a29455a70a..378626ba1a735 100644 mUrlBar = mLocationBarLayout.findViewById(R.id.url_bar); // TODO(crbug.com/1151513): Inject LocaleManager instance to LocationBarCoordinator instead diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/OmniboxSuggestionsDropdownEmbedderImpl.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/OmniboxSuggestionsDropdownEmbedderImpl.java -index 533a497387a40..9a4c46629ddf6 100644 +index 053a2771c6c09..723c9a0933529 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/OmniboxSuggestionsDropdownEmbedderImpl.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/OmniboxSuggestionsDropdownEmbedderImpl.java @@ -37,6 +37,7 @@ class OmniboxSuggestionsDropdownEmbedderImpl implements OmniboxSuggestionsDropdo @@ -2112,7 +2123,7 @@ index 533a497387a40..9a4c46629ddf6 100644 @Override public OmniboxAlignment getCurrentAlignment() { diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java -index cc2aa4fe23814..de1531b83420a 100644 +index af5f59f461c80..8050ebd0f3843 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/UrlBarCoordinator.java @@ -26,6 +26,9 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor; @@ -2141,7 +2152,7 @@ index cc2aa4fe23814..de1531b83420a 100644 } else { // The animation rendering may not yet be 100% complete and hiding the keyboard makes diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java -index 4ee01b6be4b4f..d9e4c408613c5 100644 +index 4354ffd3e3fbf..1a470957ce504 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java @@ -61,6 +61,8 @@ import org.chromium.ui.modelutil.LazyConstructionPropertyMcp; @@ -2196,7 +2207,7 @@ index 4ee01b6be4b4f..d9e4c408613c5 100644 mHolder = new SuggestionListViewHolder(container, dropdown); for (int i = 0; i < mCallbacks.size(); i++) { diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java -index 7b3af0f2da163..575c3cefa4280 100644 +index 8a29302170ccc..a630fbf0fcd9e 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java @@ -60,6 +60,9 @@ import org.chromium.ui.modelutil.PropertyModel; @@ -2269,7 +2280,7 @@ index 2676af5c08bca..108159e648dc3 100644 } diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java -index 85342847693a3..6062f27d0e8b4 100644 +index 85342847693a3..93a7095d70f61 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsDropdown.java @@ -41,6 +41,9 @@ import org.chromium.ui.base.ViewUtils; @@ -2324,12 +2335,13 @@ index 85342847693a3..6062f27d0e8b4 100644 TimingMetric metric = OmniboxMetrics.recordSuggestionListMeasureTime()) { OmniboxAlignment omniboxAlignment = mEmbedder.getCurrentAlignment(); - maybeUpdateLayoutParams(omniboxAlignment.top); +- boolean useAlignmentSpecifiedHeight = OmniboxFeatures.omniboxConsumesImeInsets(); + int top = omniboxAlignment.top; + if (ChromeFeatureList.sMoveTopToolbarToBottom.isEnabled()) { + top = 0; + } + maybeUpdateLayoutParams(top); - boolean useAlignmentSpecifiedHeight = OmniboxFeatures.omniboxConsumesImeInsets(); ++ boolean useAlignmentSpecifiedHeight = false; int availableViewportHeight = useAlignmentSpecifiedHeight ? omniboxAlignment.height - : calculateAvailableViewportHeight() - omniboxAlignment.top; @@ -2365,10 +2377,10 @@ index f2ff2877cc459..ec813e3973c17 100644 @NonNull WindowDelegate getWindowDelegate(); diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 92bd8e92b6d5b..4dd26f3280e55 100644 +index 8b4b9dd0d71a7..09f5183a7c867 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1716,6 +1716,12 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1743,6 +1743,12 @@ Your Google account may have other forms of browsing history like searches and a Force Tablet Mode @@ -2382,10 +2394,10 @@ index 92bd8e92b6d5b..4dd26f3280e55 100644 diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn -index 605b0ecb32019..8864628488ed4 100644 +index 74a50a599c2a5..57573ecca2db7 100644 --- a/chrome/browser/ui/android/toolbar/BUILD.gn +++ b/chrome/browser/ui/android/toolbar/BUILD.gn -@@ -173,6 +173,7 @@ android_library("java") { +@@ -174,6 +174,7 @@ android_library("java") { "//components/user_prefs/android:java", "//content/public/android:content_java", "//third_party/android_deps:material_design_java", @@ -2614,10 +2626,10 @@ index 86cb56bbf4d48..4a68bbabff845 100644 return this; diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java -index c42c7556b58ed..1f8f98c6a6424 100644 +index d5b4038172800..864fbb8b1d77c 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java -@@ -61,6 +61,11 @@ import java.lang.annotation.Retention; +@@ -62,6 +62,11 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.function.BooleanSupplier; @@ -2629,7 +2641,7 @@ index c42c7556b58ed..1f8f98c6a6424 100644 /** * Layout for the browser controls (omnibox, menu, tab strip, etc..). */ -@@ -119,6 +124,12 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con +@@ -120,6 +125,12 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con @Override public void initWithToolbar(int toolbarLayoutId) { try (TraceEvent te = TraceEvent.scoped("ToolbarControlContainer.initWithToolbar")) { @@ -2730,23 +2742,23 @@ index 1a250ce4b1b9a..19666dff2baa3 100644 model.get(TopToolbarOverlayProperties.VISIBLE), model.get(TopToolbarOverlayProperties.ANONYMIZE)); diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml -index 62207fd4bec14..b5dc56add1362 100644 +index 6758a46475034..5e4a9bf6a2a7a 100644 --- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml +++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml @@ -50,4 +50,8 @@ found in the LICENSE file. android:key="captions" android:title="@string/accessibility_captions_title"/> -+ diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -index 97ccef87e5829..d3568207c3ec8 100644 +index b603b4ed77374..4d670c93c6733 100644 --- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java +++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java -@@ -36,6 +36,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -35,6 +35,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat private BooleanPreferenceDelegate mForceTabletUIDelegate; static final String PREF_FORCE_TABLET_UI = "force_tablet_ui"; @@ -2754,7 +2766,7 @@ index 97ccef87e5829..d3568207c3ec8 100644 private TextScalePreference mTextScalePref; private PageZoomPreference mPageZoomDefaultZoomPref; private ChromeSwitchPreference mPageZoomAlwaysShowPref; -@@ -45,6 +46,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -44,6 +45,7 @@ public class AccessibilitySettings extends PreferenceFragmentCompat private BooleanPreferenceDelegate mReaderForAccessibilityDelegate; private BooleanPreferenceDelegate mAccessibilityTabSwitcherDelegate; private double mPageZoomLatestDefaultZoomPrefValue; @@ -2762,7 +2774,7 @@ index 97ccef87e5829..d3568207c3ec8 100644 private FontSizePrefs mFontSizePrefs; private FontSizePrefsObserver mFontSizePrefsObserver = new FontSizePrefsObserver() { -@@ -64,6 +66,10 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -63,6 +65,10 @@ public class AccessibilitySettings extends PreferenceFragmentCompat mFontSizePrefs = FontSizePrefs.getInstance(delegate.getBrowserContextHandle()); } @@ -2773,12 +2785,12 @@ index 97ccef87e5829..d3568207c3ec8 100644 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); -@@ -131,6 +137,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -130,6 +136,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat getPreferenceScreen().removePreference(accessibilityTabSwitcherPref); } -+ ChromeBaseCheckBoxPreference mMoveToolbarToBottomPref = -+ (ChromeBaseCheckBoxPreference) findPreference(PREF_MOVE_TOOLBAR_TO_BOTTOM); ++ ChromeSwitchPreference mMoveToolbarToBottomPref = ++ (ChromeSwitchPreference) findPreference(PREF_MOVE_TOOLBAR_TO_BOTTOM); + mMoveTopToolbarToBottomDelegate = mDelegate.getMoveTopToolbarToBottomDelegate(); + mMoveToolbarToBottomPref.setChecked(mMoveTopToolbarToBottomDelegate.isEnabled()); + mMoveToolbarToBottomPref.setOnPreferenceChangeListener(this); @@ -2786,7 +2798,7 @@ index 97ccef87e5829..d3568207c3ec8 100644 Preference captions = findPreference(PREF_CAPTIONS); captions.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(Settings.ACTION_CAPTIONING_SETTINGS); -@@ -190,7 +202,11 @@ public class AccessibilitySettings extends PreferenceFragmentCompat +@@ -189,7 +201,11 @@ public class AccessibilitySettings extends PreferenceFragmentCompat mDelegate.getBrowserContextHandle(), (Integer) newValue); } else if (PREF_PAGE_ZOOM_ALWAYS_SHOW.equals(preference.getKey())) { PageZoomUtils.setShouldAlwaysShowZoomMenuItem((Boolean) newValue); @@ -2823,7 +2835,7 @@ index 41a0726e9bad8..21b3fa0bb2d77 100644 * @return The BrowserContextHandle that should be used to read and update settings. */ diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc -index d0b7165588a72..c6c026613f20f 100644 +index 71b35c168573a..76a078ad6a12e 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc @@ -26,6 +26,7 @@ diff --git a/bromite/build/patches/Move-some-account-settings-back-to-privacy-settings.patch b/bromite/build/patches/Move-some-account-settings-back-to-privacy-settings.patch index 61d680a3..6e3a7fcf 100644 --- a/bromite/build/patches/Move-some-account-settings-back-to-privacy-settings.patch +++ b/bromite/build/patches/Move-some-account-settings-back-to-privacy-settings.patch @@ -1,4 +1,4 @@ -From 8c823ffbec26f5d46945adab7bdadff288175f12 Mon Sep 17 00:00:00 2001 +From 0556337f041c88accb24e9c9c195e96c60a602b3 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 4 Oct 2020 12:58:17 +0200 Subject: [PATCH 006/192] Move some account settings back to privacy settings @@ -37,7 +37,7 @@ index 20942c1276325..7dea487f76b53 100644 android:key="phone_as_a_security_key" android:title="@string/cablev2_paask_title" 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 -index 436209985756e..ebed50f0da17f 100644 +index 2429268892127..3ec0d4edb4d52 100644 --- 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 @@ -57,6 +57,13 @@ import org.chromium.components.user_prefs.UserPrefs; @@ -71,7 +71,7 @@ index 436209985756e..ebed50f0da17f 100644 private IncognitoLockSettings mIncognitoLockSettings; private HelpAndFeedbackLauncher mHelpAndFeedbackLauncher; private Profile mProfile; -@@ -144,6 +161,16 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -142,6 +159,16 @@ public class PrivacySettings extends PreferenceFragmentCompat setHasOptionsMenu(true); @@ -88,7 +88,7 @@ index 436209985756e..ebed50f0da17f 100644 ChromeSwitchPreference canMakePaymentPref = (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT); canMakePaymentPref.setOnPreferenceChangeListener(this); -@@ -224,6 +251,9 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -220,6 +247,9 @@ public class PrivacySettings extends PreferenceFragmentCompat UserPrefs.get(mProfile).setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue); } else if (PREF_HTTPS_FIRST_MODE.equals(key)) { UserPrefs.get(mProfile).setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue); @@ -98,7 +98,7 @@ index 436209985756e..ebed50f0da17f 100644 } return true; } -@@ -238,6 +268,8 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -234,6 +264,8 @@ public class PrivacySettings extends PreferenceFragmentCompat * Updates the preferences. */ public void updatePreferences() { @@ -108,10 +108,10 @@ index 436209985756e..ebed50f0da17f 100644 (ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT); if (canMakePaymentPref != null) { diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 2722feea2d03b..c1fa44ee71a88 100644 +index bfafa7e8fd9a7..2fbf477c02d45 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -447,6 +447,10 @@ CHAR_LIMIT guidelines: +@@ -452,6 +452,10 @@ CHAR_LIMIT guidelines: No statistics or crash reports are sent to Google diff --git a/bromite/build/patches/Multiple-fingerprinting-mitigations.patch b/bromite/build/patches/Multiple-fingerprinting-mitigations.patch index c00e0244..44a1879b 100644 --- a/bromite/build/patches/Multiple-fingerprinting-mitigations.patch +++ b/bromite/build/patches/Multiple-fingerprinting-mitigations.patch @@ -1,4 +1,4 @@ -From 7424137475d6340833c0de994848846295699640 Mon Sep 17 00:00:00 2001 +From af87123f0c3a076446af1efb3b18af4ba28e8aa4 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 30 Mar 2018 10:09:03 +0200 Subject: [PATCH 057/192] Multiple fingerprinting mitigations @@ -61,10 +61,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html create mode 100644 third_party/ungoogled/ungoogled_switches.h diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 024a5f0b8df15..caaa787094af2 100644 +index 57f155b0b95f6..05e80b77ea2e4 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -2407,6 +2407,7 @@ static_library("browser") { +@@ -2422,6 +2422,7 @@ static_library("browser") { "//services/device/public/cpp:device_features", "//services/device/public/cpp/geolocation", "//services/device/public/cpp/usb", @@ -73,10 +73,10 @@ index 024a5f0b8df15..caaa787094af2 100644 "//services/device/public/mojom:usb", "//services/image_annotation:service", diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 133ef52e82e57..678e2dc13d3ea 100644 +index 73d1dd5a999d9..3f5f94ed63936 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -224,6 +224,8 @@ +@@ -222,6 +222,8 @@ #include "ui/ui_features.h" #include "url/url_features.h" @@ -85,7 +85,7 @@ index 133ef52e82e57..678e2dc13d3ea 100644 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #include "base/allocator/buildflags.h" #endif -@@ -3881,6 +3883,20 @@ const FeatureEntry kFeatureEntries[] = { +@@ -3912,6 +3914,20 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kWebrtcUseMinMaxVEADimensionsName, flag_descriptions::kWebrtcUseMinMaxVEADimensionsDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kWebRtcUseMinMaxVEADimensions)}, @@ -107,7 +107,7 @@ index 133ef52e82e57..678e2dc13d3ea 100644 {"enable-nacl", flag_descriptions::kNaclName, flag_descriptions::kNaclDescription, kOsAll, diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn -index 9c10d729b8e8f..effceba1f93c1 100644 +index 7ed78907d28c0..e4ad499505025 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn @@ -249,6 +249,7 @@ source_set("browser") { @@ -119,7 +119,7 @@ index 9c10d729b8e8f..effceba1f93c1 100644 "//third_party/zlib", "//third_party/zlib/google:zip", diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index 15dc38f75fd7f..7759168ac33a1 100644 +index 7f34ad97947df..84b0dbd7a5015 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc @@ -211,6 +211,7 @@ @@ -130,7 +130,7 @@ index 15dc38f75fd7f..7759168ac33a1 100644 #if BUILDFLAG(IS_ANDROID) #include "base/android/child_process_binding_types.h" #include "content/browser/android/java_interfaces_impl.h" -@@ -3538,6 +3539,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( +@@ -3558,6 +3559,9 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( switches::kDisableBreakpad, switches::kDisableDatabases, switches::kDisableFileSystem, @@ -141,11 +141,11 @@ index 15dc38f75fd7f..7759168ac33a1 100644 switches::kDisableGpuMemoryBufferVideoFrames, switches::kDisableHistogramCustomizer, diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn -index 049157fc0c54c..9ba969855d3b4 100644 +index 7eba245bbccd2..c882108f9bfa1 100644 --- a/content/child/BUILD.gn +++ b/content/child/BUILD.gn @@ -102,6 +102,7 @@ target(link_target_type, "child") { - "//third_party/blink/public/common", + "//third_party/blink/public/common:buildflags", "//third_party/blink/public/strings", "//third_party/ced", + "//third_party/ungoogled:switches", @@ -153,7 +153,7 @@ index 049157fc0c54c..9ba969855d3b4 100644 "//ui/base", "//ui/events/blink", diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc -index 12a36fd197deb..cb11504fa88c5 100644 +index a32826c26614a..26ce4a01376cf 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc @@ -44,6 +44,8 @@ @@ -165,7 +165,7 @@ index 12a36fd197deb..cb11504fa88c5 100644 #if BUILDFLAG(IS_ANDROID) #include "base/android/build_info.h" #endif -@@ -567,6 +569,13 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs( +@@ -556,6 +558,13 @@ void SetCustomizedRuntimeFeaturesFromCombinedArgs( if (!command_line.HasSwitch(switches::kDisableYUVImageDecoding) && base::FeatureList::IsEnabled( blink::features::kDecodeLossyWebPImagesToYUV)) { @@ -194,7 +194,7 @@ index e282c6e36a91d..23e1afbedeb56 100644 WebRuntimeFeatures() = delete; diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc -index 326349969f375..d978075fd0050 100644 +index 3f79114aa7c46..f255a4fb30fbd 100644 --- a/third_party/blink/renderer/core/dom/document.cc +++ b/third_party/blink/renderer/core/dom/document.cc @@ -37,6 +37,7 @@ @@ -205,7 +205,7 @@ index 326349969f375..d978075fd0050 100644 #include "base/notreached.h" #include "base/ranges/algorithm.h" #include "base/task/single_thread_task_runner.h" -@@ -844,6 +845,17 @@ Document::Document(const DocumentInit& initializer, +@@ -843,6 +844,17 @@ Document::Document(const DocumentInit& initializer, : nullptr), data_(MakeGarbageCollected(GetExecutionContext())) { DCHECK(agent_); @@ -223,7 +223,7 @@ index 326349969f375..d978075fd0050 100644 if (base::FeatureList::IsEnabled(features::kDelayAsyncScriptExecution)) script_runner_delayer_->Activate(); -@@ -2294,6 +2306,14 @@ void Document::UpdateStyleAndLayoutTreeForThisDocument() { +@@ -2296,6 +2308,14 @@ void Document::UpdateStyleAndLayoutTreeForThisDocument() { #endif } @@ -239,10 +239,10 @@ index 326349969f375..d978075fd0050 100644 DCHECK(IsActive()); DCHECK(IsMainThread()); diff --git a/third_party/blink/renderer/core/dom/document.h b/third_party/blink/renderer/core/dom/document.h -index ea3d4b7b120e7..7b0a9b9a4ab5e 100644 +index b1fe70f808431..c8158492b2071 100644 --- a/third_party/blink/renderer/core/dom/document.h +++ b/third_party/blink/renderer/core/dom/document.h -@@ -532,6 +532,10 @@ class CORE_EXPORT Document : public ContainerNode, +@@ -531,6 +531,10 @@ class CORE_EXPORT Document : public ContainerNode, has_xml_declaration_ = has_xml_declaration ? 1 : 0; } @@ -253,7 +253,7 @@ index ea3d4b7b120e7..7b0a9b9a4ab5e 100644 AtomicString visibilityState() const; bool IsPageVisible() const; bool hidden() const; -@@ -2432,6 +2436,9 @@ class CORE_EXPORT Document : public ContainerNode, +@@ -2419,6 +2423,9 @@ class CORE_EXPORT Document : public ContainerNode, base::ElapsedTimer start_time_; @@ -264,10 +264,10 @@ index ea3d4b7b120e7..7b0a9b9a4ab5e 100644 Member script_runner_delayer_; diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc -index 603363d44dba6..844341fc4f3b8 100644 +index 5303b17e64725..003b8a564e86b 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc -@@ -2093,6 +2093,7 @@ void Element::ClientQuads(Vector& quads) const { +@@ -2119,6 +2119,7 @@ void Element::ClientQuads(Vector& quads) const { quads.push_back(element_layout_object->LocalToAbsoluteQuad( gfx::QuadF(element_layout_object->ObjectBoundingBox()))); } @@ -275,7 +275,7 @@ index 603363d44dba6..844341fc4f3b8 100644 return; } -@@ -2101,6 +2102,10 @@ void Element::ClientQuads(Vector& quads) const { +@@ -2127,6 +2128,10 @@ void Element::ClientQuads(Vector& quads) const { element_layout_object->IsBR()) { element_layout_object->AbsoluteQuads(quads); } @@ -286,7 +286,7 @@ index 603363d44dba6..844341fc4f3b8 100644 } DOMRectList* Element::getClientRects() { -@@ -2143,6 +2148,9 @@ gfx::RectF Element::GetBoundingClientRectNoLifecycleUpdate() const { +@@ -2169,6 +2174,9 @@ gfx::RectF Element::GetBoundingClientRectNoLifecycleUpdate() const { DCHECK(element_layout_object); GetDocument().AdjustRectForScrollAndAbsoluteZoom(result, *element_layout_object); @@ -327,7 +327,7 @@ index 7df78ca555a0c..57a92a400dd64 100644 return result; } diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc -index 4798a082e34e2..3468c2507b191 100644 +index 72b4a15778f60..dfbc9fc3cce87 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc @@ -20,6 +20,7 @@ @@ -338,7 +338,7 @@ index 4798a082e34e2..3468c2507b191 100644 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h" #include "third_party/blink/renderer/platform/graphics/unaccelerated_static_bitmap_image.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" -@@ -208,6 +209,10 @@ CanvasAsyncBlobCreator::CanvasAsyncBlobCreator( +@@ -206,6 +207,10 @@ CanvasAsyncBlobCreator::CanvasAsyncBlobCreator( std::min(info.height(), max_dimension)); src_data_.reset(info, src_data_.addr(), src_data_.rowBytes()); } @@ -485,10 +485,10 @@ index 53372068c95e6..c609dc2564c16 100644 return -1; } diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc -index e115860128a23..f2a76e6255074 100644 +index 963a9d142316f..da55ffb0548e4 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc -@@ -40,6 +40,7 @@ +@@ -41,6 +41,7 @@ #include "third_party/blink/renderer/platform/graphics/bitmap_image.h" #include "third_party/blink/renderer/platform/graphics/filters/paint_filter_builder.h" #include "third_party/blink/renderer/platform/graphics/graphics_context.h" @@ -496,7 +496,7 @@ index e115860128a23..f2a76e6255074 100644 #include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h" #include "third_party/blink/renderer/platform/graphics/stroke_data.h" #include "third_party/blink/renderer/platform/graphics/video_frame_image_util.h" -@@ -2184,6 +2185,10 @@ ImageData* BaseRenderingContext2D::getImageDataInternal( +@@ -2185,6 +2186,10 @@ ImageData* BaseRenderingContext2D::getImageDataInternal( snapshot->PaintImageForCurrentFrame().GetSkImageInfo().bounds(); DCHECK(!bounds.intersect(SkIRect::MakeXYWH(sx, sy, sw, sh))); } @@ -508,10 +508,10 @@ index e115860128a23..f2a76e6255074 100644 return image_data; diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc -index dcf9247f80d04..a74047a1e38a7 100644 +index a48dc6092ef6e..d1396ed2df3e8 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.cc -@@ -942,9 +942,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) { +@@ -924,9 +924,15 @@ TextMetrics* CanvasRenderingContext2D::measureText(const String& text) { TextDirection direction = ToTextDirection(GetState().GetDirection(), canvas()); @@ -529,7 +529,7 @@ index dcf9247f80d04..a74047a1e38a7 100644 void CanvasRenderingContext2D::drawFormattedText( diff --git a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc -index 41f338fe6b244..93aadcb913790 100644 +index 8b85b90f57780..5a762e0aeb860 100644 --- a/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc +++ b/third_party/blink/renderer/modules/canvas/offscreencanvas2d/offscreen_canvas_rendering_context_2d.cc @@ -5,6 +5,7 @@ @@ -539,8 +539,8 @@ index 41f338fe6b244..93aadcb913790 100644 +#include "base/rand_util.h" #include "base/trace_event/trace_event.h" #include "third_party/blink/public/common/features.h" - #include "third_party/blink/renderer/bindings/modules/v8/v8_union_gpucanvascontext_imagebitmaprenderingcontext_offscreencanvasrenderingcontext2d_webgl2renderingcontext_webglrenderingcontext.h" -@@ -747,9 +748,15 @@ TextMetrics* OffscreenCanvasRenderingContext2D::measureText( + #include "third_party/blink/renderer/bindings/modules/v8/v8_canvas_font_stretch.h" +@@ -725,9 +726,15 @@ TextMetrics* OffscreenCanvasRenderingContext2D::measureText( TextDirection direction = ToTextDirection(GetState().GetDirection()); @@ -558,10 +558,10 @@ index 41f338fe6b244..93aadcb913790 100644 const Font& OffscreenCanvasRenderingContext2D::AccessFont() { diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn -index ef3439d07ad42..a1b8be33d0532 100644 +index 92b45cb4939df..060e76f437b78 100644 --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn -@@ -1656,7 +1656,9 @@ component("platform") { +@@ -1643,7 +1643,9 @@ component("platform") { "//third_party/blink/renderer:non_test_config", ] @@ -572,7 +572,7 @@ index ef3439d07ad42..a1b8be33d0532 100644 allow_circular_includes_from = [ "//third_party/blink/renderer/platform/blob", -@@ -1727,6 +1729,7 @@ component("platform") { +@@ -1714,6 +1716,7 @@ component("platform") { "//third_party/blink/public/strings", "//third_party/blink/renderer/platform/wtf", "//third_party/ced", @@ -818,11 +818,11 @@ index 814bfffeb6aeb..6f66ef1060889 100644 // Methods overridden by all sub-classes diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index e77f3afb2cc9e..6f93a0bc4295d 100644 +index 7e343301a3a22..9af38988b56ba 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2062,6 +2062,15 @@ - status: {"Android": "test", "default": "stable"}, +@@ -2935,6 +2935,15 @@ + status: {"Android": "", "default": "stable"}, base_feature: "none", }, + { @@ -835,7 +835,7 @@ index e77f3afb2cc9e..6f93a0bc4295d 100644 + name: "FingerprintingCanvasImageDataNoise", + }, { - name: "InstalledApp", + name: "RemotePlayback", public: true, diff --git a/third_party/ungoogled/BUILD.gn b/third_party/ungoogled/BUILD.gn new file mode 100644 diff --git a/bromite/build/patches/Never-fetch-popular-sites.patch b/bromite/build/patches/Never-fetch-popular-sites.patch index bba3a039..9d372b5f 100644 --- a/bromite/build/patches/Never-fetch-popular-sites.patch +++ b/bromite/build/patches/Never-fetch-popular-sites.patch @@ -1,4 +1,4 @@ -From 03190ebc0a93a475e4abce6822e85f1dc4766074 Mon Sep 17 00:00:00 2001 +From 1c2a103611d2c5bef4b07413eb62f1bfad219dab Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 14 Feb 2018 12:56:01 +0100 Subject: [PATCH 036/192] Never fetch popular sites @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/components/ntp_tiles/popular_sites_impl.cc b/components/ntp_tiles/popular_sites_impl.cc -index 975b5de17ecc9..44390078cf4d0 100644 +index 1ff5027c0cddf..9d799999dafb6 100644 --- a/components/ntp_tiles/popular_sites_impl.cc +++ b/components/ntp_tiles/popular_sites_impl.cc -@@ -63,7 +63,6 @@ const char kPopularSitesDefaultDirectory[] = "chrome/ntp/"; +@@ -64,7 +64,6 @@ const char kPopularSitesDefaultDirectory[] = "chrome/ntp/"; const char kPopularSitesDefaultCountryCode[] = "DEFAULT"; const char kPopularSitesDefaultVersion[] = "5"; const int kSitesExplorationStartVersion = 6; @@ -20,7 +20,7 @@ index 975b5de17ecc9..44390078cf4d0 100644 #if BUILDFLAG(IS_IOS) const char kIOSDefaultPopularSitesLocaleUS[] = "https://www.gstatic.com/chrome/ntp/ios/" -@@ -329,7 +328,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download, +@@ -330,7 +329,12 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download, DCHECK(!callback_); callback_ = std::move(callback); @@ -34,7 +34,7 @@ index 975b5de17ecc9..44390078cf4d0 100644 prefs_->GetInt64(prefs::kPopularSitesLastDownloadPref)); const base::TimeDelta time_since_last_download = base::Time::Now() - last_download_time; -@@ -346,7 +350,7 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download, +@@ -347,7 +351,7 @@ bool PopularSitesImpl::MaybeStartFetch(bool force_download, (time_since_last_download > redownload_interval) || url_changed) { FetchPopularSites(); return true; diff --git a/bromite/build/patches/Never-use-HTTP-probes-for-connection-detection.patch b/bromite/build/patches/Never-use-HTTP-probes-for-connection-detection.patch index 2ddc55ad..9a6a988d 100644 --- a/bromite/build/patches/Never-use-HTTP-probes-for-connection-detection.patch +++ b/bromite/build/patches/Never-use-HTTP-probes-for-connection-detection.patch @@ -1,4 +1,4 @@ -From 6bfce617eec3347eff513659267ac4f196f596bf Mon Sep 17 00:00:00 2001 +From 8abe36e26636306e7dadfd125f0a7a847136971b Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 6 Nov 2021 09:46:24 +0100 Subject: [PATCH 145/192] Never use HTTP probes for connection detection @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java b/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java -index d4edaa9e2a6e0..f09adf6e162ab 100644 +index edf11959b8ced..3638b25b69e0e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/net/connectivitydetector/ConnectivityDetector.java -@@ -174,7 +174,8 @@ public class ConnectivityDetector implements NetworkChangeNotifier.ConnectionTyp +@@ -175,7 +175,8 @@ public class ConnectivityDetector implements NetworkChangeNotifier.ConnectionTyp @Override public boolean shouldSkipHttpProbes() { diff --git a/bromite/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch b/bromite/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch index c0262d58..be377842 100644 --- a/bromite/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch +++ b/bromite/build/patches/Offer-builtin-autocomplete-for-chrome-flags.patch @@ -1,4 +1,4 @@ -From 9f819b14451fce775fab0276f70a1a64ff52f8ea Mon Sep 17 00:00:00 2001 +From 0674f5575478b0aeccdca46aeffcd3135adc1201 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 28 Oct 2018 14:11:50 +0100 Subject: [PATCH 081/192] Offer builtin autocomplete for chrome://flags @@ -9,10 +9,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+) diff --git a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -index 1437a1741f3a4..401ba44b0aa1f 100644 +index 7aa817639291c..d256524609572 100644 --- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc +++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc -@@ -296,6 +296,8 @@ std::vector ChromeAutocompleteProviderClient::GetBuiltinURLs() { +@@ -289,6 +289,8 @@ std::vector ChromeAutocompleteProviderClient::GetBuiltinURLs() { std::vector ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() { std::vector builtins_to_provide; diff --git a/bromite/build/patches/OpenSearch-miscellaneous.patch b/bromite/build/patches/OpenSearch-miscellaneous.patch index 11c2932a..05d52462 100644 --- a/bromite/build/patches/OpenSearch-miscellaneous.patch +++ b/bromite/build/patches/OpenSearch-miscellaneous.patch @@ -1,4 +1,4 @@ -From 1238d0754e82452887124e0fc7b4786539f32301 Mon Sep 17 00:00:00 2001 +From 1de48ac3eacf2b89b6a8231b06cf4534b385dfe9 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 6 Mar 2022 18:55:58 +0100 Subject: [PATCH 158/192] OpenSearch: miscellaneous @@ -21,10 +21,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 6 files changed, 67 insertions(+), 24 deletions(-) diff --git a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java -index 11aae72d279fb..a2a47f13434d9 100644 +index b567c1415134f..9255bd0b49c71 100644 --- a/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java +++ b/chrome/browser/search_engines/android/java/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapter.java -@@ -249,7 +249,9 @@ public class SearchEngineAdapter extends BaseAdapter +@@ -245,7 +245,9 @@ public class SearchEngineAdapter extends BaseAdapter continue; } if (recentEngineNum < MAX_RECENT_ENGINE_NUM @@ -181,7 +181,7 @@ index 8fd09baf04eaf..d6747f6a6a849 100644 return; diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc -index cc639b5dab4cb..78fd25db24176 100644 +index 2a1b86e599a02..60d8a9c5636ee 100644 --- a/chrome/renderer/chrome_render_frame_observer.cc +++ b/chrome/renderer/chrome_render_frame_observer.cc @@ -14,6 +14,7 @@ @@ -192,7 +192,7 @@ index cc639b5dab4cb..78fd25db24176 100644 #include "base/metrics/histogram_macros.h" #include "base/no_destructor.h" #include "base/strings/string_number_conversions.h" -@@ -260,6 +261,7 @@ void ChromeRenderFrameObserver::DidFinishLoad() { +@@ -258,6 +259,7 @@ void ChromeRenderFrameObserver::DidFinishLoad() { GURL osdd_url = frame->GetDocument().OpenSearchDescriptionURL(); if (!osdd_url.is_empty()) { @@ -243,23 +243,23 @@ index 0032d89f702f8..9ce17529ad129 100644 this, keyword, osdd_url, favicon_url, initiator, url_loader_factory, render_frame_id, request_id)); diff --git a/components/search_engines/template_url_parser.cc b/components/search_engines/template_url_parser.cc -index 76e281653818c..b7f2328ed439a 100644 +index a6a5779d1e280..c429a616a6562 100644 --- a/components/search_engines/template_url_parser.cc +++ b/components/search_engines/template_url_parser.cc -@@ -171,7 +171,7 @@ void SafeTemplateURLParser::OnXmlParseComplete( - data_decoder::DataDecoder::ValueOrError value_or_error) { +@@ -173,7 +173,7 @@ void SafeTemplateURLParser::OnXmlParseComplete( std::move(callback_).Run([&]() -> std::unique_ptr { - if (!value_or_error.has_value()) { -- DLOG(ERROR) << "Failed to parse XML: " << value_or_error.error(); -+ LOG(ERROR) << "Failed to parse XML: " << value_or_error.error(); - return nullptr; - } - const base::Value& root = *value_or_error; + ASSIGN_OR_RETURN(const base::Value root, std::move(value_or_error), + [](std::string error) -> std::unique_ptr { +- DLOG(ERROR) ++ LOG(ERROR) + << "Failed to parse XML: " << std::move(error); + return nullptr; + }); diff --git a/components/search_engines/template_url_service.h b/components/search_engines/template_url_service.h -index f143f6d65d3f4..160fba00b3f74 100644 +index c493680066e83..9cb7c0be2ac52 100644 --- a/components/search_engines/template_url_service.h +++ b/components/search_engines/template_url_service.h -@@ -264,7 +264,10 @@ class TemplateURLService : public WebDataServiceConsumer, +@@ -271,7 +271,10 @@ class TemplateURLService : public WebDataServiceConsumer, void UpdateProviderFavicons(const GURL& potential_search_url, const GURL& favicon_url); @@ -271,7 +271,7 @@ index f143f6d65d3f4..160fba00b3f74 100644 // regardless of |url| if the default search provider is managed by policy or // controlled by an extension. bool CanMakeDefault(const TemplateURL* url) const; -@@ -626,9 +629,6 @@ class TemplateURLService : public WebDataServiceConsumer, +@@ -633,9 +636,6 @@ class TemplateURLService : public WebDataServiceConsumer, // SetKeywordSearchTermsForURL is invoked. void UpdateKeywordSearchTermsForURL(const URLVisitedDetails& details); diff --git a/bromite/build/patches/Override-Navigator-Language.patch b/bromite/build/patches/Override-Navigator-Language.patch index 993dc6e6..496dc1c8 100644 --- a/bromite/build/patches/Override-Navigator-Language.patch +++ b/bromite/build/patches/Override-Navigator-Language.patch @@ -1,4 +1,4 @@ -From a7e129c23866f48c9ef5f9b447dc6565838c16d3 Mon Sep 17 00:00:00 2001 +From df5684d036a7ad5d2404647cc75f8ad150d300c5 Mon Sep 17 00:00:00 2001 From: uazo Date: Fri, 2 Sep 2022 07:44:58 +0000 Subject: [PATCH 184/192] Override Navigator Language @@ -52,7 +52,7 @@ index 211ef8400523e..405c2593b03d6 100644 * Gets the first original system locale from {@link LocaleManager}. This is the language that * Chrome would use if there was no override set. If there are no possible UI languages en-US is diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index 2a806f49e867c..05fdc53f1460a 100644 +index 54623a2d29512..b2d0eefea32ee 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc @@ -69,6 +69,7 @@ @@ -63,7 +63,7 @@ index 2a806f49e867c..05fdc53f1460a 100644 #include "components/metrics/single_sample_metrics.h" #include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h" #include "components/services/storage/public/cpp/buckets/bucket_id.h" -@@ -3463,8 +3464,11 @@ void RenderProcessHostImpl::AppendRendererCommandLine( +@@ -3473,8 +3474,11 @@ void RenderProcessHostImpl::AppendRendererCommandLine( PropagateBrowserCommandLineToRenderer(browser_command_line, command_line); // Pass on the browser locale. diff --git a/bromite/build/patches/Partition-Blink-memory-cache.patch b/bromite/build/patches/Partition-Blink-memory-cache.patch index 83f902de..122d6bc8 100644 --- a/bromite/build/patches/Partition-Blink-memory-cache.patch +++ b/bromite/build/patches/Partition-Blink-memory-cache.patch @@ -1,4 +1,4 @@ -From 6c2e118fa67b9cf40031c6421702e9ba3ce7170e Mon Sep 17 00:00:00 2001 +From 230cf9e2dae9e5e069e79ae6adb42f1b32359e10 Mon Sep 17 00:00:00 2001 From: uazo Date: Wed, 13 Jul 2022 14:51:09 +0000 Subject: [PATCH 178/192] Partition Blink memory cache @@ -55,10 +55,10 @@ index 1767d68d92f66..a85f146634c7a 100644 return i; } diff --git a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc -index 3efc742c175e2..3829d9e1b2ab6 100644 +index fb7a567f9f5f5..0cddb8ea6d13e 100644 --- a/third_party/blink/renderer/core/inspector/inspector_network_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_network_agent.cc -@@ -2296,7 +2296,7 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document, +@@ -2315,7 +2315,7 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document, Resource* cached_resource = document->Fetcher()->CachedResource(url); if (!cached_resource) { cached_resource = MemoryCache::Get()->ResourceForURL( @@ -68,7 +68,7 @@ index 3efc742c175e2..3829d9e1b2ab6 100644 if (cached_resource && InspectorPageAgent::CachedResourceContent( cached_resource, content, base64_encoded)) { diff --git a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc b/third_party/blink/renderer/core/inspector/inspector_page_agent.cc -index 8f4b06c584a0d..531f81e623bab 100644 +index 7d78ae5354ebd..dc552dc20071c 100644 --- a/third_party/blink/renderer/core/inspector/inspector_page_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_page_agent.cc @@ -165,9 +165,9 @@ Resource* CachedResource(LocalFrame* frame, @@ -183,10 +183,10 @@ index 90a61b2932d9a..366bd0c41855d 100644 // Automatically decide how much to prune. kAutomaticPrune, diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc -index d08736c4a3cb0..67e8734ed111f 100644 +index a0299c597190c..0ac30bd70ec3b 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc -@@ -808,7 +808,8 @@ Resource* ResourceFetcher::CreateResourceForStaticData( +@@ -839,7 +839,8 @@ Resource* ResourceFetcher::CreateResourceForStaticData( if (!archive_ && factory.GetType() == ResourceType::kRaw) return nullptr; @@ -196,7 +196,7 @@ index d08736c4a3cb0..67e8734ed111f 100644 // Most off-main-thread resource fetches use Resource::kRaw and don't reach // this point, but off-main-thread module fetches might. if (IsMainThread()) { -@@ -1294,7 +1295,9 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, +@@ -1326,7 +1327,9 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, resource = nullptr; } else { resource = MemoryCache::Get()->ResourceForURL( @@ -207,7 +207,7 @@ index d08736c4a3cb0..67e8734ed111f 100644 } if (resource) { policy = DetermineRevalidationPolicy(resource_type, params, *resource, -@@ -1408,6 +1411,8 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, +@@ -1440,6 +1443,8 @@ Resource* ResourceFetcher::RequestResource(FetchParameters& params, if (resource_cache_remote_.is_bound()) { resource_cache_remote_->Contains( params.Url(), @@ -216,7 +216,7 @@ index d08736c4a3cb0..67e8734ed111f 100644 WTF::BindOnce(&ResourceFetcher::OnResourceCacheContainsFinished, WrapWeakPersistent(this), base::TimeTicks::Now(), resource_request.GetRequestDestination())); -@@ -1549,7 +1554,8 @@ Resource* ResourceFetcher::CreateResourceForLoading( +@@ -1581,7 +1586,8 @@ Resource* ResourceFetcher::CreateResourceForLoading( const FetchParameters& params, const ResourceFactory& factory) { const String cache_identifier = @@ -226,7 +226,7 @@ index d08736c4a3cb0..67e8734ed111f 100644 if (!base::FeatureList::IsEnabled( blink::features::kScopeMemoryCachePerContext)) { DCHECK(!IsMainThread() || params.IsStaleRevalidation() || -@@ -2563,10 +2569,13 @@ void ResourceFetcher::UpdateAllImageResourcePriorities() { +@@ -2582,10 +2588,13 @@ void ResourceFetcher::UpdateAllImageResourcePriorities() { to_be_removed.clear(); } @@ -242,7 +242,7 @@ index d08736c4a3cb0..67e8734ed111f 100644 } // Requests that can be satisfied via `archive_` (i.e. MHTML) or -@@ -2579,7 +2588,7 @@ String ResourceFetcher::GetCacheIdentifier(const KURL& url) const { +@@ -2598,7 +2607,7 @@ String ResourceFetcher::GetCacheIdentifier(const KURL& url) const { if (bundle) return bundle->GetCacheIdentifier(); @@ -252,10 +252,10 @@ index d08736c4a3cb0..67e8734ed111f 100644 absl::optional diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h -index b6bf5f13f60f5..fc85c6fb84457 100644 +index 77cfe1e0e9893..784585358ba24 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h -@@ -258,7 +258,8 @@ class PLATFORM_EXPORT ResourceFetcher +@@ -261,7 +261,8 @@ class PLATFORM_EXPORT ResourceFetcher uint32_t inflight_keepalive_bytes); blink::mojom::ControllerServiceWorkerMode IsControlledByServiceWorker() const; diff --git a/bromite/build/patches/Partition-blobs-by-top-frame-URL.patch b/bromite/build/patches/Partition-blobs-by-top-frame-URL.patch index 1f1a296a..05baf964 100644 --- a/bromite/build/patches/Partition-blobs-by-top-frame-URL.patch +++ b/bromite/build/patches/Partition-blobs-by-top-frame-URL.patch @@ -1,4 +1,4 @@ -From e8ca9440d3e741bcb54a1122733d881e5d83a704 Mon Sep 17 00:00:00 2001 +From eda9c8fffb396499eace52dc27d628fd5433373d Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 20 Sep 2022 07:20:01 +0000 Subject: [PATCH 183/192] Partition blobs by top frame URL diff --git a/bromite/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch b/bromite/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch index b17d42fa..ac4f16af 100644 --- a/bromite/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch +++ b/bromite/build/patches/Re-introduce-modal-dialog-flag-to-close-all-tabs.patch @@ -1,4 +1,4 @@ -From 3cb8b453e37be15a97d3560ce54a50ad8283ff02 Mon Sep 17 00:00:00 2001 +From e08fd94e8ab56aab590d6c28280887623da4203a Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 8 Aug 2022 02:35:35 +0200 Subject: [PATCH 126/192] Re-introduce modal dialog flag to close all tabs @@ -9,33 +9,31 @@ This reverts commit 614a998c5af5dcd36baffa6d65090c0b8decb03f. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../tab_management/CloseAllTabsDialog.java | 6 +++++ - .../CloseAllTabsDialogTest.java | 3 +++ - .../CloseAllTabsDialogUnitTest.java | 23 +++++++++++++++++++ - chrome/browser/about_flags.cc | 7 ++++++ - chrome/browser/flag_descriptions.cc | 5 ++++ - chrome/browser/flag_descriptions.h | 3 +++ - .../flags/android/chrome_feature_list.cc | 9 ++++++-- - .../flags/android/chrome_feature_list.h | 1 + - .../browser/flags/ChromeFeatureList.java | 1 + - 9 files changed, 56 insertions(+), 2 deletions(-) + .../browser/tasks/tab_management/CloseAllTabsDialog.java | 6 ++++++ + chrome/browser/about_flags.cc | 7 +++++++ + chrome/browser/flag_descriptions.cc | 5 +++++ + chrome/browser/flag_descriptions.h | 3 +++ + chrome/browser/flags/android/chrome_feature_list.cc | 9 +++++++-- + chrome/browser/flags/android/chrome_feature_list.h | 1 + + .../chromium/chrome/browser/flags/ChromeFeatureList.java | 1 + + 7 files changed, 30 insertions(+), 2 deletions(-) diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialog.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialog.java -index 3e69fa2640169..0d5a8d46693ce 100644 +index 50cfd9991069a..e25e5e85e7fb2 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialog.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialog.java -@@ -9,6 +9,7 @@ import android.content.Context; +@@ -12,6 +12,7 @@ import androidx.annotation.VisibleForTesting; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.supplier.Supplier; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.R; + import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.ui.modaldialog.DialogDismissalCause; - import org.chromium.ui.modaldialog.ModalDialogManager; -@@ -30,6 +31,11 @@ public class CloseAllTabsDialog { +@@ -35,6 +36,11 @@ public class CloseAllTabsDialog { public static void show(Context context, - Supplier modalDialogManagerSupplier, Runnable onCloseAll, - boolean isIncognito) { + Supplier modalDialogManagerSupplier, + @NonNull TabModelSelector tabModelSelector, Runnable onCloseAll) { + if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CLOSE_ALL_TABS_MODAL_DIALOG)) { + onCloseAll.run(); + return; @@ -43,100 +41,12 @@ index 3e69fa2640169..0d5a8d46693ce 100644 + assert modalDialogManagerSupplier.hasValue(); final ModalDialogManager manager = modalDialogManagerSupplier.get(); - -diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogTest.java -index 9eb9a483922f8..f31a847642ef9 100644 ---- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogTest.java -+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogTest.java -@@ -28,11 +28,13 @@ import org.chromium.base.test.params.ParameterSet; - import org.chromium.base.test.params.ParameterizedRunner; - import org.chromium.base.test.util.CommandLineFlags; - import org.chromium.base.test.util.Restriction; -+import org.chromium.chrome.browser.flags.ChromeFeatureList; - import org.chromium.chrome.browser.flags.ChromeSwitches; - import org.chromium.chrome.browser.tabmodel.TabModelSelector; - import org.chromium.chrome.browser.ui.appmenu.AppMenuTestSupport; - import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; - import org.chromium.chrome.test.ChromeTabbedActivityTestRule; -+import org.chromium.chrome.test.util.browser.Features.EnableFeatures; - import org.chromium.content_public.browser.test.util.TestThreadUtils; - import org.chromium.ui.test.util.UiRestriction; - -@@ -44,6 +46,7 @@ import java.util.List; - */ - @RunWith(ParameterizedRunner.class) - @UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) -+@EnableFeatures({ChromeFeatureList.CLOSE_ALL_TABS_MODAL_DIALOG}) - @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) - public class CloseAllTabsDialogTest { - @ParameterAnnotations.ClassParameter -diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogUnitTest.java -index 2e1293faf36da..0e20244ab0ada 100644 ---- a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogUnitTest.java -+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/CloseAllTabsDialogUnitTest.java -@@ -22,8 +22,10 @@ import org.mockito.Mockito; - import org.mockito.MockitoAnnotations; - import org.robolectric.annotation.Config; - -+import org.chromium.base.FeatureList; - import org.chromium.base.test.BaseRobolectricTestRunner; - import org.chromium.base.test.util.HistogramWatcher; -+import org.chromium.chrome.browser.flags.ChromeFeatureList; - import org.chromium.chrome.tab_ui.R; - import org.chromium.ui.modaldialog.DialogDismissalCause; - import org.chromium.ui.modaldialog.ModalDialogManager; -@@ -122,6 +124,7 @@ public class CloseAllTabsDialogUnitTest { - @Test - @SmallTest - public void testDialog() { -+ enableFeature(true); - final boolean isIncognito = false; - CloseAllTabsDialog.show(mContext, this::getModalDialogManager, - () -> { mRunnableCalled = true; }, isIncognito); -@@ -142,6 +145,7 @@ public class CloseAllTabsDialogUnitTest { - @Test - @SmallTest - public void testDismissButton() { -+ enableFeature(true); - final boolean isIncognito = true; - CloseAllTabsDialog.show(mContext, this::getModalDialogManager, - () -> { mRunnableCalled = true; }, isIncognito); -@@ -162,6 +166,7 @@ public class CloseAllTabsDialogUnitTest { - @Test - @SmallTest - public void testDismissNoButton() { -+ enableFeature(true); - final boolean isIncognito = false; - CloseAllTabsDialog.show(mContext, this::getModalDialogManager, - () -> { mRunnableCalled = true; }, isIncognito); -@@ -179,4 +184,22 @@ public class CloseAllTabsDialogUnitTest { - verifyDismissed(); - histograms.assertExpected(); - } -+ -+ @Test -+ @SmallTest -+ public void testDialogInactive() { -+ enableFeature(false); -+ final boolean isIncognito = false; -+ CloseAllTabsDialog.show(mContext, this::getModalDialogManager, -+ () -> { mRunnableCalled = true; }, isIncognito); -+ -+ assertNull(mMockModalDialogManager.getDialogModel()); -+ assertTrue(mRunnableCalled); -+ } -+ -+ private void enableFeature(boolean enable) { -+ FeatureList.TestValues values = new FeatureList.TestValues(); -+ values.addFeatureFlagOverride(ChromeFeatureList.CLOSE_ALL_TABS_MODAL_DIALOG, enable); -+ FeatureList.setTestValues(values); -+ } - } + final boolean isIncognito = tabModelSelector.getCurrentModel().isIncognito(); diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 1284c22e17453..c0a1b31295fdb 100644 +index e744b5522bc88..1b2515a172b22 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9473,6 +9473,13 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9589,6 +9589,13 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(base::i18n::kLacrosMergeIcuDataFile)}, #endif @@ -151,10 +61,10 @@ index 1284c22e17453..c0a1b31295fdb 100644 // TODO(https://crbug.com/1443349): Add Windows once library supports it. {"layout-extraction", flag_descriptions::kLayoutExtractionName, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 594a75391934f..425a6ddaa75ed 100644 +index 9dd326f9db2a2..9faf86f94d203 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -3854,6 +3854,11 @@ const char kChimeAndroidSdkDescription[] = +@@ -3908,6 +3908,11 @@ const char kChimeAndroidSdkDescription[] = "Enable Chime SDK to receive push notification."; const char kChimeAndroidSdkName[] = "Use Chime SDK"; @@ -167,7 +77,7 @@ index 594a75391934f..425a6ddaa75ed 100644 const char kCloseTabSuggestionsDescription[] = "Suggests to the user to close Tabs that haven't been used beyond a " diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 9f14bf059b68a..9625553e578fb 100644 +index b3a69b9dbbbb0..c095902cd95fc 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h @@ -45,6 +45,9 @@ namespace flag_descriptions { @@ -181,19 +91,19 @@ index 9f14bf059b68a..9625553e578fb 100644 extern const char kAcceleratedVideoDecodeDescription[]; diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index 8ee35e9e52eac..68ec6f5c77d55 100644 +index 04007268b555c..81cadb4071645 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -170,6 +170,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -173,6 +173,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kBackGestureActivityTabProvider, &kBackGestureRefactorActivityAndroid, &kBackGestureRefactorAndroid, + &kCloseAllTabsModalDialog, &kBackgroundThreadPool, &kBaselineGM3SurfaceColors, - &kCastDeviceFilter, -@@ -493,6 +494,10 @@ BASE_FEATURE(kBaselineGM3SurfaceColors, - "BaselineGM3SurfaceColors", + &kCacheActivityTaskID, +@@ -506,6 +507,10 @@ BASE_FEATURE(kCacheActivityTaskID, + "CacheActivityTaskID", base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kCloseAllTabsModalDialog, @@ -203,7 +113,7 @@ index 8ee35e9e52eac..68ec6f5c77d55 100644 // Used in downstream code. BASE_FEATURE(kCastDeviceFilter, "CastDeviceFilter", -@@ -503,8 +508,8 @@ BASE_FEATURE(kClearOmniboxFocusAfterNavigation, +@@ -516,8 +521,8 @@ BASE_FEATURE(kClearOmniboxFocusAfterNavigation, base::FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kCloseTabSuggestions, @@ -215,29 +125,29 @@ index 8ee35e9e52eac..68ec6f5c77d55 100644 BASE_FEATURE(kCloseTabSaveTabList, "CloseTabSaveTabList", diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h -index 4de33d71bb6e4..b4d994655a6bd 100644 +index 6ebe4b3132b8c..b24ca80ae7978 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -31,6 +31,7 @@ BASE_DECLARE_FEATURE(kBackGestureRefactorAndroid); - BASE_DECLARE_FEATURE(kBackgroundThreadPool); +@@ -35,6 +35,7 @@ BASE_DECLARE_FEATURE(kBackgroundThreadPool); BASE_DECLARE_FEATURE(kBaselineGM3SurfaceColors); + BASE_DECLARE_FEATURE(kCacheActivityTaskID); BASE_DECLARE_FEATURE(kClearOmniboxFocusAfterNavigation); +BASE_DECLARE_FEATURE(kCloseAllTabsModalDialog); BASE_DECLARE_FEATURE(kCloseTabSuggestions); BASE_DECLARE_FEATURE(kCloseTabSaveTabList); BASE_DECLARE_FEATURE(kCreateNewTabInitializeRenderer); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index 2426f3ef67fad..b748aa6f4d7b6 100644 +index 96a6404e6425b..cd651e7d1a787 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -187,6 +187,7 @@ public abstract class ChromeFeatureList { +@@ -194,6 +194,7 @@ public abstract class ChromeFeatureList { public static final String CCT_RESIZABLE_90_MAXIMUM_HEIGHT = "CCTResizable90MaximumHeight"; public static final String CCT_RESIZABLE_ALLOW_RESIZE_BY_USER_GESTURE = "CCTResizableAllowResizeByUserGesture"; + public static final String CLOSE_ALL_TABS_MODAL_DIALOG = "CloseAllTabsModalDialog"; public static final String CCT_RESIZABLE_FOR_THIRD_PARTIES = "CCTResizableForThirdParties"; public static final String CCT_RESIZABLE_SIDE_SHEET = "CCTResizableSideSheet"; - public static final String CCT_RESIZABLE_SIDE_SHEET_DISCOVER_FEED_SETTINGS = + public static final String CCT_RESIZABLE_SIDE_SHEET_FOR_THIRD_PARTIES = -- 2.34.1 diff --git a/bromite/build/patches/Re-introduce-override_build_timestamp.patch b/bromite/build/patches/Re-introduce-override_build_timestamp.patch index 1251015d..8a3e6a33 100644 --- a/bromite/build/patches/Re-introduce-override_build_timestamp.patch +++ b/bromite/build/patches/Re-introduce-override_build_timestamp.patch @@ -1,4 +1,4 @@ -From 71545fcf8e96a05c237e31761a0cc0edd490f068 Mon Sep 17 00:00:00 2001 +From 76aba544e648e6c8e552885bcd85cb896287b7e3 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 30 Dec 2018 09:26:12 +0100 Subject: [PATCH 149/192] Re-introduce override_build_timestamp @@ -15,10 +15,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/base/BUILD.gn b/base/BUILD.gn -index c58a907bef5c7..b9f75377acfe2 100644 +index 1105542f17366..dc8e2c1f8dde0 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn -@@ -4104,8 +4104,13 @@ action("build_date") { +@@ -4068,8 +4068,13 @@ action("build_date") { args = [ rebase_path("$target_gen_dir/generated_build_date.h", root_build_dir), @@ -34,7 +34,7 @@ index c58a907bef5c7..b9f75377acfe2 100644 if (enable_nocompile_tests) { diff --git a/build_overrides/build.gni b/build_overrides/build.gni -index 0115814931c76..9364095abf624 100644 +index 1ffa8c229fe9c..6e36429033c26 100644 --- a/build_overrides/build.gni +++ b/build_overrides/build.gni @@ -46,6 +46,11 @@ declare_args() { diff --git a/bromite/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch b/bromite/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch index e78e6b8d..62ab7412 100644 --- a/bromite/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch +++ b/bromite/build/patches/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch @@ -1,33 +1,34 @@ -From 8c9ac5138791476349295aa6e286fac4924a118a Mon Sep 17 00:00:00 2001 +From 416854b1d11836c76f8eca01ad5cccc74098dc6e Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 28 Apr 2018 08:30:26 +0200 Subject: [PATCH 098/192] Reduce HTTP headers in DoH requests to bare minimum License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - net/base/load_flags_list.h | 5 +++++ - net/dns/dns_transaction.cc | 2 +- - net/url_request/url_request_http_job.cc | 8 ++++++-- - 3 files changed, 12 insertions(+), 3 deletions(-) + net/base/load_flags_list.h | 6 ++++++ + net/dns/dns_transaction.cc | 2 +- + net/url_request/url_request_http_job.cc | 10 +++++++--- + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h -index f936d951fe272..d84d356e3592a 100644 +index 4fc3870bcfbc8..a07e86ee02eff 100644 --- a/net/base/load_flags_list.h +++ b/net/base/load_flags_list.h -@@ -103,3 +103,8 @@ LOAD_FLAG(RESTRICTED_PREFETCH, 1 << 15) - // is considered privileged, and therefore this flag must only be set from a - // trusted process. - LOAD_FLAG(CAN_USE_RESTRICTED_PREFETCH, 1 << 16) +@@ -110,3 +110,9 @@ LOAD_FLAG(CAN_USE_SHARED_DICTIONARY, 1 << 17) + // Indicates that CAN_USE_SHARED_DICTIONARY must be disabled after a redirect to + // another origin. + LOAD_FLAG(DISABLE_SHARED_DICTIONARY_AFTER_CROSS_ORIGIN_REDIRECT, 1 << 18) ++ +// This load will not send Accept-Language or User-Agent headers, and not +// advertise brotli encoding. +// Used to comply with IETF (draft) DNS-over-HTTPS: +// "Implementors SHOULD NOT set non-essential HTTP headers in DoH client requests." +LOAD_FLAG(MINIMAL_HEADERS, 1 << 19) diff --git a/net/dns/dns_transaction.cc b/net/dns/dns_transaction.cc -index d89174ba20270..a21e98bb5ba4f 100644 +index 4a6596d3421aa..afbe0da0e6ba5 100644 --- a/net/dns/dns_transaction.cc +++ b/net/dns/dns_transaction.cc -@@ -478,7 +478,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate { +@@ -480,7 +480,7 @@ class DnsHTTPAttempt : public DnsAttempt, public URLRequest::Delegate { // avoid deadlock and enable the use of preconfigured IP addresses. request_->SetSecureDnsPolicy(SecureDnsPolicy::kBootstrap); request_->SetLoadFlags(request_->load_flags() | LOAD_DISABLE_CACHE | @@ -37,10 +38,10 @@ index d89174ba20270..a21e98bb5ba4f 100644 request_->set_isolation_info(isolation_info); } diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc -index 00b3c891bf3bd..0506d5e087b9c 100644 +index 43e03be287f2a..61b8138de0f00 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc -@@ -351,6 +351,7 @@ void URLRequestHttpJob::OnGotFirstPartySetCacheFilterMatchInfo( +@@ -350,6 +350,7 @@ void URLRequestHttpJob::OnGotFirstPartySetCacheFilterMatchInfo( // fields in the referrer. GURL referrer(request_->referrer()); @@ -48,7 +49,7 @@ index 00b3c891bf3bd..0506d5e087b9c 100644 // Our consumer should have made sure that this is a safe referrer (e.g. via // URLRequestJob::ComputeReferrerForPolicy). if (referrer.is_valid()) { -@@ -358,11 +359,14 @@ void URLRequestHttpJob::OnGotFirstPartySetCacheFilterMatchInfo( +@@ -357,11 +358,14 @@ void URLRequestHttpJob::OnGotFirstPartySetCacheFilterMatchInfo( request_info_.extra_headers.SetHeader(HttpRequestHeaders::kReferer, referer_value); } @@ -63,12 +64,14 @@ index 00b3c891bf3bd..0506d5e087b9c 100644 AddExtraHeaders(); -@@ -615,9 +619,9 @@ void URLRequestHttpJob::StartTransactionInternal() { +@@ -618,10 +622,10 @@ void URLRequestHttpJob::StartTransactionInternal() { void URLRequestHttpJob::AddExtraHeaders() { request_info_.extra_headers.SetAcceptEncodingIfMissing( request()->url(), request()->accepted_stream_types(), -- request()->context()->enable_brotli()); -+ !(request_info_.load_flags & LOAD_MINIMAL_HEADERS) && request()->context()->enable_brotli()); +- request()->context()->enable_brotli(), +- request()->context()->enable_zstd()); ++ !(request_info_.load_flags & LOAD_MINIMAL_HEADERS) && request()->context()->enable_brotli(), ++ !(request_info_.load_flags & LOAD_MINIMAL_HEADERS) && request()->context()->enable_zstd()); - if (http_user_agent_settings_) { + if (!(request_info_.load_flags & LOAD_MINIMAL_HEADERS) && http_user_agent_settings_) { diff --git a/bromite/build/patches/Remove-EV-certificates.patch b/bromite/build/patches/Remove-EV-certificates.patch index 776c728c..1c8175f3 100644 --- a/bromite/build/patches/Remove-EV-certificates.patch +++ b/bromite/build/patches/Remove-EV-certificates.patch @@ -1,4 +1,4 @@ -From 2d0fae5486c9fe718182b67a5843adb599a9fcb6 Mon Sep 17 00:00:00 2001 +From 9c4a46d3ba672b222e5eccf0eb4acf552a0f5c3d Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Thu, 2 Apr 2015 12:44:23 +0200 Subject: [PATCH 001/192] Remove EV certificates diff --git a/bromite/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch b/bromite/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch index bd2aa6d6..01d1d913 100644 --- a/bromite/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch +++ b/bromite/build/patches/Remove-HTTP-referrals-in-cross-origin-navigation.patch @@ -1,4 +1,4 @@ -From 71c54faf56be6b32bdd19143771faff4c8d94454 Mon Sep 17 00:00:00 2001 +From bf180897cd89d7a91f6a5fb5cb4cd243c7c6ed69 Mon Sep 17 00:00:00 2001 From: uazo Date: Wed, 21 Sep 2022 12:28:17 +0000 Subject: [PATCH 186/192] Remove HTTP referrals in cross origin navigation @@ -25,22 +25,21 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../strings/android_chrome_strings.grd | 24 +++++ chrome/browser/ui/prefs/pref_watcher.cc | 2 + chrome/browser/ui/prefs/prefs_tab_helper.cc | 2 + - chrome/common/pref_names.cc | 3 + - chrome/common/pref_names.h | 1 + + chrome/common/pref_names.h | 3 + .../renderer_host/navigation_request.cc | 8 ++ .../network/public/cpp/resource_request.h | 2 +- .../renderer_preferences.h | 1 + - 18 files changed, 307 insertions(+), 1 deletion(-) + 17 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 chrome/android/java/res/layout/radio_button_group_referer_policy_preference.xml create mode 100644 chrome/android/java/res/xml/referer_policy_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/RadioButtonGroupRefererSettings.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/RefererSettingsFragment.java diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni -index 73e08ab076b1c..11d256db5de4f 100644 +index 2b040a373ab08..bbf7312af0f36 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -671,6 +671,8 @@ chrome_java_resources = [ +@@ -675,6 +675,8 @@ chrome_java_resources = [ "java/res/xml/incognito_preferences.xml", "java/res/xml/privacy_preferences.xml", "java/res/xml/privacy_preferences_v2.xml", @@ -50,10 +49,10 @@ index 73e08ab076b1c..11d256db5de4f 100644 "java/res/xml/tracing_preferences.xml", "java/res/xml/useragent_preferences.xml", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index 4eb3c924374d5..52f6b49bb5c8d 100644 +index 83ca38110be4f..287492c47f95b 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -955,6 +955,8 @@ chrome_java_sources = [ +@@ -964,6 +964,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java", "java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java", "java/src/org/chromium/chrome/browser/privacy/settings/IncognitoSettings.java", @@ -168,7 +167,7 @@ index 0000000000000..6788bfe9c39c2 + app:allowDividerBelow="false" /> + 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 -index 3d299d1fae26c..4eed3556cb299 100644 +index 447224e584889..65d7d279c99e7 100644 --- 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 @@ -32,6 +32,7 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -187,7 +186,7 @@ index 3d299d1fae26c..4eed3556cb299 100644 private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox"; private static final String PREF_PROXY_OPTIONS = "proxy"; private static final String PREF_PRIVACY_GUIDE = "privacy_guide"; -@@ -358,6 +360,10 @@ public class PrivacySettings extends PreferenceFragmentCompat +@@ -354,6 +356,10 @@ public class PrivacySettings extends PreferenceFragmentCompat : R.string.text_off); } @@ -379,10 +378,10 @@ index 0000000000000..027ad1b136909 + } +} diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc -index a67a548f1c6ea..6cc9660971d48 100644 +index 38c2892fd1baf..5128172f66899 100644 --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc -@@ -471,6 +471,9 @@ SystemNetworkContextManager::SystemNetworkContextManager( +@@ -520,6 +520,9 @@ SystemNetworkContextManager::SystemNetworkContextManager( base::BindRepeating(&SystemNetworkContextManager::UpdateReferrersEnabled, base::Unretained(this))); @@ -392,7 +391,7 @@ index a67a548f1c6ea..6cc9660971d48 100644 pref_change_registrar_.Add( prefs::kExplicitlyAllowedNetworkPorts, base::BindRepeating( -@@ -562,6 +565,7 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { +@@ -611,6 +614,7 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRegistrySimple* registry) { // the system NetworkContext, and the per-profile pref values are used for // the profile NetworkContexts. registry->RegisterBooleanPref(prefs::kEnableReferrers, true); @@ -413,10 +412,10 @@ index 8a832415700e8..f29729ffb422b 100644 pref_service->GetBoolean(prefs::kEnableDoNotTrack); prefs->enable_encrypted_media = diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 4f6ddd8ea5dcf..47f3b043ad702 100644 +index 7e9c8eb1477e7..980158fa070cd 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -969,6 +969,30 @@ CHAR_LIMIT guidelines: +@@ -993,6 +993,30 @@ CHAR_LIMIT guidelines: For example, some websites may respond to this request by showing you ads that aren’t based on other websites you’ve visited. Many websites will still collect and use your browsing data — for example to improve security, to provide content, ads and recommendations, and to generate reporting statistics. @@ -473,37 +472,25 @@ index 0e9cfc24accbe..0dccc5b207596 100644 registry->RegisterBooleanPref(prefs::kEnableEncryptedMedia, true); registry->RegisterBooleanPref(prefs::kScrollToTextFragmentEnabled, false); #if BUILDFLAG(IS_ANDROID) -diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc -index 9de4b5dba8cd0..bc66dfb492ea3 100644 ---- a/chrome/common/pref_names.cc -+++ b/chrome/common/pref_names.cc -@@ -1362,6 +1362,9 @@ const char kEnableHyperlinkAuditing[] = "enable_a_ping"; - // Whether to enable sending referrers. - const char kEnableReferrers[] = "enable_referrers"; - -+// Set referrer policy. -+const char kReferrersPolicy[] = "referrers_policy"; -+ - // Whether to send the DNT header. - const char kEnableDoNotTrack[] = "enable_do_not_track"; - diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h -index 3e09ba04a2eae..7ec4668c3deae 100644 +index a574a301fd07a..ed8d4886c830e 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -415,6 +415,7 @@ extern const char kPinnedTabs[]; - extern const char kDisable3DAPIs[]; - extern const char kEnableHyperlinkAuditing[]; - extern const char kEnableReferrers[]; -+extern const char kReferrersPolicy[]; - extern const char kEnableDoNotTrack[]; - extern const char kEnableEncryptedMedia[]; +@@ -1495,6 +1495,9 @@ inline constexpr char kEnableDoNotTrack[] = "enable_do_not_track"; + inline constexpr char kEnableEncryptedMedia[] = + "webkit.webprefs.encrypted_media_enabled"; ++// Set referrer policy. ++inline constexpr char kReferrersPolicy[] = "referrers_policy"; ++ + // Boolean that specifies whether to import the form data for autofill from the + // default browser on first run. + inline constexpr char kImportAutofillFormData[] = "import_autofill_form_data"; diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc -index 31d669475b398..80401955598db 100644 +index 4a328d868a460..1611eaadeb746 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc -@@ -390,6 +390,14 @@ void AddAdditionalRequestHeaders( +@@ -391,6 +391,14 @@ void AddAdditionalRequestHeaders( blink::mojom::Referrer(GURL(), network::mojom::ReferrerPolicy::kNever); } @@ -519,10 +506,10 @@ index 31d669475b398..80401955598db 100644 if (NeedsHTTPOrigin(headers, method)) { url::Origin origin_header_value = initiator_origin.value_or(url::Origin()); diff --git a/services/network/public/cpp/resource_request.h b/services/network/public/cpp/resource_request.h -index 185c4ba2dad84..f426bb22cb1c5 100644 +index bf16ec49862bd..f3aeef2726fa8 100644 --- a/services/network/public/cpp/resource_request.h +++ b/services/network/public/cpp/resource_request.h -@@ -135,7 +135,7 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceRequest { +@@ -144,7 +144,7 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceRequest { std::vector navigation_redirect_chain; GURL referrer; diff --git a/bromite/build/patches/Remove-SMS-integration.patch b/bromite/build/patches/Remove-SMS-integration.patch index 38216191..612f8cef 100644 --- a/bromite/build/patches/Remove-SMS-integration.patch +++ b/bromite/build/patches/Remove-SMS-integration.patch @@ -1,4 +1,4 @@ -From 206d6d71576817a20a64338059d762e65bf011cc Mon Sep 17 00:00:00 2001 +From 2b52c1f9c8e4dfb6388639d4876048de558f8fa9 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 3 Nov 2019 08:22:29 +0100 Subject: [PATCH 011/192] Remove SMS integration @@ -66,7 +66,7 @@ index 1b52c6fe0820b..211ef8400523e 100644 * Sets the {@link LocaleManager} App language to |languageName|. * TODO(crbug.com/1333981) Move to Android T. diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java -index a0dbf7684e315..53e63c0aa98d2 100644 +index 51c4581ba4ae0..91f9ed6882145 100644 --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java @@ -6,9 +6,6 @@ package org.chromium.content.browser.sms; @@ -78,8 +78,8 @@ index a0dbf7684e315..53e63c0aa98d2 100644 - import org.chromium.base.ContextUtils; import org.chromium.base.Log; - import org.chromium.base.annotations.CalledByNative; -@@ -43,17 +40,11 @@ public class SmsProviderGms { + import org.chromium.base.ResettersForTesting; +@@ -44,17 +41,11 @@ public class SmsProviderGms { @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) public SmsProviderGms(long smsProviderGmsAndroid, @GmsBackend int backend, @@ -98,7 +98,7 @@ index a0dbf7684e315..53e63c0aa98d2 100644 if (mBackend == GmsBackend.AUTO || mBackend == GmsBackend.USER_CONSENT) { mUserConsentReceiver = new SmsUserConsentReceiver(this, mContext); } -@@ -85,12 +76,7 @@ public class SmsProviderGms { +@@ -86,12 +77,7 @@ public class SmsProviderGms { @CalledByNative private static SmsProviderGms create(long smsProviderGmsAndroid, @GmsBackend int backend) { Log.d(TAG, "Creating SmsProviderGms"); @@ -112,7 +112,7 @@ index a0dbf7684e315..53e63c0aa98d2 100644 } @CalledByNative -@@ -179,13 +165,6 @@ public class SmsProviderGms { +@@ -180,13 +166,6 @@ public class SmsProviderGms { } public Wrappers.SmsRetrieverClientWrapper getClient() { diff --git a/bromite/build/patches/Remove-binary-blob-integrations.patch b/bromite/build/patches/Remove-binary-blob-integrations.patch index 49856012..fb1d40d9 100644 --- a/bromite/build/patches/Remove-binary-blob-integrations.patch +++ b/bromite/build/patches/Remove-binary-blob-integrations.patch @@ -1,4 +1,4 @@ -From 4eb040170b7c98663df07784e7e41f967da44644 Mon Sep 17 00:00:00 2001 +From b111a14d9f22c6ef2c08df6a302c9de94d87ebe0 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 5 Apr 2021 21:37:12 +0200 Subject: [PATCH 010/192] Remove binary blob integrations @@ -55,7 +55,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/ui/webauthn/sheet_models.cc | 7 +- .../webui/chrome_web_ui_controller_factory.cc | 3 - chrome/browser/webauthn/android/BUILD.gn | 1 - - .../CableAuthenticatorModuleProvider.java | 22 +- + .../CableAuthenticatorModuleProvider.java | 23 +- .../authenticator_request_dialog_model.cc | 4 - chrome/browser/webauthn/cablev2_devices.cc | 3 + chrome/test/android/BUILD.gn | 2 - @@ -67,7 +67,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/gcm_driver/gcm_client_impl.cc | 4 + .../gcm_driver/instance_id/android/BUILD.gn | 3 - .../instance_id/InstanceIDBridge.java | 47 +- - .../media_router/browser/android/BUILD.gn | 9 - + .../media_router/browser/android/BUILD.gn | 11 - .../media_router/BrowserMediaRouter.java | 18 +- .../components/media_router/MediaSink.java | 44 +- .../media_router/MediaStatusBridge.java | 40 +- @@ -90,7 +90,8 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/signin/public/android/BUILD.gn | 3 - .../signin/AccountRenameChecker.java | 16 - components/webauthn/android/BUILD.gn | 11 - - .../webauthn/AuthenticatorImpl.java | 83 +-- + .../webauthn/AuthenticatorImpl.java | 93 +-- + .../webauthn/CredManMetricsHelper.java | 17 - .../webauthn/Fido2ApiCallHelper.java | 58 +- .../push_messaging/push_messaging_manager.cc | 2 +- content/public/android/BUILD.gn | 4 - @@ -103,15 +104,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html third_party/android_deps/BUILD.gn | 570 +----------------- .../preconditions/javatests/BUILD.gn | 1 - .../gms/ChromiumPlayServicesAvailability.java | 10 +- + third_party/cardboard/BUILD.gn | 4 - weblayer/browser/java/BUILD.gn | 1 - weblayer/public/java/BUILD.gn | 1 - - 80 files changed, 96 insertions(+), 1978 deletions(-) + 82 files changed, 96 insertions(+), 2012 deletions(-) diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected -index 0073c63600484..56333e2cf58c2 100644 +index 7eaff182b4fde..2d9605bbb6b59 100644 --- a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected +++ b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected -@@ -21,10 +21,6 @@ +@@ -22,10 +22,6 @@ android:icon="@$PACKAGE:drawable/icon_webview" android:label="Android System WebView" android:multiArch="true"> @@ -122,7 +124,7 @@ index 0073c63600484..56333e2cf58c2 100644 # DIFF-ANCHOR: ea1a94af # DIFF-ANCHOR: b7cc06e9 @@ -131,7 +133,7 @@ index 0073c63600484..56333e2cf58c2 100644 @@ -325,8 +327,6 @@ index 6f3722cd64029..9d00f0c5aa74a 100644 - - @@ -337,7 +337,7 @@ index 6f3722cd64029..9d00f0c5aa74a 100644 -@@ -790,16 +785,6 @@ by a child template that "extends" this file. +@@ -784,16 +779,6 @@ by a child template that "extends" this file. @@ -354,7 +354,7 @@ index 6f3722cd64029..9d00f0c5aa74a 100644 @@ -381,7 +381,7 @@ index 6f3722cd64029..9d00f0c5aa74a 100644 -@@ -1036,20 +1001,10 @@ by a child template that "extends" this file. +@@ -1030,20 +995,10 @@ by a child template that "extends" this file. @@ -402,7 +402,7 @@ index 6f3722cd64029..9d00f0c5aa74a 100644 -@@ -1281,12 +1236,6 @@ by a child template that "extends" this file. +@@ -1297,12 +1252,6 @@ by a child template that "extends" this file. {% endif %} @@ -416,19 +416,19 @@ index 6f3722cd64029..9d00f0c5aa74a 100644 split preloader more time to work. --> ) { @@ -1101,10 +1101,10 @@ index bc580a9b37080..483471f6a7f07 100644 } else { r.SECURITY_KEYS_PHONES = r.SECURITY.createChild('/securityKeys/phones'); diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn -index d7bb16c28835b..a7fcc871fd105 100644 +index 8ffa857f767e8..1718e1d59de77 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn -@@ -367,8 +367,6 @@ static_library("ui") { +@@ -267,8 +267,6 @@ static_library("ui") { "webui/flags/flags_ui.h", "webui/flags/flags_ui_handler.cc", "webui/flags/flags_ui_handler.h", @@ -1113,7 +1113,7 @@ index d7bb16c28835b..a7fcc871fd105 100644 "webui/internals/internals_ui.cc", "webui/internals/internals_ui.h", "webui/interstitials/interstitial_ui.cc", -@@ -600,7 +598,6 @@ static_library("ui") { +@@ -504,7 +502,6 @@ static_library("ui") { "//components/feedback/redaction_tool", "//components/find_in_page", "//components/flags_ui", @@ -1122,16 +1122,16 @@ index d7bb16c28835b..a7fcc871fd105 100644 "//components/heap_profiling/multi_process", "//components/history/content/browser", diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fre/SigninFirstRunMediator.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fre/SigninFirstRunMediator.java -index 8b1045920a800..cb7fbb3e8f219 100644 +index 6751b80822014..32883bb9058b3 100644 --- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fre/SigninFirstRunMediator.java +++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/fre/SigninFirstRunMediator.java -@@ -189,12 +189,8 @@ public class SigninFirstRunMediator +@@ -190,12 +190,8 @@ public class SigninFirstRunMediator boolean isSigninDisabledByPolicy = false; boolean isMetricsReportingDisabledByPolicy = false; if (hasPolicies) { - isSigninDisabledByPolicy = - IdentityServicesProvider.get() -- .getSigninManager(Profile.getLastUsedRegularProfile()) +- .getSigninManager(mDelegate.getProfileSupplier().get()) - .isSigninDisabledByPolicy(); - isMetricsReportingDisabledByPolicy = - !mPrivacyPreferencesManager.isUsageAndCrashReportingPermittedByPolicy(); @@ -1141,10 +1141,10 @@ index 8b1045920a800..cb7fbb3e8f219 100644 final FrePolicy frePolicy = new FrePolicy(); frePolicy.metricsReportingDisabledByPolicy = isMetricsReportingDisabledByPolicy; diff --git a/chrome/browser/ui/webauthn/sheet_models.cc b/chrome/browser/ui/webauthn/sheet_models.cc -index f970e509f495c..421ecbeaa88c2 100644 +index 449c0f776f3fd..4592fea823407 100644 --- a/chrome/browser/ui/webauthn/sheet_models.cc +++ b/chrome/browser/ui/webauthn/sheet_models.cc -@@ -192,12 +192,7 @@ bool AuthenticatorMechanismSelectorSheetModel::IsManageDevicesButtonVisible() +@@ -188,12 +188,7 @@ bool AuthenticatorMechanismSelectorSheetModel::IsManageDevicesButtonVisible() const { // If any phones are shown then also show a button that goes to the settings // page to manage them. @@ -1159,7 +1159,7 @@ index f970e509f495c..421ecbeaa88c2 100644 void AuthenticatorMechanismSelectorSheetModel::OnManageDevices() { diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc -index 1fe6c2242c11f..df4841449a99b 100644 +index 75ab7f0bbbeed..2eb4bd497a036 100644 --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc @@ -42,7 +42,6 @@ @@ -1170,7 +1170,7 @@ index 1fe6c2242c11f..df4841449a99b 100644 #include "chrome/browser/ui/webui/internals/internals_ui.h" #include "chrome/browser/ui/webui/interstitials/interstitial_ui.h" #include "chrome/browser/ui/webui/intro/intro_ui.h" -@@ -469,8 +468,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, +@@ -473,8 +472,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUIFlagsHost) return &NewWebUI; @@ -1180,7 +1180,7 @@ index 1fe6c2242c11f..df4841449a99b 100644 return &NewWebUI; if (url.host_piece() == chrome::kChromeUIInterstitialHost) diff --git a/chrome/browser/webauthn/android/BUILD.gn b/chrome/browser/webauthn/android/BUILD.gn -index aa28e0e3c80da..77f21375c810f 100644 +index 4bbb952a14b75..1c61508731d73 100644 --- a/chrome/browser/webauthn/android/BUILD.gn +++ b/chrome/browser/webauthn/android/BUILD.gn @@ -13,7 +13,6 @@ android_library("java") { @@ -1192,7 +1192,7 @@ index aa28e0e3c80da..77f21375c810f 100644 "//base:jni_java", "//build/android:build_java", diff --git a/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java b/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java -index 1cba73bb048a0..c52d5ba6f3e09 100644 +index 8a4f1f311a826..8dc0e865fd006 100644 --- a/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java +++ b/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java @@ -29,8 +29,6 @@ import androidx.fragment.app.FragmentTransaction; @@ -1204,7 +1204,7 @@ index 1cba73bb048a0..c52d5ba6f3e09 100644 import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.PackageUtils; -@@ -43,7 +41,6 @@ import org.chromium.chrome.browser.notifications.NotificationWrapperBuilderFacto +@@ -45,7 +43,6 @@ import org.chromium.chrome.browser.notifications.NotificationWrapperBuilderFacto import org.chromium.chrome.browser.notifications.channels.ChromeChannelDefinitions; import org.chromium.chrome.modules.cablev2_authenticator.Cablev2AuthenticatorModule; import org.chromium.components.externalauth.ExternalAuthUtils; @@ -1212,12 +1212,12 @@ index 1cba73bb048a0..c52d5ba6f3e09 100644 import org.chromium.device.DeviceFeatureList; import org.chromium.device.DeviceFeatureMap; -@@ -264,24 +261,7 @@ public class CableAuthenticatorModuleProvider extends Fragment implements OnClic +@@ -284,25 +281,7 @@ public class CableAuthenticatorModuleProvider extends Fragment implements OnClic ok = false; } - if (!ok) { -- CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation(null); +- CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation(pointer, null); - return; - } - @@ -1229,26 +1229,27 @@ index 1cba73bb048a0..c52d5ba6f3e09 100644 - Task task = call.run(Fido2ApiCall.METHOD_GET_LINK_INFO, - Fido2ApiCall.TRANSACTION_GET_LINK_INFO, args, result); - task.addOnSuccessListener(linkInfo -> { -- CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation(linkInfo); +- CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation( +- pointer, linkInfo); - }).addOnFailureListener(exception -> { - Log.e(TAG, "Call to get linking information from Play Services failed", exception); -- CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation(null); +- CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation(pointer, null); - }); -+ CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation(null); ++ CableAuthenticatorModuleProviderJni.get().onHaveLinkingInformation(pointer, null); } @NativeMethods diff --git a/chrome/browser/webauthn/authenticator_request_dialog_model.cc b/chrome/browser/webauthn/authenticator_request_dialog_model.cc -index d32c7408d799d..c569bd296fe96 100644 +index 8056a73d8ec5e..7e82366772bdb 100644 --- a/chrome/browser/webauthn/authenticator_request_dialog_model.cc +++ b/chrome/browser/webauthn/authenticator_request_dialog_model.cc -@@ -1169,10 +1169,6 @@ void AuthenticatorRequestDialogModel::PopulateMechanisms() { +@@ -1409,10 +1409,6 @@ void AuthenticatorRequestDialogModel::PopulateMechanisms() { if (cable_ui_type_) { switch (*cable_ui_type_) { case AuthenticatorRequestDialogModel::CableUIType::CABLE_V2_2ND_FACTOR: - if (base::Contains(transport_availability_.available_transports, - kCable)) { -- include_add_phone_option = true; +- include_add_phone_option = !windows_handles_hybrid; - } break; @@ -1268,10 +1269,10 @@ index 4bbb5dca28970..16be8e43fffea 100644 kWebAuthnCablePairingsPrefName); diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn -index 8b54372366ce4..7fa77fc28eefb 100644 +index f77b911548bb7..174647c4da3ed 100644 --- a/chrome/test/android/BUILD.gn +++ b/chrome/test/android/BUILD.gn -@@ -240,8 +240,6 @@ android_library("chrome_java_integration_test_support") { +@@ -242,8 +242,6 @@ android_library("chrome_java_integration_test_support") { deps = [ ":chrome_java_test_support_common", @@ -1281,10 +1282,10 @@ index 8b54372366ce4..7fa77fc28eefb 100644 "//base:base_java_test_support", "//build/android:build_java", diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java -index 32031f9f357f8..335a64b4a3771 100644 +index bcab85ea82bad..493a402b5743b 100644 --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java -@@ -2435,14 +2435,6 @@ public class ExternalNavigationHandler { +@@ -2504,14 +2504,6 @@ public class ExternalNavigationHandler { * @return Whether the given intent is going to open an Instant App. */ private static boolean isIntentToInstantApp(Intent intent) { @@ -1321,7 +1322,7 @@ index b4d920e60fb7f..27226b5b71653 100644 "//base:base_java_test_support", "//base:base_junit_test_support", diff --git a/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java b/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java -index 28a0a2d573a73..c8dcc1d558828 100644 +index dc162cf299a11..f88ce0a01588b 100644 --- a/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java +++ b/components/externalauth/android/java/src/org/chromium/components/externalauth/ExternalAuthUtils.java @@ -15,9 +15,6 @@ import android.text.TextUtils; @@ -1333,8 +1334,8 @@ index 28a0a2d573a73..c8dcc1d558828 100644 - import org.chromium.base.ContextUtils; import org.chromium.base.Log; - import org.chromium.base.StrictModeContext; -@@ -25,7 +22,6 @@ import org.chromium.base.TraceEvent; + import org.chromium.base.ResettersForTesting; +@@ -26,7 +23,6 @@ import org.chromium.base.TraceEvent; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; import org.chromium.components.embedder_support.util.Origin; @@ -1342,7 +1343,7 @@ index 28a0a2d573a73..c8dcc1d558828 100644 /** * Utility class for external authentication tools. -@@ -171,9 +167,7 @@ public class ExternalAuthUtils { +@@ -172,9 +168,7 @@ public class ExternalAuthUtils { * when it is updating. */ public boolean isGooglePlayServicesMissing(final Context context) { @@ -1353,7 +1354,7 @@ index 28a0a2d573a73..c8dcc1d558828 100644 } /** -@@ -190,7 +184,6 @@ public class ExternalAuthUtils { +@@ -191,7 +185,6 @@ public class ExternalAuthUtils { public boolean canUseGooglePlayServices(final UserRecoverableErrorHandler errorHandler) { Context context = ContextUtils.getApplicationContext(); final int resultCode = checkGooglePlayServicesAvailable(context); @@ -1439,10 +1440,10 @@ index 7aca8e77543de..066586b615523 100644 throw new IOException(ERROR_MAIN_THREAD); } diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gcm_client_impl.cc -index 631be2c8a73a7..561a76960f39a 100644 +index f3855fd42f761..716f71f2e5a28 100644 --- a/components/gcm_driver/gcm_client_impl.cc +++ b/components/gcm_driver/gcm_client_impl.cc -@@ -450,6 +450,7 @@ void GCMClientImpl::StartGCM() { +@@ -448,6 +448,7 @@ void GCMClientImpl::StartGCM() { void GCMClientImpl::InitializeMCSClient() { DCHECK(network_connection_tracker_); @@ -1450,7 +1451,7 @@ index 631be2c8a73a7..561a76960f39a 100644 std::vector endpoints; endpoints.push_back(gservices_settings_.GetMCSMainEndpoint()); GURL fallback_endpoint = gservices_settings_.GetMCSFallbackEndpoint(); -@@ -643,6 +644,7 @@ void GCMClientImpl::AddHeartbeatInterval(const std::string& scope, +@@ -641,6 +642,7 @@ void GCMClientImpl::AddHeartbeatInterval(const std::string& scope, int interval_ms) { DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); DCHECK(mcs_client_); @@ -1458,7 +1459,7 @@ index 631be2c8a73a7..561a76960f39a 100644 mcs_client_->AddHeartbeatInterval(scope, interval_ms); } -@@ -654,6 +656,7 @@ void GCMClientImpl::RemoveHeartbeatInterval(const std::string& scope) { +@@ -652,6 +654,7 @@ void GCMClientImpl::RemoveHeartbeatInterval(const std::string& scope) { void GCMClientImpl::StartCheckin() { DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); @@ -1466,7 +1467,7 @@ index 631be2c8a73a7..561a76960f39a 100644 // Make sure no checkin is in progress. if (checkin_request_) -@@ -732,6 +735,7 @@ void GCMClientImpl::SetGServicesSettingsCallback(bool success) { +@@ -730,6 +733,7 @@ void GCMClientImpl::SetGServicesSettingsCallback(bool success) { void GCMClientImpl::SchedulePeriodicCheckin() { DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); @@ -1603,7 +1604,7 @@ index 11a61c85c51fc..dc4d5706cd5b4 100644 } @Override diff --git a/components/media_router/browser/android/BUILD.gn b/components/media_router/browser/android/BUILD.gn -index 5f712e1cbe036..3e51d2b8225d7 100644 +index 1bb7799e69386..3e51d2b8225d7 100644 --- a/components/media_router/browser/android/BUILD.gn +++ b/components/media_router/browser/android/BUILD.gn @@ -11,10 +11,6 @@ android_library("java") { @@ -1626,10 +1627,19 @@ index 5f712e1cbe036..3e51d2b8225d7 100644 ] } -@@ -146,9 +140,6 @@ robolectric_library("junit") { +@@ -103,7 +97,6 @@ android_library("test_support_java") { + ":java", + ":java_resources", + ":test_jni_headers", +- "$google_play_services_package:google_play_services_cast_java", + "//base:base_java", + "//base:base_java_test_support", + "//base:jni_java", +@@ -147,10 +140,6 @@ robolectric_library("junit") { deps = [ ":java", ":test_support_java", +- "$google_play_services_package:google_play_services_base_java", - "$google_play_services_package:google_play_services_basement_java", - "$google_play_services_package:google_play_services_cast_framework_java", - "$google_play_services_package:google_play_services_cast_java", @@ -1637,7 +1647,7 @@ index 5f712e1cbe036..3e51d2b8225d7 100644 "//base:base_java_test_support", "//base:base_junit_test_support", diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/BrowserMediaRouter.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/BrowserMediaRouter.java -index 105d982f08e31..1b58f26d1d81d 100644 +index d181c671b3525..1c02b2d3aab73 100644 --- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/BrowserMediaRouter.java +++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/BrowserMediaRouter.java @@ -10,9 +10,6 @@ import androidx.annotation.Nullable; @@ -1649,8 +1659,8 @@ index 105d982f08e31..1b58f26d1d81d 100644 - import org.chromium.base.ContextUtils; import org.chromium.base.Log; - import org.chromium.base.StrictModeContext; -@@ -42,20 +39,7 @@ public class BrowserMediaRouter implements MediaRouteManager { + import org.chromium.base.ResettersForTesting; +@@ -43,20 +40,7 @@ public class BrowserMediaRouter implements MediaRouteManager { new MediaRouteProvider.Factory() { @Override public void addProviders(MediaRouteManager manager) { @@ -2340,7 +2350,7 @@ index 5f67a70a39d08..218df701782b1 100644 protected void addRoute( MediaRoute route, String origin, int tabId, int nativeRequestId, boolean wasLaunched) { diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java -index 8b6b14b4b8ce7..66484f0007467 100644 +index b316169a42215..4ad41c34fe27e 100644 --- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java +++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/CafMessageHandler.java @@ -13,10 +13,6 @@ import android.util.SparseArray; @@ -2354,7 +2364,7 @@ index 8b6b14b4b8ce7..66484f0007467 100644 import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -@@ -345,49 +341,7 @@ public class CafMessageHandler { +@@ -340,49 +336,7 @@ public class CafMessageHandler { final int sequenceNumber) throws JSONException { if (volumeMessage == null) return false; if (!mSessionController.isConnected()) return false; @@ -2405,7 +2415,7 @@ index 8b6b14b4b8ce7..66484f0007467 100644 } @VisibleForTesting -@@ -675,19 +629,11 @@ public class CafMessageHandler { +@@ -670,19 +624,11 @@ public class CafMessageHandler { try { // "volume" is a part of "receiver" initialized below. JSONObject jsonVolume = new JSONObject(); @@ -2425,7 +2435,7 @@ index 8b6b14b4b8ce7..66484f0007467 100644 jsonReceiver.put("displayStatus", null); jsonReceiver.put("receiverType", "cast"); -@@ -700,25 +646,16 @@ public class CafMessageHandler { +@@ -695,25 +641,16 @@ public class CafMessageHandler { JSONObject jsonMessage = new JSONObject(); jsonMessage.put("sessionId", mSessionController.getSessionId()); @@ -2453,7 +2463,7 @@ index 8b6b14b4b8ce7..66484f0007467 100644 return jsonMessage.toString(); } catch (JSONException e) { -@@ -799,32 +736,6 @@ public class CafMessageHandler { +@@ -794,32 +731,6 @@ public class CafMessageHandler { boolean sendStringCastMessage( String message, String namespace, String clientId, int sequenceNumber) { if (!mSessionController.isConnected()) return false; @@ -2795,10 +2805,10 @@ index a6692a9b2fbc9..6facbdb95dad8 100644 private void scheduleProgressUpdateTask() { diff --git a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java -index b3bc157ec48d4..665b19f434445 100644 +index e349f2f754470..e25774fad44ff 100644 --- a/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java +++ b/components/media_router/browser/android/java/src/org/chromium/components/media_router/caf/remoting/CafRemotingMediaRouteProvider.java -@@ -70,7 +70,7 @@ public class CafRemotingMediaRouteProvider extends CafBaseMediaRouteProvider { +@@ -69,7 +69,7 @@ public class CafRemotingMediaRouteProvider extends CafBaseMediaRouteProvider { if (!mRoutes.containsKey(routeId)) return null; @@ -2807,7 +2817,7 @@ index b3bc157ec48d4..665b19f434445 100644 } @Override -@@ -79,7 +79,7 @@ public class CafRemotingMediaRouteProvider extends CafBaseMediaRouteProvider { +@@ -78,7 +78,7 @@ public class CafRemotingMediaRouteProvider extends CafBaseMediaRouteProvider { var controller = sessionController(); // There is no active remote playback media route. @@ -3062,7 +3072,7 @@ index 1377680800e2e..c72ee8a3935fb 100644 ] } diff --git a/components/signin/public/android/BUILD.gn b/components/signin/public/android/BUILD.gn -index 89bf2f56b47ad..317700736e043 100644 +index 57268838fa0df..a2b3b765cc6e6 100644 --- a/components/signin/public/android/BUILD.gn +++ b/components/signin/public/android/BUILD.gn @@ -2,8 +2,6 @@ import("//build/config/android/rules.gni") @@ -3074,7 +3084,7 @@ index 89bf2f56b47ad..317700736e043 100644 "//base:base_java", "//base:jni_java", "//build/android:build_java", -@@ -176,7 +174,6 @@ robolectric_library("junit") { +@@ -177,7 +175,6 @@ robolectric_library("junit") { deps = [ ":java", ":signin_java_test_support", @@ -3083,7 +3093,7 @@ index 89bf2f56b47ad..317700736e043 100644 "//base:base_java_test_support", "//base:base_java_test_support_uncommon", diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java -index 25beba5798c61..049dc7ffb0069 100644 +index af47d24926964..0ca0107de2e3f 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountRenameChecker.java @@ -11,10 +11,6 @@ import androidx.annotation.Nullable; @@ -3117,7 +3127,7 @@ index 25beba5798c61..049dc7ffb0069 100644 } } diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/BUILD.gn -index 7daf8cb26c580..526d9113a432e 100644 +index f746285f72ed9..89a72038bb2e0 100644 --- a/components/webauthn/android/BUILD.gn +++ b/components/webauthn/android/BUILD.gn @@ -6,8 +6,6 @@ import("//build/config/android/rules.gni") @@ -3129,10 +3139,10 @@ index 7daf8cb26c580..526d9113a432e 100644 "java/src/org/chromium/components/webauthn/InternalAuthenticator.java", "java/src/org/chromium/components/webauthn/WebAuthnBrowserBridge.java", ] -@@ -18,11 +16,7 @@ android_library("java") { - sources = [ +@@ -19,11 +17,7 @@ android_library("java") { "java/src/org/chromium/components/webauthn/AuthenticatorFactory.java", "java/src/org/chromium/components/webauthn/AuthenticatorImpl.java", + "java/src/org/chromium/components/webauthn/CredManMetricsHelper.java", - "java/src/org/chromium/components/webauthn/Fido2Api.java", - "java/src/org/chromium/components/webauthn/Fido2ApiCall.java", "java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java", @@ -3141,7 +3151,7 @@ index 7daf8cb26c580..526d9113a432e 100644 "java/src/org/chromium/components/webauthn/GetAssertionResponseCallback.java", "java/src/org/chromium/components/webauthn/GetMatchingCredentialIdsResponseCallback.java", "java/src/org/chromium/components/webauthn/InternalAuthenticator.java", -@@ -33,9 +27,6 @@ android_library("java") { +@@ -34,9 +28,6 @@ android_library("java") { ] deps = [ @@ -3151,7 +3161,7 @@ index 7daf8cb26c580..526d9113a432e 100644 "//base:base_java", "//base:jni_java", "//build/android:build_java", -@@ -87,8 +78,6 @@ android_library("test_support_java") { +@@ -89,8 +80,6 @@ android_library("test_support_java") { source_set("android") { sources = [ @@ -3161,10 +3171,10 @@ index 7daf8cb26c580..526d9113a432e 100644 "internal_authenticator_android.h", "webauthn_browser_bridge.cc", diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java -index a01ca0b4ded5c..b500abad64c3b 100644 +index dc58ec5a52fcb..eaa48c4ada757 100644 --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/AuthenticatorImpl.java -@@ -10,7 +10,6 @@ import android.os.Build; +@@ -12,7 +12,6 @@ import android.os.Build; import android.util.Pair; import org.chromium.base.Callback; @@ -3172,7 +3182,7 @@ index a01ca0b4ded5c..b500abad64c3b 100644 import org.chromium.base.metrics.RecordHistogram; import org.chromium.blink.mojom.Authenticator; import org.chromium.blink.mojom.AuthenticatorStatus; -@@ -52,9 +51,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -59,9 +58,6 @@ public final class AuthenticatorImpl implements Authenticator { /** The payment information to be added to the "clientDataJson". */ private PaymentOptions mPayment; @@ -3182,20 +3192,25 @@ index a01ca0b4ded5c..b500abad64c3b 100644 private MakeCredential_Response mMakeCredentialCallback; private GetAssertion_Response mGetAssertionCallback; // A queue is used to store pending IsUserVerifyingPlatformAuthenticatorAvailable request -@@ -63,9 +59,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -70,14 +66,6 @@ public final class AuthenticatorImpl implements Authenticator { // situation does not matter because all pending requests will return the same value. private Queue> mIsUserVerifyingPlatformAuthenticatorAvailableCallbackQueue = new LinkedList<>(); - private Fido2CredentialRequest mPendingFido2CredentialRequest; +- private Set mUnclosedFido2CredentialRequests = new HashSet<>(); - +- // StaticFieldLeak complains that this is a memory leak because +- // `Fido2CredentialRequest` contains a `Context`. But this field is only +- // used in tests so a memory leak is irrelevent. +- @SuppressLint("StaticFieldLeak") - private static Fido2CredentialRequest sFido2CredentialRequestOverrideForTesting; /** * Builds the Authenticator service implementation. -@@ -86,20 +79,6 @@ public final class AuthenticatorImpl implements Authenticator { - +@@ -97,21 +85,6 @@ public final class AuthenticatorImpl implements Authenticator { mRenderFrameHost = renderFrameHost; mOrigin = mRenderFrameHost.getLastCommittedOrigin(); + mTopOrigin = topOrigin; - - mGmsCorePackageVersion = PackageUtils.getPackageVersion(GMSCORE_PACKAGE_NAME); - } @@ -3208,12 +3223,13 @@ index a01ca0b4ded5c..b500abad64c3b 100644 - if (sFido2CredentialRequestOverrideForTesting != null) { - return sFido2CredentialRequestOverrideForTesting; - } -- -- return new Fido2CredentialRequest(mIntentSender); +- Fido2CredentialRequest request = new Fido2CredentialRequest(mIntentSender); +- mUnclosedFido2CredentialRequests.add(request); +- return request; } /** -@@ -129,17 +108,9 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -141,17 +114,9 @@ public final class AuthenticatorImpl implements Authenticator { mMakeCredentialCallback = callback; mIsOperationPending = true; @@ -3223,8 +3239,8 @@ index a01ca0b4ded5c..b500abad64c3b 100644 - } - mPendingFido2CredentialRequest = getFido2CredentialRequest(); -- mPendingFido2CredentialRequest.handleMakeCredentialRequest(options, mRenderFrameHost, -- mOrigin, +- mPendingFido2CredentialRequest.handleMakeCredentialRequest(mContext, options, +- mRenderFrameHost, /*maybeClientDataHash=*/null, mOrigin, - (status, response) - -> onRegisterResponse(status, response), - status -> onError(status)); @@ -3233,7 +3249,7 @@ index a01ca0b4ded5c..b500abad64c3b 100644 } @Override -@@ -153,15 +124,8 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -165,16 +130,8 @@ public final class AuthenticatorImpl implements Authenticator { mGetAssertionCallback = callback; mIsOperationPending = true; @@ -3243,15 +3259,16 @@ index a01ca0b4ded5c..b500abad64c3b 100644 - } - - mPendingFido2CredentialRequest = getFido2CredentialRequest(); -- mPendingFido2CredentialRequest.handleGetAssertionRequest(options, mRenderFrameHost, mOrigin, -- mPayment, +- mPendingFido2CredentialRequest.handleGetAssertionRequest(mContext, options, +- mRenderFrameHost, +- /*maybeClientDataHash=*/null, mOrigin, mTopOrigin, mPayment, - (status, response) -> onSignResponse(status, response), status -> onError(status)); + // Fido2 not supported on Bromite + onError(AuthenticatorStatus.NOT_IMPLEMENTED); } @Override -@@ -173,15 +137,8 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -186,15 +143,8 @@ public final class AuthenticatorImpl implements Authenticator { callback.call(isUvpaa); }; @@ -3262,14 +3279,14 @@ index a01ca0b4ded5c..b500abad64c3b 100644 - - mIsUserVerifyingPlatformAuthenticatorAvailableCallbackQueue.add(decoratedCallback); - getFido2CredentialRequest().handleIsUserVerifyingPlatformAuthenticatorAvailableRequest( -- mRenderFrameHost, +- mContext, - isUvpaa -> onIsUserVerifyingPlatformAuthenticatorAvailableResponse(isUvpaa)); + decoratedCallback.call(false); + return; } /** -@@ -190,7 +147,7 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -203,7 +153,7 @@ public final class AuthenticatorImpl implements Authenticator { * version. */ public boolean isGetMatchingCredentialIdsSupported() { @@ -3278,7 +3295,7 @@ index a01ca0b4ded5c..b500abad64c3b 100644 } /** -@@ -204,32 +161,13 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -217,32 +167,13 @@ public final class AuthenticatorImpl implements Authenticator { */ public void getMatchingCredentialIds(String relyingPartyId, byte[][] credentialIds, boolean requireThirdPartyPayment, GetMatchingCredentialIdsResponseCallback callback) { @@ -3307,13 +3324,13 @@ index a01ca0b4ded5c..b500abad64c3b 100644 - // credentials on conditional requests, use IsUVPAA as a proxy for availability. - mIsUserVerifyingPlatformAuthenticatorAvailableCallbackQueue.add(callback); - getFido2CredentialRequest().handleIsUserVerifyingPlatformAuthenticatorAvailableRequest( -- mRenderFrameHost, +- mContext, - isUvpaa -> onIsUserVerifyingPlatformAuthenticatorAvailableResponse(isUvpaa)); + callback.call(false); } @Override -@@ -241,8 +179,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -254,8 +185,6 @@ public final class AuthenticatorImpl implements Authenticator { if (!mIsOperationPending || mGetAssertionCallback == null) { return; } @@ -3322,7 +3339,15 @@ index a01ca0b4ded5c..b500abad64c3b 100644 } /** -@@ -292,7 +228,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -297,7 +226,6 @@ public final class AuthenticatorImpl implements Authenticator { + } else if (mGetAssertionCallback != null) { + mGetAssertionCallback.call(status, null, null); + } +- if (mPendingFido2CredentialRequest != null) mPendingFido2CredentialRequest.destroyBridge(); + cleanupRequest(); + } + +@@ -305,13 +233,10 @@ public final class AuthenticatorImpl implements Authenticator { mIsOperationPending = false; mMakeCredentialCallback = null; mGetAssertionCallback = null; @@ -3330,13 +3355,52 @@ index a01ca0b4ded5c..b500abad64c3b 100644 } @Override + public void close() { +- mUnclosedFido2CredentialRequests.forEach(Fido2CredentialRequest::destroyBridge); +- mUnclosedFido2CredentialRequests.clear(); + cleanupRequest(); + } + +diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManMetricsHelper.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManMetricsHelper.java +index f6d42f3861b7a..11b769b6c711e 100644 +--- a/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManMetricsHelper.java ++++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/CredManMetricsHelper.java +@@ -7,7 +7,6 @@ package org.chromium.components.webauthn; + import androidx.annotation.IntDef; + + import org.chromium.base.metrics.RecordHistogram; +-import org.chromium.components.webauthn.Fido2CredentialRequest.ConditionalUiState; + + /** + * This class is responsible for emitting histograms regarding CredMan usage in +@@ -77,20 +76,4 @@ public class CredManMetricsHelper { + RecordHistogram.recordTimesHistogram( + "WebAuthentication.Android.CredManPrepareRequestDuration", durationMs); + } +- +- public void reportGetCredentialMetrics( +- @CredManGetRequestEnum int value, ConditionalUiState conditionalUiState) { +- assert !(conditionalUiState == ConditionalUiState.NONE) +- || !(value == CredManGetRequestEnum.SUCCESS_PASSWORD) +- : "Passwords cannot be received from modal requests!"; +- if (conditionalUiState == ConditionalUiState.NONE) { +- RecordHistogram.recordEnumeratedHistogram( +- "WebAuthentication.Android.CredManModalRequests", value, +- CredManGetRequestEnum.NUM_ENTRIES); +- return; +- } +- RecordHistogram.recordEnumeratedHistogram( +- "WebAuthentication.Android.CredManConditionalRequest", value, +- CredManGetRequestEnum.NUM_ENTRIES); +- } + } diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java -index fcb188347349a..cd5297f80eac3 100644 +index 14d5645516e74..596bb1651d6e0 100644 --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java -@@ -10,10 +10,6 @@ import android.os.Parcel; - - import androidx.annotation.VisibleForTesting; +@@ -8,10 +8,6 @@ import android.app.PendingIntent; + import android.net.Uri; + import android.os.Parcel; -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; @@ -3345,7 +3409,7 @@ index fcb188347349a..cd5297f80eac3 100644 import org.chromium.base.ContextUtils; import org.chromium.blink.mojom.PublicKeyCredentialCreationOptions; import org.chromium.blink.mojom.PublicKeyCredentialRequestOptions; -@@ -46,58 +42,6 @@ public class Fido2ApiCallHelper { +@@ -43,58 +39,6 @@ public class Fido2ApiCallHelper { } public boolean arePlayServicesAvailable() { @@ -3406,7 +3470,7 @@ index fcb188347349a..cd5297f80eac3 100644 } } diff --git a/content/browser/push_messaging/push_messaging_manager.cc b/content/browser/push_messaging/push_messaging_manager.cc -index 28a9fe31225be..da3d077677e2d 100644 +index e32b7b179d01b..31b9728227053 100644 --- a/content/browser/push_messaging/push_messaging_manager.cc +++ b/content/browser/push_messaging/push_messaging_manager.cc @@ -800,7 +800,7 @@ void PushMessagingManager::GetSubscriptionInfo( @@ -3419,7 +3483,7 @@ index 28a9fe31225be..da3d077677e2d 100644 } // namespace content diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn -index a4271b72eeeaa..a4ac4a630d47f 100644 +index a39d30b567921..e9eac84b98522 100644 --- a/content/public/android/BUILD.gn +++ b/content/public/android/BUILD.gn @@ -141,10 +141,6 @@ android_library("content_full_java") { @@ -3434,10 +3498,10 @@ index a4271b72eeeaa..a4ac4a630d47f 100644 "//base:jni_java", "//base:process_launcher_java", diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn -index 027fa679e3429..4ce171307cf51 100644 +index 87cb6cc7da672..fe580d187e6b8 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn -@@ -3359,10 +3359,6 @@ if (is_android) { +@@ -3376,10 +3376,6 @@ if (is_android) { testonly = true sources = content_java_sources_needing_jni deps = [ @@ -3449,10 +3513,10 @@ index 027fa679e3429..4ce171307cf51 100644 "//base:jni_java", "//content/public/android:content_java", diff --git a/device/BUILD.gn b/device/BUILD.gn -index 99855ece52533..d4913b774710f 100644 +index 8f7ebf6a6d47f..2066297a02be9 100644 --- a/device/BUILD.gn +++ b/device/BUILD.gn -@@ -496,9 +496,6 @@ if (is_android) { +@@ -500,9 +500,6 @@ if (is_android) { "gamepad/android/junit/src/org/chromium/device/gamepad/GamepadMappingsTest.java", ] deps = [ @@ -3463,10 +3527,10 @@ index 99855ece52533..d4913b774710f 100644 "//base:base_junit_test_support", "//device/gamepad:java", diff --git a/remoting/android/client_java_tmpl.gni b/remoting/android/client_java_tmpl.gni -index 3a3dd4c99bcc8..e8ba05cf88fba 100644 +index 4cfe9d38c1491..2f39524a3fba9 100644 --- a/remoting/android/client_java_tmpl.gni +++ b/remoting/android/client_java_tmpl.gni -@@ -104,9 +104,6 @@ template("remoting_android_client_java_tmpl") { +@@ -105,9 +105,6 @@ template("remoting_android_client_java_tmpl") { if (defined(invoker.play_services_package)) { deps += [ @@ -3477,10 +3541,10 @@ index 3a3dd4c99bcc8..e8ba05cf88fba 100644 } diff --git a/services/BUILD.gn b/services/BUILD.gn -index 20df5aa826eb6..65554fe66d370 100644 +index 49fbee8b8e6cd..982d612ba8b9c 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn -@@ -120,11 +120,6 @@ if (is_android) { +@@ -122,11 +122,6 @@ if (is_android) { "shape_detection/android/junit/src/org/chromium/shape_detection/BitmapUtilsTest.java", ] deps = [ @@ -3492,7 +3556,7 @@ index 20df5aa826eb6..65554fe66d370 100644 "//base:base_java", "//base:base_java_test_support", "//base:base_junit_test_support", -@@ -153,10 +148,6 @@ if (is_android) { +@@ -156,10 +151,6 @@ if (is_android) { "shape_detection/android/javatests/src/org/chromium/shape_detection/TextDetectionImplTest.java", ] deps = [ @@ -3504,7 +3568,7 @@ index 20df5aa826eb6..65554fe66d370 100644 "//base:base_java_test_support", "//mojo/public/java:base_java", diff --git a/services/device/geolocation/BUILD.gn b/services/device/geolocation/BUILD.gn -index 19844bc1019c2..a151f5a9acc02 100644 +index 93e51731f56c3..ba0e0f5a994c7 100644 --- a/services/device/geolocation/BUILD.gn +++ b/services/device/geolocation/BUILD.gn @@ -166,10 +166,6 @@ if (is_android) { @@ -3519,10 +3583,10 @@ index 19844bc1019c2..a151f5a9acc02 100644 "//base:jni_java", "//build/android:build_java", diff --git a/services/shape_detection/BUILD.gn b/services/shape_detection/BUILD.gn -index 9b6267c5ae4ce..b6be578b50aac 100644 +index 47ef2356014c4..54b4263807e40 100644 --- a/services/shape_detection/BUILD.gn +++ b/services/shape_detection/BUILD.gn -@@ -116,8 +116,6 @@ if (is_android) { +@@ -115,8 +115,6 @@ if (is_android) { ] deps = [ @@ -3532,7 +3596,7 @@ index 9b6267c5ae4ce..b6be578b50aac 100644 "//base:jni_java", "//mojo/public/java:base_java", diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn -index 5025e6341bf33..93253a13d0884 100644 +index a3c3f30248b91..f4456dda58c95 100644 --- a/third_party/android_deps/BUILD.gn +++ b/third_party/android_deps/BUILD.gn @@ -81,22 +81,13 @@ if (!limit_android_deps) { @@ -3559,7 +3623,7 @@ index 5025e6341bf33..93253a13d0884 100644 } # TODO(crbug.com/1366370) Remove this once all depencencies are updated to -@@ -975,212 +966,6 @@ if (!limit_android_deps) { +@@ -978,212 +969,6 @@ if (!limit_android_deps) { ] } @@ -3772,7 +3836,7 @@ index 5025e6341bf33..93253a13d0884 100644 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. android_aar_prebuilt("com_google_android_material_material_java") { -@@ -1225,62 +1010,6 @@ if (!limit_android_deps) { +@@ -1228,62 +1013,6 @@ if (!limit_android_deps) { ] } @@ -3835,7 +3899,7 @@ index 5025e6341bf33..93253a13d0884 100644 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("com_google_guava_guava_android_java") { -@@ -1614,19 +1343,6 @@ if (!limit_android_deps) { +@@ -1617,19 +1346,6 @@ if (!limit_android_deps) { is_robolectric = true } @@ -3855,7 +3919,7 @@ index 5025e6341bf33..93253a13d0884 100644 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_robolectric_utils_java") { jar_path = "libs/org_robolectric_utils/utils-4.10.3.jar" -@@ -2006,290 +1722,6 @@ if (!limit_android_deps) { +@@ -2009,290 +1725,6 @@ if (!limit_android_deps) { deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ] } @@ -4192,8 +4256,23 @@ index 0b8257230b07c..0a4b14e6de34b 100644 + return 16; // API_UNAVAILABLE } } +diff --git a/third_party/cardboard/BUILD.gn b/third_party/cardboard/BUILD.gn +index 86ce0b4f790b8..e22e005782072 100644 +--- a/third_party/cardboard/BUILD.gn ++++ b/third_party/cardboard/BUILD.gn +@@ -51,10 +51,6 @@ android_library("cardboard_java") { + deps = [ + ":cardboard_proto_java", + ":cardboard_resources", +- "$google_play_services_package:google_play_services_base_java", +- "$google_play_services_package:google_play_services_basement_java", +- "$google_play_services_package:google_play_services_vision_common_java", +- "$google_play_services_package:google_play_services_vision_java", + "//third_party/android_deps:protobuf_lite_runtime_java", + "//third_party/androidx:androidx_annotation_annotation_jvm_java", + "//third_party/androidx:androidx_appcompat_appcompat_java", diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn -index f49a6d4ddb54a..74245c375d854 100644 +index fa5206c746575..d8994562cf884 100644 --- a/weblayer/browser/java/BUILD.gn +++ b/weblayer/browser/java/BUILD.gn @@ -91,7 +91,6 @@ android_library("base_module_java") { diff --git a/bromite/build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch b/bromite/build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch index 52d9c439..8714b551 100644 --- a/bromite/build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch +++ b/bromite/build/patches/Remove-blocklisted-URLs-upon-bookmark-creation.patch @@ -1,4 +1,4 @@ -From 0defda408811a80a501935420183c05827d770c0 Mon Sep 17 00:00:00 2001 +From 85ac50e03254d832124f4956d26d0357f696ca5b Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 21 Aug 2020 22:39:23 +0200 Subject: [PATCH 113/192] Remove blocklisted URLs upon bookmark creation diff --git a/bromite/build/patches/Remove-help-menu-item.patch b/bromite/build/patches/Remove-help-menu-item.patch index a157b83c..5c1676bf 100644 --- a/bromite/build/patches/Remove-help-menu-item.patch +++ b/bromite/build/patches/Remove-help-menu-item.patch @@ -1,4 +1,4 @@ -From 0eee38b148231edec0ef1b1b5633f31623c48d9f Mon Sep 17 00:00:00 2001 +From af8ef12b53bd7e1cdee33309f18d69472c7f7ee8 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 27 Jun 2018 01:32:28 +0200 Subject: [PATCH 055/192] Remove help menu item @@ -13,10 +13,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 5 files changed, 1 insertion(+), 19 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml -index 7029425878958..1e4be071ad5cd 100644 +index ff60ec8ddf5f5..6bcd575f5c91e 100644 --- a/chrome/android/java/res/menu/main_menu.xml +++ b/chrome/android/java/res/menu/main_menu.xml -@@ -150,9 +150,6 @@ found in the LICENSE file. +@@ -153,9 +153,6 @@ found in the LICENSE file. @@ -27,10 +27,10 @@ index 7029425878958..1e4be071ad5cd 100644 android:title="@null" /> +@@ -2421,16 +2421,6 @@ public abstract class ChromeActivity final Tab currentTab = getActivityTab(); @@ -62,10 +62,10 @@ index bd66e478d2b57..55eedaf7a435c 100644 // 'currentTab' could only be null when opening history from start surface, which is // not available on tablet. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java -index 369b12084c750..71fdb8ffbbb08 100644 +index b8ac86cde8e3b..e250de7978b32 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java -@@ -564,7 +564,7 @@ public abstract class BaseCustomTabActivity extends ChromeActivity Date: Thu, 14 Jul 2022 09:48:45 +0000 Subject: [PATCH 179/192] Remove navigator.connection info @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/third_party/blink/renderer/modules/netinfo/network_information.cc b/third_party/blink/renderer/modules/netinfo/network_information.cc -index 324b821fc7cc3..b43fdc2dbceaf 100644 +index 8badbc6b38c96..8f9ff64112378 100644 --- a/third_party/blink/renderer/modules/netinfo/network_information.cc +++ b/third_party/blink/renderer/modules/netinfo/network_information.cc @@ -61,7 +61,7 @@ NetworkInformation::~NetworkInformation() { @@ -35,7 +35,7 @@ index 324b821fc7cc3..b43fdc2dbceaf 100644 DCHECK(GetExecutionContext()->IsContextThread()); const String host = Host(); -@@ -250,6 +251,7 @@ void NetworkInformation::ContextDestroyed() { +@@ -248,6 +249,7 @@ void NetworkInformation::ContextDestroyed() { } void NetworkInformation::StartObserving() { @@ -43,7 +43,7 @@ index 324b821fc7cc3..b43fdc2dbceaf 100644 if (!IsObserving() && !context_stopped_) { type_ = GetNetworkStateNotifier().ConnectionType(); DCHECK(!connection_observer_handle_); -@@ -260,6 +262,7 @@ void NetworkInformation::StartObserving() { +@@ -258,6 +260,7 @@ void NetworkInformation::StartObserving() { } void NetworkInformation::StopObserving() { @@ -52,7 +52,7 @@ index 324b821fc7cc3..b43fdc2dbceaf 100644 DCHECK(connection_observer_handle_); connection_observer_handle_ = nullptr; diff --git a/third_party/blink/renderer/platform/network/network_state_notifier.cc b/third_party/blink/renderer/platform/network/network_state_notifier.cc -index 39c417e0f8ec6..e535ec9734d30 100644 +index e74b4ea41b2b3..538b26af6e850 100644 --- a/third_party/blink/renderer/platform/network/network_state_notifier.cc +++ b/third_party/blink/renderer/platform/network/network_state_notifier.cc @@ -101,6 +101,17 @@ NetworkStateNotifier::ScopedNotifier::~ScopedNotifier() { diff --git a/bromite/build/patches/Remove-preload-of-com.google.android.gms.fonts.patch b/bromite/build/patches/Remove-preload-of-com.google.android.gms.fonts.patch index da389ab6..beb132ae 100644 --- a/bromite/build/patches/Remove-preload-of-com.google.android.gms.fonts.patch +++ b/bromite/build/patches/Remove-preload-of-com.google.android.gms.fonts.patch @@ -1,4 +1,4 @@ -From 06e783de6c8a1c5820965eb4dd967d290e7bbd80 Mon Sep 17 00:00:00 2001 +From 5d6f26bf5fc6d5c694cb6bb82f2d7ea62dc442e1 Mon Sep 17 00:00:00 2001 From: uazo Date: Wed, 6 Jul 2022 09:37:25 +0000 Subject: [PATCH 177/192] Remove preload of com.google.android.gms.fonts diff --git a/bromite/build/patches/Remove-segmentation-platform.patch b/bromite/build/patches/Remove-segmentation-platform.patch index 1b748c3d..ad32b110 100644 --- a/bromite/build/patches/Remove-segmentation-platform.patch +++ b/bromite/build/patches/Remove-segmentation-platform.patch @@ -1,4 +1,4 @@ -From ee4367e60c2b43a17bd10ecafb46f1669ada3286 Mon Sep 17 00:00:00 2001 +From 664715832a9b8a41544b35df1199f99ab6ac0812 Mon Sep 17 00:00:00 2001 From: uazo Date: Thu, 9 Jun 2022 19:45:03 +0000 Subject: [PATCH 174/192] Remove segmentation platform @@ -45,7 +45,7 @@ index ef603e484f265..9772253a48fae 100644 segmentation_platform::UkmDatabaseClient::GetInstance().PostMessageLoopRun(); } diff --git a/components/segmentation_platform/public/features.cc b/components/segmentation_platform/public/features.cc -index 51a23a30d5a9a..d109645cc6fd3 100644 +index b568c199c1c88..894a1153929b4 100644 --- a/components/segmentation_platform/public/features.cc +++ b/components/segmentation_platform/public/features.cc @@ -9,8 +9,8 @@ @@ -59,7 +59,7 @@ index 51a23a30d5a9a..d109645cc6fd3 100644 BASE_FEATURE(kSegmentationPlatformUkmEngine, "SegmentationPlatformUkmEngine", -@@ -38,11 +38,7 @@ BASE_FEATURE(kSegmentationPlatformDeviceSwitcher, +@@ -42,11 +42,7 @@ BASE_FEATURE(kSegmentationPlatformDeviceSwitcher, BASE_FEATURE(kSegmentationPlatformFeedSegmentFeature, "SegmentationPlatformFeedSegmentFeature", diff --git a/bromite/build/patches/Remove-voice-recognition-integration.patch b/bromite/build/patches/Remove-voice-recognition-integration.patch index e23fbfd0..6f29fc13 100644 --- a/bromite/build/patches/Remove-voice-recognition-integration.patch +++ b/bromite/build/patches/Remove-voice-recognition-integration.patch @@ -1,4 +1,4 @@ -From b3e98f5aee77634b1bc10ecd7e00e9b262dc1dc4 Mon Sep 17 00:00:00 2001 +From 1843ac117b198a4145167096868528cade59d835 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 19 Jun 2022 12:57:56 +0200 Subject: [PATCH 012/192] Remove voice recognition integration @@ -25,10 +25,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 17 files changed, 11 insertions(+), 275 deletions(-) diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -index 3de7eae9b6bcd..4dfd44ed96240 100644 +index 9b0bce7d01d68..45d95138c5e0c 100644 --- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java +++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java -@@ -74,7 +74,6 @@ import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin; +@@ -76,7 +76,6 @@ import org.chromium.chrome.browser.ntp.NewTabPageLaunchOrigin; import org.chromium.chrome.browser.omnibox.OmniboxFocusReason; import org.chromium.chrome.browser.omnibox.OmniboxStub; import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener; @@ -36,7 +36,7 @@ index 3de7eae9b6bcd..4dfd44ed96240 100644 import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; -@@ -532,8 +531,7 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. +@@ -539,8 +538,7 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. // Initialize // Note that isVoiceSearchEnabled will return false in incognito mode. @@ -46,7 +46,7 @@ index 3de7eae9b6bcd..4dfd44ed96240 100644 updateLensVisibility(); // This is for Instant Start when overview is already visible while the omnibox, Feed -@@ -566,13 +564,6 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. +@@ -573,13 +571,6 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. } }); mPropertyModel.set(VOICE_SEARCH_BUTTON_CLICK_LISTENER, v -> { @@ -60,7 +60,7 @@ index 3de7eae9b6bcd..4dfd44ed96240 100644 }); mPropertyModel.set(LENS_BUTTON_CLICK_LISTENER, v -> { -@@ -1456,10 +1447,6 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. +@@ -1468,10 +1459,6 @@ class StartSurfaceMediator implements TabSwitcher.TabSwitcherViewObserver, View. // incorrect state if check synchronously. ThreadUtils.postOnUiThread(() -> { if (mOmniboxStub != null) { @@ -131,10 +131,10 @@ index f8d9254be37e3..1e79c945453a4 100644 private static void ensureNativeInitialized() { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -index a1250ec6959e2..ed7ae289945c4 100644 +index 9ee6d30ff89e6..b510a7f676ae9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java -@@ -59,7 +59,6 @@ import org.chromium.chrome.browser.native_page.ContextMenuManager; +@@ -60,7 +60,6 @@ import org.chromium.chrome.browser.native_page.ContextMenuManager; import org.chromium.chrome.browser.omnibox.OmniboxFocusReason; import org.chromium.chrome.browser.omnibox.OmniboxStub; import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteControllerProvider; @@ -160,7 +160,7 @@ index a1250ec6959e2..ed7ae289945c4 100644 // The timestamp at which the constructor was called. protected final long mConstructedTimeNs; -@@ -234,8 +231,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -236,8 +233,7 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide @Override public boolean isVoiceSearchEnabled() { @@ -170,7 +170,7 @@ index a1250ec6959e2..ed7ae289945c4 100644 } @Override -@@ -243,21 +239,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -245,21 +241,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide if (mIsDestroyed) return; FeedReliabilityLogger feedReliabilityLogger = mFeedSurfaceProvider.getReliabilityLogger(); @@ -192,7 +192,7 @@ index a1250ec6959e2..ed7ae289945c4 100644 } @Override -@@ -753,12 +734,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -760,12 +741,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide mOmniboxStub.addUrlFocusChangeListener(feedReliabilityLogger); } } @@ -205,7 +205,7 @@ index a1250ec6959e2..ed7ae289945c4 100644 } @Override -@@ -769,11 +744,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -776,11 +751,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide } } @@ -217,7 +217,7 @@ index a1250ec6959e2..ed7ae289945c4 100644 /** Adds an observer to be notified on most visited tile clicks. */ public void addMostVisitedTileClickObserver(MostVisitedTileClickObserver observer) { mMostVisitedTileClickObservers.addObserver(observer); -@@ -792,9 +762,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -799,9 +769,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide mLastShownTimeNs = System.nanoTime(); RecordUserAction.record("MobileNTPShown"); SuggestionsMetrics.recordSurfaceVisible(); @@ -227,7 +227,7 @@ index a1250ec6959e2..ed7ae289945c4 100644 } /** Records UMA for the NTP being hidden and the time spent on it. */ -@@ -802,7 +769,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -809,7 +776,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide RecordHistogram.recordMediumTimesHistogram("NewTabPage.TimeSpent", (System.nanoTime() - mLastShownTimeNs) / TimeUtils.NANOSECONDS_PER_MILLISECOND); SuggestionsMetrics.recordSurfaceHidden(); @@ -235,7 +235,7 @@ index a1250ec6959e2..ed7ae289945c4 100644 } /** -@@ -901,9 +867,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide +@@ -907,9 +873,6 @@ public class NewTabPage implements NativePage, InvalidationAwareThumbnailProvide } mFeedSurfaceProvider.destroy(); mTab.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager); @@ -258,18 +258,18 @@ index 76947ef2d0111..abca97413c45b 100644 /** Called to set a click listener for the search box. */ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java -index 8719d28cbeeb0..8402ef0104175 100644 +index 6f2489c142d30..998dbfdace538 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/searchwidget/SearchActivity.java -@@ -53,7 +53,6 @@ import org.chromium.chrome.browser.omnibox.styles.OmniboxResourceProvider; +@@ -54,7 +54,6 @@ import org.chromium.chrome.browser.omnibox.styles.OmniboxResourceProvider; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownScrollListener; import org.chromium.chrome.browser.omnibox.suggestions.action.OmniboxActionDelegateImpl; - import org.chromium.chrome.browser.omnibox.suggestions.base.HistoryClustersProcessor.OpenHistoryClustersDelegate; + import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl; -@@ -400,14 +399,12 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -403,14 +402,12 @@ public class SearchActivity extends AsyncInitializationActivity // will navigate to Tabbed mode. Investigate whether this can inflate // the tabbed mode layout in the background instead of CCTs. CustomTabsConnection.getInstance().warmup(0); @@ -285,7 +285,7 @@ index 8719d28cbeeb0..8402ef0104175 100644 RecordUserAction.record("SearchWidget.WidgetSelected"); getActivityDelegate().onFinishDeferredInitialization(); -@@ -478,8 +475,7 @@ public class SearchActivity extends AsyncInitializationActivity +@@ -481,8 +478,7 @@ public class SearchActivity extends AsyncInitializationActivity if (isFromQuickActionSearchWidget()) { recordQuickActionSearchType(searchType); } @@ -403,18 +403,18 @@ index 91480aa3a762c..65f648a18d064 100644 - } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -index 16ed7848e5b58..902a3b9944a3b 100644 +index 12bebc95027de..a61c435b6238a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java -@@ -86,7 +86,6 @@ import org.chromium.chrome.browser.omnibox.OverrideUrlLoadingDelegate; +@@ -91,7 +91,6 @@ import org.chromium.chrome.browser.omnibox.OverrideUrlLoadingDelegate; import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils; import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener; - import org.chromium.chrome.browser.omnibox.suggestions.base.HistoryClustersProcessor.OpenHistoryClustersDelegate; + import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; import org.chromium.chrome.browser.page_info.ChromePageInfo; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; import org.chromium.chrome.browser.price_tracking.PriceTrackingFeatures; -@@ -2122,10 +2121,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve +@@ -2154,10 +2153,6 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve return mLocationBar.getOmniboxStub(); } @@ -426,19 +426,19 @@ index 16ed7848e5b58..902a3b9944a3b 100644 * Called whenever the NTP could have been entered (e.g. tab content changed, tab navigated to * from the tab strip/tab switcher, etc.). If the user is on a tablet and indeed entered the diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java -index 16ed5cbf43a7f..aceb72f31686d 100644 +index a7171dcb2a641..2ffa8d1564c30 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java @@ -93,8 +93,6 @@ import org.chromium.chrome.browser.omnibox.OmniboxFocusReason; import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; import org.chromium.chrome.browser.omnibox.suggestions.action.OmniboxActionDelegateImpl; - import org.chromium.chrome.browser.omnibox.suggestions.base.HistoryClustersProcessor.OpenHistoryClustersDelegate; + import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler.VoiceInteractionSource; import org.chromium.chrome.browser.paint_preview.DemoPaintPreview; import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer; import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher; -@@ -281,7 +279,6 @@ public class RootUiCoordinator +@@ -285,7 +283,6 @@ public class RootUiCoordinator protected OneshotSupplierImpl mPromoShownOneshotSupplier = new OneshotSupplierImpl<>(); protected Supplier mStartSurfaceParentTabSupplier; @Nullable @@ -446,7 +446,7 @@ index 16ed5cbf43a7f..aceb72f31686d 100644 private MediaCaptureOverlayController mCaptureController; private @Nullable ScrollCaptureManager mScrollCaptureManager; protected final ActivityLifecycleDispatcher mActivityLifecycleDispatcher; -@@ -575,9 +572,6 @@ public class RootUiCoordinator +@@ -582,9 +579,6 @@ public class RootUiCoordinator } if (mToolbarManager != null) { @@ -456,7 +456,7 @@ index 16ed5cbf43a7f..aceb72f31686d 100644 mToolbarManager.destroy(); mToolbarManager = null; } -@@ -1135,19 +1129,11 @@ public class RootUiCoordinator +@@ -1158,19 +1152,11 @@ public class RootUiCoordinator new VoiceToolbarButtonController.VoiceSearchDelegate() { @Override public boolean isVoiceSearchEnabled() { @@ -477,7 +477,7 @@ index 16ed5cbf43a7f..aceb72f31686d 100644 } }; TranslateToolbarButtonController translateToolbarButtonController = -@@ -1249,13 +1235,6 @@ public class RootUiCoordinator +@@ -1280,13 +1266,6 @@ public class RootUiCoordinator if (!mSupportsAppMenuSupplier.getAsBoolean()) { mToolbarManager.getToolbar().disableMenuButton(); } @@ -492,10 +492,10 @@ index 16ed5cbf43a7f..aceb72f31686d 100644 } } diff --git a/chrome/browser/ui/android/omnibox/BUILD.gn b/chrome/browser/ui/android/omnibox/BUILD.gn -index c2160d311a1cc..475e56317de68 100644 +index 0b6f33e6fc70a..5bdb6c895b7fc 100644 --- a/chrome/browser/ui/android/omnibox/BUILD.gn +++ b/chrome/browser/ui/android/omnibox/BUILD.gn -@@ -137,7 +137,6 @@ android_library("java") { +@@ -138,7 +138,6 @@ android_library("java") { "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionView.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionViewBinder.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/tail/TailSuggestionViewProperties.java", @@ -528,18 +528,18 @@ index a7a95685190bf..38df86b4aa2ae 100644 * Returns a (@link OmniboxStub}. * diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java -index 04e65da315399..15cbf67717d30 100644 +index 93202520ccf64..f6770c2ea02e1 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java @@ -40,7 +40,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownScrollListener; - import org.chromium.chrome.browser.omnibox.suggestions.base.HistoryClustersProcessor.OpenHistoryClustersDelegate; import org.chromium.chrome.browser.omnibox.suggestions.basic.BasicSuggestionProcessor.BookmarkState; + import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; -@@ -383,13 +382,6 @@ public class LocationBarCoordinator +@@ -384,13 +383,6 @@ public class LocationBarCoordinator return mLocationBarLayout.getSecurityIconView(); } @@ -553,7 +553,7 @@ index 04e65da315399..15cbf67717d30 100644 @Nullable @Override public OmniboxStub getOmniboxStub() { -@@ -660,11 +652,6 @@ public class LocationBarCoordinator +@@ -676,11 +668,6 @@ public class LocationBarCoordinator // End tablet-specific methods. @@ -566,7 +566,7 @@ index 04e65da315399..15cbf67717d30 100644 mLocationBarMediator.onUrlChanged(); } diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java -index 9eb0828f41a18..f77278555821a 100644 +index d331ae72f50e7..2d93e8b666c73 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarMediator.java @@ -50,7 +50,6 @@ import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; @@ -626,7 +626,7 @@ index 9eb0828f41a18..f77278555821a 100644 /* package */ void setLensControllerForTesting(LensController lensController) { mLensController = lensController; } -@@ -570,8 +559,6 @@ class LocationBarMediator +@@ -573,8 +562,6 @@ class LocationBarMediator mUrlCoordinator.setKeyboardVisibility(false, false); RecordUserAction.record("MobileOmniboxVoiceSearch"); @@ -635,7 +635,7 @@ index 9eb0828f41a18..f77278555821a 100644 } /** package */ void lensButtonClicked(View view) { -@@ -1023,8 +1010,7 @@ class LocationBarMediator +@@ -1026,8 +1013,7 @@ class LocationBarMediator private boolean shouldShowMicButton() { if (shouldShowDeleteButton()) return false; @@ -645,7 +645,7 @@ index 9eb0828f41a18..f77278555821a 100644 return false; } boolean isToolbarMicEnabled = mIsToolbarMicEnabledSupplier.getAsBoolean(); -@@ -1219,7 +1205,6 @@ class LocationBarMediator +@@ -1186,7 +1172,6 @@ class LocationBarMediator // This method needs to be called first as it computes |mBrandedColorScheme|. updateBrandedColorScheme(); @@ -653,7 +653,7 @@ index 9eb0828f41a18..f77278555821a 100644 updateLensButtonColors(); } -@@ -1306,16 +1291,6 @@ class LocationBarMediator +@@ -1273,16 +1258,6 @@ class LocationBarMediator } } @@ -670,7 +670,7 @@ index 9eb0828f41a18..f77278555821a 100644 @Override public void addUrlFocusChangeListener(UrlFocusChangeListener listener) { mUrlFocusChangeListeners.addObserver(listener); -@@ -1331,29 +1306,10 @@ class LocationBarMediator +@@ -1298,29 +1273,10 @@ class LocationBarMediator return mUrlHasFocus; } @@ -700,7 +700,7 @@ index 9eb0828f41a18..f77278555821a 100644 public void setSearchQuery(String query) { if (TextUtils.isEmpty(query)) return; -@@ -1372,21 +1328,9 @@ class LocationBarMediator +@@ -1339,21 +1295,9 @@ class LocationBarMediator mUrlCoordinator.setKeyboardVisibility(true, false); } @@ -795,11 +795,11 @@ index a55cace4df2d6..f35a34fcc3bec 100644 // Destroy supplied instance of the AutocompleteControllerAndroid. // The instance cannot be used after this call completes. diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java -index b681cc47def05..4ee01b6be4b4f 100644 +index 6bd3fedf088a1..4354ffd3e3fbf 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java -@@ -46,7 +46,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.header.HeaderView; - import org.chromium.chrome.browser.omnibox.suggestions.header.HeaderViewBinder; +@@ -46,7 +46,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.header.HeaderViewBinder; + import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; import org.chromium.chrome.browser.omnibox.suggestions.tail.TailSuggestionView; import org.chromium.chrome.browser.omnibox.suggestions.tail.TailSuggestionViewBinder; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; @@ -821,13 +821,13 @@ index b681cc47def05..4ee01b6be4b4f 100644 * @return The current native pointer to the autocomplete results. * TODO(ender): Figure out how to remove this. diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java -index f7bcce140aca2..7b3af0f2da163 100644 +index 2e9961e72490e..8a29302170ccc 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java @@ -36,7 +36,6 @@ import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController.On import org.chromium.chrome.browser.omnibox.suggestions.action.OmniboxActionFactoryImpl; - import org.chromium.chrome.browser.omnibox.suggestions.base.HistoryClustersProcessor.OpenHistoryClustersDelegate; import org.chromium.chrome.browser.omnibox.suggestions.basic.BasicSuggestionProcessor.BookmarkState; + import org.chromium.chrome.browser.omnibox.suggestions.history_clusters.HistoryClustersProcessor.OpenHistoryClustersDelegate; -import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.share.ShareDelegate; diff --git a/bromite/build/patches/Remove-window-name-on-cross-origin-navigation.patch b/bromite/build/patches/Remove-window-name-on-cross-origin-navigation.patch index acd70395..886bd609 100644 --- a/bromite/build/patches/Remove-window-name-on-cross-origin-navigation.patch +++ b/bromite/build/patches/Remove-window-name-on-cross-origin-navigation.patch @@ -1,4 +1,4 @@ -From 922ba134b370994416df85cefccb0c726c2ddf6b Mon Sep 17 00:00:00 2001 +From 77319ccbf9deb61ed39cf3b6e2f4a23d7721089e Mon Sep 17 00:00:00 2001 From: uazo Date: Sat, 9 Jul 2022 06:59:18 +0000 Subject: [PATCH 176/192] Remove window name on cross origin navigation @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc -index d89b9a0352d4c..bb22fe918cdbb 100644 +index 664fab519a4bd..8daf036e4281a 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc -@@ -2550,7 +2550,7 @@ void DocumentLoader::CommitNavigation() { +@@ -2573,7 +2573,7 @@ void DocumentLoader::CommitNavigation() { // that the name would be nulled and if the name is accessed after we will // fire a UseCounter. If we decide to move forward with this change, we'd // actually clean the name here. @@ -24,7 +24,7 @@ index d89b9a0352d4c..bb22fe918cdbb 100644 frame_->Tree().ExperimentalSetNulledName(); } -@@ -2561,6 +2561,7 @@ void DocumentLoader::CommitNavigation() { +@@ -2584,6 +2584,7 @@ void DocumentLoader::CommitNavigation() { // TODO(shuuran): CrossSiteCrossBrowsingContextGroupSetNulledName will just // record the fact that the name would be nulled and if the name is accessed // after we will fire a UseCounter. diff --git a/bromite/build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch b/bromite/build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch index f4d7c3b2..00948f0e 100644 --- a/bromite/build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch +++ b/bromite/build/patches/Replace-DoH-probe-domain-with-RIPE-domain.patch @@ -1,4 +1,4 @@ -From 7c40d632e340901989c8e2250e2f10c4eac8e4fb Mon Sep 17 00:00:00 2001 +From f98ad6ba6ffc895a1b4722e411da2f711bbb6480 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 27 Oct 2019 10:00:13 +0100 Subject: [PATCH 093/192] Replace DoH probe domain with RIPE domain diff --git a/bromite/build/patches/Restore-LastTabStandingTracker.patch b/bromite/build/patches/Restore-LastTabStandingTracker.patch index 3ed7d9dd..682f32f0 100644 --- a/bromite/build/patches/Restore-LastTabStandingTracker.patch +++ b/bromite/build/patches/Restore-LastTabStandingTracker.patch @@ -1,8 +1,9 @@ -From e3ae75c88916d207c70402c8fc5eb3c88a95bbd8 Mon Sep 17 00:00:00 2001 +From 989b1ee180d09cb9a4e80c8b9278a9cfb4969505 Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 30 May 2023 15:13:31 +0000 Subject: [PATCH 163/192] Restore LastTabStandingTracker +License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- chrome/browser/BUILD.gn | 10 ++++ .../host_content_settings_map_factory.cc | 2 + @@ -25,12 +26,12 @@ Subject: [PATCH 163/192] Restore LastTabStandingTracker create mode 100644 chrome/browser/permissions/last_tab_standing_tracker_tab_helper.h diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 3eeaf85a61151..c6a9886e684c2 100644 +index c8e2f5b9d070d..8f29675b1d2dc 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -1875,6 +1875,16 @@ static_library("browser") { - "webid/federated_identity_permission_context_factory.h", - ] +@@ -1882,6 +1882,16 @@ static_library("browser") { + ] + } + sources += [ + "permissions/last_tab_standing_tracker.cc", @@ -46,7 +47,7 @@ index 3eeaf85a61151..c6a9886e684c2 100644 sources += [ "importer/profile_writer.cc", diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.cc b/chrome/browser/content_settings/host_content_settings_map_factory.cc -index cf0b755fdf2a7..07ab67c0591d2 100644 +index 241d70c4052eb..6d9ed813f4eff 100644 --- a/chrome/browser/content_settings/host_content_settings_map_factory.cc +++ b/chrome/browser/content_settings/host_content_settings_map_factory.cc @@ -11,6 +11,7 @@ @@ -385,27 +386,27 @@ index 0000000000000..f77adf075f8de + +#endif // CHROME_BROWSER_PERMISSIONS_LAST_TAB_STANDING_TRACKER_TAB_HELPER_H_ diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -index 13e71469e88ab..4ff321b414dfc 100644 +index 1ac481691bef9..5b87cf061b444 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc -@@ -104,6 +104,7 @@ +@@ -106,6 +106,7 @@ #include "chrome/browser/password_manager/password_reuse_manager_factory.h" #include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/permissions/adaptive_quiet_notification_permission_ui_enabler.h" +#include "chrome/browser/permissions/last_tab_standing_tracker_factory.h" - #include "chrome/browser/permissions/notification_permission_review_service_factory.h" #include "chrome/browser/permissions/notifications_engagement_service_factory.h" #include "chrome/browser/permissions/one_time_permissions_tracker_factory.h" -@@ -717,6 +718,7 @@ void ChromeBrowserMainExtraPartsProfiles:: + #include "chrome/browser/permissions/origin_keyed_permission_action_service_factory.h" +@@ -839,6 +840,7 @@ void ChromeBrowserMainExtraPartsProfiles:: + #if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + OnDeviceTailModelServiceFactory::GetInstance(); #endif - KAnonymityServiceFactory::GetInstance(); - LanguageModelManagerFactory::GetInstance(); + LastTabStandingTrackerFactory::GetInstance(); #if !BUILDFLAG(IS_ANDROID) + OneGoogleBarServiceFactory::GetInstance(); if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) { - OneTimePermissionsTrackerFactory::GetInstance(); diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc -index b2b6330f5dbe5..2263e137849df 100644 +index 1ec9817a39d4a..445dac8992d8d 100644 --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc @@ -55,6 +55,7 @@ @@ -414,9 +415,9 @@ index b2b6330f5dbe5..2263e137849df 100644 #include "chrome/browser/performance_manager/public/user_tuning/user_performance_tuning_manager.h" +#include "chrome/browser/permissions/last_tab_standing_tracker_tab_helper.h" #include "chrome/browser/permissions/one_time_permissions_tracker_helper.h" - #include "chrome/browser/permissions/unused_site_permissions_service_factory.h" #include "chrome/browser/predictors/loading_predictor_factory.h" -@@ -368,6 +369,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { + #include "chrome/browser/predictors/loading_predictor_tab_helper.h" +@@ -374,6 +375,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { HistoryClustersTabHelper::CreateForWebContents(web_contents); HttpsOnlyModeTabHelper::CreateForWebContents(web_contents); webapps::InstallableManager::CreateForWebContents(web_contents); diff --git a/bromite/build/patches/Restore-Search-Ready-Omnibox-flag.patch b/bromite/build/patches/Restore-Search-Ready-Omnibox-flag.patch index 11c36550..00b2f28a 100644 --- a/bromite/build/patches/Restore-Search-Ready-Omnibox-flag.patch +++ b/bromite/build/patches/Restore-Search-Ready-Omnibox-flag.patch @@ -1,4 +1,4 @@ -From 78d5bd7b84659d6a0d5ec451d356b36fa5499d84 Mon Sep 17 00:00:00 2001 +From ee471bbdd0a41a5e60427d7854f3404a9c09a8df Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 10 Oct 2019 23:30:16 +0200 Subject: [PATCH 089/192] Restore Search Ready Omnibox flag @@ -10,7 +10,7 @@ Disable search-ready omnibox by default License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/about_flags.cc | 3 +++ + chrome/browser/about_flags.cc | 5 +++++ chrome/browser/flag-metadata.json | 5 +++++ chrome/browser/flag_descriptions.cc | 5 +++++ chrome/browser/flag_descriptions.h | 3 +++ @@ -18,27 +18,29 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/flags/android/chrome_feature_list.h | 1 + .../chrome/browser/flags/ChromeFeatureList.java | 1 + .../suggestions/DropdownItemViewInfoListBuilder.java | 11 +++++++++-- - 8 files changed, 32 insertions(+), 2 deletions(-) + 8 files changed, 34 insertions(+), 2 deletions(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 9e75f8cb271ec..3f64df92f627e 100644 +index 369639078193d..2ba9397aed9eb 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -9350,6 +9350,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9465,6 +9465,11 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kDesksTemplatesDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kDesksTemplates)}, #endif ++#if BUILDFLAG(IS_ANDROID) + {"enable-search-ready-omnibox", flag_descriptions::kSearchReadyOmniboxName, + flag_descriptions::kSearchReadyOmniboxDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kSearchReadyOmniboxFeature)}, ++#endif {"large-favicon-from-google", flag_descriptions::kLargeFaviconFromGoogleName, diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 2703671751c7e..60abc6664dc6f 100644 +index 698135f25d6b7..42689b30f5a3b 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -3092,6 +3092,11 @@ +@@ -3222,6 +3222,11 @@ // Added feature, for testing. expiry deep in future. "expiry_milestone": 116 }, @@ -51,10 +53,10 @@ index 2703671751c7e..60abc6664dc6f 100644 "name": "enable-parallel-downloading", "owners": [ "qinmin", "xingliu", "dtrainor" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index f42e5a4d74f10..48685bb86c0b0 100644 +index dc0270b5ac63d..919a3fdfc9b7f 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4263,6 +4263,11 @@ const char kSendTabToSelfV2Description[] = +@@ -4317,6 +4317,11 @@ const char kSendTabToSelfV2Description[] = "Enables new received tab " "UI shown next to the profile icon instead of using system notifications."; @@ -67,10 +69,10 @@ index f42e5a4d74f10..48685bb86c0b0 100644 const char kSetMarketUrlForTestingDescription[] = "When enabled, sets the market URL for use in testing the update menu " diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index da00583ff205b..6e2b539226029 100644 +index 65f03f17d0566..155eaed9557bd 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2482,6 +2482,9 @@ extern const char kShowScrollableMVTOnNTPAndroidDescription[]; +@@ -2529,6 +2529,9 @@ extern const char kShowScrollableMVTOnNTPAndroidDescription[]; extern const char kSendTabToSelfV2Name[]; extern const char kSendTabToSelfV2Description[]; @@ -81,19 +83,19 @@ index da00583ff205b..6e2b539226029 100644 extern const char kSetMarketUrlForTestingDescription[]; diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index 0fbc930ab5547..334a8ce57b5dd 100644 +index 7d851dcccf177..db4d5e5031e64 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -264,6 +264,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -271,6 +271,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { + &kReaderModeInCCT, &kRecordSuppressionMetrics, - &kReduceToolbarUpdatesForSameDocNavigations, &kReengagementNotification, + &kSearchReadyOmniboxFeature, &kRelatedSearches, &kReportParentalControlSitesChild, &kRequestDesktopSiteDefaults, -@@ -449,6 +450,10 @@ BASE_FEATURE(kAllowNewIncognitoTabIntents, - "AllowNewIncognitoTabIntents", +@@ -458,6 +459,10 @@ BASE_FEATURE(kAvoidSelectedTabFocusOnLayoutDoneShowing, + "AvoidSelectedTabFocusOnLayoutDoneShowing", base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kSearchReadyOmniboxFeature, @@ -104,22 +106,22 @@ index 0fbc930ab5547..334a8ce57b5dd 100644 "FocusOmniboxInIncognitoTabIntents", base::FEATURE_ENABLED_BY_DEFAULT); diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h -index 5c40332affe56..561abfc70beab 100644 +index 2da7d473a4652..b9f8bb074b60f 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -150,6 +150,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsDowngrade); +@@ -158,6 +158,7 @@ BASE_DECLARE_FEATURE(kRequestDesktopSiteOptInSynthetic); + BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsDowngrade); BASE_DECLARE_FEATURE(kRequestDesktopSiteDefaultsLogging); - BASE_DECLARE_FEATURE(kRequestDesktopSitePerSiteIph); BASE_DECLARE_FEATURE(kRestoreTabsOnFRE); +BASE_DECLARE_FEATURE(kSearchReadyOmniboxFeature); BASE_DECLARE_FEATURE(kSharingHubLinkToggle); BASE_DECLARE_FEATURE(kShowScrollableMVTOnNTPAndroid); BASE_DECLARE_FEATURE(kFeedPositionAndroid); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index 07777d549bb86..a78c6dc4f89de 100644 +index b44789bcae8fb..8817964921a27 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -303,6 +303,7 @@ public abstract class ChromeFeatureList { +@@ -308,6 +308,7 @@ public abstract class ChromeFeatureList { "MessagesForAndroidInfrastructure"; public static final String MESSAGES_FOR_ANDROID_PERMISSION_UPDATE = "MessagesForAndroidPermissionUpdate"; @@ -128,7 +130,7 @@ index 07777d549bb86..a78c6dc4f89de 100644 public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java -index 59f22a8aa11fb..2086a2a1caf50 100644 +index c50fd0ba63a89..5ad34c479343d 100644 --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/suggestions/DropdownItemViewInfoListBuilder.java @@ -13,6 +13,7 @@ import androidx.annotation.Nullable; @@ -139,7 +141,7 @@ index 59f22a8aa11fb..2086a2a1caf50 100644 import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.omnibox.OmniboxFeatures; import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; -@@ -64,6 +65,7 @@ class DropdownItemViewInfoListBuilder { +@@ -56,6 +57,7 @@ class DropdownItemViewInfoListBuilder { @Px private int mDropdownHeight; private OpenHistoryClustersDelegate mOpenHistoryClustersDelegate; @@ -147,20 +149,20 @@ index 59f22a8aa11fb..2086a2a1caf50 100644 DropdownItemViewInfoListBuilder(@NonNull Supplier tabSupplier, BookmarkState bookmarkState, OpenHistoryClustersDelegate openHistoryClustersDelegate) { -@@ -102,8 +104,10 @@ class DropdownItemViewInfoListBuilder { +@@ -92,8 +94,10 @@ class DropdownItemViewInfoListBuilder { mDividerLineProcessor = new DividerLineProcessor(context); } mHeaderProcessor = new HeaderProcessor(context); - registerSuggestionProcessor(new EditUrlSuggestionProcessor( -- context, host, delegate, mFaviconFetcher, mActivityTabSupplier, shareSupplier)); +- context, host, delegate, mImageSupplier, mActivityTabSupplier, shareSupplier)); + mEditUrlSuggestionProcessor = new EditUrlSuggestionProcessor( -+ context, host, delegate, mFaviconFetcher, mActivityTabSupplier, shareSupplier); ++ context, host, delegate, mImageSupplier, mActivityTabSupplier, shareSupplier); + registerSuggestionProcessor(mEditUrlSuggestionProcessor); + registerSuggestionProcessor( - new AnswerSuggestionProcessor(context, host, textProvider, imageFetcherSupplier)); + new AnswerSuggestionProcessor(context, host, textProvider, mImageSupplier)); registerSuggestionProcessor( -@@ -239,6 +243,9 @@ class DropdownItemViewInfoListBuilder { +@@ -202,6 +206,9 @@ class DropdownItemViewInfoListBuilder { /** Signals that native initialization has completed. */ void onNativeInitialized() { mHeaderProcessor.onNativeInitialized(); diff --git a/bromite/build/patches/Restore-Simplified-NTP-launch.patch b/bromite/build/patches/Restore-Simplified-NTP-launch.patch index 8d9a171c..6f624259 100644 --- a/bromite/build/patches/Restore-Simplified-NTP-launch.patch +++ b/bromite/build/patches/Restore-Simplified-NTP-launch.patch @@ -1,4 +1,4 @@ -From 5ee04e6e3160b96cf7cfb0b400a805ccec217801 Mon Sep 17 00:00:00 2001 +From e444e9590601a6410d41cd982b331c347d5c5bea Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 7 Nov 2020 23:51:29 +0100 Subject: [PATCH 117/192] Restore Simplified NTP launch @@ -29,10 +29,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni -index bda8cd3c07989..0af01ae9e7881 100644 +index e47f8cb9f6ff6..f9ac29ab35173 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -566,6 +566,7 @@ chrome_java_resources = [ +@@ -570,6 +570,7 @@ chrome_java_resources = [ "java/res/layout/new_tab_page_incognito.xml", "java/res/layout/new_tab_page_layout.xml", "java/res/layout/new_tab_page_tile_grid_placeholder.xml", @@ -41,10 +41,10 @@ index bda8cd3c07989..0af01ae9e7881 100644 "java/res/layout/os_version_unsupported_text.xml", "java/res/layout/other_forms_of_history_dialog.xml", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index 61d48c92670d0..66a00fe645c66 100644 +index f927e1a14b0c1..b012d0bb3a0e0 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -599,6 +599,7 @@ chrome_java_sources = [ +@@ -610,6 +610,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollector.java", "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java", "java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java", @@ -142,7 +142,7 @@ index 0000000000000..660f40760d936 + + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java -index e83b79ee2153b..2349fb7bd395a 100644 +index 830f17eac7a4a..42512cc850f3a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java @@ -58,6 +58,7 @@ public class ChromeFeedbackCollector @@ -214,7 +214,7 @@ index 10a4379a8faac..5abc34f1e6b21 100644 protected final Activity mActivity; protected final NativePageHost mHost; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java -index 0fa55d91dd494..51774c88b5513 100644 +index 0d224b3521288..73d7f0460bd8c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java @@ -37,6 +37,7 @@ import org.chromium.chrome.browser.cryptids.ProbabilisticCryptidRenderer; @@ -234,7 +234,7 @@ index 0fa55d91dd494..51774c88b5513 100644 /** * Whether the tiles shown in the layout have finished loading. * With {@link #mHasShownView}, it's one of the 2 flags used to track initialisation progress. -@@ -227,6 +230,7 @@ public class NewTabPageLayout extends LinearLayout { +@@ -243,6 +246,7 @@ public class NewTabPageLayout extends LinearLayout { initializeMostVisitedTilesCoordinator(profile, lifecycleDispatcher, tileGroupDelegate, touchEnabledDelegate, isScrollableMvtEnabled(), searchProviderIsGoogle); initializeSearchBoxBackground(); @@ -242,7 +242,7 @@ index 0fa55d91dd494..51774c88b5513 100644 initializeSearchBoxTextView(); initializeVoiceSearchButton(); initializeLensButton(); -@@ -572,16 +576,22 @@ public class NewTabPageLayout extends LinearLayout { +@@ -605,16 +609,22 @@ public class NewTabPageLayout extends LinearLayout { marginLayoutParams.leftMargin = lateralPaddingsForNTP; marginLayoutParams.rightMargin = lateralPaddingsForNTP; } @@ -266,8 +266,8 @@ index 0fa55d91dd494..51774c88b5513 100644 + } marginLayoutParams.bottomMargin = getGridMvtBottomMargin(); } - if (mIsNtpAsHomeSurfaceEnabled) { -@@ -884,6 +894,22 @@ public class NewTabPageLayout extends LinearLayout { + +@@ -917,6 +927,22 @@ public class NewTabPageLayout extends LinearLayout { return iphCommandBuilder; } @@ -326,10 +326,10 @@ index ef9e5271a22a3..5e72a05274853 100644 * Opens the suggestions page without recording metrics. * diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 19223a9e2314a..c8281fb205bed 100644 +index 8cfb1f26e7dc4..23846b7990c17 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5212,6 +5212,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5275,6 +5275,9 @@ const FeatureEntry kFeatureEntries[] = { SINGLE_VALUE_TYPE_AND_VALUE( switches::kForceShowUpdateMenuItemCustomSummary, "Custom Summary")}, @@ -340,10 +340,10 @@ index 19223a9e2314a..c8281fb205bed 100644 flag_descriptions::kUpdateMenuBadgeDescription, kOsAndroid, SINGLE_VALUE_TYPE(switches::kForceShowUpdateMenuBadge)}, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index ef6a7d238a4a9..45aca653489b0 100644 +index 1992338379231..e755510a401cd 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4340,6 +4340,9 @@ const char kStartSurfaceWithAccessibilityName[] = +@@ -4399,6 +4399,9 @@ const char kStartSurfaceWithAccessibilityName[] = const char kStartSurfaceWithAccessibilityDescription[] = "Enable Start Surface with Accessibility."; @@ -354,10 +354,10 @@ index ef6a7d238a4a9..45aca653489b0 100644 const char kStrictSiteIsolationDescription[] = "Security mode that enables site isolation for all sites (SitePerProcess). " diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 1aa5a2f10c440..49b1a1fed9138 100644 +index 960e6687d4b75..ed06c2f0f619f 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2506,6 +2506,9 @@ extern const char kSlimCompositorDescription[]; +@@ -2556,6 +2556,9 @@ extern const char kSmartZoomDescription[]; extern const char kSmartSuggestionForLargeDownloadsName[]; extern const char kSmartSuggestionForLargeDownloadsDescription[]; @@ -368,10 +368,10 @@ index 1aa5a2f10c440..49b1a1fed9138 100644 extern const char kStartSurfaceAndroidDescription[]; diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index 0e5f5023303d4..8ee35e9e52eac 100644 +index d97a6c7597fa6..04007268b555c 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -240,6 +240,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -245,6 +245,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kIncognitoReauthenticationForAndroid, &kIncognitoScreenshot, &kInfobarScrollOptimization, @@ -379,7 +379,7 @@ index 0e5f5023303d4..8ee35e9e52eac 100644 &kInstanceSwitcher, &kInstantStart, &kLensCameraAssistedSearch, -@@ -782,6 +783,10 @@ BASE_FEATURE(kInstanceSwitcher, +@@ -800,6 +801,10 @@ BASE_FEATURE(kInstanceSwitcher, "InstanceSwitcher", base::FEATURE_ENABLED_BY_DEFAULT); @@ -391,10 +391,10 @@ index 0e5f5023303d4..8ee35e9e52eac 100644 "PageAnnotationsService", base::FEATURE_DISABLED_BY_DEFAULT); diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h -index 4a1926037e1f9..4de33d71bb6e4 100644 +index 67043a24ceb69..6ebe4b3132b8c 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -121,6 +121,7 @@ BASE_DECLARE_FEATURE(kOmniboxModernizeVisualUpdate); +@@ -129,6 +129,7 @@ BASE_DECLARE_FEATURE(kOmniboxModernizeVisualUpdate); BASE_DECLARE_FEATURE(kOmniboxWarmRecycledViewPool); BASE_DECLARE_FEATURE(kOptimizeGeolocationHeaderGeneration); BASE_DECLARE_FEATURE(kPageAnnotationsService); @@ -403,10 +403,10 @@ index 4a1926037e1f9..4de33d71bb6e4 100644 BASE_DECLARE_FEATURE(kBookmarksImprovedSaveFlow); BASE_DECLARE_FEATURE(kBookmarksRefresh); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index e6a5136eeadc1..2426f3ef67fad 100644 +index 8c2d77a951291..96a6404e6425b 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -301,6 +301,7 @@ public abstract class ChromeFeatureList { +@@ -306,6 +306,7 @@ public abstract class ChromeFeatureList { public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI = "LookalikeUrlNavigationSuggestionsUI"; public static final String MESSAGES_FOR_ANDROID_ADS_BLOCKED = "MessagesForAndroidAdsBlocked"; @@ -415,7 +415,7 @@ index e6a5136eeadc1..2426f3ef67fad 100644 "MessagesForAndroidInfrastructure"; public static final String MESSAGES_FOR_ANDROID_PERMISSION_UPDATE = diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc -index 34268f8cb89a0..e50ad78e25e7d 100644 +index 9ec3cb91475a9..5574c5f91079b 100644 --- a/components/signin/public/base/signin_switches.cc +++ b/components/signin/public/base/signin_switches.cc @@ -13,7 +13,7 @@ namespace switches { @@ -428,10 +428,10 @@ index 34268f8cb89a0..e50ad78e25e7d 100644 // Clears the token service before using it. This allows simulating the diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json -index bb74fb624b616..cc7003f3d275f 100644 +index 067a93741550e..d7977ae1f9e83 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json -@@ -6637,6 +6637,24 @@ +@@ -7276,6 +7276,24 @@ ] } ], diff --git a/bromite/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch b/bromite/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch index af9446bb..365ad274 100644 --- a/bromite/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch +++ b/bromite/build/patches/Restore-adaptive-button-in-top-toolbar-customization.patch @@ -1,4 +1,4 @@ -From 766094984509cce490426adc129154e32c5433c7 Mon Sep 17 00:00:00 2001 +From 1dcf0cfbf7dbf7ffbc66f1ac14a345ecd39b1209 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 7 Dec 2022 20:32:15 +0100 Subject: [PATCH 191/192] Restore adaptive-button-in-top-toolbar-customization @@ -19,10 +19,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 8 files changed, 132 insertions(+), 10 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -index aa09088806385..e8eaafec93d8c 100644 +index 8c6f868f88f0d..8d35eeda1ba21 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java -@@ -45,6 +45,7 @@ import org.chromium.chrome.browser.signin.services.SigninManager; +@@ -38,6 +38,7 @@ import org.chromium.chrome.browser.signin.services.SigninManager; import org.chromium.chrome.browser.sync.SyncServiceFactory; import org.chromium.chrome.browser.sync.settings.ManageSyncSettings; import org.chromium.chrome.browser.sync.settings.SyncSettingsUtils; @@ -30,7 +30,7 @@ index aa09088806385..e8eaafec93d8c 100644 import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarStatePredictor; import org.chromium.chrome.browser.tracing.settings.DeveloperSettings; import org.chromium.components.browser_ui.settings.ChromeBasePreference; -@@ -212,7 +213,9 @@ public class MainSettings extends PreferenceFragmentCompat +@@ -202,7 +203,9 @@ public class MainSettings extends PreferenceFragmentCompat new AdaptiveToolbarStatePredictor(null).recomputeUiState(uiState -> { // We don't show the toolbar shortcut settings page if disabled from finch. @@ -90,10 +90,10 @@ index dfe9efb7c6199..4db39ce97c194 100644 * Returns an IPH for this button. Only called once native is initialized and when {@code * AdaptiveToolbarFeatures.isCustomizationEnabled()} is true. diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 56cb2b77f61d7..2adc8ab602d86 100644 +index 44da6cb71e131..f2a3a74ad3e41 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -632,18 +632,12 @@ const FeatureEntry::FeatureParam kAdaptiveButtonCustomization_Share[] = { +@@ -638,18 +638,12 @@ const FeatureEntry::FeatureParam kAdaptiveButtonCustomization_Share[] = { {"default_segment", "share"}, {"show_ui_only_after_ready", "false"}, {"ignore_segmentation_results", "true"}}; @@ -113,7 +113,7 @@ index 56cb2b77f61d7..2adc8ab602d86 100644 const FeatureEntry::FeatureParam kContextualPageActionsUiParams_Quiet[] = { diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 03ba877133236..ea6f58046ca7a 100644 +index 8bedcccd5854c..57180e15817a9 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json @@ -49,9 +49,10 @@ @@ -129,10 +129,10 @@ index 03ba877133236..ea6f58046ca7a 100644 { "name": "adaptive-button-in-top-toolbar-translate", diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java -index 5e57f0d47f9cb..e88c7579923b3 100644 +index efe375dfee0c0..fdf9250b6336a 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarButtonController.java -@@ -239,7 +239,11 @@ public class AdaptiveToolbarButtonController +@@ -238,7 +238,11 @@ public class AdaptiveToolbarButtonController @Override public void onFinishNativeInitialization() { @@ -146,10 +146,10 @@ index 5e57f0d47f9cb..e88c7579923b3 100644 mSessionButtonVariant = uiState.canShowUi ? uiState.toolbarButtonState : AdaptiveToolbarButtonVariant.UNKNOWN; diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java -index 2afa5b81008bb..2ccd106ba2b69 100644 +index 66ed013dd2fb5..dece44aaf0b18 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarFeatures.java -@@ -12,8 +12,18 @@ import org.chromium.chrome.browser.flags.ChromeFeatureList; +@@ -16,8 +16,18 @@ import org.chromium.chrome.browser.signin.services.UnifiedConsentServiceBridge; /** * A utility class for handling feature flags used by {@link AdaptiveToolbarButtonController}. @@ -168,7 +168,7 @@ index 2afa5b81008bb..2ccd106ba2b69 100644 /** Finch default group for new tab variation. */ static final String NEW_TAB = "new-tab"; /** Finch default group for share variation. */ -@@ -26,6 +36,7 @@ public class AdaptiveToolbarFeatures { +@@ -30,6 +40,7 @@ public class AdaptiveToolbarFeatures { private static final String VARIATION_PARAM_DISABLE_UI = "disable_ui"; private static final String VARIATION_PARAM_IGNORE_SEGMENTATION_RESULTS = "ignore_segmentation_results"; @@ -176,7 +176,7 @@ index 2afa5b81008bb..2ccd106ba2b69 100644 private static final String VARIATION_PARAM_SHOW_UI_ONLY_AFTER_READY = "show_ui_only_after_ready"; @VisibleForTesting -@@ -95,6 +106,21 @@ public class AdaptiveToolbarFeatures { +@@ -100,6 +111,21 @@ public class AdaptiveToolbarFeatures { } } @@ -198,7 +198,7 @@ index 2afa5b81008bb..2ccd106ba2b69 100644 /** * Returns whether the adaptive toolbar is enabled with segmentation and customization. * -@@ -205,11 +231,48 @@ public class AdaptiveToolbarFeatures { +@@ -220,11 +246,48 @@ public class AdaptiveToolbarFeatures { ChromeFeatureList.CONTEXTUAL_PAGE_ACTIONS, "enable_ui", true); } @@ -248,7 +248,7 @@ index 2afa5b81008bb..2ccd106ba2b69 100644 if (sButtonVariant != null) return sButtonVariant; String defaultSegment = getDefaultSegment(); diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java -index cfc037d074cf5..cad23f7406de1 100644 +index 87bb8018505d5..04c3f01ff1e5d 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictor.java @@ -93,7 +93,12 @@ public class AdaptiveToolbarStatePredictor { @@ -266,10 +266,10 @@ index cfc037d074cf5..cad23f7406de1 100644 return; } diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java -index 2da82b04fa1df..fd616d45279f7 100644 +index e8b9ea86f8568..c2906184dd380 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/adaptive/AdaptiveToolbarStatePredictorTest.java -@@ -69,6 +69,21 @@ public class AdaptiveToolbarStatePredictorTest { +@@ -68,6 +68,21 @@ public class AdaptiveToolbarStatePredictorTest { statePredictor.recomputeUiState(verifyResultCallback(expected)); } diff --git a/bromite/build/patches/Restore-classic-new-tab-page.patch b/bromite/build/patches/Restore-classic-new-tab-page.patch index bb40b614..2f87da48 100644 --- a/bromite/build/patches/Restore-classic-new-tab-page.patch +++ b/bromite/build/patches/Restore-classic-new-tab-page.patch @@ -1,4 +1,4 @@ -From 0551055a00179b28baa721b3576f50e811ae47f4 Mon Sep 17 00:00:00 2001 +From 758c8d8586a66205e77a5f847255c810bcfaa9d6 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 26 Nov 2017 11:40:05 +0100 Subject: [PATCH 024/192] Restore classic new tab page diff --git a/bromite/build/patches/Restore-offline-indicator-v2-flag.patch b/bromite/build/patches/Restore-offline-indicator-v2-flag.patch index 6843cea6..c4a143ec 100644 --- a/bromite/build/patches/Restore-offline-indicator-v2-flag.patch +++ b/bromite/build/patches/Restore-offline-indicator-v2-flag.patch @@ -1,4 +1,4 @@ -From cfa236031016ef6fc5aedea7a96b1d0c8c5087cf Mon Sep 17 00:00:00 2001 +From 2134b46eb86109ab433db9f9938c8277bbca527d Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 4 Dec 2021 11:41:31 +0100 Subject: [PATCH 148/192] Restore offline-indicator-v2 flag @@ -19,7 +19,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 9 files changed, 65 insertions(+), 3 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineDetector.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineDetector.java -index 370d2210c905a..3bcf17e6d7963 100644 +index 97335c80e5508..74523b04311d6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineDetector.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/indicator/OfflineDetector.java @@ -8,6 +8,7 @@ import android.content.Context; @@ -53,7 +53,7 @@ index 370d2210c905a..3bcf17e6d7963 100644 mUpdateOfflineStatusIndicatorDelayedRunnable = () -> { if (sLoggingEnabled) { -@@ -357,4 +361,34 @@ class OfflineDetector +@@ -356,4 +360,34 @@ class OfflineDetector timeNeededAfterConnectionChangeFromOnlineToOffline), timeNeededAfterConnectionChangeFromAirplaneToOffline)); } @@ -89,10 +89,10 @@ index 370d2210c905a..3bcf17e6d7963 100644 + } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -index e33bbe5c925ec..c7540d8615b1e 100644 +index f1381b9bfe1e2..15f8091d16c79 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java -@@ -848,7 +848,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -845,7 +845,8 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { private void initStatusIndicatorCoordinator(LayoutManagerImpl layoutManager) { // TODO(crbug.com/1035584): Disable on tablets for now as we need to do one or two extra // things for tablets. @@ -102,7 +102,7 @@ index e33bbe5c925ec..c7540d8615b1e 100644 return; } -@@ -870,6 +871,11 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { +@@ -867,6 +868,11 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator { mStatusIndicatorCoordinator.addObserver(mStatusIndicatorObserver); mStatusIndicatorCoordinator.addObserver(mStatusBarColorController); @@ -115,10 +115,10 @@ index e33bbe5c925ec..c7540d8615b1e 100644 isUrlBarFocusedSupplier.set(mToolbarManager.isUrlBarFocused()); mUrlFocusChangeListener = new UrlFocusChangeListener() { diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 478daa01b7820..2cc9a44c74eac 100644 +index aba0e2e89e817..9f33b38a77a7f 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -5117,6 +5117,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -5181,6 +5181,9 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOfflinePagesLivePageSharingName, flag_descriptions::kOfflinePagesLivePageSharingDescription, kOsAndroid, FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesLivePageSharingFeature)}, @@ -129,10 +129,10 @@ index 478daa01b7820..2cc9a44c74eac 100644 flag_descriptions::kOfflinePagesAutoSaveFeatureName, flag_descriptions::kOfflinePagesAutoSaveFeatureDescription, kOsAndroid, diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 2b23d62a52eea..03ba877133236 100644 +index aa5985f242c59..8bedcccd5854c 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -5630,6 +5630,11 @@ +@@ -5853,6 +5853,11 @@ "owners": [ "//components/search/OWNERS" ], "expiry_milestone": 118 }, @@ -145,10 +145,10 @@ index 2b23d62a52eea..03ba877133236 100644 "name": "offline-pages-live-page-sharing", "owners": [ "sclittle", "srsudar", "offline-dev" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index e456a80c51e45..bfcc1bb132ee7 100644 +index b614f7bf72e08..1a2ef005ff6a8 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4087,6 +4087,10 @@ const char kNotificationPermissionRationaleBottomSheetDescription[] = +@@ -4151,6 +4151,10 @@ const char kNotificationPermissionRationaleBottomSheetDescription[] = "flow. " "Only works with builds targeting Android T+."; @@ -160,10 +160,10 @@ index e456a80c51e45..bfcc1bb132ee7 100644 "Enables live page sharing of offline pages"; const char kOfflinePagesLivePageSharingDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 5b9efb4086fd9..37086d3566b64 100644 +index f1afb602b881e..7b062e1f597fd 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2378,6 +2378,9 @@ extern const char kNetworkServiceInProcessDescription[]; +@@ -2431,6 +2431,9 @@ extern const char kNetworkServiceInProcessDescription[]; extern const char kNotificationPermissionRationaleName[]; extern const char kNotificationPermissionRationaleDescription[]; @@ -174,10 +174,10 @@ index 5b9efb4086fd9..37086d3566b64 100644 extern const char kNotificationPermissionRationaleBottomSheetDescription[]; diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index f84b2a89734f6..972880a0581c5 100644 +index a4df42cb6db67..13cee4e1c3135 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -249,6 +249,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -254,6 +254,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kLensOnQuickActionSearchWidget, &kNotificationPermissionVariant, &kNotificationPermissionBottomSheet, @@ -185,9 +185,9 @@ index f84b2a89734f6..972880a0581c5 100644 &kPageAnnotationsService, &kPreconnectOnTabCreation, &kInlineUpdateFlow, -@@ -749,6 +750,10 @@ BASE_FEATURE(kDrawEdgeToEdge, +@@ -767,6 +768,10 @@ BASE_FEATURE(kDrawEdgeToEdge, - BASE_FEATURE(kEmptyStates, "EmptyStates", base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kEmptyStates, "EmptyStates", base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kOfflineIndicatorV2, + "OfflineIndicatorV2", @@ -197,10 +197,10 @@ index f84b2a89734f6..972880a0581c5 100644 "ExperimentsForAgsa", base::FEATURE_ENABLED_BY_DEFAULT); diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h -index 9b7e7d58d56e9..26e7e09270bd4 100644 +index 2fedf540a3efb..9d9a190415b64 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -112,6 +112,7 @@ BASE_DECLARE_FEATURE(kLanguagesPreference); +@@ -118,6 +118,7 @@ BASE_DECLARE_FEATURE(kLanguagesPreference); BASE_DECLARE_FEATURE(kLensCameraAssistedSearch); BASE_DECLARE_FEATURE(kLensOnQuickActionSearchWidget); BASE_DECLARE_FEATURE(kLocationBarModelOptimizations); @@ -209,10 +209,10 @@ index 9b7e7d58d56e9..26e7e09270bd4 100644 BASE_DECLARE_FEATURE(kNotificationPermissionBottomSheet); BASE_DECLARE_FEATURE(kOmahaMinSdkVersionAndroid); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index 9ff2cd358d1e2..a8846ad414712 100644 +index 21a3d8def69d6..6e3530badef81 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -313,6 +313,7 @@ public abstract class ChromeFeatureList { +@@ -318,6 +318,7 @@ public abstract class ChromeFeatureList { public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant"; public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET = "NotificationPermissionBottomSheet"; diff --git a/bromite/build/patches/Revert-Delete-block-external-form-redirects.patch b/bromite/build/patches/Revert-Delete-block-external-form-redirects.patch index 02e7fac4..437429a1 100644 --- a/bromite/build/patches/Revert-Delete-block-external-form-redirects.patch +++ b/bromite/build/patches/Revert-Delete-block-external-form-redirects.patch @@ -1,4 +1,4 @@ -From 5c8e709f6c376152424e1285c45d373c6379627e Mon Sep 17 00:00:00 2001 +From 4a019047ccbddc31356b2e1d881b09c306cc33e9 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Thu, 16 Jun 2022 23:23:43 +0200 Subject: [PATCH 133/192] Revert "Delete block-external-form-redirects" @@ -8,7 +8,7 @@ enables IntentBlockExternalFormRedirectsNoGesture. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/about_flags.cc | 7 +++++++ + chrome/browser/about_flags.cc | 6 ++++++ chrome/browser/flag-metadata.json | 5 +++++ chrome/browser/flag_descriptions.cc | 6 ++++++ chrome/browser/flag_descriptions.h | 3 +++ @@ -16,21 +16,13 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../android/external_intents_features.h | 1 + .../ExternalIntentsFeatures.java | 6 ++++++ .../ExternalNavigationHandler.java | 21 +++++++++++++++++++ - 8 files changed, 55 insertions(+), 1 deletion(-) + 8 files changed, 54 insertions(+), 1 deletion(-) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index b25742e709388..b7ce396d516fe 100644 +index 75e4850949020..238830494377d 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -243,6 +243,7 @@ - #include "chrome/browser/push_messaging/push_messaging_features.h" - #include "components/browser_ui/photo_picker/android/features.h" - #include "components/content_creation/notes/core/note_features.h" -+#include "components/external_intents/android/external_intents_features.h" - #include "components/translate/content/android/translate_message.h" - #include "ui/android/ui_android_features.h" - #else // BUILDFLAG(IS_ANDROID) -@@ -10026,6 +10027,12 @@ const FeatureEntry kFeatureEntries[] = { +@@ -10093,6 +10093,12 @@ const FeatureEntry kFeatureEntries[] = { #endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) #if BUILDFLAG(IS_ANDROID) @@ -44,10 +36,10 @@ index b25742e709388..b7ce396d516fe 100644 flag_descriptions::kExternalNavigationDebugLogsName, flag_descriptions::kExternalNavigationDebugLogsDescription, kOsAndroid, diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 18afc18b367cb..2b23d62a52eea 100644 +index 081e6ecd527f7..aa5985f242c59 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -788,6 +788,11 @@ +@@ -843,6 +843,11 @@ "owners": [ "ioanap", "vsemeniuk@google.com" ], "expiry_milestone": 117 }, @@ -60,10 +52,10 @@ index 18afc18b367cb..2b23d62a52eea 100644 "name": "block-insecure-private-network-requests", "owners": [ "titouan", "lyf", "chrome-security-owp-team@google.com" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index ee6d74cab2cc6..ae02dee048364 100644 +index 12e206fab161e..1a7fef357fdf0 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4007,6 +4007,12 @@ const char kInstantStartName[] = "Instant start"; +@@ -4059,6 +4059,12 @@ const char kInstantStartName[] = "Instant start"; const char kInstantStartDescription[] = "Show start surface before native library is loaded."; @@ -77,10 +69,10 @@ index ee6d74cab2cc6..ae02dee048364 100644 const char kInterestFeedV2Description[] = "Show content suggestions on the New Tab Page and Start Surface using the " diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 9b1c41abe4d4f..093c1e2dd43be 100644 +index 8e7efeaab8bbb..ebc797abde0fc 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2330,6 +2330,9 @@ extern const char kInstanceSwitcherDescription[]; +@@ -2377,6 +2377,9 @@ extern const char kInstanceSwitcherDescription[]; extern const char kInstantStartName[]; extern const char kInstantStartDescription[]; @@ -91,19 +83,19 @@ index 9b1c41abe4d4f..093c1e2dd43be 100644 extern const char kInterestFeedV2Description[]; diff --git a/components/external_intents/android/external_intents_features.cc b/components/external_intents/android/external_intents_features.cc -index c9b480665f9de..e290e59f55156 100644 +index fc9ba45544245..5ba58acdb6c7f 100644 --- a/components/external_intents/android/external_intents_features.cc +++ b/components/external_intents/android/external_intents_features.cc @@ -20,7 +20,6 @@ namespace { const base::Feature* kFeaturesExposedToJava[] = { &kExternalNavigationDebugLogs, &kBlockFrameRenavigations, - &kDoNotRequireSpecializedCCTHandler, &kBlockIntentsToSelf}; + &kBlockIntentsToSelf, &kTrustedClientGestureBypass}; - } // namespace // Alphabetical: -@@ -41,7 +40,13 @@ BASE_FEATURE(kBlockIntentsToSelf, - "BlockIntentsToSelf", +@@ -41,7 +40,13 @@ BASE_FEATURE(kTrustedClientGestureBypass, + "TrustedClientGestureBypass", base::FEATURE_ENABLED_BY_DEFAULT); +BASE_FEATURE(kIntentBlockExternalFormRedirectsNoGesture, @@ -117,7 +109,7 @@ index c9b480665f9de..e290e59f55156 100644 } diff --git a/components/external_intents/android/external_intents_features.h b/components/external_intents/android/external_intents_features.h -index 53100e3157348..c6cf6302448c8 100644 +index 6ef648eca3fe4..25230ab3a45e5 100644 --- a/components/external_intents/android/external_intents_features.h +++ b/components/external_intents/android/external_intents_features.h @@ -9,6 +9,7 @@ @@ -127,9 +119,9 @@ index 53100e3157348..c6cf6302448c8 100644 +BASE_DECLARE_FEATURE(kIntentBlockExternalFormRedirectsNoGesture); BASE_DECLARE_FEATURE(kExternalNavigationDebugLogs); BASE_DECLARE_FEATURE(kBlockFrameRenavigations); - BASE_DECLARE_FEATURE(kDoNotRequireSpecializedCCTHandler); + BASE_DECLARE_FEATURE(kBlockIntentsToSelf); diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java -index 121380772aaae..20073c941c325 100644 +index 347d43b250a42..2db718bb80721 100644 --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalIntentsFeatures.java @@ -17,6 +17,12 @@ import org.chromium.base.annotations.NativeMethods; @@ -144,12 +136,12 @@ index 121380772aaae..20073c941c325 100644 + public static final String EXTERNAL_NAVIGATION_DEBUG_LOGS_NAME = "ExternalNavigationDebugLogs"; public static final String BLOCK_FRAME_RENAVIGATIONS_NAME = "BlockFrameRenavigations2"; - public static final String DO_NOT_REQUIRE_SPECIALIZED_CCT_HANDLER_NAME = + public static final String BLOCK_INTENTS_TO_SELF_NAME = "BlockIntentsToSelf"; diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java -index 335a64b4a3771..2b11de7b8caf8 100644 +index 493a402b5743b..b46983cb2cee0 100644 --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java -@@ -1497,6 +1497,12 @@ public class ExternalNavigationHandler { +@@ -1566,6 +1566,12 @@ public class ExternalNavigationHandler { || ignoreBackForwardNav(params); } @@ -162,7 +154,7 @@ index 335a64b4a3771..2b11de7b8caf8 100644 private OverrideUrlLoadingResult shouldOverrideUrlLoadingInternal( ExternalNavigationParams params, Intent targetIntent, GURL browserFallbackUrl, MutableBoolean canLaunchExternalFallbackResult) { -@@ -1550,6 +1556,21 @@ public class ExternalNavigationHandler { +@@ -1619,6 +1625,21 @@ public class ExternalNavigationHandler { return OverrideUrlLoadingResult.forNoOverride(); } diff --git a/bromite/build/patches/Revert-Permit-blocking-of-view-source.patch b/bromite/build/patches/Revert-Permit-blocking-of-view-source.patch index ee69b87c..388c6ef4 100644 --- a/bromite/build/patches/Revert-Permit-blocking-of-view-source.patch +++ b/bromite/build/patches/Revert-Permit-blocking-of-view-source.patch @@ -1,4 +1,4 @@ -From c0b0ec5a1ac835dc3e5e7c839d4a0cb9266fd0ed Mon Sep 17 00:00:00 2001 +From b6a81ce1e548587f2c93202159760452a4ebcd9b Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 6 Mar 2022 11:29:27 +0100 Subject: [PATCH 155/192] Revert Permit blocking of view-source diff --git a/bromite/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch b/bromite/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch index 80d79a6a..0bd8aef8 100644 --- a/bromite/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch +++ b/bromite/build/patches/Revert-flags-remove-disable-pull-to-refresh-effect.patch @@ -1,4 +1,4 @@ -From e88af52f6efc3a3821b3cf8a29b741ab031ace82 Mon Sep 17 00:00:00 2001 +From 336c418bb0988656997186167fdc9eec4b8c1935 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 2 Dec 2019 21:15:32 +0100 Subject: [PATCH 099/192] Revert "flags: remove disable-pull-to-refresh-effect" @@ -15,25 +15,25 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 4 files changed, 15 insertions(+) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 3f64df92f627e..19223a9e2314a 100644 +index 2ba9397aed9eb..8cfb1f26e7dc4 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -4599,6 +4599,10 @@ const FeatureEntry kFeatureEntries[] = { - flag_descriptions::kEnableVulkanDescription, - kOsWin | kOsLinux | kOsAndroid, FEATURE_VALUE_TYPE(features::kVulkan)}, +@@ -4674,6 +4674,10 @@ const FeatureEntry kFeatureEntries[] = { + kOsWin | kOsLinux | kOsAndroid | kOsCrOS, + FEATURE_VALUE_TYPE(features::kVulkan)}, #if BUILDFLAG(IS_ANDROID) + {switches::kDisablePullToRefreshEffect, + flag_descriptions::kDisablePullToRefreshEffectName, + flag_descriptions::kDisablePullToRefreshEffectDescription, kOsAndroid, + SINGLE_DISABLE_VALUE_TYPE(switches::kDisablePullToRefreshEffect)}, - {"translate-assist-content", flag_descriptions::kTranslateAssistContentName, - flag_descriptions::kTranslateAssistContentDescription, kOsAndroid, - FEATURE_VALUE_TYPE(language::kTranslateAssistContent)}, + {"translate-message-ui", flag_descriptions::kTranslateMessageUIName, + flag_descriptions::kTranslateMessageUIDescription, kOsAndroid, + FEATURE_VALUE_TYPE(translate::kTranslateMessageUI)}, diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 60abc6664dc6f..d936cee457710 100644 +index 42689b30f5a3b..fded6daa7c8e2 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -1650,6 +1650,10 @@ +@@ -1737,6 +1737,10 @@ "yangsharon@google.com", "alexmos@google.com", "creis@google.com" ], "expiry_milestone": 122 }, @@ -45,10 +45,10 @@ index 60abc6664dc6f..d936cee457710 100644 "name": "disable-quick-answers-v2-translation", "owners": [ "croissant-eng" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 48685bb86c0b0..ef6a7d238a4a9 100644 +index 919a3fdfc9b7f..1992338379231 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -4138,6 +4138,10 @@ const char kReadLaterDescription[] = +@@ -4205,6 +4205,10 @@ const char kReadLaterDescription[] = "Allow users to save tabs for later. Enables a new button and menu for " "accessing tabs saved for later."; @@ -60,12 +60,12 @@ index 48685bb86c0b0..ef6a7d238a4a9 100644 const char kReaderModeHeuristicsDescription[] = "Determines what pages the Reader Mode infobar is shown on."; diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 6e2b539226029..1aa5a2f10c440 100644 +index 155eaed9557bd..960e6687d4b75 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -2413,6 +2413,9 @@ extern const char kQueryTilesSegmentationDescription[]; - extern const char kQueryTilesSwapTrendingName[]; - extern const char kQueryTilesSwapTrendingDescription[]; +@@ -2469,6 +2469,9 @@ extern const char kQueryTilesSwapTrendingDescription[]; + extern const char kReadAloudName[]; + extern const char kReadAloudDescription[]; +extern const char kDisablePullToRefreshEffectName[]; +extern const char kDisablePullToRefreshEffectDescription[]; diff --git a/bromite/build/patches/Revert-flags-remove-num-raster-threads.patch b/bromite/build/patches/Revert-flags-remove-num-raster-threads.patch index b363c98c..dad3d0a0 100644 --- a/bromite/build/patches/Revert-flags-remove-num-raster-threads.patch +++ b/bromite/build/patches/Revert-flags-remove-num-raster-threads.patch @@ -1,4 +1,4 @@ -From d6f6919bf2c569ef1aff322464966b31e4de2cc7 Mon Sep 17 00:00:00 2001 +From d48cf20436a673ff50d02d8b3d6e7ec428580e55 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 23 Jan 2021 17:47:21 +0100 Subject: [PATCH 122/192] Revert "flags: remove num-raster-threads" @@ -7,20 +7,21 @@ This reverts commit 2a51528a1737e9038f7f96f29403032a6a845a25. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - chrome/browser/about_flags.cc | 12 ++++++++++++ + chrome/browser/about_flags.cc | 14 ++++++++++++++ chrome/browser/flag-metadata.json | 4 ++++ chrome/browser/flag_descriptions.cc | 8 ++++++++ chrome/browser/flag_descriptions.h | 7 +++++++ - 4 files changed, 31 insertions(+) + 4 files changed, 33 insertions(+) diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 882bdf4812a77..1284c22e17453 100644 +index edc33c9c6b9bf..e744b5522bc88 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -387,6 +387,15 @@ const FeatureEntry::Choice kOverlayStrategiesChoices[] = { +@@ -392,6 +392,17 @@ const FeatureEntry::Choice kOverlayStrategiesChoices[] = { "single-fullscreen,single-on-top,underlay"}, }; ++#if BUILDFLAG(IS_ANDROID) +const FeatureEntry::Choice kNumRasterThreadsChoices[] = { + {flags_ui::kGenericExperimentChoiceDefault, "", ""}, + {flag_descriptions::kNumRasterThreadsOne, cc::switches::kNumRasterThreads, "1"}, @@ -29,11 +30,12 @@ index 882bdf4812a77..1284c22e17453 100644 + "3"}, + {flag_descriptions::kNumRasterThreadsFour, cc::switches::kNumRasterThreads, + "4"}}; ++#endif + const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { {flags_ui::kGenericExperimentChoiceDefault, "", ""}, {flag_descriptions::kTouchSelectionStrategyCharacter, -@@ -4771,6 +4780,9 @@ const FeatureEntry kFeatureEntries[] = { +@@ -4830,6 +4841,9 @@ const FeatureEntry kFeatureEntries[] = { FEATURE_VALUE_TYPE(mojo::core::kMojoLinuxChannelSharedMem)}, #endif #if BUILDFLAG(IS_ANDROID) @@ -44,10 +46,10 @@ index 882bdf4812a77..1284c22e17453 100644 flag_descriptions::kSiteIsolationForPasswordSitesName, flag_descriptions::kSiteIsolationForPasswordSitesDescription, kOsAndroid, diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 94d6104b5f8d3..18afc18b367cb 100644 +index 0c67d85c164df..081e6ecd527f7 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -5288,6 +5288,10 @@ +@@ -5489,6 +5489,10 @@ "owners": [ "lazzzis", "aishwaryarj"], "expiry_milestone": 118 }, @@ -59,10 +61,10 @@ index 94d6104b5f8d3..18afc18b367cb 100644 "name": "messages-preinstall", "owners": [ "jonmann", "jshikaram" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 62faa62ae5767..594a75391934f 100644 +index bb42b389a5589..9dd326f9db2a2 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -2202,6 +2202,14 @@ const char kOmniboxActionsInSuggestDescription[] = +@@ -2244,6 +2244,14 @@ const char kOmniboxActionsInSuggestDescription[] = "Actions in Suggest permits optional Action Chips to be attached to " "Entity suggestions."; @@ -78,10 +80,10 @@ index 62faa62ae5767..594a75391934f 100644 "Adaptive Omnibox Suggestions count"; const char kOmniboxAdaptiveSuggestionsCountDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index b8dfb1abc8d80..9f14bf059b68a 100644 +index 88e690dad1b42..b3a69b9dbbbb0 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -1246,6 +1246,13 @@ extern const char kOmitCorsClientCertDescription[]; +@@ -1283,6 +1283,13 @@ extern const char kOmitCorsClientCertDescription[]; extern const char kOmniboxActionsInSuggestName[]; extern const char kOmniboxActionsInSuggestDescription[]; diff --git a/bromite/build/patches/Revert-removal-of-execution-context-address-space.patch b/bromite/build/patches/Revert-removal-of-execution-context-address-space.patch index 90e00bb1..c46538ab 100644 --- a/bromite/build/patches/Revert-removal-of-execution-context-address-space.patch +++ b/bromite/build/patches/Revert-removal-of-execution-context-address-space.patch @@ -1,4 +1,4 @@ -From 253464ea1c7a1e23256385597290b7e34045fcb3 Mon Sep 17 00:00:00 2001 +From 825e1d8e5eb436af492799dd7a2dfe18cc4a82e5 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 24 Jun 2022 22:24:22 +0200 Subject: [PATCH 108/192] Revert removal of execution context address space @@ -57,10 +57,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 36 files changed, 189 insertions(+), 25 deletions(-) diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc -index 450b9445e0323..c10cfedbca13e 100644 +index fd732b1f573cb..8c354153db71c 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc -@@ -186,7 +186,7 @@ BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromPrivate, +@@ -197,7 +197,7 @@ BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromPrivate, // - kBlockInsecurePrivateNetworkRequests BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromUnknown, "BlockInsecurePrivateNetworkRequestsFromUnknown", @@ -70,10 +70,10 @@ index 450b9445e0323..c10cfedbca13e 100644 // Enables use of the PrivateNetworkAccessNonSecureContextsAllowed deprecation // trial. This is a necessary yet insufficient condition: documents that wish to diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc -index a5de854f6c5ab..b8bdbf17dedc9 100644 +index 485ba73ada1f1..1bc4805ab9da9 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc -@@ -547,6 +547,15 @@ void ExecutionContext::SetReferrerPolicy( +@@ -539,6 +539,15 @@ void ExecutionContext::SetReferrerPolicy( policy_container_->UpdateReferrerPolicy(referrer_policy); } @@ -90,7 +90,7 @@ index a5de854f6c5ab..b8bdbf17dedc9 100644 std::unique_ptr container) { policy_container_ = std::move(container); diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h -index 337f2dc94f0ce..bdfd5122a8a59 100644 +index 71b10f5a48244..180cda4e10fc4 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.h +++ b/third_party/blink/renderer/core/execution_context/execution_context.h @@ -33,6 +33,7 @@ @@ -180,10 +180,10 @@ index f876e8f95d911..11f638ae33fba 100644 // the PolicyContainerHost. void AddContentSecurityPolicies( diff --git a/third_party/blink/renderer/core/frame/web_frame_test.cc b/third_party/blink/renderer/core/frame/web_frame_test.cc -index 4a4af235dc2e8..df0729867921f 100644 +index 702f4235e4b0f..9bddc95913dca 100644 --- a/third_party/blink/renderer/core/frame/web_frame_test.cc +++ b/third_party/blink/renderer/core/frame/web_frame_test.cc -@@ -8063,6 +8063,40 @@ TEST_F(WebFrameTest, PushStateStartsAndStops) { +@@ -8064,6 +8064,40 @@ TEST_F(WebFrameTest, PushStateStartsAndStops) { EXPECT_EQ(client.StopLoadingCount(), 2); } @@ -238,10 +238,10 @@ index 754c0b87f100b..fc036d9675ace 100644 base::UnguessableToken::Create(), nullptr /* worker_settings */, mojom::blink::V8CacheOptions::kDefault, module_responses_map, diff --git a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc -index c28be72dc6c60..fd62a57eb84be 100644 +index 0300cb283fcaf..24e2ad3ae8876 100644 --- a/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc +++ b/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc -@@ -67,6 +67,7 @@ void InstalledServiceWorkerModuleScriptFetcher::Fetch( +@@ -69,6 +69,7 @@ void InstalledServiceWorkerModuleScriptFetcher::Fetch( global_scope_->Initialize( response_url, response_referrer_policy, @@ -262,7 +262,7 @@ index 228487b3999f0..2aa5274c85588 100644 nullptr /* worker_settings */, mojom::blink::V8CacheOptions::kDefault, MakeGarbageCollected(), diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc -index 5e37d0b9434cd..b2e00c6e26ead 100644 +index c033618bf3bfb..69e4ae1840215 100644 --- a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc +++ b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc @@ -6,6 +6,7 @@ @@ -273,7 +273,7 @@ index 5e37d0b9434cd..b2e00c6e26ead 100644 #include "services/network/public/mojom/referrer_policy.mojom-blink.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/loader/network_utils.h" -@@ -174,7 +175,7 @@ void WorkerModuleScriptFetcher::NotifyClient( +@@ -175,7 +176,7 @@ void WorkerModuleScriptFetcher::NotifyClient( // Step 12.3-12.6 are implemented in Initialize(). global_scope_->Initialize( @@ -358,7 +358,7 @@ index c7a4b9f8d4ef8..3e86b84a9cc6b 100644 parent_devtools_token, std::move(settings), mojom::blink::V8CacheOptions::kDefault, diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_party/blink/renderer/core/workers/dedicated_worker.h -index fc47fbcca8919..5d7fbe651b7be 100644 +index 4916157bc62dd..eb2599b24a8b2 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker.h +++ b/third_party/blink/renderer/core/workers/dedicated_worker.h @@ -137,6 +137,7 @@ class CORE_EXPORT DedicatedWorker final @@ -428,7 +428,7 @@ index 882ac380d60b8..7ddbb4298c1b3 100644 ? mojo::Clone(classic_script_loader->GetContentSecurityPolicy() ->GetParsedPolicies()) diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h -index 447592884ac15..067bd5a085c6e 100644 +index d58e89e205cfe..87cd50a49d7f1 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h +++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h @@ -105,6 +105,7 @@ class CORE_EXPORT DedicatedWorkerGlobalScope final : public WorkerGlobalScope { @@ -816,10 +816,10 @@ index f363e8bb32393..d1da449b99b12 100644 // Generate the full code cache in the first execution of the script. mojom::blink::V8CacheOptions::kFullCodeWithoutHeatCheck, diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc -index fa2e63c090e7d..ceea95b953cb6 100644 +index 0ba37e65982cd..d6bb59d23384d 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc +++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc -@@ -454,6 +454,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( +@@ -455,6 +455,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( // is set, and with the following callback steps given evaluationStatus:" RunClassicScript( classic_script_loader->ResponseURL(), referrer_policy, @@ -827,7 +827,7 @@ index fa2e63c090e7d..ceea95b953cb6 100644 classic_script_loader->GetContentSecurityPolicy() ? mojo::Clone(classic_script_loader->GetContentSecurityPolicy() ->GetParsedPolicies()) -@@ -467,6 +468,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( +@@ -468,6 +469,7 @@ void ServiceWorkerGlobalScope::DidFetchClassicScript( void ServiceWorkerGlobalScope::Initialize( const KURL& response_url, network::mojom::ReferrerPolicy response_referrer_policy, @@ -835,7 +835,7 @@ index fa2e63c090e7d..ceea95b953cb6 100644 Vector response_csp, const Vector* response_origin_trial_tokens) { // Step 4.5. "Set workerGlobalScope's url to serviceWorker's script url." -@@ -480,6 +482,9 @@ void ServiceWorkerGlobalScope::Initialize( +@@ -481,6 +483,9 @@ void ServiceWorkerGlobalScope::Initialize( // script resource's referrer policy." SetReferrerPolicy(response_referrer_policy); @@ -845,7 +845,7 @@ index fa2e63c090e7d..ceea95b953cb6 100644 // This is quoted from the "Content Security Policy" algorithm in the service // workers spec: // "Whenever a user agent invokes Run Service Worker algorithm with a service -@@ -490,6 +495,9 @@ void ServiceWorkerGlobalScope::Initialize( +@@ -491,6 +496,9 @@ void ServiceWorkerGlobalScope::Initialize( // - If serviceWorker's script resource was delivered with a // Content-Security-Policy-Report-Only HTTP header containing the value // policy, the user agent must monitor policy for serviceWorker." @@ -855,7 +855,7 @@ index fa2e63c090e7d..ceea95b953cb6 100644 InitContentSecurityPolicyFromVector(std::move(response_csp)); BindContentSecurityPolicyToExecutionContext(); -@@ -530,26 +538,27 @@ void ServiceWorkerGlobalScope::LoadAndRunInstalledClassicScript( +@@ -531,26 +539,27 @@ void ServiceWorkerGlobalScope::LoadAndRunInstalledClassicScript( kDoNotSupportReferrerPolicyLegacyKeywords, &referrer_policy); } diff --git a/bromite/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch b/bromite/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch index 2e90ac97..4bc8b31a 100644 --- a/bromite/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch +++ b/bromite/build/patches/Samsung-Note-9-SDK27-crazylinker-workaround.patch @@ -1,4 +1,4 @@ -From 723ae5822557691feacb690ae7349890684763e1 Mon Sep 17 00:00:00 2001 +From ddedbdd0ce7848eeab8132c622e7eaa8212c18ca Mon Sep 17 00:00:00 2001 From: uazo Date: Thu, 3 Feb 2022 19:48:49 +0000 Subject: [PATCH 166/192] Samsung Note 9 SDK27 crazylinker workaround @@ -10,10 +10,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java -index 5d5815f666bf9..8850c72f9eaf0 100644 +index ac1eeaf848b9c..5b27ec8705727 100644 --- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java +++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java -@@ -35,6 +35,7 @@ import org.chromium.build.annotations.MainDex; +@@ -36,6 +36,7 @@ import org.chromium.build.annotations.MainDex; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -21,7 +21,7 @@ index 5d5815f666bf9..8850c72f9eaf0 100644 import javax.annotation.concurrent.GuardedBy; -@@ -274,7 +275,21 @@ public class LibraryLoader { +@@ -275,7 +276,21 @@ public class LibraryLoader { */ public void initInAppZygote() { assert !mInitDone; diff --git a/bromite/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch b/bromite/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch index 046eaa36..317a64e1 100644 --- a/bromite/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch +++ b/bromite/build/patches/Show-site-settings-for-cookies-javascript-and-ads.patch @@ -1,4 +1,4 @@ -From 3e2b745be38f08be9b61c0f707fe5b68d65f8e58 Mon Sep 17 00:00:00 2001 +From 38fefdd827419eb9de97d8976e677aca31530f0f Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 28 Dec 2019 10:23:04 +0100 Subject: [PATCH 102/192] Show site settings for cookies, javascript and ads @@ -12,10 +12,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -index 47527a056459f..5fade6ed2e8aa 100644 +index 3261f2f4b80d9..bca33587c1c7d 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java -@@ -528,6 +528,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -531,6 +531,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment setUpSoundPreference(preference); } else if (type == ContentSettingsType.JAVASCRIPT) { setUpJavascriptPreference(preference); @@ -24,7 +24,7 @@ index 47527a056459f..5fade6ed2e8aa 100644 } else if (type == ContentSettingsType.GEOLOCATION) { setUpLocationPreference(preference); } else if (type == ContentSettingsType.NOTIFICATIONS) { -@@ -882,16 +884,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -883,16 +885,8 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment private void setUpAdsInformationalBanner() { // Add the informational banner which shows at the top of the UI if ad blocking is // activated on this site. @@ -41,7 +41,7 @@ index 47527a056459f..5fade6ed2e8aa 100644 } private SiteSettingsCategory getWarningCategory() { -@@ -1059,17 +1053,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1060,17 +1054,35 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment @Nullable Integer currentValue = mSite.getContentSetting(browserContextHandle, ContentSettingsType.JAVASCRIPT); @@ -83,7 +83,7 @@ index 47527a056459f..5fade6ed2e8aa 100644 /** * Updates the ads list preference based on whether the site is a candidate for blocking. This * has some custom behavior. -@@ -1085,22 +1097,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment +@@ -1086,22 +1098,10 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment setupContentSettingsPreference(preference, null, false); return; } @@ -107,10 +107,10 @@ index 47527a056459f..5fade6ed2e8aa 100644 // is in the default state. if (permission == null) { diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -index c8b0349d29f6f..3ac9df164b71b 100644 +index 9925708cb07e0..9a7e68b08f598 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/Website.java -@@ -204,13 +204,18 @@ public final class Website implements WebsiteEntry { +@@ -205,13 +205,18 @@ public final class Website implements WebsiteEntry { ContentSettingException exception = getContentSettingException(type); if (type == ContentSettingsType.ADS) { diff --git a/bromite/build/patches/Site-setting-for-images.patch b/bromite/build/patches/Site-setting-for-images.patch index 9213ee78..abbdb2f1 100644 --- a/bromite/build/patches/Site-setting-for-images.patch +++ b/bromite/build/patches/Site-setting-for-images.patch @@ -1,4 +1,4 @@ -From ea1f0fb5cd741a969c905439b8a59e9ccd00e6eb Mon Sep 17 00:00:00 2001 +From 33b4f0df6df13b08c0249401ca40f19a1797861c Mon Sep 17 00:00:00 2001 From: uazo Date: Tue, 5 Oct 2021 08:38:52 +0000 Subject: [PATCH 017/192] Site setting for images @@ -16,8 +16,8 @@ Require: Content-settings-infrastructure.patch .../bromite_content_settings/images.grdp | 23 +++++ .../bromite_content_settings/images.inc | 6 ++ .../core/browser/content_settings_registry.cc | 2 +- - .../core/browser/content_settings_utils.cc | 8 +- - 10 files changed, 124 insertions(+), 7 deletions(-) + .../core/browser/content_settings_utils.cc | 7 +- + 10 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-hdpi/permission_images.png create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-mdpi/permission_images.png create mode 100644 components/browser_ui/site_settings/android/java/res/drawable-xhdpi/permission_images.png @@ -249,7 +249,7 @@ index 0000000000000..fb8d4a9a154a8 + .set_title_ui(IDS_SITE_SETTINGS_TYPE_IMAGES) + .set_mid_sentence_ui(IDS_SITE_SETTINGS_TYPE_IMAGES_MID_SENTENCE); diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc -index 9a10470b51740..cd3c538dd1bd3 100644 +index f91a59805f509..fcadea2d1b216 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc @@ -95,7 +95,7 @@ void ContentSettingsRegistry::Init() { @@ -262,10 +262,10 @@ index 9a10470b51740..cd3c538dd1bd3 100644 ContentSettingsInfo::EXCEPTIONS_ON_SECURE_AND_INSECURE_ORIGINS); diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc -index ccbff163fcbd9..d08e21807bba2 100644 +index d7b5eaa834415..24cf880990791 100644 --- a/components/content_settings/core/browser/content_settings_utils.cc +++ b/components/content_settings/core/browser/content_settings_utils.cc -@@ -134,12 +134,8 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map, +@@ -133,12 +133,7 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map, ContentSettingToValue(CONTENT_SETTING_ALLOW), std::string(), map->IsOffTheRecord())); #else @@ -275,8 +275,7 @@ index ccbff163fcbd9..d08e21807bba2 100644 - ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(), - ContentSettingToValue(CONTENT_SETTING_ALLOW), std::string(), - map->IsOffTheRecord())); -+ map->GetSettingsForOneType(ContentSettingsType::IMAGES, -+ &(rules->image_rules)); ++ rules->image_rules = map->GetSettingsForOneType(ContentSettingsType::IMAGES); // In Android active mixed content is hard blocked, with no option to allow // it. rules->mixed_content_rules.push_back(ContentSettingPatternSource( diff --git a/bromite/build/patches/Switch-to-fstack-protector-strong.patch b/bromite/build/patches/Switch-to-fstack-protector-strong.patch index 15d9e787..4e96fe95 100644 --- a/bromite/build/patches/Switch-to-fstack-protector-strong.patch +++ b/bromite/build/patches/Switch-to-fstack-protector-strong.patch @@ -1,4 +1,4 @@ -From ec5258ebd226127fe243c2c859297dddd32de32b Mon Sep 17 00:00:00 2001 +From bf62b0a848199b7043c47771034b9bf7311a4130 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 26 Dec 2018 10:20:24 -0500 Subject: [PATCH 021/192] Switch to -fstack-protector-strong @@ -18,10 +18,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn -index ae742b0b85a50..22d9a36093435 100644 +index 46a1fcea63c6f..fb9c1e178b9da 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn -@@ -361,18 +361,12 @@ config("compiler") { +@@ -360,18 +360,12 @@ config("compiler") { cflags += [ "-fstack-protector" ] } } else if ((is_posix && !is_chromeos && !is_nacl) || is_fuchsia) { diff --git a/bromite/build/patches/Timezone-customization.patch b/bromite/build/patches/Timezone-customization.patch index 24c8b672..e4f6ac09 100644 --- a/bromite/build/patches/Timezone-customization.patch +++ b/bromite/build/patches/Timezone-customization.patch @@ -1,4 +1,4 @@ -From 4699294acd9ec052b5c14d16c664fc944ed20cd1 Mon Sep 17 00:00:00 2001 +From 64193866f08c8853956aa23e20f74950156da566 Mon Sep 17 00:00:00 2001 From: uazo Date: Wed, 30 Sep 2020 07:40:01 +0000 Subject: [PATCH 014/192] Timezone customization @@ -14,12 +14,12 @@ Require: Content-settings-infrastructure.patch .../browser_ui/site_settings/android/BUILD.gn | 3 + .../res/layout/time_zone_select_dialog.xml | 36 ++++ ...ezoneoverride_site_settings_preference.xml | 68 ++++++ - ...imezoneOverrideSiteSettingsPreference.java | 194 ++++++++++++++++++ + ...imezoneOverrideSiteSettingsPreference.java | 196 ++++++++++++++++++ .../WebsitePreferenceBridge.java | 10 + ...BromiteTimezoneOverrideContentSetting.java | 147 +++++++++++++ .../android/website_preference_bridge.cc | 16 ++ .../bromite_content_settings/timezone.grdp | 39 ++++ - .../timezone_override.inc | 23 +++ + .../timezone_override.inc | 23 ++ .../browser/content_settings_pref_provider.cc | 16 ++ .../browser/content_settings_pref_provider.h | 4 + .../core/browser/content_settings_utils.cc | 5 + @@ -32,9 +32,9 @@ Require: Content-settings-infrastructure.patch .../common/content_settings_mojom_traits.h | 5 + .../core/common/pref_names.cc | 3 + .../content_settings/core/common/pref_names.h | 2 + - .../renderer/content_settings_agent_impl.cc | 80 ++++++++ + .../renderer/content_settings_agent_impl.cc | 80 +++++++ .../renderer/content_settings_agent_impl.h | 11 + - 23 files changed, 679 insertions(+), 1 deletion(-) + 23 files changed, 681 insertions(+), 1 deletion(-) create mode 100755 components/browser_ui/site_settings/android/java/res/layout/time_zone_select_dialog.xml create mode 100755 components/browser_ui/site_settings/android/java/res/layout/timezoneoverride_site_settings_preference.xml create mode 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/TimezoneOverrideSiteSettingsPreference.java @@ -44,10 +44,10 @@ Require: Content-settings-infrastructure.patch create mode 100644 components/content_settings/core/common/bromite_content_settings/TIMEZONE.inc diff --git a/components/browser_ui/site_settings/android/BUILD.gn b/components/browser_ui/site_settings/android/BUILD.gn -index e83693564d49d..da63c3ce54aa4 100644 +index 9719ec36a3f9e..b057318f21bf8 100644 --- a/components/browser_ui/site_settings/android/BUILD.gn +++ b/components/browser_ui/site_settings/android/BUILD.gn -@@ -101,6 +101,7 @@ android_library("java") { +@@ -103,6 +103,7 @@ android_library("java") { "java/src/org/chromium/components/browser_ui/site_settings/WebsitePreference.java", "java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java", "java/src/org/chromium/components/browser_ui/site_settings/WebsiteRowPreference.java", @@ -55,7 +55,7 @@ index e83693564d49d..da63c3ce54aa4 100644 ] resources_package = "org.chromium.components.browser_ui.site_settings" -@@ -252,6 +253,8 @@ android_resources("java_resources") { +@@ -257,6 +258,8 @@ android_resources("java_resources") { "java/res/xml/site_settings_preferences.xml", "java/res/xml/site_settings_preferences_with_categories.xml", "java/res/xml/website_preferences.xml", @@ -183,10 +183,10 @@ index 0000000000000..e7570d55a1f5e + diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/TimezoneOverrideSiteSettingsPreference.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/TimezoneOverrideSiteSettingsPreference.java new file mode 100755 -index 0000000000000..636d75e5b94e4 +index 0000000000000..5c16064afe21e --- /dev/null +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/TimezoneOverrideSiteSettingsPreference.java -@@ -0,0 +1,194 @@ +@@ -0,0 +1,196 @@ +/* + This file is part of Bromite. + @@ -240,7 +240,8 @@ index 0000000000000..636d75e5b94e4 + * TimezoneOverride Preference for SiteSettings. + */ +public class TimezoneOverrideSiteSettingsPreference -+ extends Preference implements RadioGroup.OnCheckedChangeListener, ++ extends Preference implements BromiteCustomTriStateSiteSettingsPreferenceImpl, ++ RadioGroup.OnCheckedChangeListener, + RadioButtonWithEditText.OnTextChangeListener { + private @ContentSettingValues int mSetting = ContentSettingValues.DEFAULT; + private RadioButtonWithDescription mAllowed; @@ -265,6 +266,7 @@ index 0000000000000..636d75e5b94e4 + mBrowserContextHandle = browserContextHandle; + } + ++ @Override + public @ContentSettingValues int getCheckedSetting() { + return mSetting; + } @@ -382,10 +384,10 @@ index 0000000000000..636d75e5b94e4 + } +} diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java -index 811d3c26ece35..2e763118b77c8 100644 +index 791e1a593c95b..f5bbcc371d01e 100644 --- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java +++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/WebsitePreferenceBridge.java -@@ -383,6 +383,14 @@ public class WebsitePreferenceBridge { +@@ -411,6 +411,14 @@ public class WebsitePreferenceBridge { return WebsitePreferenceBridgeJni.get().toHostOnlyPattern(pattern); } @@ -400,7 +402,7 @@ index 811d3c26ece35..2e763118b77c8 100644 @NativeMethods public interface Natives { boolean isNotificationEmbargoedForOrigin( -@@ -447,5 +455,7 @@ public class WebsitePreferenceBridge { +@@ -480,5 +488,7 @@ public class WebsitePreferenceBridge { boolean getLocationAllowedByPolicy(BrowserContextHandle browserContextHandle); String toDomainWildcardPattern(String pattern); String toHostOnlyPattern(String pattern); @@ -562,10 +564,10 @@ index 0000000000000..a5c1e7085d841 + } +} diff --git a/components/browser_ui/site_settings/android/website_preference_bridge.cc b/components/browser_ui/site_settings/android/website_preference_bridge.cc -index 4d67efeaadd9a..d99e98c603cc4 100644 +index d3319be4efcf0..0fa4e79185eea 100644 --- a/components/browser_ui/site_settings/android/website_preference_bridge.cc +++ b/components/browser_ui/site_settings/android/website_preference_bridge.cc -@@ -1019,3 +1019,19 @@ JNI_WebsitePreferenceBridge_ToHostOnlyPattern( +@@ -1102,3 +1102,19 @@ JNI_WebsitePreferenceBridge_ToHostOnlyPattern( ContentSettingsPattern::FromString(pattern_string)); return ConvertUTF8ToJavaString(env, host_only_pattern.ToString()); } @@ -660,10 +662,10 @@ index 0000000000000..80d25a0ea08e9 + .set_blocked_exceptions_ui(IDS_WEBSITE_SETTINGS_CATEGORY_TIMEZONE_OVERRIDE_RANDOM) + .set_mid_sentence_ui(IDS_SITE_SETTINGS_TIMEZONE_OVERRIDE_TITLE); diff --git a/components/content_settings/core/browser/content_settings_pref_provider.cc b/components/content_settings/core/browser/content_settings_pref_provider.cc -index 3dc221e1d12d0..b33921091ccd5 100644 +index 925c173b08ab6..362a28af89211 100644 --- a/components/content_settings/core/browser/content_settings_pref_provider.cc +++ b/components/content_settings/core/browser/content_settings_pref_provider.cc -@@ -71,6 +71,8 @@ void PrefProvider::RegisterProfilePrefs( +@@ -72,6 +72,8 @@ void PrefProvider::RegisterProfilePrefs( info->GetPrefRegistrationFlags()); } @@ -672,7 +674,7 @@ index 3dc221e1d12d0..b33921091ccd5 100644 // Obsolete prefs ---------------------------------------------------------- // These prefs have been removed, but need to be registered so they can -@@ -136,6 +138,10 @@ PrefProvider::PrefProvider(PrefService* prefs, +@@ -137,6 +139,10 @@ PrefProvider::PrefProvider(PrefService* prefs, event_args->set_number_of_exceptions( num_exceptions); // PrefProvider::PrefProvider. }); @@ -683,7 +685,7 @@ index 3dc221e1d12d0..b33921091ccd5 100644 } PrefProvider::~PrefProvider() { -@@ -324,4 +330,14 @@ void PrefProvider::SetClockForTesting(base::Clock* clock) { +@@ -398,4 +404,14 @@ void PrefProvider::SetClockForTesting(base::Clock* clock) { clock_ = clock; } @@ -699,10 +701,10 @@ index 3dc221e1d12d0..b33921091ccd5 100644 + } // namespace content_settings diff --git a/components/content_settings/core/browser/content_settings_pref_provider.h b/components/content_settings/core/browser/content_settings_pref_provider.h -index bf8fd6bc47424..2c56ebec122eb 100644 +index 35d4908d5c6d5..12bf884471737 100644 --- a/components/content_settings/core/browser/content_settings_pref_provider.h +++ b/components/content_settings/core/browser/content_settings_pref_provider.h -@@ -68,6 +68,9 @@ class PrefProvider : public UserModifiableProvider { +@@ -77,6 +77,9 @@ class PrefProvider : public UserModifiableProvider { ContentSettingsPref* GetPref(ContentSettingsType type) const; @@ -712,7 +714,7 @@ index bf8fd6bc47424..2c56ebec122eb 100644 private: friend class DeadlockCheckerObserver; // For testing. -@@ -104,6 +107,7 @@ class PrefProvider : public UserModifiableProvider { +@@ -121,6 +124,7 @@ class PrefProvider : public UserModifiableProvider { base::ThreadChecker thread_checker_; raw_ptr clock_; @@ -721,13 +723,13 @@ index bf8fd6bc47424..2c56ebec122eb 100644 } // namespace content_settings diff --git a/components/content_settings/core/browser/content_settings_utils.cc b/components/content_settings/core/browser/content_settings_utils.cc -index 3dc160878f8bb..ccbff163fcbd9 100644 +index dee7eac903da9..d7b5eaa834415 100644 --- a/components/content_settings/core/browser/content_settings_utils.cc +++ b/components/content_settings/core/browser/content_settings_utils.cc -@@ -153,6 +153,11 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map, - &(rules->script_rules)); - map->GetSettingsForOneType(ContentSettingsType::POPUPS, - &(rules->popup_redirect_rules)); +@@ -152,6 +152,11 @@ void GetRendererContentSettingRules(const HostContentSettingsMap* map, + map->GetSettingsForOneType(ContentSettingsType::JAVASCRIPT); + rules->popup_redirect_rules = + map->GetSettingsForOneType(ContentSettingsType::POPUPS); + + // pass custom timezone value to the render process + std::string timezone; @@ -737,10 +739,10 @@ index 3dc160878f8bb..ccbff163fcbd9 100644 bool IsMorePermissive(ContentSetting a, ContentSetting b) { diff --git a/components/content_settings/core/browser/host_content_settings_map.cc b/components/content_settings/core/browser/host_content_settings_map.cc -index ae8d830421b65..ae8099def223e 100644 +index f993da7767b41..58e51dacd5b35 100644 --- a/components/content_settings/core/browser/host_content_settings_map.cc +++ b/components/content_settings/core/browser/host_content_settings_map.cc -@@ -657,6 +657,14 @@ void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) { +@@ -660,6 +660,14 @@ void HostContentSettingsMap::SetClockForTesting(base::Clock* clock) { provider->SetClockForTesting(clock); } @@ -756,10 +758,10 @@ index ae8d830421b65..ae8099def223e 100644 auto* content_setting_registry = content_settings::ContentSettingsRegistry::GetInstance(); diff --git a/components/content_settings/core/browser/host_content_settings_map.h b/components/content_settings/core/browser/host_content_settings_map.h -index 28931ee495b1e..41cb4901744cb 100644 +index 41795b119c0a2..a853d29761f4d 100644 --- a/components/content_settings/core/browser/host_content_settings_map.h +++ b/components/content_settings/core/browser/host_content_settings_map.h -@@ -364,6 +364,9 @@ class HostContentSettingsMap : public content_settings::Observer, +@@ -378,6 +378,9 @@ class HostContentSettingsMap : public content_settings::Observer, allow_invalid_secondary_pattern_for_testing_ = allow; } @@ -778,7 +780,7 @@ index 0000000000000..4888d3a717570 + // Content setting for timezone customization functionality. + TIMEZONE_OVERRIDE, diff --git a/components/content_settings/core/common/content_settings.h b/components/content_settings/core/common/content_settings.h -index bfa79c55c46e1..9af4d2b8395ca 100644 +index a45c8d54752bd..1e3ed23beb4a1 100644 --- a/components/content_settings/core/common/content_settings.h +++ b/components/content_settings/core/common/content_settings.h @@ -92,6 +92,7 @@ struct RendererContentSettingRules { @@ -790,20 +792,20 @@ index bfa79c55c46e1..9af4d2b8395ca 100644 namespace content_settings { diff --git a/components/content_settings/core/common/content_settings.mojom b/components/content_settings/core/common/content_settings.mojom -index 8e50e6cb10056..89509a26e8b54 100644 +index afc2886bb79b7..62f98ef3e7fc7 100644 --- a/components/content_settings/core/common/content_settings.mojom +++ b/components/content_settings/core/common/content_settings.mojom -@@ -95,4 +95,5 @@ struct RendererContentSettingRules { +@@ -96,4 +96,5 @@ struct RendererContentSettingRules { array popup_redirect_rules; array mixed_content_rules; array auto_dark_content_rules; + string timezone_override_value; }; diff --git a/components/content_settings/core/common/content_settings_mojom_traits.cc b/components/content_settings/core/common/content_settings_mojom_traits.cc -index 9a8d8c57cccaf..8d6ebd223bb55 100644 +index cca0f92056966..efdb0f63bfaac 100644 --- a/components/content_settings/core/common/content_settings_mojom_traits.cc +++ b/components/content_settings/core/common/content_settings_mojom_traits.cc -@@ -162,7 +162,8 @@ bool StructTraitsscript_rules) && data.ReadPopupRedirectRules(&out->popup_redirect_rules) && data.ReadMixedContentRules(&out->mixed_content_rules) && @@ -814,10 +816,10 @@ index 9a8d8c57cccaf..8d6ebd223bb55 100644 } // namespace mojo diff --git a/components/content_settings/core/common/content_settings_mojom_traits.h b/components/content_settings/core/common/content_settings_mojom_traits.h -index 523762b1744e5..286f4955032f2 100644 +index 90c558ecd6c7f..49479aa938d9f 100644 --- a/components/content_settings/core/common/content_settings_mojom_traits.h +++ b/components/content_settings/core/common/content_settings_mojom_traits.h -@@ -194,6 +194,11 @@ struct StructTraits< +@@ -198,6 +198,11 @@ struct StructTraits< return r.auto_dark_content_rules; } @@ -830,11 +832,11 @@ index 523762b1744e5..286f4955032f2 100644 content_settings::mojom::RendererContentSettingRulesDataView data, RendererContentSettingRules* out); diff --git a/components/content_settings/core/common/pref_names.cc b/components/content_settings/core/common/pref_names.cc -index 5d49589a748b5..d5b74001c98b4 100644 +index b6200bf5a7e16..62b533cb4eebe 100644 --- a/components/content_settings/core/common/pref_names.cc +++ b/components/content_settings/core/common/pref_names.cc -@@ -182,4 +182,7 @@ const char kDesktopSitePeripheralSettingEnabled[] = - const char kDesktopSiteDisplaySettingEnabled[] = "desktop_site.display_setting"; +@@ -216,4 +216,7 @@ const char kDesktopSiteDisplaySettingEnabled[] = "desktop_site.display_setting"; + const char kDesktopSiteWindowSettingEnabled[] = "desktop_site.window_setting"; #endif +const char kContentSettingsCustomTimezone[] = @@ -842,11 +844,11 @@ index 5d49589a748b5..d5b74001c98b4 100644 + } // namespace prefs diff --git a/components/content_settings/core/common/pref_names.h b/components/content_settings/core/common/pref_names.h -index 79ce87206d56d..0ae5528609702 100644 +index abc310aea8dd1..18b199363c0da 100644 --- a/components/content_settings/core/common/pref_names.h +++ b/components/content_settings/core/common/pref_names.h -@@ -93,6 +93,8 @@ extern const char kDesktopSitePeripheralSettingEnabled[]; - extern const char kDesktopSiteDisplaySettingEnabled[]; +@@ -101,6 +101,8 @@ extern const char kDesktopSiteDisplaySettingEnabled[]; + extern const char kDesktopSiteWindowSettingEnabled[]; #endif +extern const char kContentSettingsCustomTimezone[]; diff --git a/bromite/build/patches/Use-4-tile-rows-never-show-logo.patch b/bromite/build/patches/Use-4-tile-rows-never-show-logo.patch index 9a2b0cfe..42d2c50b 100644 --- a/bromite/build/patches/Use-4-tile-rows-never-show-logo.patch +++ b/bromite/build/patches/Use-4-tile-rows-never-show-logo.patch @@ -1,4 +1,4 @@ -From 03b955e64961b840d1215c4e2836395aaea6f71a Mon Sep 17 00:00:00 2001 +From 0bdd0146d2a3270d1a0b31019765762b4902ef6a Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Wed, 21 Feb 2018 00:32:09 +0100 Subject: [PATCH 082/192] Use 4 tile rows, never show logo @@ -12,7 +12,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java -index 8182f5be2056c..0fa55d91dd494 100644 +index f406708e83c5b..0d224b3521288 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java @@ -112,7 +112,7 @@ public class NewTabPageLayout extends LinearLayout { @@ -24,7 +24,7 @@ index 8182f5be2056c..0fa55d91dd494 100644 private boolean mSearchProviderIsGoogle; private boolean mShowingNonStandardLogo; -@@ -360,7 +360,7 @@ public class NewTabPageLayout extends LinearLayout { +@@ -381,7 +381,7 @@ public class NewTabPageLayout extends LinearLayout { boolean isScrollableMvtEnabled, boolean searchProviderIsGoogle) { assert mMvTilesContainerLayout != null; @@ -33,7 +33,7 @@ index 8182f5be2056c..0fa55d91dd494 100644 if (searchProviderIsGoogle && QueryTileUtils.isQueryTilesEnabledOnNTP()) { maxRows = QueryTileSection.getMaxRowsForMostVisitedTiles(getContext()); } -@@ -540,7 +540,7 @@ public class NewTabPageLayout extends LinearLayout { +@@ -567,7 +567,7 @@ public class NewTabPageLayout extends LinearLayout { && mInitialized) { return; } @@ -56,7 +56,7 @@ index 7e6769376f86d..65d011a1c25f0 100644 private long mNativeMostVisitedSitesBridge; diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc -index a369bc796c2e2..f5516edb85ea9 100644 +index fde13fcd847c8..e2e4263e55d5b 100644 --- a/chrome/browser/engagement/important_sites_util.cc +++ b/chrome/browser/engagement/important_sites_util.cc @@ -67,7 +67,7 @@ static const int kTimesIgnoredForSuppression = 3; diff --git a/bromite/build/patches/Use-64-bit-WebView-processes.patch b/bromite/build/patches/Use-64-bit-WebView-processes.patch index 76e524c1..501c27c7 100644 --- a/bromite/build/patches/Use-64-bit-WebView-processes.patch +++ b/bromite/build/patches/Use-64-bit-WebView-processes.patch @@ -1,4 +1,4 @@ -From 0ec79e998f12936288b86d301b692f8ad15d66cf Mon Sep 17 00:00:00 2001 +From e82d85fee0eeb71f4cf203327fe344a401a33cc9 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Thu, 26 Jan 2017 01:30:12 -0500 Subject: [PATCH 085/192] Use 64-bit WebView processes @@ -27,10 +27,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html 1 file changed, 3 deletions(-) diff --git a/android_webview/nonembedded/java/AndroidManifest.xml b/android_webview/nonembedded/java/AndroidManifest.xml -index 59e047c15bed9..646d9bb6291ac 100644 +index ce9348a114b93..0d0a88064fed7 100644 --- a/android_webview/nonembedded/java/AndroidManifest.xml +++ b/android_webview/nonembedded/java/AndroidManifest.xml -@@ -41,9 +41,6 @@ by a child template that "extends" this file. +@@ -38,9 +38,6 @@ by a child template that "extends" this file. android:icon="@{{manifest_package|default('com.android.webview')}}:drawable/icon_webview" android:name="{{ application_name|default('org.chromium.android_webview.nonembedded.WebViewApkApplication') }}" android:multiArch="true" diff --git a/bromite/build/patches/Use-dummy-DFM-installer.patch b/bromite/build/patches/Use-dummy-DFM-installer.patch index ade5781d..6cc29954 100644 --- a/bromite/build/patches/Use-dummy-DFM-installer.patch +++ b/bromite/build/patches/Use-dummy-DFM-installer.patch @@ -1,4 +1,4 @@ -From 9046cffeb98d3c80d038be448da59954bb4ad4ca Mon Sep 17 00:00:00 2001 +From 2e33399f72f593a51bf3d050469a6fde84762795 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 15 Dec 2019 19:40:37 +0100 Subject: [PATCH 100/192] Use dummy DFM installer diff --git a/bromite/build/patches/User-agent-customization.patch b/bromite/build/patches/User-agent-customization.patch index 0fdb4085..25d658b4 100644 --- a/bromite/build/patches/User-agent-customization.patch +++ b/bromite/build/patches/User-agent-customization.patch @@ -1,4 +1,4 @@ -From 4687b00ea280979de05101055ee6033ed91ccb67 Mon Sep 17 00:00:00 2001 +From 20a008155f5f712f885f0f4f642c2717aa17b1fa Mon Sep 17 00:00:00 2001 From: uazo Date: Fri, 9 Apr 2021 20:09:08 +0000 Subject: [PATCH 129/192] User agent customization @@ -26,13 +26,12 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/android/content/content_utils.cc | 28 +++ .../preferences/browser_prefs_android.cc | 7 + .../privacy_preferences_manager_impl.cc | 124 ++++++++++++ - .../preferences/ChromePreferenceKeys.java | 5 + + .../preferences/ChromePreferenceKeys.java | 7 +- .../settings/PrivacyPreferencesManager.java | 8 + .../org/chromium/chrome/browser/tab/Tab.java | 2 + .../browser/tabmodel/TabWindowManager.java | 2 + .../tabmodel/TabWindowManagerImpl.java | 18 ++ .../strings/android_chrome_strings.grd | 35 ++++ - chrome/common/pref_names.cc | 13 ++ chrome/common/pref_names.h | 8 + .../widget/RadioButtonWithEditText.java | 11 + .../embedder_support/user_agent_utils.cc | 8 +- @@ -42,16 +41,16 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/web_contents/web_contents_impl.cc | 4 + .../framehost/NavigationControllerImpl.java | 3 +- content/renderer/render_thread_impl.cc | 1 - - 31 files changed, 762 insertions(+), 16 deletions(-) + 30 files changed, 749 insertions(+), 18 deletions(-) create mode 100644 chrome/android/java/res/layout/custom_useragent_preferences.xml create mode 100644 chrome/android/java/res/xml/useragent_preferences.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/settings/UserAgentPreferences.java diff --git a/base/base_switches.cc b/base/base_switches.cc -index 8e0a4855d4200..6629f3b61fa4e 100644 +index f552729b0ecd0..fb0ce22b16089 100644 --- a/base/base_switches.cc +++ b/base/base_switches.cc -@@ -174,6 +174,8 @@ const char kForceFieldTrialParams[] = "force-fieldtrial-params"; +@@ -169,6 +169,8 @@ const char kForceFieldTrialParams[] = "force-fieldtrial-params"; extern const char kEnableCrashpad[] = "enable-crashpad"; #endif @@ -61,10 +60,10 @@ index 8e0a4855d4200..6629f3b61fa4e 100644 // Override the default scheduling boosting value for urgent tasks. // This can be adjusted if a specific chromeos device shows better perf/power diff --git a/base/base_switches.h b/base/base_switches.h -index cead11f7ef247..5666cda398bd9 100644 +index 57873ea355cc1..67fa4590c7f26 100644 --- a/base/base_switches.h +++ b/base/base_switches.h -@@ -67,6 +67,8 @@ extern const char kEnableCrashpad[]; +@@ -66,6 +66,8 @@ extern const char kEnableCrashpad[]; extern const char kSchedulerBoostUrgent[]; #endif @@ -74,10 +73,10 @@ index cead11f7ef247..5666cda398bd9 100644 #endif // BASE_BASE_SWITCHES_H_ diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni -index 0af01ae9e7881..d858cf8935d43 100644 +index f9ac29ab35173..b421f571bf6d2 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -671,4 +671,6 @@ chrome_java_resources = [ +@@ -675,4 +675,6 @@ chrome_java_resources = [ "java/res/xml/privacy_preferences_v2.xml", "java/res/xml/search_widget_info.xml", "java/res/xml/tracing_preferences.xml", @@ -85,10 +84,10 @@ index 0af01ae9e7881..d858cf8935d43 100644 + "java/res/layout/custom_useragent_preferences.xml", ] diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index 66a00fe645c66..64f830b41843b 100644 +index b012d0bb3a0e0..4fff6772328e4 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -928,6 +928,7 @@ chrome_java_sources = [ +@@ -937,6 +937,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", @@ -209,12 +208,12 @@ index 0000000000000..5c49945405447 + + diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml -index 83a80a75332ec..2b1e1e9a53fdd 100644 +index 5a4a3480838d4..5f8ed2aba57cd 100644 --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -106,6 +106,11 @@ found in the LICENSE file. +@@ -111,6 +111,11 @@ found in the LICENSE file. android:key="content_settings" - android:order="18" + android:order="19" android:title="@string/prefs_site_settings"/> + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java -index b4f3653f40d76..5aec773088ae5 100644 +index 8cb864edff7b7..3a16aa2f9bea7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java -@@ -48,6 +48,7 @@ import org.chromium.content_public.browser.BrowserStartupController; +@@ -49,6 +49,7 @@ import org.chromium.content_public.browser.BrowserStartupController; import org.chromium.content_public.browser.DeviceUtils; import org.chromium.content_public.browser.SpeechRecognition; import org.chromium.net.NetworkChangeNotifier; @@ -273,7 +272,7 @@ index b4f3653f40d76..5aec773088ae5 100644 import java.io.File; import java.util.ArrayList; -@@ -311,11 +312,13 @@ public class ChromeBrowserInitializer { +@@ -315,11 +316,13 @@ public class ChromeBrowserInitializer { @Override public void onSuccess() { @@ -288,7 +287,7 @@ index b4f3653f40d76..5aec773088ae5 100644 } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java -index de0592f0912d0..7032f67985f70 100644 +index 14137216752a6..c6774e2bba6ca 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacyPreferencesManagerImpl.java @@ -220,10 +220,52 @@ public class PrivacyPreferencesManagerImpl implements PrivacyPreferencesManager @@ -539,7 +538,7 @@ index 0000000000000..5f31e27a6a29d + } +} diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java -index a72f0a8a5b1be..fab509648b294 100644 +index 86e45f241697a..3e15b237793c0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabImpl.java @@ -29,7 +29,11 @@ import org.chromium.base.annotations.CalledByNative; @@ -587,7 +586,7 @@ index a72f0a8a5b1be..fab509648b294 100644 @TabLoadStatus int result = loadUrlInternal(params, fixedUrl); -@@ -1462,8 +1492,15 @@ public class TabImpl implements Tab { +@@ -1448,8 +1478,15 @@ public class TabImpl implements Tab { mWebContents.setImportance(mImportance); @@ -606,7 +605,7 @@ index a72f0a8a5b1be..fab509648b294 100644 mContentView.addOnAttachStateChangeListener(mAttachStateChangeListener); updateInteractableState(); @@ -1621,6 +1658,10 @@ public class TabImpl implements Tab { - if (mWebContents != null) mWebContents.getNavigationController().loadIfNecessary(); + } mIsBeingRestored = true; for (TabObserver observer : mObservers) observer.onRestoreStarted(this); + if(overrideUserAgentWhenUnFrozen != UserAgentOverrideOption.INHERIT) { @@ -675,10 +674,10 @@ index a72f0a8a5b1be..fab509648b294 100644 @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) public interface Natives { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java -index 9ac3fbad542e4..d0708dd27e274 100644 +index 63d7574ceaeb0..882df34246ff4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabUtils.java -@@ -35,6 +35,10 @@ import org.chromium.ui.base.WindowAndroid; +@@ -36,6 +36,10 @@ import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.display.DisplayAndroidManager; import org.chromium.url.GURL; @@ -689,8 +688,8 @@ index 9ac3fbad542e4..d0708dd27e274 100644 import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -@@ -136,17 +140,15 @@ public class TabUtils { - */ +@@ -156,17 +160,15 @@ public class TabUtils { + // TODO(crbug.com/1413060): Remove param forcedByUser from TabUtils#switchUserAgent. public static void switchUserAgent( Tab tab, boolean switchToDesktop, boolean forcedByUser, int caller) { - final boolean reloadOnChange = !tab.isNativePage(); @@ -763,7 +762,7 @@ index 2261af34ddb9d..b3412c7e47557 100644 content::WebContents::FromJavaWebContents(jweb_contents); embedder_support::SetDesktopUserAgentOverride( diff --git a/chrome/browser/android/preferences/browser_prefs_android.cc b/chrome/browser/android/preferences/browser_prefs_android.cc -index 7867d48564fe5..2ed2040f45fa2 100644 +index fd1fcaeac7c45..834f96d6a1b66 100644 --- a/chrome/browser/android/preferences/browser_prefs_android.cc +++ b/chrome/browser/android/preferences/browser_prefs_android.cc @@ -11,12 +11,19 @@ @@ -926,10 +925,10 @@ index f15558afaf028..61b320cd58c86 100644 + UpdateOverrideUserAgent(); +} diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -index 72c282a16aa97..a6978010c728a 100644 +index f920daba5c9c5..8f0abc824068f 100644 --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java -@@ -971,6 +971,9 @@ public final class ChromePreferenceKeys { +@@ -969,6 +969,9 @@ public final class ChromePreferenceKeys { public static final String BLUETOOTH_NOTIFICATION_IDS = "Chrome.Bluetooth.NotificationIds"; public static final String USB_NOTIFICATION_IDS = "Chrome.USB.NotificationIds"; @@ -939,10 +938,12 @@ index 72c282a16aa97..a6978010c728a 100644 /** * These values are currently used as SharedPreferences keys, along with the keys in * {@link LegacyChromePreferenceKeys#getKeysInUse()}. Add new SharedPreferences keys -@@ -1106,6 +1109,8 @@ public final class ChromePreferenceKeys { +@@ -1103,8 +1106,8 @@ public final class ChromePreferenceKeys { SIGNIN_PROMO_NTP_LAST_SHOWN_TIME, SYNC_PROMO_TOTAL_SHOW_COUNT, SEARCH_RESUMPTION_MODULE_COLLAPSE_ON_NTP, +- SWAA_TIMESTAMP, +- SWAA_STATUS, + USERAGENT_STICKY_DESKTOP_MODE, + USERAGENT_ALWAYS_DESKTOP_MODE, TABBED_ACTIVITY_LAST_VISIBLE_TIME_MS, @@ -1023,10 +1024,10 @@ index 02139bedaa989..db3272eee947c 100644 public Tab getTabById(int tabId) { for (int i = 0; i < mSelectors.size(); i++) { diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 74becfe121a1e..781ff28c92b1b 100644 +index a93ae631ae6a8..7b03fb86276ab 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -226,6 +226,41 @@ CHAR_LIMIT guidelines: +@@ -231,6 +231,41 @@ CHAR_LIMIT guidelines: Visit help page @@ -1068,54 +1069,30 @@ index 74becfe121a1e..781ff28c92b1b 100644 General -diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc -index d0cea466d7d1f..9de4b5dba8cd0 100644 ---- a/chrome/common/pref_names.cc -+++ b/chrome/common/pref_names.cc -@@ -376,6 +376,19 @@ const char kAllowJavascriptAppleEvents[] = - - #endif - -+#if BUILDFLAG(IS_ANDROID) -+const char kOverrideUserAgentEnabled[] = -+ "override_user_agent_enabled"; -+const char kOverrideUserAgent[] = -+ "override_user_agent"; -+const char kOverrideUserAgentDesktopModeEnabled[] = -+ "override_user_agent_dm_enabled"; -+const char kOverrideUserAgentDesktopMode[] = -+ "override_user_agent_dm"; -+const char kDesktopModeViewportMetaEnabled[] = -+ "dm-viewport-meta-enabled"; -+#endif -+ - // Boolean which specifies whether we should ask the user if we should download - // a file (true) or just download it automatically. - const char kPromptForDownload[] = "download.prompt_for_download"; diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h -index 86640ba3cc01f..3e09ba04a2eae 100644 +index caa31c9e129df..a574a301fd07a 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -1246,6 +1246,14 @@ extern const char kDesktopSharingHubEnabled[]; - extern const char kLastWhatsNewVersion[]; - extern const char kHasShownRefreshWhatsNew[]; - #endif +@@ -1825,6 +1825,14 @@ inline constexpr char kNaviOnboardGroup[] = "browser.navi_onboard_group"; + inline constexpr char kHadThreeConsecutiveNotificationPermissionDenies[] = + "profile.content_settings.had_three_consecutive_denies.notifications"; + +#if BUILDFLAG(IS_ANDROID) -+extern const char kOverrideUserAgentEnabled[]; -+extern const char kOverrideUserAgent[]; -+extern const char kOverrideUserAgentDesktopModeEnabled[]; -+extern const char kOverrideUserAgentDesktopMode[]; -+extern const char kDesktopModeViewportMetaEnabled[]; ++inline constexpr char kOverrideUserAgentEnabled[] = "override_user_agent_enabled"; ++inline constexpr char kOverrideUserAgent[] = "override_user_agent"; ++inline constexpr char kOverrideUserAgentDesktopModeEnabled[] = "override_user_agent_dm_enabled"; ++inline constexpr char kOverrideUserAgentDesktopMode[] = "override_user_agent_dm"; ++inline constexpr char kDesktopModeViewportMetaEnabled[] = "dm-viewport-meta-enabled"; +#endif + - - #if !BUILDFLAG(IS_ANDROID) - extern const char kLensRegionSearchEnabled[]; + // Boolean indicating whether to show a promo for the quiet notification + // permission UI. + inline constexpr char kQuietNotificationPermissionShouldShowPromo[] = diff --git a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java -index 0a1bd690073f5..2e6b50d20ee89 100644 +index 6d50db3c83ad8..2af3286f836be 100644 --- a/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java +++ b/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/RadioButtonWithEditText.java -@@ -161,6 +161,17 @@ public class RadioButtonWithEditText extends RadioButtonWithDescription { +@@ -159,6 +159,17 @@ public class RadioButtonWithEditText extends RadioButtonWithDescription { mEditText.setCursorVisible(false); KeyboardVisibilityDelegate.getInstance().hideKeyboard(mEditText); } @@ -1134,21 +1111,21 @@ index 0a1bd690073f5..2e6b50d20ee89 100644 /** diff --git a/components/embedder_support/user_agent_utils.cc b/components/embedder_support/user_agent_utils.cc -index 456414fea977b..a73a2c361aa78 100644 +index 2ab34ff2fc8a5..dc0a1889847ed 100644 --- a/components/embedder_support/user_agent_utils.cc +++ b/components/embedder_support/user_agent_utils.cc -@@ -563,6 +563,10 @@ blink::UserAgentMetadata GetUserAgentMetadata(const PrefService* pref_service) { - policy::policy_prefs::kUserAgentClientHintsGREASEUpdateEnabled); - ua_options.force_major_to_minor = GetMajorToMinorFromPrefs(pref_service); - } +@@ -551,6 +551,10 @@ blink::UserAgentMetadata GetUserAgentMetadata() { + + blink::UserAgentMetadata GetUserAgentMetadata(const PrefService* pref_service) { + blink::UserAgentMetadata metadata; + if (base::CommandLine::ForCurrentProcess()->HasSwitch(kUserAgent)) { + //NOTE: metadata is not updated with custom UA information + return metadata; + } - metadata.brand_version_list = GetBrandMajorVersionList( - enable_updated_grease_by_policy, ua_options.force_major_to_minor); - metadata.brand_full_version_list = GetBrandFullVersionList( -@@ -600,7 +604,9 @@ void SetDesktopUserAgentOverride(content::WebContents* web_contents, + + bool enable_updated_grease_by_policy = true; + UserAgentOptions ua_options; +@@ -618,7 +622,9 @@ void SetDesktopUserAgentOverride(content::WebContents* web_contents, blink::UserAgentOverride spoofed_ua; spoofed_ua.ua_string_override = content::BuildUserAgentFromOSAndProduct( @@ -1160,7 +1137,7 @@ index 456414fea977b..a73a2c361aa78 100644 spoofed_ua.ua_metadata_override->platform = "Linux"; spoofed_ua.ua_metadata_override->platform_version = diff --git a/content/browser/renderer_host/navigation_controller_android.cc b/content/browser/renderer_host/navigation_controller_android.cc -index 85e2bf8eefad5..f1d236bf2b2b9 100644 +index 4617949c8504d..c55b7dbd17358 100644 --- a/content/browser/renderer_host/navigation_controller_android.cc +++ b/content/browser/renderer_host/navigation_controller_android.cc @@ -253,6 +253,7 @@ NavigationControllerAndroid::LoadUrl( @@ -1194,19 +1171,19 @@ index c602570053044..611542e0fb17f 100644 jboolean has_user_gesture, jboolean should_clear_history_list, diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index 7759168ac33a1..2a806f49e867c 100644 +index 84b0dbd7a5015..54623a2d29512 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -3722,6 +3722,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( +@@ -3742,6 +3742,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( switches::kLacrosUseChromeosProtectedMedia, switches::kLacrosUseChromeosProtectedAv1, #endif + switches::kDesktopModeViewportMetaEnabled, }; - renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames, - std::size(kSwitchNames)); + renderer_cmd->CopySwitchesFrom(browser_cmd, kSwitchNames); + diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index c9b13be94c531..ce9af6e26c585 100644 +index b5bb5e16086d4..b35ecd84d7fd6 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -13,6 +13,7 @@ @@ -1217,7 +1194,7 @@ index c9b13be94c531..ce9af6e26c585 100644 #include "base/check_op.h" #include "base/command_line.h" #include "base/containers/contains.h" -@@ -2939,6 +2940,9 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences() { +@@ -2970,6 +2971,9 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences() { #else prefs.viewport_meta_enabled = false; #endif @@ -1249,10 +1226,10 @@ index 76d999293c6ea..b976504265142 100644 AdditionalNavigationParams additionalNavigationParams, long inputStart, long navigationUIDataPtr); diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc -index b1ad4bd6c6108..f09b49f3bd04f 100644 +index d1f8638d39085..a736741e993a3 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc -@@ -922,7 +922,6 @@ void RenderThreadImpl::InitializeRenderer( +@@ -919,7 +919,6 @@ void RenderThreadImpl::InitializeRenderer( const std::vector& cors_exempt_header_list, network::mojom::AttributionSupport attribution_support, blink::mojom::OriginTrialsSettingsPtr origin_trials_settings) { diff --git a/bromite/build/patches/Welcome-screen.patch b/bromite/build/patches/Welcome-screen.patch index 2472a870..61f745d0 100644 --- a/bromite/build/patches/Welcome-screen.patch +++ b/bromite/build/patches/Welcome-screen.patch @@ -1,4 +1,4 @@ -From c56f1ecb5e753ae611efc80bf2da6f352497452d Mon Sep 17 00:00:00 2001 +From 909e34b4a81737b0f52215967b4b3f29a48ee6ad Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Fri, 29 Apr 2022 00:31:49 +0200 Subject: [PATCH 169/192] Welcome screen @@ -26,10 +26,10 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/firstrun/TosAndUmaFragmentView.java diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni -index eab1a62bded11..73e08ab076b1c 100644 +index 1d9fa5b9779f2..2b040a373ab08 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni -@@ -529,6 +529,7 @@ chrome_java_resources = [ +@@ -532,6 +532,7 @@ chrome_java_resources = [ "java/res/layout/find_in_page.xml", "java/res/layout/find_toolbar.xml", "java/res/layout/fre_tos_privacy_disclaimer.xml", @@ -38,10 +38,10 @@ index eab1a62bded11..73e08ab076b1c 100644 "java/res/layout/history_item_view.xml", "java/res/layout/history_main.xml", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index beae59fba1f9f..4eb3c924374d5 100644 +index 58dc23a53747b..83ca38110be4f 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -626,6 +626,8 @@ chrome_java_sources = [ +@@ -637,6 +637,8 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/firstrun/SyncConsentFirstRunFragment.java", "java/src/org/chromium/chrome/browser/firstrun/TabbedModeFirstRunActivity.java", "java/src/org/chromium/chrome/browser/firstrun/TosDialogBehaviorSharedPrefInvalidator.java", @@ -217,7 +217,7 @@ index 0000000000000..df7bd184a098f + + diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml -index bb5884c9cb243..83af73ed751e9 100644 +index cd8289b4c411e..3a7d166fd5358 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml @@ -119,6 +119,16 @@ found in the LICENSE file. @@ -238,7 +238,7 @@ index bb5884c9cb243..83af73ed751e9 100644 diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn -index c548631abe029..b47847845ca31 100644 +index 0bba2850d5773..f49b09257e4e7 100644 --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn -@@ -408,8 +408,6 @@ android_library("ui_no_recycler_view_java") { +@@ -409,8 +409,6 @@ android_library("ui_no_recycler_view_java") { ":ui_android_features_java", ":ui_java_resources", ":ui_utils_java", diff --git a/build/patches/0015-Browser-Remove-bromite-auto-updater.patch b/build/patches/0015-Browser-Remove-bromite-auto-updater.patch index 78ca365c..0daf5334 100644 --- a/build/patches/0015-Browser-Remove-bromite-auto-updater.patch +++ b/build/patches/0015-Browser-Remove-bromite-auto-updater.patch @@ -1,4 +1,4 @@ -From b4f570be8621103d25f5035196d2dbbec79389ed Mon Sep 17 00:00:00 2001 +From 3eafb4f6c4edb3690d8a7590a22106d622e2b0c6 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 19 Sep 2023 13:13:42 +0530 Subject: [PATCH 15/34] Browser: Remove bromite auto updater @@ -46,10 +46,10 @@ index f6521f42246d4..cfecb6fefdcba 100644 - public static MAYBE_FINAL String BUILD_TARGET_CPU = _BUILD_TARGET_CPU; } diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni -index 42ca4876ff174..aae56db584507 100644 +index 98e6363c51deb..aaa84107ad555 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -2155,9 +2155,6 @@ if (enable_java_templates && is_android) { +@@ -2148,9 +2148,6 @@ if (enable_java_templates && is_android) { if (defined(testonly) && testonly) { defines += [ "_IS_FOR_TEST" ] } @@ -60,10 +60,10 @@ index 42ca4876ff174..aae56db584507 100644 } diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index 52f6b49bb5c8d..465355763484f 100644 +index 287492c47f95b..914cf7c4844bf 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -852,9 +852,6 @@ chrome_java_sources = [ +@@ -861,9 +861,6 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/omaha/UpdateConfigs.java", "java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java", "java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java", @@ -148,10 +148,10 @@ index 5da0608895710..f59f62fdf971b 100644 - } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java -index fb45ee0431982..81108fdc4f5e9 100644 +index 2e24639a03af2..83c0e2ed544b9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java -@@ -32,8 +32,6 @@ import java.net.HttpURLConnection; +@@ -33,8 +33,6 @@ import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; @@ -160,7 +160,7 @@ index fb45ee0431982..81108fdc4f5e9 100644 /** * Keeps tabs on the current state of Chrome, tracking if and when a request should be sent to the * Omaha Server. -@@ -100,10 +98,7 @@ public class OmahaBase { +@@ -101,10 +99,7 @@ public class OmahaBase { static final String PREF_TIMESTAMP_FOR_NEW_REQUEST = "timestampForNewRequest"; static final String PREF_TIMESTAMP_FOR_NEXT_POST_ATTEMPT = "timestampForNextPostAttempt"; static final String PREF_TIMESTAMP_OF_INSTALL = "timestampOfInstall"; @@ -173,8 +173,8 @@ index fb45ee0431982..81108fdc4f5e9 100644 private static final int UNKNOWN_DATE = -2; @@ -162,8 +157,7 @@ public class OmahaBase { + } - /** See {@link #sIsDisabled}. */ static boolean isDisabled() { - // do not enable version control via Omaha Update Server - return true; @@ -312,7 +312,7 @@ index dd7d998373355..b7296bac5b9e3 100644 +} \ No newline at end of file diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java -index 9bb5651c8eb77..53af1fb7c202f 100644 +index 1e7f44b34affe..55588e6b4375b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateMenuItemHelper.java @@ -12,7 +12,6 @@ import android.view.Choreographer; @@ -320,10 +320,10 @@ index 9bb5651c8eb77..53af1fb7c202f 100644 import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.StringRes; - import androidx.annotation.VisibleForTesting; import org.chromium.base.BuildInfo; -@@ -138,21 +137,8 @@ public class UpdateMenuItemHelper { + import org.chromium.base.Callback; +@@ -136,21 +135,8 @@ public class UpdateMenuItemHelper { Log.e(TAG, "Failed to launch Activity for: %s", mStatus.updateUrl); } break; @@ -345,7 +345,7 @@ index 9bb5651c8eb77..53af1fb7c202f 100644 default: return; } -@@ -198,7 +184,7 @@ public class UpdateMenuItemHelper { +@@ -196,7 +182,7 @@ public class UpdateMenuItemHelper { mMenuUiState = new MenuUiState(); switch (mStatus.updateState) { @@ -354,7 +354,7 @@ index 9bb5651c8eb77..53af1fb7c202f 100644 // The badge is hidden if the update menu item has been clicked until there is an // even newer version of Chrome available. showBadge |= !TextUtils.equals( -@@ -253,72 +239,6 @@ public class UpdateMenuItemHelper { +@@ -251,72 +237,6 @@ public class UpdateMenuItemHelper { mMenuUiState.itemState.icon = R.drawable.ic_error_24dp_filled; mMenuUiState.itemState.enabled = false; break; @@ -731,10 +731,10 @@ index 27c75c368a446..10f69e965845d 100644 return status; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java -index 0ab9e9662a627..bf9c4eef05cf0 100644 +index 9451d364347f8..90cfcd7661c43 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/VersionNumberGetter.java -@@ -51,8 +51,7 @@ public class VersionNumberGetter { +@@ -50,8 +50,7 @@ public class VersionNumberGetter { private static VersionNumberGetter sInstanceForTests; /** If false, OmahaClient will never report that a newer version is available. */ @@ -1126,7 +1126,7 @@ index 03707c32d2e91..f263a5c38edc5 100644 ] } diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc b/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc -index cc5b76803029f..19f5ed7d4d9ce 100644 +index e33f87ba0aae0..a6c7802b3e15b 100644 --- a/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc +++ b/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc @@ -9,7 +9,6 @@ @@ -1137,7 +1137,7 @@ index cc5b76803029f..19f5ed7d4d9ce 100644 #include "chrome/browser/profiles/profile_android.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/common/channel_info.h" -@@ -31,24 +30,6 @@ static void OnEndpointFetcherComplete( +@@ -32,24 +31,6 @@ static void OnEndpointFetcherComplete( base::android::AttachCurrentThread(), std::move(endpoint_response->response)))); } @@ -1162,7 +1162,7 @@ index cc5b76803029f..19f5ed7d4d9ce 100644 } // namespace // TODO(crbug.com/1077537) Create a KeyProvider so -@@ -128,7 +109,6 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( +@@ -132,7 +113,6 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( JNIEnv* env, const base::android::JavaParamRef& jprofile, const base::android::JavaParamRef& jurl, @@ -1170,7 +1170,7 @@ index cc5b76803029f..19f5ed7d4d9ce 100644 jint jannotation_hash_code, const base::android::JavaParamRef& jcallback) { auto endpoint_fetcher = std::make_unique( -@@ -136,9 +116,6 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( +@@ -140,9 +120,6 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( ->GetDefaultStoragePartition() ->GetURLLoaderFactoryForBrowserProcess(), GURL(base::android::ConvertJavaStringToUTF8(env, jurl)), @@ -1180,7 +1180,7 @@ index cc5b76803029f..19f5ed7d4d9ce 100644 net::NetworkTrafficAnnotationTag::FromJavaAnnotation( jannotation_hash_code)); auto* const endpoint_fetcher_ptr = endpoint_fetcher.get(); -@@ -150,30 +127,3 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( +@@ -154,30 +131,3 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( std::move(endpoint_fetcher)), nullptr); } @@ -1293,10 +1293,10 @@ index a7bd35381ccd1..0000000000000 - } -} diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index fe6b5e9251d94..57006a283e94d 100644 +index e5ee573deb260..e6d7027f600b1 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -254,7 +254,6 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -259,7 +259,6 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kOfflineIndicatorV2, &kPageAnnotationsService, &kPreconnectOnTabCreation, @@ -1304,7 +1304,7 @@ index fe6b5e9251d94..57006a283e94d 100644 &kBookmarksImprovedSaveFlow, &kBookmarksRefresh, &kOmahaMinSdkVersionAndroid, -@@ -690,10 +689,6 @@ BASE_FEATURE(kContextMenuTranslateWithGoogleLens, +@@ -704,10 +703,6 @@ BASE_FEATURE(kContextMenuTranslateWithGoogleLens, "ContextMenuTranslateWithGoogleLens", base::FEATURE_DISABLED_BY_DEFAULT); @@ -1316,11 +1316,11 @@ index fe6b5e9251d94..57006a283e94d 100644 "LensCameraAssistedSearch", base::FEATURE_ENABLED_BY_DEFAULT); diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h -index 26e7e09270bd4..16fe30daa0c41 100644 +index 9d9a190415b64..c930b0176f579 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -102,7 +102,6 @@ BASE_DECLARE_FEATURE(kFoldableJankFix); - BASE_DECLARE_FEATURE(kGridTabSwitcherForTablets); +@@ -108,7 +108,6 @@ BASE_DECLARE_FEATURE(kFoldableJankFix); + BASE_DECLARE_FEATURE(kGridTabSwitcherLandscapeAspectRatioPhones); BASE_DECLARE_FEATURE(kImprovedIncognitoScreenshot); BASE_DECLARE_FEATURE(kIncognitoReauthenticationForAndroid); -BASE_DECLARE_FEATURE(kInlineUpdateFlow); @@ -1328,10 +1328,10 @@ index 26e7e09270bd4..16fe30daa0c41 100644 BASE_DECLARE_FEATURE(kInfobarScrollOptimization); BASE_DECLARE_FEATURE(kImprovedA2HS); diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -index 4d4f47418e01e..cff5d0898e73e 100644 +index 5b35e50e22ee1..ef4ff4080a962 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java -@@ -288,7 +288,6 @@ public abstract class ChromeFeatureList { +@@ -294,7 +294,6 @@ public abstract class ChromeFeatureList { "IncognitoReauthenticationForAndroid"; public static final String INCOGNITO_SCREENSHOT = "IncognitoScreenshot"; public static final String INFOBAR_SCROLL_OPTIMIZATION = "InfobarScrollOptimization"; @@ -1340,10 +1340,10 @@ index 4d4f47418e01e..cff5d0898e73e 100644 public static final String INSTALLABLE_AMBIENT_BADGE_MESSAGE = "InstallableAmbientBadgeMessage"; public static final String INSTANCE_SWITCHER = "InstanceSwitcher"; diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 5ccfcfd894b14..5b9ee2a12ec8b 100644 +index 952c2a38d297b..d59ccedefd230 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -2139,12 +2139,6 @@ Your Google account may have other forms of browsing history like searches and a +@@ -2172,12 +2172,6 @@ Your Google account may have other forms of browsing history like searches and a Chrome updates are no longer supported for this version of Android @@ -1356,7 +1356,7 @@ index 5ccfcfd894b14..5b9ee2a12ec8b 100644 -@@ -3762,10 +3756,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

@@ -1368,7 +1368,7 @@ index 5ccfcfd894b14..5b9ee2a12ec8b 100644 Newer version is available -@@ -3776,18 +3767,6 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

Android version is unsupported @@ -1388,10 +1388,10 @@ index 5ccfcfd894b14..5b9ee2a12ec8b 100644 New window diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoint_fetcher/endpoint_fetcher.cc -index 13c84dcceb371..2402b5c929052 100644 +index 0e18108d742c7..336b9ae600432 100644 --- a/components/endpoint_fetcher/endpoint_fetcher.cc +++ b/components/endpoint_fetcher/endpoint_fetcher.cc -@@ -17,11 +17,6 @@ +@@ -18,11 +18,6 @@ #include "services/network/public/cpp/simple_url_loader.h" #include "services/network/public/mojom/url_response_head.mojom.h" @@ -1403,7 +1403,7 @@ index 13c84dcceb371..2402b5c929052 100644 namespace { const char kContentTypeKey[] = "Content-Type"; const char kDeveloperKey[] = "X-Developer-Key"; -@@ -66,7 +61,6 @@ EndpointFetcher::EndpointFetcher( +@@ -69,7 +64,6 @@ EndpointFetcher::EndpointFetcher( http_method_(http_method), content_type_(content_type), timeout_ms_(timeout_ms), @@ -1411,7 +1411,7 @@ index 13c84dcceb371..2402b5c929052 100644 post_data_(post_data), headers_(headers), annotation_tag_(annotation_tag), -@@ -84,7 +78,6 @@ EndpointFetcher::EndpointFetcher( +@@ -88,7 +82,6 @@ EndpointFetcher::EndpointFetcher( http_method_("GET"), content_type_(std::string()), timeout_ms_(0), @@ -1419,7 +1419,7 @@ index 13c84dcceb371..2402b5c929052 100644 post_data_(std::string()), annotation_tag_(annotation_tag), url_loader_factory_(url_loader_factory), -@@ -108,7 +101,6 @@ EndpointFetcher::EndpointFetcher( +@@ -114,7 +107,6 @@ EndpointFetcher::EndpointFetcher( http_method_(http_method), content_type_(content_type), timeout_ms_(timeout_ms), @@ -1427,7 +1427,7 @@ index 13c84dcceb371..2402b5c929052 100644 post_data_(post_data), annotation_tag_(annotation_tag), url_loader_factory_(url_loader_factory), -@@ -135,7 +127,6 @@ EndpointFetcher::EndpointFetcher( +@@ -142,7 +134,6 @@ EndpointFetcher::EndpointFetcher( http_method_(http_method), content_type_(content_type), timeout_ms_(timeout_ms), @@ -1435,13 +1435,14 @@ index 13c84dcceb371..2402b5c929052 100644 post_data_(post_data), headers_(headers), cors_exempt_headers_(cors_exempt_headers), -@@ -147,28 +138,10 @@ EndpointFetcher::EndpointFetcher( +@@ -155,29 +146,11 @@ EndpointFetcher::EndpointFetcher( EndpointFetcher::EndpointFetcher( const net::NetworkTrafficAnnotationTag& annotation_tag) : timeout_ms_(kDefaultTimeOutMs), - intercept_redirect_(false), annotation_tag_(annotation_tag), identity_manager_(nullptr), + consent_level_(absl::nullopt), sanitize_response_(true) {} -// constructor used by Bromite @@ -1464,7 +1465,7 @@ index 13c84dcceb371..2402b5c929052 100644 EndpointFetcher::~EndpointFetcher() = default; void EndpointFetcher::Fetch(EndpointFetcherCallback endpoint_fetcher_callback) { -@@ -225,8 +198,6 @@ void EndpointFetcher::PerformRequest( +@@ -236,8 +209,6 @@ void EndpointFetcher::PerformRequest( resource_request->method = http_method_; resource_request->url = url_; resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; @@ -1473,7 +1474,7 @@ index 13c84dcceb371..2402b5c929052 100644 if (base::EqualsCaseInsensitiveASCII(http_method_, "POST")) { resource_request->headers.SetHeader(kContentTypeKey, content_type_); } -@@ -257,52 +228,25 @@ void EndpointFetcher::PerformRequest( +@@ -268,52 +239,25 @@ void EndpointFetcher::PerformRequest( default: break; } @@ -1532,7 +1533,7 @@ index 13c84dcceb371..2402b5c929052 100644 } void EndpointFetcher::OnResponseFetched( -@@ -381,38 +325,3 @@ void EndpointFetcher::OnSanitizationResult( +@@ -392,38 +336,3 @@ void EndpointFetcher::OnSanitizationResult( std::string EndpointFetcher::GetUrlForTesting() { return url_.spec(); } @@ -1572,10 +1573,10 @@ index 13c84dcceb371..2402b5c929052 100644 - std::move(endpoint_fetcher_callback_).Run(std::move(response_)); -} diff --git a/components/endpoint_fetcher/endpoint_fetcher.h b/components/endpoint_fetcher/endpoint_fetcher.h -index 0bb24a689b820..215c6049aa6e2 100644 +index 2e5738e03d6a4..1b31130514f6b 100644 --- a/components/endpoint_fetcher/endpoint_fetcher.h +++ b/components/endpoint_fetcher/endpoint_fetcher.h -@@ -16,8 +16,6 @@ +@@ -17,8 +17,6 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/data_decoder/public/cpp/json_sanitizer.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -1584,7 +1585,7 @@ index 0bb24a689b820..215c6049aa6e2 100644 namespace network { struct ResourceRequest; -@@ -40,8 +38,6 @@ enum class FetchErrorType { +@@ -41,8 +39,6 @@ enum class FetchErrorType { struct EndpointResponse { std::string response; @@ -1593,7 +1594,7 @@ index 0bb24a689b820..215c6049aa6e2 100644 int http_status_code{-1}; absl::optional error_type; }; -@@ -94,14 +90,6 @@ class EndpointFetcher { +@@ -96,14 +92,6 @@ class EndpointFetcher { const GURL& url, const net::NetworkTrafficAnnotationTag& annotation_tag); @@ -1608,7 +1609,7 @@ index 0bb24a689b820..215c6049aa6e2 100644 // Used for tests. Can be used if caller constructs their own // url_loader_factory and identity_manager. EndpointFetcher( -@@ -156,11 +144,6 @@ class EndpointFetcher { +@@ -159,11 +147,6 @@ class EndpointFetcher { void OnSanitizationResult(std::unique_ptr response, EndpointFetcherCallback endpoint_fetcher_callback, data_decoder::JsonSanitizer::Result result); @@ -1620,7 +1621,7 @@ index 0bb24a689b820..215c6049aa6e2 100644 enum AuthType { CHROME_API_KEY, OAUTH, NO_AUTH }; AuthType auth_type_; -@@ -168,11 +151,10 @@ class EndpointFetcher { +@@ -171,11 +154,10 @@ class EndpointFetcher { // Members set in constructor to be passed to network::ResourceRequest or // network::SimpleURLLoader. const std::string oauth_consumer_name_; @@ -1633,7 +1634,7 @@ index 0bb24a689b820..215c6049aa6e2 100644 const std::string post_data_; const std::vector headers_; const std::vector cors_exempt_headers_; -@@ -190,9 +172,6 @@ class EndpointFetcher { +@@ -199,9 +181,6 @@ class EndpointFetcher { access_token_fetcher_; std::unique_ptr simple_url_loader_; diff --git a/build/patches/0016-fixup-Move-navigation-bar-to-bottom.patch b/build/patches/0015-fixup-Move-navigation-bar-to-bottom.patch similarity index 93% rename from build/patches/0016-fixup-Move-navigation-bar-to-bottom.patch rename to build/patches/0015-fixup-Move-navigation-bar-to-bottom.patch index b0057289..c0dc8bbe 100644 --- a/build/patches/0016-fixup-Move-navigation-bar-to-bottom.patch +++ b/build/patches/0015-fixup-Move-navigation-bar-to-bottom.patch @@ -1,7 +1,7 @@ -From 4102b0adfcdb843a254617a17fc5e296b0502435 Mon Sep 17 00:00:00 2001 +From 568957e287dec2ae82001e1b52036c84b3c10636 Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 29 Sep 2023 14:41:03 +0530 -Subject: [PATCH 16/16] fixup Move navigation bar to bottom +Subject: [PATCH 15/15] fixup Move navigation bar to bottom --- .../strings/android_chrome_strings.grd | 6 --- @@ -12,10 +12,10 @@ Subject: [PATCH 16/16] fixup Move navigation bar to bottom delete mode 100644 weblayer/browser/java/org/chromium/weblayer_private/settings/WebLayerAccessibilitySettingsDelegate.java diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 827121843cc02..5ccfcfd894b14 100644 +index 073fb3cd199ea..952c2a38d297b 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1734,12 +1734,6 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1761,12 +1761,6 @@ Your Google account may have other forms of browsing history like searches and a Temporarily links this data to your Google Account when you’re signed in, to protect you across Google apps @@ -29,10 +29,10 @@ index 827121843cc02..5ccfcfd894b14 100644 diff --git a/components/browser_ui/strings/android/browser_ui_strings.grd b/components/browser_ui/strings/android/browser_ui_strings.grd -index a07c17caac0b5..de3dc597db560 100644 +index cc4e8532ffee7..9b71c5286fc76 100644 --- a/components/browser_ui/strings/android/browser_ui_strings.grd +++ b/components/browser_ui/strings/android/browser_ui_strings.grd -@@ -974,6 +974,12 @@ +@@ -1022,6 +1022,12 @@ Force Tablet Mode @@ -46,7 +46,7 @@ index a07c17caac0b5..de3dc597db560 100644 diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn -index 74245c375d854..91ba0950a504b 100644 +index d8994562cf884..3e0a977b42d9a 100644 --- a/weblayer/browser/java/BUILD.gn +++ b/weblayer/browser/java/BUILD.gn @@ -179,7 +179,6 @@ android_library("java") { diff --git a/build/patches/0016-fixup-Remove-bromite-auto-updater.patch b/build/patches/0016-fixup-Remove-bromite-auto-updater.patch index 9a4d7b6c..001d657d 100644 --- a/build/patches/0016-fixup-Remove-bromite-auto-updater.patch +++ b/build/patches/0016-fixup-Remove-bromite-auto-updater.patch @@ -1,4 +1,4 @@ -From b420b410d6ab6bf5b763e249b7741dcc5d6c6adb Mon Sep 17 00:00:00 2001 +From 986b64825e2a410ee763dad2495002e15ef05d7b Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 20 Sep 2023 09:59:55 +0530 Subject: [PATCH 16/34] fixup Remove bromite auto updater diff --git a/build/patches/0017-Browser-Rename-strings-to-browser.patch b/build/patches/0017-Browser-Rename-strings-to-browser.patch index 6b158d64..b94c8fc3 100644 --- a/build/patches/0017-Browser-Rename-strings-to-browser.patch +++ b/build/patches/0017-Browser-Rename-strings-to-browser.patch @@ -1,4 +1,4 @@ -From 2e7fff68b6ab027e6584f31b5002d8cc1862c7d9 Mon Sep 17 00:00:00 2001 +From d62ea70f13e7ac02b314365e9974456d83758c77 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 07:12:30 +0000 Subject: [PATCH 17/34] Browser: Rename strings to browser @@ -81,10 +81,10 @@ index fb1dfed23052b..d5092508ce452 100644 android:key="application_version" android:title="@string/application_version_title" /> diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml -index 8deab9b5a1919..947de77a52ebd 100644 +index 99e231e3f0bc6..d5625671095b6 100644 --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml -@@ -106,6 +106,6 @@ found in the LICENSE file. +@@ -111,6 +111,6 @@ found in the LICENSE file. android:fragment="org.chromium.chrome.browser.about_settings.AboutChromeSettings" android:key="about_chrome" android:order="23" @@ -172,7 +172,7 @@ index df8e8db6bc4be..d404ab97e5515 100644 .with(MessageBannerProperties.PRIMARY_BUTTON_TEXT, resources.getString(R.string.auto_dark_message_button)) diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 5b9ee2a12ec8b..e1f6e399ee083 100644 +index d59ccedefd230..308eb1800c59e 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd @@ -202,6 +202,8 @@ CHAR_LIMIT guidelines: @@ -183,7 +183,7 @@ index 5b9ee2a12ec8b..e1f6e399ee083 100644 + - + diff --git a/chrome/browser/ui/android/strings/foundation_e.grdp b/chrome/browser/ui/android/strings/foundation_e.grdp new file mode 100644 index 0000000000000..4a1cb69ff7c46 diff --git a/build/patches/0018-Browser-Use-adaptive-icon-for-recents-UI.patch b/build/patches/0018-Browser-Use-adaptive-icon-for-recents-UI.patch index a6413bd4..c1efcd84 100644 --- a/build/patches/0018-Browser-Use-adaptive-icon-for-recents-UI.patch +++ b/build/patches/0018-Browser-Use-adaptive-icon-for-recents-UI.patch @@ -1,4 +1,4 @@ -From dcb0dd3c54067607204236a587c1c370cbefb396 Mon Sep 17 00:00:00 2001 +From 95b5d88e41f0a920a66f3c6f1499931ef6c58956 Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 14 Dec 2022 12:18:50 +0530 Subject: [PATCH 18/34] Browser: Use adaptive icon for recents UI diff --git a/build/patches/0019-Browser-Change-info-bar-icon.patch b/build/patches/0019-Browser-Change-info-bar-icon.patch index 28b8f314..2c188945 100644 --- a/build/patches/0019-Browser-Change-info-bar-icon.patch +++ b/build/patches/0019-Browser-Change-info-bar-icon.patch @@ -1,4 +1,4 @@ -From 2123fb895a3c172ec72e61a6f5ad929adb0affdf Mon Sep 17 00:00:00 2001 +From 1da44bb90017a77bd63a3deefc1e75b17cb4032a Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 14 Dec 2022 16:17:58 +0530 Subject: [PATCH 19/34] Browser: Change info bar icon diff --git a/build/patches/0020-Browser-Remove-logo-from-chrome-version.patch b/build/patches/0020-Browser-Remove-logo-from-chrome-version.patch index d7a48f9c..8f926cc2 100644 --- a/build/patches/0020-Browser-Remove-logo-from-chrome-version.patch +++ b/build/patches/0020-Browser-Remove-logo-from-chrome-version.patch @@ -1,4 +1,4 @@ -From de17016ab9267e814ac91ab80a0e533b4d38244b Mon Sep 17 00:00:00 2001 +From 6c9fa8311fe29bbe24094e43bf52414e739dc2bb Mon Sep 17 00:00:00 2001 From: A Mak Date: Sat, 25 Jul 2020 17:56:47 -0700 Subject: [PATCH 20/34] Browser: Remove logo from chrome://version diff --git a/build/patches/0021-Browser-disable-search-provider-logo.patch b/build/patches/0021-Browser-disable-search-provider-logo.patch index 1c657dc6..90e97c9c 100644 --- a/build/patches/0021-Browser-disable-search-provider-logo.patch +++ b/build/patches/0021-Browser-disable-search-provider-logo.patch @@ -1,4 +1,4 @@ -From fc9670c64366580f72001b310e8de8ba824e9510 Mon Sep 17 00:00:00 2001 +From cdc0765e3c3b34750020875afc650683fe50da3c Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Mon, 17 Jun 2019 12:03:52 -0400 Subject: [PATCH 21/34] Browser: disable search provider logo @@ -8,7 +8,7 @@ Subject: [PATCH 21/34] Browser: disable search provider logo 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/components/search_engines/android/template_url_service_android.cc b/components/search_engines/android/template_url_service_android.cc -index 6017a7f823ca2..45ac59f24b5e3 100644 +index 66177ea6ea271..ce7e34f8b3918 100644 --- a/components/search_engines/android/template_url_service_android.cc +++ b/components/search_engines/android/template_url_service_android.cc @@ -103,28 +103,7 @@ jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( diff --git a/build/patches/0022-Browser-disable-first-run-welcome-page.patch b/build/patches/0022-Browser-disable-first-run-welcome-page.patch index f84e72b3..c11237c7 100644 --- a/build/patches/0022-Browser-disable-first-run-welcome-page.patch +++ b/build/patches/0022-Browser-disable-first-run-welcome-page.patch @@ -1,4 +1,4 @@ -From eba823fe83697925b2393d339c8305daba8b2125 Mon Sep 17 00:00:00 2001 +From 7b95213b508e157dd0f267afdde8ac6f2432bec8 Mon Sep 17 00:00:00 2001 From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sun, 26 Nov 2017 22:51:43 +0100 Subject: [PATCH 22/34] Browser: disable first run welcome page @@ -9,10 +9,10 @@ Subject: [PATCH 22/34] Browser: disable first run welcome page 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java -index abb549aa3989a..463639d806652 100644 +index 532e2f3ceec5e..a4f3cda9f9cdf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunUtils.java -@@ -41,15 +41,12 @@ public class FirstRunUtils { +@@ -42,15 +42,12 @@ public class FirstRunUtils { boolean javaPrefValue = javaPrefs.readBoolean(ChromePreferenceKeys.FIRST_RUN_CACHED_TOS_ACCEPTED, false); boolean nativePrefValue = isFirstRunEulaAccepted(); diff --git a/build/patches/0023-disable-seed-based-field-trials.patch b/build/patches/0023-disable-seed-based-field-trials.patch index 450587a2..eb515c0c 100644 --- a/build/patches/0023-disable-seed-based-field-trials.patch +++ b/build/patches/0023-disable-seed-based-field-trials.patch @@ -1,27 +1,27 @@ -From b5bdc0955c26e149182c3eeedfaf47da89c835df Mon Sep 17 00:00:00 2001 +From e4cbe6bbc508aa0a10399ab4cf75c8ff8e19eb8b Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 25 Dec 2018 16:19:51 -0500 Subject: [PATCH 23/34] disable seed-based field trials --- - components/variations/service/variations_field_trial_creator.cc | 2 ++ + .../variations/service/variations_field_trial_creator_base.cc | 2 ++ 1 file changed, 2 insertions(+) -diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc -index 471caac8c7247..cf8ca39b031c3 100644 ---- a/components/variations/service/variations_field_trial_creator.cc -+++ b/components/variations/service/variations_field_trial_creator.cc -@@ -313,8 +313,10 @@ bool VariationsFieldTrialCreator::SetUpFieldTrials( +diff --git a/components/variations/service/variations_field_trial_creator_base.cc b/components/variations/service/variations_field_trial_creator_base.cc +index 58d5743d4fa2a..834dd48d13ea4 100644 +--- a/components/variations/service/variations_field_trial_creator_base.cc ++++ b/components/variations/service/variations_field_trial_creator_base.cc +@@ -299,8 +299,10 @@ bool VariationsFieldTrialCreatorBase::SetUpFieldTrials( bool used_seed = false; if (!used_testing_config) { +#if defined(FIELDTRIAL_SEED_ENABLED) used_seed = CreateTrialsFromSeed(*entropy_providers, feature_list.get(), safe_seed_manager); -+#endif // BUILDFLAG(FIELDTRIAL_SEED_ENABLED) ++#endif } - platform_field_trials->SetUpClientSideFieldTrials( + base::FeatureList::SetInstance(std::move(feature_list)); -- 2.34.1 diff --git a/build/patches/0024-disable-fetching-variations.patch b/build/patches/0024-disable-fetching-variations.patch index 849431fe..280503e1 100644 --- a/build/patches/0024-disable-fetching-variations.patch +++ b/build/patches/0024-disable-fetching-variations.patch @@ -1,4 +1,4 @@ -From f56c0a2238a20adad8e87457b526e1cfb421294e Mon Sep 17 00:00:00 2001 +From 958a8bd0dd7ea7621275f41f1859fd7416590685 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 18 Nov 2020 19:08:58 -0500 Subject: [PATCH 24/34] disable fetching variations diff --git a/build/patches/0025-disable-navigation-error-correction-by-default.patch b/build/patches/0025-disable-navigation-error-correction-by-default.patch index 92dbc9c5..bd23b6a1 100644 --- a/build/patches/0025-disable-navigation-error-correction-by-default.patch +++ b/build/patches/0025-disable-navigation-error-correction-by-default.patch @@ -1,4 +1,4 @@ -From 03a14553924b7924912cb88ae112f75fbeb68479 Mon Sep 17 00:00:00 2001 +From 69b86e743966d337f040a48be769432d97347444 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 23 Nov 2016 08:29:58 -0500 Subject: [PATCH 25/34] disable navigation error correction by default @@ -8,10 +8,10 @@ Subject: [PATCH 25/34] disable navigation error correction by default 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc -index 2795ff21d23b8..2bbfa4c518e49 100644 +index e45e4487be0a3..c7270f7c34269 100644 --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc -@@ -389,7 +389,7 @@ void ProfileNetworkContextService::UpdateAdditionalCertificates() { +@@ -413,7 +413,7 @@ void ProfileNetworkContextService::UpdateAdditionalCertificates() { void ProfileNetworkContextService::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( diff --git a/build/patches/0026-Handle-web-search-action-in-browser.patch b/build/patches/0026-Handle-web-search-action-in-browser.patch index c53246d5..ae5f7072 100644 --- a/build/patches/0026-Handle-web-search-action-in-browser.patch +++ b/build/patches/0026-Handle-web-search-action-in-browser.patch @@ -1,4 +1,4 @@ -From 6cdfb7a881208b612bfa49bfb6710d61e3262d1a Mon Sep 17 00:00:00 2001 +From 9becf7163e6f89e27587cef0e5fe255a96bc4e84 Mon Sep 17 00:00:00 2001 From: fgei Date: Wed, 28 Sep 2022 05:37:00 +0200 Subject: [PATCH 26/34] Handle web search action in browser @@ -32,10 +32,10 @@ index 2d1661ee534f6..2c983646ab42b 100644 * @return Intent to query a list of installed home launchers. */ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml -index 4386e2cc770bf..f57e4f7970e1e 100644 +index 76ebcbaae1634..bde2f602a3a22 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -333,6 +333,10 @@ by a child template that "extends" this file. +@@ -331,6 +331,10 @@ by a child template that "extends" this file. @@ -47,10 +47,10 @@ index 4386e2cc770bf..f57e4f7970e1e 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -index 54929f0cea968..c7955f6cda530 100644 +index a1d7379a0058f..012e567b196bd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java -@@ -766,6 +766,7 @@ public class IntentHandler { +@@ -761,6 +761,7 @@ public class IntentHandler { String query = null; final String action = intent.getAction(); if (Intent.ACTION_SEARCH.equals(action) @@ -59,10 +59,10 @@ index 54929f0cea968..c7955f6cda530 100644 query = IntentUtils.safeGetStringExtra(intent, SearchManager.QUERY); } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -index e754e7d4f610a..8af8dad7f8416 100644 +index 7e06987625a3a..fe1cb40bff917 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java -@@ -207,7 +207,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega +@@ -203,7 +203,7 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega searchIntent.putExtra(SearchManager.QUERY, query); try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) { diff --git a/build/patches/0027-Browser-Replace-default-tab-favicon.patch b/build/patches/0027-Browser-Replace-default-tab-favicon.patch index e40d461c..d35669e1 100644 --- a/build/patches/0027-Browser-Replace-default-tab-favicon.patch +++ b/build/patches/0027-Browser-Replace-default-tab-favicon.patch @@ -1,4 +1,4 @@ -From 5c4549ae120ded1196d9147f517d62afde50cd27 Mon Sep 17 00:00:00 2001 +From 3804d715992e31368869364f97d22821f5e8238c Mon Sep 17 00:00:00 2001 From: althafvly Date: Mon, 2 Jan 2023 15:12:41 +0530 Subject: [PATCH 27/34] Browser: Replace default tab favicon diff --git a/build/patches/0028-Browser-Spoof-as-Pixel-4a-by-default.patch b/build/patches/0028-Browser-Spoof-as-Pixel-4a-by-default.patch index a474cdbb..0e071de2 100644 --- a/build/patches/0028-Browser-Spoof-as-Pixel-4a-by-default.patch +++ b/build/patches/0028-Browser-Spoof-as-Pixel-4a-by-default.patch @@ -1,4 +1,4 @@ -From c6e0f704a3f7f3572341c0ac9c11056d1ff28030 Mon Sep 17 00:00:00 2001 +From 977809c01c8a3c0c3e5f9c78ebd5d78904be4469 Mon Sep 17 00:00:00 2001 From: althafvly Date: Thu, 19 Jan 2023 05:41:58 +0000 Subject: [PATCH 28/34] Browser: Spoof as Pixel 4a by default diff --git a/build/patches/0029-Revert-Guard-for-user-agent-reduction.patch b/build/patches/0029-Revert-Guard-for-user-agent-reduction.patch index a7756e65..3c2fe8dc 100644 --- a/build/patches/0029-Revert-Guard-for-user-agent-reduction.patch +++ b/build/patches/0029-Revert-Guard-for-user-agent-reduction.patch @@ -1,4 +1,4 @@ -From 2c43b89d05e81d2e18d8b573b926113b9ddc5320 Mon Sep 17 00:00:00 2001 +From 7377b34928e64c8db5ead7b5e15d9b6812365688 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 19 Sep 2023 13:32:41 +0530 Subject: [PATCH 29/34] Revert "Guard for user-agent reduction" @@ -12,10 +12,10 @@ This reverts commit 9072724e3e483a39c60d96f2f0e11a14d5c5047b. 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 9941afb9b7e5f..6b8596b4eb5f9 100644 +index d769aadbd5360..264cb9d15ec57 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -1630,7 +1630,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( +@@ -1639,7 +1639,7 @@ void ChromeContentBrowserClient::RegisterProfilePrefs( registry->RegisterIntegerPref( prefs::kUserAgentReduction, static_cast( @@ -56,10 +56,10 @@ index 3d595bc7a24ee..5c99971335e9c 100644 bool semicolon_inserted = false; if (include_android_model == IncludeAndroidModel::Include) { diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc -index 326fd977fec66..ee03509259cbc 100644 +index d1412f4e4a300..c20a2953dc69b 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc -@@ -1350,8 +1350,8 @@ BASE_FEATURE(kReducedReferrerGranularity, +@@ -1440,8 +1440,8 @@ BASE_FEATURE(kReducedReferrerGranularity, const base::FeatureParam kUserAgentFrozenBuildVersion{ &kReduceUserAgentMinorVersion, "build_version", "0"}; @@ -71,10 +71,10 @@ index 326fd977fec66..ee03509259cbc 100644 &kReduceUserAgentPlatformOsCpu, "legacy_windows_platform", true}; diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -index 0bb65a2b50389..2329cfe683246 100644 +index 7d2c6e2587f45..bd0e136dad892 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 -@@ -2921,23 +2921,23 @@ +@@ -2922,23 +2922,23 @@ // If enabled, the deviceModel will be reduced to "K" and the // androidVersion will be reduced to a static "10" string in android // User-Agent string. diff --git a/build/patches/0030-Revert-Add-webGL-site-setting.patch b/build/patches/0030-Revert-Add-webGL-site-setting.patch index 840e58c0..81ca7eef 100644 --- a/build/patches/0030-Revert-Add-webGL-site-setting.patch +++ b/build/patches/0030-Revert-Add-webGL-site-setting.patch @@ -1,4 +1,4 @@ -From 7b72b99877499d8d9e272fe0468bc9aa5b6f6645 Mon Sep 17 00:00:00 2001 +From 3ee66db79da06bd492ee9d7e89dd61cf51478fd3 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 19 Sep 2023 13:34:49 +0530 Subject: [PATCH 30/34] Revert "Add webGL site setting" @@ -186,7 +186,7 @@ index 30dc2ff2d125f..0000000000000 @@ -1 +0,0 @@ - WEBGL, diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc -index b8bdbf17dedc9..4283299013775 100644 +index 1bc4805ab9da9..d6208255ef5e8 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc @@ -84,13 +84,6 @@ blink::WebContentSettingsClient* GetContentSettingsClientFor( @@ -204,7 +204,7 @@ index b8bdbf17dedc9..4283299013775 100644 Agent* agent, bool is_window) diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h -index bdfd5122a8a59..50395fd056c35 100644 +index 180cda4e10fc4..580f56a58cf74 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.h +++ b/third_party/blink/renderer/core/execution_context/execution_context.h @@ -116,8 +116,6 @@ enum ReasonForCallingCanExecuteScripts { @@ -217,7 +217,7 @@ index bdfd5122a8a59..50395fd056c35 100644 // properties of script execution environments on the web (i.e, common between // script executing in a window and script executing in a worker), such as: diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc -index 73f232662676e..ebe31c7960c7d 100644 +index 8783d3560f727..74a289a88a953 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc @@ -248,13 +248,6 @@ void WebGLRenderingContextBase::InitializeWebGLContextLimits( @@ -234,7 +234,7 @@ index 73f232662676e..ebe31c7960c7d 100644 unsigned WebGLRenderingContextBase::CurrentMaxGLContexts() { base::AutoLock locker(WebGLContextLimitLock()); DCHECK(webgl_context_limits_initialized_); -@@ -501,6 +494,25 @@ static String ExtractWebGLContextCreationError( +@@ -528,6 +521,25 @@ static String ExtractWebGLContextCreationError( const Platform::GraphicsInfo& info) { StringBuilder builder; builder.Append("Could not create a WebGL context"); @@ -260,7 +260,7 @@ index 73f232662676e..ebe31c7960c7d 100644 FormatWebGLStatusString("ErrorMessage", info.error_message.Utf8().c_str(), builder); builder.Append('.'); -@@ -560,12 +572,6 @@ WebGLRenderingContextBase::CreateWebGraphicsContext3DProvider( +@@ -587,12 +599,6 @@ WebGLRenderingContextBase::CreateWebGraphicsContext3DProvider( const CanvasContextCreationAttributesCore& attributes, Platform::ContextType context_type, Platform::GraphicsInfo* graphics_info) { @@ -274,10 +274,10 @@ index 73f232662676e..ebe31c7960c7d 100644 !host->IsWebGL1Enabled()) || (context_type == Platform::kWebGL2ContextType && diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h -index fc80212074f1d..8197135c68051 100644 +index 58a3066ac23a1..2261611fdd586 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h -@@ -1933,8 +1933,6 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, +@@ -1936,8 +1936,6 @@ class MODULES_EXPORT WebGLRenderingContextBase : public CanvasRenderingContext, DOMArrayBufferView* pixels, int64_t offset); diff --git a/build/patches/0031-Browser-Remove-broken-link-about-entries.patch b/build/patches/0031-Browser-Remove-broken-link-about-entries.patch index 84131ad6..66fcd8a0 100644 --- a/build/patches/0031-Browser-Remove-broken-link-about-entries.patch +++ b/build/patches/0031-Browser-Remove-broken-link-about-entries.patch @@ -1,4 +1,4 @@ -From 57dc5bcbb5e726d0d7a05b1eb689d8ddcf2d70e1 Mon Sep 17 00:00:00 2001 +From a24042ae2a0ab34efb36878e4b60a008d86fc4b4 Mon Sep 17 00:00:00 2001 From: althafvly Date: Mon, 20 Feb 2023 07:39:35 +0000 Subject: [PATCH 31/34] Browser: Remove broken link about entries diff --git a/build/patches/0032-Revert-Remove-navigator.connection-info.patch b/build/patches/0032-Revert-Remove-navigator.connection-info.patch index fc84a081..97e1d9c0 100644 --- a/build/patches/0032-Revert-Remove-navigator.connection-info.patch +++ b/build/patches/0032-Revert-Remove-navigator.connection-info.patch @@ -1,4 +1,4 @@ -From 2b8ed0e78ad645d869a5593bbffc563c93053e3b Mon Sep 17 00:00:00 2001 +From 20299a0a4de27aac77095bd4b35cdcb37a56de94 Mon Sep 17 00:00:00 2001 From: althafvly Date: Thu, 9 Mar 2023 05:34:47 +0000 Subject: [PATCH 32/34] Revert "Remove navigator.connection info" @@ -11,7 +11,7 @@ This reverts commit de3bece5f8b98d17532dc73b485ad7574e8e0cb5. 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/third_party/blink/renderer/modules/netinfo/network_information.cc b/third_party/blink/renderer/modules/netinfo/network_information.cc -index b43fdc2dbceaf..324b821fc7cc3 100644 +index 8f9ff64112378..8badbc6b38c96 100644 --- a/third_party/blink/renderer/modules/netinfo/network_information.cc +++ b/third_party/blink/renderer/modules/netinfo/network_information.cc @@ -61,7 +61,7 @@ NetworkInformation::~NetworkInformation() { @@ -31,7 +31,7 @@ index b43fdc2dbceaf..324b821fc7cc3 100644 DCHECK(GetExecutionContext()->IsContextThread()); const String host = Host(); -@@ -251,7 +250,6 @@ void NetworkInformation::ContextDestroyed() { +@@ -249,7 +248,6 @@ void NetworkInformation::ContextDestroyed() { } void NetworkInformation::StartObserving() { @@ -39,7 +39,7 @@ index b43fdc2dbceaf..324b821fc7cc3 100644 if (!IsObserving() && !context_stopped_) { type_ = GetNetworkStateNotifier().ConnectionType(); DCHECK(!connection_observer_handle_); -@@ -262,7 +260,6 @@ void NetworkInformation::StartObserving() { +@@ -260,7 +258,6 @@ void NetworkInformation::StartObserving() { } void NetworkInformation::StopObserving() { @@ -48,7 +48,7 @@ index b43fdc2dbceaf..324b821fc7cc3 100644 DCHECK(connection_observer_handle_); connection_observer_handle_ = nullptr; diff --git a/third_party/blink/renderer/platform/network/network_state_notifier.cc b/third_party/blink/renderer/platform/network/network_state_notifier.cc -index e535ec9734d30..39c417e0f8ec6 100644 +index 538b26af6e850..e74b4ea41b2b3 100644 --- a/third_party/blink/renderer/platform/network/network_state_notifier.cc +++ b/third_party/blink/renderer/platform/network/network_state_notifier.cc @@ -101,17 +101,6 @@ NetworkStateNotifier::ScopedNotifier::~ScopedNotifier() { diff --git a/build/patches/0033-Browser-Disable-Android-native-autofill-by-default.patch b/build/patches/0033-Browser-Disable-Android-native-autofill-by-default.patch index 9665ac13..17d38f96 100644 --- a/build/patches/0033-Browser-Disable-Android-native-autofill-by-default.patch +++ b/build/patches/0033-Browser-Disable-Android-native-autofill-by-default.patch @@ -1,4 +1,4 @@ -From de89186ec6327b1bf5b08a2a06cd76e5f49aa91f Mon Sep 17 00:00:00 2001 +From a5627788b456d3eea3d64499178f8a005146de4e Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 22 Aug 2023 06:16:40 +0000 Subject: [PATCH 33/34] Browser: Disable Android native autofill by default @@ -8,13 +8,13 @@ Subject: [PATCH 33/34] Browser: Disable Android native autofill by default 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc -index 74ce5a3a71b9c..44f00bfc9971a 100644 +index a563b571f9149..039dd3e6d6bac 100644 --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc -@@ -162,7 +162,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { +@@ -168,7 +168,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterBooleanPref( prefs::kAutofillCreditCardFidoAuthOfferCheckboxState, true); #endif - registry->RegisterBooleanPref(prefs::kAutofillWalletImportEnabled, true); - registry->RegisterBooleanPref(prefs::kAutofillAndroidEnabled, true); + registry->RegisterBooleanPref(prefs::kAutofillAndroidEnabled, false); registry->RegisterBooleanPref(prefs::kAutofillAndroidIncognitoEnabled, false); diff --git a/build/patches/0034-Browser-Enable-unified-autoplay-by-default.patch b/build/patches/0034-Browser-Enable-unified-autoplay-by-default.patch index 158d85da..89d9c6ee 100644 --- a/build/patches/0034-Browser-Enable-unified-autoplay-by-default.patch +++ b/build/patches/0034-Browser-Enable-unified-autoplay-by-default.patch @@ -1,4 +1,4 @@ -From 7a0fafcb23a6805a59772f89f20825cd5decda59 Mon Sep 17 00:00:00 2001 +From a43cd3a3d25361ef78be6a4cc2e1abd85a3b9697 Mon Sep 17 00:00:00 2001 From: althafvly Date: Fri, 29 Sep 2023 16:30:17 +0530 Subject: [PATCH 34/34] Browser: Enable unified autoplay by default @@ -9,10 +9,10 @@ Subject: [PATCH 34/34] Browser: Enable unified autoplay by default 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc -index baa0ecd644497..e9abbe1c606d5 100644 +index 5b2ba6f26d785..c2e63e4c40fba 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc -@@ -244,7 +244,7 @@ void ContentSettingsRegistry::Init() { +@@ -246,7 +246,7 @@ void ContentSettingsRegistry::Init() { ContentSettingsInfo::INHERIT_IN_INCOGNITO, ContentSettingsInfo::EXCEPTIONS_ON_SECURE_ORIGINS_ONLY); diff --git a/build/patches_list.txt b/build/patches_list.txt index a8c13e5a..c53720da 100644 --- a/build/patches_list.txt +++ b/build/patches_list.txt @@ -8,12 +8,11 @@ 0008-Re-introduce-kWebAuthCable.patch 0009-Enable-SPPI-for-devices-with-enough-memory.patch 0010-fixup-Disable-fetching-of-all-field-trials.patch -0011-fixup-Add-bookmark-import-export-actions.patch -0012-fixup-Remove-binary-blob-integrations.patch -0013-fixup-Enable-native-Android-autofill.patch -0014-fixup-Disable-Accessibility-service-by-default.patch -0015-fixup-Add-option-to-force-tablet-UI.patch -0016-fixup-Move-navigation-bar-to-bottom.patch +0011-fixup-Remove-binary-blob-integrations.patch +0012-fixup-Enable-native-Android-autofill.patch +0013-fixup-Disable-Accessibility-service-by-default.patch +0014-fixup-Add-option-to-force-tablet-UI.patch +0015-fixup-Move-navigation-bar-to-bottom.patch 0001-add-trichrome-browser-apk-targets.patch 0002-chromium-Add-32-bit-chrome-app-support.patch -- GitLab From ef2c5a8e993d525c082ee73295f0b234d151ff76 Mon Sep 17 00:00:00 2001 From: althafvly Date: Tue, 3 Oct 2023 22:24:55 +0530 Subject: [PATCH 20/40] Browser: fix build failing --- ...Block-gateway-attacks-via-websockets.patch | 28 +++++++++++++++++++ ...-Browser-Remove-bromite-auto-updater.patch | 10 +++---- build/patches_list.txt | 2 ++ 3 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 build/patches/0001-fixup-Revert-Block-gateway-attacks-via-websockets.patch diff --git a/build/patches/0001-fixup-Revert-Block-gateway-attacks-via-websockets.patch b/build/patches/0001-fixup-Revert-Block-gateway-attacks-via-websockets.patch new file mode 100644 index 00000000..8ed4b1c8 --- /dev/null +++ b/build/patches/0001-fixup-Revert-Block-gateway-attacks-via-websockets.patch @@ -0,0 +1,28 @@ +From 337432d0f1e719c4dc57990f5adce89a1f0127bd Mon Sep 17 00:00:00 2001 +From: althafvly +Date: Wed, 4 Oct 2023 13:51:29 +0530 +Subject: [PATCH] fixup Revert "Block gateway attacks via websockets" + +--- + .../blink/renderer/core/workers/installed_scripts_manager.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc +index 2a978cb476740..fe67745d54ccd 100644 +--- a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc ++++ b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc +@@ -33,9 +33,9 @@ InstalledScriptsManager::ScriptData::ScriptData( + // place so that this is shareable out of worker code. + response_address_space_ = network::mojom::IPAddressSpace::kPublic; + if (network_utils::IsReservedIPAddress(script_url_.Host())) +- response_address_space_ = network::mojom::IPAddressSpace::kLocal; ++ response_address_space_ = network::mojom::IPAddressSpace::kPrivate; + if (SecurityOrigin::Create(script_url_)->IsLocalhost()) +- response_address_space_ = network::mojom::IPAddressSpace::kLoopback; ++ response_address_space_ = network::mojom::IPAddressSpace::kLocal; + } + + ContentSecurityPolicyResponseHeaders +-- +2.34.1 + diff --git a/build/patches/0015-Browser-Remove-bromite-auto-updater.patch b/build/patches/0015-Browser-Remove-bromite-auto-updater.patch index 0daf5334..34667c7e 100644 --- a/build/patches/0015-Browser-Remove-bromite-auto-updater.patch +++ b/build/patches/0015-Browser-Remove-bromite-auto-updater.patch @@ -1,9 +1,9 @@ -From 3eafb4f6c4edb3690d8a7590a22106d622e2b0c6 Mon Sep 17 00:00:00 2001 +From 3282e97faf165b58c9e9c9209fc7a2ede4ad9cb9 Mon Sep 17 00:00:00 2001 From: althafvly -Date: Tue, 19 Sep 2023 13:13:42 +0530 +Date: Tue, 3 Oct 2023 22:21:39 +0530 Subject: [PATCH 15/34] Browser: Remove bromite auto updater -This reverts commit 392e7ac096e36124b7fc26558a296aa5ec5787d8. +This reverts commit 160b7e30a26384fb69283ae95b91e7238d2d1c3c. --- .../java/templates/BuildConfig.template | 2 - build/config/android/rules.gni | 3 - @@ -148,7 +148,7 @@ index 5da0608895710..f59f62fdf971b 100644 - } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java -index 2e24639a03af2..83c0e2ed544b9 100644 +index 2e24639a03af2..33e232ec8bdda 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/OmahaBase.java @@ -33,8 +33,6 @@ import java.net.HttpURLConnection; @@ -178,7 +178,7 @@ index 2e24639a03af2..83c0e2ed544b9 100644 static boolean isDisabled() { - // do not enable version control via Omaha Update Server - return true; -+ return sIsDisabled; ++ return sDisabledForTesting; } /** diff --git a/build/patches_list.txt b/build/patches_list.txt index c53720da..fe0873ca 100644 --- a/build/patches_list.txt +++ b/build/patches_list.txt @@ -48,3 +48,5 @@ 0032-Revert-Remove-navigator.connection-info.patch 0033-Browser-Disable-Android-native-autofill-by-default.patch 0034-Browser-Enable-unified-autoplay-by-default.patch + +0001-fixup-Revert-Block-gateway-attacks-via-websockets.patch -- GitLab From cad2d3281b1498f5a439eb0a45194d7952f57900 Mon Sep 17 00:00:00 2001 From: althafvly Date: Wed, 4 Oct 2023 20:32:28 +0530 Subject: [PATCH 21/40] Browser: port rest of bromite patches --- ...-price-shopping-commerce-integration.patch | 59 + .../0002-Automated-domain-substitution.patch | 38620 ++++++++++++++++ build/patches_list.txt | 2 + build/todo.txt | 4 - 4 files changed, 38681 insertions(+), 4 deletions(-) create mode 100644 build/patches/0001-Browser-disable-price-shopping-commerce-integration.patch create mode 100644 build/patches/0002-Automated-domain-substitution.patch diff --git a/build/patches/0001-Browser-disable-price-shopping-commerce-integration.patch b/build/patches/0001-Browser-disable-price-shopping-commerce-integration.patch new file mode 100644 index 00000000..71f77d89 --- /dev/null +++ b/build/patches/0001-Browser-disable-price-shopping-commerce-integration.patch @@ -0,0 +1,59 @@ +From cfcccfc152d441243b1856d97e9dcb9975301474 Mon Sep 17 00:00:00 2001 +From: althafvly +Date: Wed, 4 Oct 2023 19:36:24 +0530 +Subject: [PATCH 1/2] Browser: disable price shopping commerce integration + +--- + .../browser/app/appmenu/AppMenuPropertiesDelegateImpl.java | 6 ++++-- + components/commerce/core/commerce_feature_list.cc | 4 ++-- + 2 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +index 4cf89cda35950..56762ead152b8 100644 +--- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +@@ -1100,7 +1100,7 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + */ + protected void updatePriceTrackingMenuItemRow(@NonNull MenuItem startPriceTrackingMenuItem, + @NonNull MenuItem stopPriceTrackingMenuItem, @Nullable Tab currentTab) { +- ShoppingService service = ++ /*ShoppingService service = + ShoppingServiceFactory.getForProfile(Profile.getLastUsedRegularProfile()); + ShoppingService.ProductInfo info = null; + if (service != null && currentTab != null) { +@@ -1131,7 +1131,9 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate + } else { + startPriceTrackingMenuItem.setVisible(true); + stopPriceTrackingMenuItem.setVisible(false); +- } ++ }*/ ++ startPriceTrackingMenuItem.setVisible(false); ++ stopPriceTrackingMenuItem.setVisible(false); + } + + /** +diff --git a/components/commerce/core/commerce_feature_list.cc b/components/commerce/core/commerce_feature_list.cc +index 62507100a051d..cdd4d26ad3607 100644 +--- a/components/commerce/core/commerce_feature_list.cc ++++ b/components/commerce/core/commerce_feature_list.cc +@@ -117,7 +117,7 @@ BASE_FEATURE(kCommerceAllowLocalImages, + + BASE_FEATURE(kCommerceAllowOnDemandBookmarkUpdates, + "CommerceAllowOnDemandBookmarkUpdates", +- base::FEATURE_ENABLED_BY_DEFAULT); ++ base::FEATURE_DISABLED_BY_DEFAULT); + + BASE_FEATURE(kCommerceAllowOnDemandBookmarkBatchUpdates, + "CommerceAllowOnDemandBookmarkBatchUpdates", +@@ -211,7 +211,7 @@ BASE_FEATURE(kShoppingPDPMetricsRegionLaunched, + "ShoppingPDPMetricsRegionLaunched", + base::FEATURE_ENABLED_BY_DEFAULT); + +-BASE_FEATURE(kRetailCoupons, "RetailCoupons", base::FEATURE_ENABLED_BY_DEFAULT); ++BASE_FEATURE(kRetailCoupons, "RetailCoupons", base::FEATURE_DISABLED_BY_DEFAULT); + + BASE_FEATURE(kCommerceDeveloper, + "CommerceDeveloper", +-- +2.34.1 + diff --git a/build/patches/0002-Automated-domain-substitution.patch b/build/patches/0002-Automated-domain-substitution.patch new file mode 100644 index 00000000..e9a1e940 --- /dev/null +++ b/build/patches/0002-Automated-domain-substitution.patch @@ -0,0 +1,38620 @@ +From bda54ef0506710848b369485fc5e463cd0c4fa6c Mon Sep 17 00:00:00 2001 +From: althafvly +Date: Wed, 4 Oct 2023 20:25:45 +0530 +Subject: [PATCH 2/2] Automated domain substitution + +--- + .../cts_config/webview_cts_gcs_path.json | 32 +- + android_webview/tools/record_netlog.py | 6 +- + .../tools/remove_preinstalled_webview.py | 2 +- + android_webview/tools/update_cts.py | 4 +- + ash/accelerators/accelerator_notifications.cc | 2 +- + ash/ash_strings.grd | 28 +- + ash/assistant/assistant_setup_controller.cc | 2 +- + ash/assistant/util/deep_link_util.cc | 16 +- + ash/constants/url_constants.cc | 6 +- + .../fake_device_metadata_http_fetcher.cc | 2 +- + .../fast_pair/device_metadata_fetcher.cc | 2 +- + .../fast_pair/footprints_fetcher_impl.cc | 4 +- + .../ui/fast_pair/fast_pair_presenter_impl.cc | 4 +- + ash/system/eche/eche_tray.cc | 2 +- + ...pcie_peripheral_notification_controller.cc | 2 +- + .../usb_peripheral_notification_controller.cc | 4 +- + .../test_wallpaper_controller_client.cc | 2 +- + .../camera_app_ui/camera_app_untrusted_ui.cc | 2 +- + .../resources/js/lib/analytics.js | 14 +- + .../resources/strings/camera_strings.grd | 2 +- + .../quick_unlock/pin_keyboard_icons.html | 2 +- + ash/webui/diagnostics_ui/diagnostics_ui.cc | 2 +- + ash/webui/eche_app_ui/eche_alert_generator.cc | 2 +- + .../help_app_kids_magazine_untrusted_ui.cc | 2 +- + ash/webui/media_app_ui/media_app_guest_ui.cc | 2 +- + .../backend/help_content_provider.cc | 4 +- + .../resources/confirmation_page.js | 2 +- + .../os_feedback_ui/resources/fake_data.js | 18 +- + .../resources/feedback_constants.js | 6 +- + .../os_feedback_ui/resources/search_page.js | 2 +- + .../personalization_app_ui.cc | 2 +- + .../projector_app/projector_xhr_sender.cc | 10 +- + .../projector_app/projector_xhr_sender.h | 2 +- + .../projector_app/untrusted_projector_ui.cc | 12 +- + .../scanning/resources/scanning_app.html | 2 +- + ash/webui/scanning/resources/scanning_app.js | 2 +- + ...boarding_enter_rsu_wp_disable_code_page.js | 2 +- + base/android/resource_exclusions.gni | 2 +- + base/debug/debugger_posix.cc | 6 +- + base/debug/stack_trace_posix.cc | 2 +- + base/functional/callback.h | 8 +- + base/ios/device_util.mm | 2 +- + base/memory/raw_ptr_asan_service.cc | 6 +- + build/android/gradle/generate_gradle.py | 2 +- + .../android/gyp/assert_static_initializers.py | 2 +- + build/android/gyp/lint.py | 2 +- + build/android/gyp/proguard.py | 2 +- + build/android/gyp/util/diff_utils.py | 4 +- + build/android/gyp/util/protoresources.py | 4 +- + build/android/resource_sizes.py | 4 +- + build/android/test_wrapper/logdog_wrapper.py | 2 +- + build/apple/tweak_info_plist.py | 6 +- + build/config/android/rules.gni | 2 +- + build/config/chrome_build.gni | 2 +- + build/config/chromeos/args.gni | 4 +- + build/config/chromeos/rules.gni | 8 +- + build/config/compiler/compiler.gni | 6 +- + build/config/locales.gni | 2 +- + build/config/nacl/rules.gni | 2 +- + build/config/ozone.gni | 2 +- + build/config/sanitizers/sanitizers.gni | 2 +- + build/config/win/control_flow_guard.gni | 2 +- + build/fuchsia/binary_size_differ.py | 2 +- + build/fuchsia/binary_sizes.py | 2 +- + build/linux/install-chromeos-fonts.py | 2 +- + build/mac_toolchain.py | 2 +- + build/nocompile.gni | 2 +- + build/toolchain/cros_toolchain.gni | 2 +- + build/toolchain/gcc_toolchain.gni | 2 +- + .../lib/common/perf_tests_results_helper.py | 2 +- + build/util/lib/results/result_sink.py | 4 +- + build/whitespace_file.txt | 2 +- + buildtools/README.txt | 4 +- + buildtools/clang_format/README.txt | 6 +- + .../javatest_manifest_config_delta.json | 12 +- + .../manifest/maps_go_manifest_config.json | 10 +- + chrome/app/chromium_strings.grd | 22 +- + chrome/app/generated_resources.grd | 334 ++--- + chrome/app/google_chrome_strings.grd | 20 +- + chrome/app/resources/locale_settings.grd | 10 +- + chrome/browser/about_flags.cc | 12 +- + .../android/webapk/webapk_installer.cc | 4 +- + .../app_service/webapk/webapk_install_task.cc | 4 +- + .../apps/digital_goods/digital_goods_ash.cc | 2 +- + .../digital_goods_factory_impl.cc | 2 +- + .../apps/platform_apps/install_chrome_app.cc | 2 +- + .../ash/android_sms/android_sms_urls.cc | 18 +- + chrome/browser/ash/app_mode/fake_cws.cc | 2 +- + .../auth/arc_background_auth_code_fetcher.cc | 6 +- + .../arc/auth/arc_robot_auth_code_fetcher.cc | 2 +- + .../arc/input_overlay/ui/input_menu_view.cc | 2 +- + .../browser/ash/assistant/assistant_util.cc | 4 +- + .../ash/attestation/attestation_ca_client.cc | 8 +- + .../ash/child_accounts/child_user_service.cc | 2 +- + chrome/browser/ash/crostini/crostini_util.cc | 2 +- + .../customization/customization_document.cc | 2 +- + .../enhanced_network_tts_constants.cc | 2 +- + .../file_manager/file_manager_string_util.cc | 16 +- + .../ash/file_manager/open_with_browser.cc | 8 +- + chrome/browser/ash/hats/hats_dialog.cc | 2 +- + .../assistive_suggester_client_filter.cc | 14 +- + .../ash/login/marketing_backend_connector.cc | 4 +- + .../login/saml/password_sync_token_fetcher.cc | 2 +- + .../recommend_apps_fetcher_impl.cc | 2 +- + .../default_user_image/default_user_images.cc | 2 +- + .../arc_dns_resolution_routine.cc | 6 +- + .../dns_latency_routine.cc | 2 +- + .../dns_resolution_routine.cc | 2 +- + .../network_diagnostics_util.cc | 14 +- + .../video_conferencing_routine.cc | 4 +- + .../ash/plugin_vm/plugin_vm_diagnostics.cc | 8 +- + .../plugin_vm/plugin_vm_license_checker.cc | 4 +- + .../browser/ash/plugin_vm/plugin_vm_util.cc | 12 +- + .../device_command_start_crd_session_job.cc | 6 +- + .../policy/uploading/heartbeat_scheduler.cc | 6 +- + chrome/browser/ash/u2f_notification.cc | 4 +- + .../wallpaper_handlers/wallpaper_handlers.cc | 20 +- + .../autofill/autofill_gstatic_reader.cc | 4 +- + .../browser_switcher_service.cc | 2 +- + chrome/browser/cart/cart_discount_fetcher.cc | 2 +- + .../cart/cart_discount_link_fetcher.cc | 2 +- + chrome/browser/cart/cart_service.cc | 24 +- + chrome/browser/cart/fetch_discount_worker.cc | 2 +- + .../cart_domain_cart_url_mapping.json | 2 +- + .../resources/cart_domain_name_mapping.json | 2 +- + .../browser/chrome_browser_application_mac.mm | 2 +- + .../browser/chrome_content_browser_client.cc | 8 +- + chrome/browser/devtools/url_constants.cc | 4 +- + .../commands/mac_key_rotation_command.cc | 2 +- + .../management_service/rotate_util.cc | 2 +- + .../connectors/service_provider_config.cc | 4 +- + .../extension_request_notification.cc | 4 +- + .../enterprise/signals/signals_utils.cc | 4 +- + ...e_js_error_report_processor_nonchromeos.cc | 4 +- + .../enterprise_platform_keys_api.cc | 2 +- + .../identity_launch_web_auth_flow_function.cc | 2 +- + .../api/platform_keys/platform_keys_api.cc | 2 +- + .../chrome_extension_browser_constants.cc | 4 +- + .../extensions/external_pref_loader.cc | 2 +- + chrome/browser/extensions/install_signer.cc | 2 +- + .../chrome_extension_downloader_factory.cc | 2 +- + .../updater/chrome_update_client_config.cc | 4 +- + chrome/browser/flag_descriptions.cc | 20 +- + .../service_discovery_client_mac.mm | 4 +- + .../long_screenshots_tab_service.cc | 2 +- + .../access_code/access_code_cast_constants.cc | 4 +- + .../cast/cast_media_route_provider.cc | 6 +- + .../dial/dial_media_route_provider.cc | 18 +- + .../media/webrtc/webrtc_event_log_uploader.cc | 2 +- + .../media/webrtc/webrtc_log_uploader.cc | 2 +- + .../nacl_host/nacl_infobar_delegate.cc | 2 +- + .../client/nearby_share_client_impl.cc | 4 +- + .../instantmessaging/constants.h | 4 +- + .../network_traversal_ice_config_fetcher.cc | 12 +- + .../tachyon_ice_config_fetcher.cc | 12 +- + .../modules/drive/drive_service.cc | 20 +- + .../modules/photos/photos_service.cc | 8 +- + .../obsolete_system/obsolete_system_linux.cc | 2 +- + ...rvice_worker_page_load_metrics_observer.cc | 2 +- + .../quiet_permission_prompt_model_android.cc | 2 +- + .../browser/policy/safe_search_policy_test.h | 2 +- + .../privacy_sandbox_service.cc | 24 +- + .../profiles/profile_avatar_downloader.cc | 2 +- + .../push_messaging_constants.cc | 2 +- + .../push_messaging_service_impl.cc | 2 +- + .../browser/resources/about_sys/about_sys.js | 2 +- + .../browsing_topics_internals.html | 4 +- + .../resources/chromeos/about_os_credits.html | 12 +- + .../dictation/macros/list_commands_macro.js | 2 +- + .../chromevox/background/command_handler.js | 4 +- + .../tools/webstore_extension_util.py | 10 +- + .../chromevox_manifest.json.jinja2 | 8 +- + .../common/tutorial/chromevox_tutorial.js | 6 +- + .../select_to_speak/select_to_speak.js | 6 +- + .../select_to_speak_manifest.json.jinja2 | 8 +- + .../switch_access_manifest.json.jinja2 | 4 +- + .../add_supervision/add_supervision_ui.js | 16 +- + .../chromeos/arc_support/background.js | 14 +- + .../chromeos/arc_support/playstore.js | 6 +- + .../assistant_optin/assistant_related_info.js | 4 +- + .../assistant_optin/assistant_value_prop.js | 2 +- + .../connectivity_diagnostics/manifest.json | 4 +- + .../resources/chromeos/echo/manifest.json | 122 +- + .../edu_coexistence/edu_coexistence_ui.js | 2 +- + .../chromeos/emoji_picker/icons.html | 2 +- + .../resources/chromeos/emulator/icons.html | 2 +- + .../input_method/google_xkb_manifest.json | 8 +- + .../resources/chromeos/login/debug/debug.js | 116 +- + .../screens/common/marketing_opt_in.html | 2 +- + .../login/screens/login/offline_login.html | 2 +- + .../login/screens/login/offline_login.js | 2 +- + .../browser_tabs_metadata_form.js | 2 +- + .../parent_access/parent_access_ui.js | 8 +- + .../default_apps/external_extensions.json | 2 +- + .../discards/graph_doc_template.html | 2 +- + chrome/browser/resources/downloads/icons.html | 2 +- + .../resources/gaia_auth_host/authenticator.js | 2 +- + .../saml_password_attributes.js | 2 +- + .../resources/hangout_services/manifest.json | 2 +- + chrome/browser/resources/inspect/inspect.html | 4 +- + .../query_tiles/query_tiles_internals.html | 2 +- + .../resources/media/mei_preload/manifest.json | 2 +- + .../shared/nearby_shared_icons.html | 4 +- + .../nearby_shared_share_type_icons.html | 2 +- + .../resources/net_internals/index.html | 6 +- + .../network_speech_synthesis/manifest.json | 2 +- + .../network_speech_synthesis/tts_extension.js | 2 +- + .../new_tab_page/modules/photos/module.html | 2 +- + chrome/browser/resources/omnibox/omnibox.html | 4 +- + .../browser/resources/pdf/elements/icons.html | 2 +- + .../resources/print_preview/ui/icons.html | 2 +- + .../settings/about_page/about_page.html | 4 +- + chrome/browser/resources/settings/icons.html | 2 +- + .../resources/settings/settings_shared.css | 2 +- + .../resources/webstore_app/manifest.json | 4 +- + .../demos/cr_input/cr_input_demo.html | 2 +- + .../certificate_reporting_service.cc | 2 +- + .../chrome_cleaner/srt_field_trial_win.cc | 4 +- + .../chrome_enterprise_url_lookup_service.cc | 2 +- + .../chrome_password_protection_service.cc | 6 +- + .../cloud_binary_upload_service.cc | 4 +- + .../check_client_download_request_base.cc | 4 +- + .../download_protection/download_feedback.cc | 2 +- + .../ppapi_download_request.cc | 6 +- + .../extension_telemetry_uploader.cc | 2 +- + .../incident_report_uploader_impl.cc | 4 +- + .../default_settings_fetcher.cc | 2 +- + .../background/ntp_background_service.cc | 12 +- + .../search/background/ntp_backgrounds.cc | 10 +- + .../browser/share/default_ranking_android.cc | 8 +- + .../remote_copy_message_handler.cc | 2 +- + .../sharing/web_push/web_push_sender.cc | 4 +- + chrome/browser/signin/signin_ui_util.cc | 2 +- + .../browser/ssl/connection_help_tab_helper.cc | 2 +- + chrome/browser/ssl/sct_reporting_service.cc | 4 +- + .../strings/android_chrome_strings.grd | 58 +- + .../ui/ash/ambient/ambient_client_impl.cc | 8 +- + .../ui/ash/calendar/calendar_keyed_service.cc | 4 +- + .../browser/ui/ash/chrome_shell_delegate.cc | 2 +- + .../ui/ash/in_session_auth_dialog_client.cc | 2 +- + .../projector/pending_screencast_manager.cc | 4 +- + .../browser/ui/ash/system_tray_client_impl.cc | 4 +- + .../tab_under_navigation_throttle.h | 2 +- + ...r_content_setting_bubble_model_delegate.cc | 4 +- + chrome/browser/ui/chrome_pages.cc | 2 +- + .../browser/ui/cocoa/share_menu_controller.mm | 2 +- + .../ui/commander/open_url_command_source.cc | 2 +- + .../ui/dialogs/outdated_upgrade_bubble.cc | 2 +- + .../installation_error_infobar_delegate.cc | 2 +- + chrome/browser/ui/managed_ui.cc | 2 +- + .../omnibox/omnibox_pedal_implementations.cc | 24 +- + chrome/browser/ui/signin_view_controller.cc | 2 +- + .../toolbar/media_router_contextual_menu.cc | 6 +- + .../app_dialog/app_uninstall_dialog_view.cc | 2 +- + .../ui/views/hats/hats_next_web_dialog.cc | 2 +- + .../lens/lens_side_panel_navigation_helper.cc | 2 +- + .../ui/views/network_profile_bubble_view.cc | 2 +- + .../about_this_site_side_panel_view.cc | 2 +- + .../plugin_vm/plugin_vm_installer_view.cc | 2 +- + .../ui/views/session_crashed_bubble_view.cc | 2 +- + .../lens/lens_unified_side_panel_view.cc | 4 +- + .../app_management_page_handler.cc | 6 +- + .../ash/add_supervision/add_supervision_ui.cc | 4 +- + .../ash/cloud_upload/drive_upload_handler.cc | 4 +- + .../internals_ui_handler.cc | 2 +- + chrome/browser/ui/webui/feed/feed_ui.cc | 2 +- + .../ui/webui/interstitials/interstitial_ui.cc | 6 +- + .../ui/webui/media_router/cast_feedback_ui.cc | 4 +- + .../quick_pair/quick_pair_handler.cc | 4 +- + .../ui/webui/new_tab_page/foo/foo_handler.cc | 8 +- + .../ui/webui/new_tab_page/untrusted_source.cc | 2 +- + chrome/browser/ui/webui/ntp/new_tab_ui.cc | 4 +- + .../ui/webui/ntp/ntp_resource_cache.cc | 8 +- + .../ui/webui/sanitized_image_source.cc | 6 +- + .../settings/ash/parental_controls_handler.cc | 2 +- + .../webui/settings/reset_settings_handler.cc | 2 +- + .../settings_localized_strings_provider.cc | 2 +- + .../ui/webui/welcome/google_apps_handler.cc | 12 +- + .../webui/welcome/ntp_background_handler.cc | 2 +- + .../ui/webui/whats_new/whats_new_util.cc | 6 +- + .../fetch_manifest_and_install_command.cc | 2 +- + .../externally_managed_app_manager.cc | 4 +- + .../preinstalled_web_apps/gmail.cc | 6 +- + .../preinstalled_web_apps/google_calendar.cc | 6 +- + .../preinstalled_web_apps/google_chat.cc | 2 +- + .../preinstalled_web_apps/google_docs.cc | 8 +- + .../preinstalled_web_apps/google_drive.cc | 6 +- + .../preinstalled_web_apps/google_meet.cc | 2 +- + .../preinstalled_web_apps/google_sheets.cc | 6 +- + .../preinstalled_web_apps/google_slides.cc | 6 +- + .../preinstalled_web_apps/messages_dogfood.cc | 2 +- + .../preinstalled_web_apps.cc | 10 +- + .../preinstalled_web_apps/youtube.cc | 6 +- + .../chrome_authenticator_request_delegate.cc | 12 +- + .../components/recovery_component.cc | 4 +- + .../crash/crashpad_crash_reporter.cc | 6 +- + .../executables/chrome_cleaner_main.cc | 2 +- + .../logging/cleaner_logging_service.cc | 6 +- + .../chrome_cleaner/logging/dummy_api_keys.cc | 4 +- + .../logging/reporter_logging_service.cc | 6 +- + chrome/common/chrome_features.cc | 8 +- + .../common/extensions/api/_api_features.json | 4 +- + chrome/common/extensions/api/cookies.json | 2 +- + chrome/common/extensions/api/debugger.json | 8 +- + .../extensions/api/declarative_content.json | 4 +- + chrome/common/extensions/api/dom.json | 2 +- + chrome/common/extensions/api/gcm.json | 10 +- + chrome/common/extensions/api/instance_id.json | 2 +- + chrome/common/extensions/api/privacy.json | 8 +- + chrome/common/extensions/api/tabs.json | 4 +- + chrome/common/extensions/api/tts.json | 2 +- + chrome/common/extensions/api/webview_tag.json | 4 +- + chrome/common/extensions/api/windows.json | 2 +- + .../extensions/chrome_extensions_client.cc | 6 +- + chrome/common/google_url_loader_throttle.cc | 4 +- + chrome/common/url_constants.cc | 294 ++--- + .../gaiacp/associated_user_validator.cc | 2 +- + .../gaiacp/gaia_credential_base.cc | 14 +- + .../credential_provider/gaiacp/gcp_utils.cc | 6 +- + .../gaiacp/gcpw_strings.cc | 2 +- + .../credential_provider/gaiacp/mdm_utils.cc | 2 +- + chrome/docs/devtools-pillar.html | 2 +- + chrome/docs/index.html | 18 +- + chrome/docs/platform-pillar.html | 12 +- + chrome/installer/setup/eula/oem_ar.html | 2 +- + chrome/installer/setup/eula/oem_bg.html | 2 +- + chrome/installer/setup/eula/oem_ca.html | 2 +- + chrome/installer/setup/eula/oem_cs.html | 2 +- + chrome/installer/setup/eula/oem_da.html | 2 +- + chrome/installer/setup/eula/oem_de.html | 2 +- + chrome/installer/setup/eula/oem_el.html | 2 +- + chrome/installer/setup/eula/oem_en-GB.html | 2 +- + chrome/installer/setup/eula/oem_en.html | 2 +- + chrome/installer/setup/eula/oem_es-419.html | 2 +- + chrome/installer/setup/eula/oem_es.html | 2 +- + chrome/installer/setup/eula/oem_et.html | 2 +- + chrome/installer/setup/eula/oem_fi.html | 2 +- + chrome/installer/setup/eula/oem_fil.html | 2 +- + chrome/installer/setup/eula/oem_fr.html | 2 +- + chrome/installer/setup/eula/oem_hi.html | 2 +- + chrome/installer/setup/eula/oem_hr.html | 2 +- + chrome/installer/setup/eula/oem_hu.html | 2 +- + chrome/installer/setup/eula/oem_id.html | 2 +- + chrome/installer/setup/eula/oem_it.html | 2 +- + chrome/installer/setup/eula/oem_iw.html | 2 +- + chrome/installer/setup/eula/oem_ja.html | 2 +- + chrome/installer/setup/eula/oem_ko.html | 2 +- + chrome/installer/setup/eula/oem_lt.html | 2 +- + chrome/installer/setup/eula/oem_lv.html | 2 +- + chrome/installer/setup/eula/oem_nl.html | 2 +- + chrome/installer/setup/eula/oem_no.html | 2 +- + chrome/installer/setup/eula/oem_pl.html | 2 +- + chrome/installer/setup/eula/oem_pt-BR.html | 2 +- + chrome/installer/setup/eula/oem_pt-PT.html | 2 +- + chrome/installer/setup/eula/oem_ro.html | 2 +- + chrome/installer/setup/eula/oem_ru.html | 2 +- + chrome/installer/setup/eula/oem_sk.html | 2 +- + chrome/installer/setup/eula/oem_sl.html | 2 +- + chrome/installer/setup/eula/oem_sr.html | 2 +- + chrome/installer/setup/eula/oem_sv.html | 2 +- + chrome/installer/setup/eula/oem_th.html | 2 +- + chrome/installer/setup/eula/oem_tr.html | 2 +- + chrome/installer/setup/eula/oem_uk.html | 2 +- + chrome/installer/setup/eula/oem_vi.html | 2 +- + chrome/installer/setup/eula/oem_zh-CN.html | 2 +- + chrome/installer/setup/eula/oem_zh-TW.html | 2 +- + .../setup/google_chrome_behaviors.cc | 2 +- + chrome/renderer/cart/commerce_hint_agent.cc | 2 +- + chrome/renderer/media/flash_embed_rewrite.cc | 4 +- + ...ip_add_to_cart_request_domain_mapping.json | 2 +- + .../extensions/identity_custom_bindings.js | 2 +- + .../mac_notification_service_ns.mm | 2 +- + chrome/tools/webforms_aggregator_tests.py | 4 +- + chrome/tools/weburl_links.txt | 6 +- + chrome/updater/branding.gni | 16 +- + chrome/updater/mac/setup/ks_tickets.mm | 2 +- + chrome/utility/importer/ie_importer_win.cc | 6 +- + .../shell_devtools_discovery_page.html | 2 +- + chromecast/browser/webui/cast_webui.cc | 4 +- + .../runtime/browser/grpc_webui_controller.cc | 2 +- + chromecast/chromecast.gni | 2 +- + chromecast/crash/linux/minidump_uploader.cc | 2 +- + chromecast/net/connectivity_checker_impl.h | 4 +- + .../components/dbus/rmad/fake_rmad_client.cc | 2 +- + .../device_activity_controller.cc | 2 +- + .../simple_geolocation_provider.cc | 2 +- + .../login/auth/recovery/service_constants.cc | 6 +- + .../multidevice/stub_multidevice_util.cc | 2 +- + .../components/timezone/timezone_request.cc | 2 +- + .../trial_group/trial_group_checker.cc | 2 +- + .../assistant_manager_service_impl.cc | 2 +- + chromeos/ash/services/assistant/service.cc | 2 +- + chromeos/chromeos_strings.grd | 8 +- + .../translation_result_loader.cc | 2 +- + chromeos/printing/printer_config_cache.cc | 4 +- + .../printing/uri_fuzzer_seed_corpus/uri1.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri10.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri11.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri12.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri13.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri14.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri15.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri18.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri19.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri2.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri24.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri3.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri4.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri49.txt | 2 +- + .../printing/uri_fuzzer_seed_corpus/uri5.txt | 2 +- + .../error_page_populator.cc | 2 +- + .../predictor_config_definitions.cc | 2 +- + .../renderer/page_passwords_analyser.cc | 2 +- + .../password_form_conversion_utils.cc | 2 +- + .../core/browser/autofill_download_manager.cc | 4 +- + .../core/browser/autofill_experiments.cc | 6 +- + .../credit_card_fido_authenticator.cc | 2 +- + .../core/browser/payments/payments_client.cc | 2 +- + .../browser/payments/payments_service_url.cc | 10 +- + .../safe_browsing_triggered_popup_blocker.h | 4 +- + .../core/breadcrumb_manager_tab_helper.cc | 4 +- + .../strings/android/browser_ui_strings.grd | 6 +- + .../core/counters/history_counter.cc | 2 +- + .../core/history_notice_utils.cc | 4 +- + .../core/captive_portal_detector.cc | 2 +- + .../data/log_list.json | 18 +- + components/commerce/core/account_checker.cc | 10 +- + .../resources/cart_domain_cart_url_regex.json | 2 +- + .../subscriptions_server_proxy.cc | 2 +- + .../components_google_chrome_strings.grd | 2 +- + components/cronet/tools/generate_javadoc.py | 2 +- + .../core/html/dom_distiller_viewer.html | 2 +- + .../core/javascript/dom_distiller_viewer.js | 2 +- + components/dom_distiller/core/viewer.cc | 6 +- + .../domain_reliability/bake_in_configs.py | 288 ++-- + components/drive/service/drive_api_service.cc | 8 +- + .../error_page/common/localized_error.cc | 2 +- + .../favicon/core/large_icon_service_impl.cc | 2 +- + components/feed/core/v2/feed_network_impl.cc | 8 +- + components/feed/feed_feature_list.cc | 4 +- + components/feedback/feedback_uploader.cc | 2 +- + components/flags_ui/resources/flags.html | 4 +- + components/gcm_driver/gcm_account_mapper.cc | 2 +- + components/gcm_driver/gcm_client_impl.cc | 2 +- + .../core/browser/browsing_history_service.cc | 4 +- + .../history/core/browser/history_service.cc | 4 +- + .../core/browser/web_history_service.cc | 14 +- + .../per_user_topic_subscription_manager.cc | 2 +- + .../tab_modal_dialog_manager.cc | 2 +- + .../core/keyed_service_base_factory.cc | 2 +- + components/lens/lens_features.cc | 4 +- + components/media_router/common/media_source.h | 2 +- + .../metrics/net/net_metrics_log_uploader.cc | 2 +- + components/metrics/url_constants.cc | 2 +- + components/nacl/docs/dev/index.html | 4 +- + components/net_log/resources/net_export.html | 6 +- + .../network_time/network_time_tracker.cc | 2 +- + components/ntp_tiles/popular_sites_impl.cc | 4 +- + .../omnibox/browser/document_provider.cc | 22 +- + .../browser/document_suggestions_service.cc | 4 +- + .../resources/omnibox_pedal_synonyms.grd | 138 +- + .../core/optimization_guide_constants.cc | 4 +- + .../core/prediction_manager.cc | 14 +- + .../ads_page_load_metrics_observer.cc | 2 +- + .../use_counter_page_load_metrics_observer.cc | 4 +- + ...password_requirements_spec_fetcher_impl.cc | 4 +- + .../core/browser/hash_password_manager.cc | 2 +- + .../leak_detection/leak_detection_request.h | 2 +- + .../browser/leak_detection_dialog_utils.cc | 2 +- + .../browser/old_google_credentials_cleaner.cc | 8 +- + .../core/browser/password_hash_data.cc | 2 +- + .../browser/password_manager_constants.cc | 8 +- + .../core/browser/password_reuse_detector.cc | 2 +- + .../core/browser/password_sync_util.cc | 4 +- + .../core/browser/password_ui_utils.cc | 2 +- + .../core/browser/psl_matching_helper.cc | 6 +- + .../password_manager/ios/test_helpers.cc | 4 +- + .../payment_method_manifest_parser_fuzzer.cc | 2 +- + components/payments/core/error_strings.cc | 2 +- + components/payments/core/method_strings.cc | 8 +- + .../android/permissions_android_strings.grd | 4 +- + components/permissions/constants.cc | 4 +- + .../permissions/permission_context_base.cc | 10 +- + .../permissions/permission_request_manager.cc | 8 +- + .../prediction_service/prediction_common.h | 2 +- + .../core/browser/browser_policy_connector.cc | 6 +- + ...cloud_signin_restriction_policy_fetcher.cc | 2 +- + .../core/common/cloud/user_info_fetcher.cc | 4 +- + .../common/default_chrome_apps_migrator.cc | 16 +- + .../core/common/policy_loader_common.cc | 4 +- + .../request_handler_for_policy.cc | 2 +- + .../policy/test_support/signature_provider.h | 4 +- + .../template_writers/writers/adm_writer.py | 4 +- + .../writers/doc_atomic_groups_writer.py | 2 +- + .../template_writers/writers/doc_writer.py | 10 +- + .../writers/ios_app_config_writer.py | 2 +- + .../writers/template_writer.py | 2 +- + components/quirks/quirks_client.cc | 2 +- + components/resources/terms/terms_am.html | 4 +- + components/resources/terms/terms_ar.html | 4 +- + components/resources/terms/terms_bg.html | 4 +- + components/resources/terms/terms_bn.html | 4 +- + components/resources/terms/terms_ca.html | 4 +- + components/resources/terms/terms_cs.html | 4 +- + components/resources/terms/terms_da.html | 4 +- + components/resources/terms/terms_de.html | 4 +- + components/resources/terms/terms_el.html | 4 +- + components/resources/terms/terms_en-GB.html | 4 +- + components/resources/terms/terms_en.html | 4 +- + components/resources/terms/terms_es-419.html | 4 +- + components/resources/terms/terms_es.html | 4 +- + components/resources/terms/terms_et.html | 4 +- + components/resources/terms/terms_fa.html | 4 +- + components/resources/terms/terms_fi.html | 4 +- + components/resources/terms/terms_fil.html | 4 +- + components/resources/terms/terms_fr.html | 4 +- + components/resources/terms/terms_gu.html | 4 +- + components/resources/terms/terms_he.html | 4 +- + components/resources/terms/terms_hi.html | 4 +- + components/resources/terms/terms_hr.html | 4 +- + components/resources/terms/terms_hu.html | 4 +- + components/resources/terms/terms_id.html | 4 +- + components/resources/terms/terms_it.html | 4 +- + components/resources/terms/terms_ja.html | 4 +- + components/resources/terms/terms_kn.html | 4 +- + components/resources/terms/terms_ko.html | 4 +- + components/resources/terms/terms_lt.html | 4 +- + components/resources/terms/terms_lv.html | 4 +- + components/resources/terms/terms_ml.html | 4 +- + components/resources/terms/terms_mr.html | 4 +- + components/resources/terms/terms_nb.html | 4 +- + components/resources/terms/terms_nl.html | 4 +- + components/resources/terms/terms_pl.html | 4 +- + components/resources/terms/terms_pt-BR.html | 4 +- + components/resources/terms/terms_pt-PT.html | 4 +- + components/resources/terms/terms_ro.html | 4 +- + components/resources/terms/terms_ru.html | 4 +- + components/resources/terms/terms_sk.html | 4 +- + components/resources/terms/terms_sl.html | 4 +- + components/resources/terms/terms_sr.html | 4 +- + components/resources/terms/terms_sv.html | 4 +- + components/resources/terms/terms_sw.html | 4 +- + components/resources/terms/terms_ta.html | 4 +- + components/resources/terms/terms_te.html | 4 +- + components/resources/terms/terms_th.html | 4 +- + components/resources/terms/terms_tr.html | 4 +- + components/resources/terms/terms_uk.html | 4 +- + components/resources/terms/terms_vi.html | 4 +- + components/resources/terms/terms_zh-CN.html | 4 +- + components/resources/terms/terms_zh-TW.html | 4 +- + .../browser/client_side_detection_service.cc | 2 +- + .../content/browser/triggers/trigger_util.cc | 2 +- + .../browser/db/v4_protocol_manager_util.cc | 4 +- + .../password_protection_service_base.cc | 2 +- + .../browser/realtime/url_lookup_service.cc | 2 +- + .../tailored_security_service.cc | 4 +- + ...tailored_security_service_observer_util.cc | 2 +- + .../safe_search_url_checker_client.cc | 2 +- + .../safe_search_api/stub_url_checker.cc | 2 +- + components/safety_check/url_constants.cc | 2 +- + .../template_url_starter_pack_data.cc | 2 +- + .../content/https_only_mode_blocking_page.cc | 2 +- + .../content/ssl_blocking_page.h | 2 +- + .../core/controller_client.cc | 2 +- + .../core/safe_browsing_loud_error_ui.cc | 4 +- + .../security_interstitials/core/urls.cc | 6 +- + ...ation_guide_segmentation_model_provider.cc | 2 +- + .../services/quarantine/quarantine_mac.mm | 2 +- + .../core/common/disabled_sites.cc | 12 +- + .../ios/shared_highlighting_constants.mm | 2 +- + .../browser/chrome_connected_header_helper.cc | 4 +- + .../browser/account_consistency_service.mm | 12 +- + .../identity_manager/access_token_fetcher.cc | 2 +- + .../browser/spelling_service_client.cc | 2 +- + .../browser/subresource_filter_constants.h | 8 +- + components/sync/base/sync_util.h | 4 +- + .../core/browser/translate_ranker_impl.cc | 6 +- + .../core/browser/translate_script.cc | 2 +- + .../translate/core/common/translate_util.cc | 2 +- + components/ui_devtools/agent_util.cc | 4 +- + components/url_matcher/url_util.cc | 2 +- + .../variations/variations_url_constants.cc | 4 +- + .../installable/installable_logging.cc | 2 +- + components/wifi/wifi_service_win.cc | 2 +- + .../render_widget_host_view_cocoa.mm | 2 +- + .../aggregation_service_features.cc | 2 +- + .../indexed_db/indexed_db_backing_store.cc | 2 +- + .../indexed_db/indexed_db_reporting.cc | 2 +- + .../interest_group_update_manager.cc | 2 +- + .../portal/portal_navigation_throttle.cc | 2 +- + .../renderer_host/navigation_request.cc | 10 +- + .../renderer_host/render_frame_host_impl.cc | 12 +- + .../speech/speech_recognition_engine.cc | 2 +- + .../browser/web_contents/web_contents_impl.cc | 4 +- + .../webauth/authenticator_common_impl.cc | 4 +- + content/browser/webauth/client_data_json.cc | 2 +- + .../webauth_request_security_checker.cc | 8 +- + .../webauth_request_security_checker.h | 6 +- + .../zygote_host/zygote_host_impl_linux.cc | 2 +- + .../pepper/pepper_media_device_manager.cc | 2 +- + content/renderer/render_thread_impl.cc | 14 +- + .../shell/browser/shell_browser_main_parts.cc | 2 +- + content/zygote/zygote_main_linux.cc | 2 +- + device/bluetooth/bluetooth_adapter_mac.mm | 2 +- + .../bluetooth/bluetooth_classic_device_mac.mm | 4 +- + device/fido/fido_strings.grd | 2 +- + device/fido/fido_test_data.h | 2 +- + device/gamepad/xbox_controller_mac.mm | 2 +- + docs/enterprise/extension_query.py | 4 +- + docs/enterprise/extension_query_py2.py | 4 +- + .../web_request/web_request_permissions.cc | 12 +- + extensions/browser/suggest_permission_util.cc | 4 +- + .../browser/updater/extension_downloader.cc | 6 +- + .../browser/updater/safe_manifest_parser.cc | 2 +- + extensions/common/api/_api_features.json | 2 +- + .../common/api/extensions_manifest_types.json | 6 +- + extensions/common/api/i18n.json | 2 +- + extensions/common/csp_validator.cc | 4 +- + extensions/common/extension_urls.cc | 12 +- + extensions/common/manifest_constants.cc | 6 +- + extensions/strings/extensions_strings.grd | 4 +- + google_apis/drive/drive_api_url_generator.cc | 2 +- + google_apis/gaia/gaia_auth_fetcher.cc | 4 +- + google_apis/gaia/gaia_auth_util.cc | 8 +- + google_apis/gaia/gaia_constants.cc | 106 +- + google_apis/gaia/gaia_oauth_client.cc | 6 +- + google_apis/gaia/gaia_urls.cc | 24 +- + google_apis/gcm/base/mcs_util.cc | 2 +- + google_apis/gcm/engine/gservices_settings.cc | 6 +- + google_apis/gcm/engine/mcs_client.cc | 2 +- + google_apis/gcm/tools/mcs_probe.cc | 2 +- + google_apis/google_api_keys.cc | 2 +- + .../ANGLE/EGL_ANGLE_sync_control_rate.txt | 2 +- + .../CHROMIUM/EGL_CHROMIUM_sync_control.txt | 2 +- + gpu/config/gpu_control_list_format.txt | 2 +- + .../lib/browser/protocol/headless_handler.cc | 2 +- + ios/build/bots/scripts/result_sink_util.py | 8 +- + ios/build/bots/scripts/test_result_util.py | 8 +- + ios/build/bots/scripts/xcode_util.py | 4 +- + ios/build/chrome_build.gni | 2 +- + .../app/strings/ios_chromium_strings.grd | 18 +- + .../app/strings/ios_google_chrome_strings.grd | 18 +- + ios/chrome/app/strings/ios_strings.grd | 76 +- + .../autofill/automation/automation_action.mm | 2 +- + ...chrome_browser_state_removal_controller.mm | 2 +- + ios/chrome/browser/flags/about_flags.mm | 10 +- + ios/chrome/browser/omaha/omaha_service.mm | 2 +- + .../search_engine_tab_helper.mm | 8 +- + .../ui/bookmarks/bookmark_earl_grey.mm | 2 +- + .../browser/ui/ntp/discover_feed_constants.mm | 2 +- + .../ui/qr_scanner/qr_scanner_app_interface.mm | 2 +- + .../ui/settings/settings_app_interface.mm | 2 +- + .../table_cell_catalog_view_controller.mm | 8 +- + .../translate_table_view_controller.mm | 2 +- + .../interstitials/interstitial_ui_util.mm | 2 +- + ..._credential_provider_extension_strings.grd | 6 +- + .../password_spec_fetcher.mm | 2 +- + .../https_only_mode_blocking_page.mm | 2 +- + ios/net/cookies/cookie_store_ios_test_util.mm | 2 +- + ios/net/crn_http_protocol_handler.mm | 2 +- + ios/showcase/alert/sc_alert_coordinator.mm | 10 +- + .../sc_infobar_modal_save_card_coordinator.mm | 2 +- + .../fake_autocomplete_suggestion.mm | 4 +- + ios/web/navigation/navigation_manager_impl.mm | 6 +- + .../web_state/ui/wk_content_rule_list_util.mm | 2 +- + ios/web_view/internal/cwv_flags.mm | 2 +- + ios/web_view/internal/cwv_web_view.mm | 2 +- + media/base/win/mf_initializer.cc | 2 +- + .../native_pixmap_handle_mojom_traits.cc | 14 +- + ...stable_video_decoder_types_mojom_traits.cc | 156 +-- + .../src/build_tools/build_paths.py | 2 +- + .../src/build_tools/buildbot_common.py | 2 +- + .../build_tools/json/naclsdk_manifest.json | 32 +- + .../build_tools/json/naclsdk_manifest0.json | 2 +- + .../build_tools/json/naclsdk_manifest2.json | 4 +- + .../src/build_tools/nacl-mono-buildbot.py | 2 +- + .../src/build_tools/nacl-mono-builder.py | 2 +- + .../src/build_tools/sdk_tools/cacerts.txt | 2 +- + .../src/build_tools/sdk_tools/config.py | 2 +- + .../build_tools/sdk_tools/sdk_update_main.py | 2 +- + .../third_party/fancy_urllib/__init__.py | 4 +- + .../src/build_tools/update_nacl_manifest.py | 6 +- + .../src/build_tools/update_sdktools.py | 2 +- + native_client_sdk/src/doc/Makefile | 2 +- + .../security-contest/contest-warning.txt | 4 +- + native_client_sdk/src/doc/conf.py | 2 +- + .../src/doc/doxygen/generate_docs.py | 2 +- + native_client_sdk/src/doc/migration/apps.html | 8 +- + .../src/doc/migration/public.html | 2 +- + .../src/examples/api/socket/index.html | 2 +- + .../src/examples/demo/drive/drive.cc | 20 +- + .../src/examples/demo/drive/index.html | 2 +- + .../src/examples/demo/nacl_io_demo/index.html | 6 +- + .../src/gonacl_appengine/gonacl.py | 8 +- + .../static/bullet/fullscreen.html | 4 +- + .../gonacl_appengine/static/bullet/index.html | 4 +- + .../gonacl_appengine/static/bullet/main.js | 2 +- + .../gonacl_appengine/static/cube/example.js | 4 +- + .../gonacl_appengine/static/cube/index.html | 2 +- + .../gonacl_appengine/static/earth/example.js | 4 +- + .../gonacl_appengine/static/earth/index.html | 2 +- + .../gonacl_appengine/static/home/index.html | 2 +- + .../src/gonacl_appengine/static/index.html | 6 +- + .../gonacl_appengine/static/life/example.js | 2 +- + .../gonacl_appengine/static/life/index.html | 2 +- + .../gonacl_appengine/static/lua/index.html | 6 +- + .../src/gonacl_appengine/static/lua/lua.js | 2 +- + .../gonacl_appengine/static/lua/naclterm.js | 2 +- + .../static/smoothlife/example.js | 2 +- + .../static/smoothlife/index.html | 4 +- + .../static/voronoi/example.js | 2 +- + .../static/voronoi/index.html | 2 +- + native_client_sdk/src/tools/fix_manifest.py | 2 +- + native_client_sdk/src/web/manifest.html | 6 +- + net/base/network_change_notifier_mac.mm | 2 +- + .../http_security_header_047.txt | Bin 166 -> 169 bytes + net/dns/dns_test_util.h | 28 +- + net/dns/dns_transaction.cc | 2 +- + net/dns/public/doh_provider_entry.cc | 4 +- + net/http/http_server_properties.cc | 4 +- + net/log/file_net_log_observer.cc | 2 +- + net/quic/crypto/proof_verifier_chromium.cc | 2 +- + net/quic/quic_stream_factory.cc | 8 +- + net/spdy/spdy_session.cc | 2 +- + net/tools/print_certificates.py | 2 +- + net/tools/testserver/testserver.py.vpython3 | 4 +- + .../transport_security_state_generator.cc | 2 +- + printing/backend/win_helper.cc | 6 +- + printing/print_settings_initializer_win.cc | 2 +- + remoting/base/service_urls.cc | 8 +- + .../notification/gstatic_json_fetcher.cc | 2 +- + ...rome.remote_assistance-firefox.json.jinja2 | 2 +- + remoting/host/it2me/it2me_constants.cc | 2 +- + remoting/host/linux/linux_me2me_host.py | 6 +- + remoting/host/linux/remoting_user_session.cc | 2 +- + remoting/host/remoting_me2me_host.cc | 4 +- + ....chrome.remote_desktop-firefox.json.jinja2 | 2 +- + remoting/host/setup/start_host_main.cc | 2 +- + remoting/ios/app/help_view_controller.mm | 2 +- + .../ios/app/host_setup_view_controller.mm | 2 +- + .../ios/app/remoting_menu_view_controller.mm | 10 +- + .../facade/remoting_oauth_authentication.mm | 2 +- + remoting/protocol/fake_session.cc | 2 +- + remoting/resources/remoting_strings.grd | 8 +- + remoting/signaling/signaling_id_util.cc | 4 +- + remoting/tools/build/remoting_localize.py | 6 +- + remoting/tools/zip2msi.py | 2 +- + rlz/lib/financial_ping.cc | 2 +- + sandbox/features.gni | 2 +- + sandbox/linux/services/libc_interceptor.cc | 6 +- + .../linux/suid/client/setuid_sandbox_host.cc | 4 +- + sandbox/linux/suid/sandbox.c | 4 +- + sandbox/policy/win/sandbox_win.cc | 6 +- + .../geolocation/network_location_request.cc | 2 +- + .../image_annotation_service.h | 4 +- + .../abseil-cpp/absl/abseil.podspec.gen.py | 2 +- + third_party/abseil-cpp/conanfile.py | 2 +- + third_party/abseil-cpp/generate_def_files.py | 4 +- + third_party/abseil-cpp/roll_abseil.py | 4 +- + third_party/afl/src/Makefile | 4 +- + third_party/afl/src/afl-analyze.c | 4 +- + third_party/afl/src/afl-as.c | 6 +- + third_party/afl/src/afl-fuzz.c | 6 +- + third_party/afl/src/afl-gcc.c | 4 +- + third_party/afl/src/afl-gotcpu.c | 6 +- + third_party/afl/src/afl-showmap.c | 4 +- + third_party/afl/src/afl-tmin.c | 4 +- + third_party/afl/src/docs/QuickStartGuide.txt | 2 +- + third_party/afl/src/docs/historical_notes.txt | 2 +- + third_party/afl/src/docs/notes_for_asan.txt | 2 +- + third_party/afl/src/docs/sister_projects.txt | 4 +- + .../canvas_harness/canvas_harness.html | 2 +- + third_party/afl/src/libdislocator/Makefile | 2 +- + third_party/afl/src/libtokencap/Makefile | 2 +- + third_party/afl/src/llvm_mode/Makefile | 6 +- + .../afl/src/llvm_mode/afl-clang-fast.c | 8 +- + .../android_build_tools/aapt2/3pp/fetch.py | 4 +- + .../apkanalyzer/3pp/fetch.py | 2 +- + .../apkanalyzer/3pp/install.py | 2 +- + .../android_build_tools/lint/3pp/fetch.py | 2 +- + .../android_build_tools/lint/3pp/install.py | 2 +- + .../manifest_merger/3pp/fetch.py | 2 +- + .../manifest_merger/3pp/install.py | 2 +- + .../android_arch_core_common/3pp/fetch.py | 2 +- + .../android_arch_core_runtime/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_support_design/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_support_loader/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_support_multidex/3pp/fetch.py | 2 +- + .../com_android_support_print/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_tools_common/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../com_android_tools_sdk_common/3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../3pp/fetch.py | 2 +- + .../Android_SDK_License-December_9_2016.txt | 4 +- + third_party/androidx/fetch_all_androidx.py | 2 +- + .../common/loader/record_load_histograms.cc | 2 +- + .../blink/public/strings/blink_strings.grd | 8 +- + .../renderer/bindings/scripts/utilities.py | 2 +- + .../build/scripts/update_css_ranking.py | 4 +- + .../core/css/remote_font_face_source.cc | 2 +- + .../blink/renderer/core/dom/element.cc | 4 +- + .../renderer/core/dom/events/event_target.cc | 4 +- + .../blink/renderer/core/events/touch_event.cc | 2 +- + .../blink/renderer/core/events/wheel_event.cc | 4 +- + .../blink/renderer/core/frame/local_frame.cc | 4 +- + .../renderer/core/html/html_iframe_element.cc | 2 +- + .../core/html/media/autoplay_policy.cc | 4 +- + .../core/html/media/html_media_element.cc | 8 +- + .../core/html/portal/html_portal_element.cc | 4 +- + .../renderer/core/loader/frame_loader.cc | 2 +- + .../core/loader/mixed_content_checker.cc | 2 +- + .../core/loader/subresource_filter.cc | 2 +- + .../script/document_write_intervention.cc | 6 +- + .../core/xmlhttprequest/xml_http_request.cc | 2 +- + .../modules/bluetooth/bluetooth_error.cc | 16 +- + .../modules/clipboard/clipboard_promise.cc | 2 +- + .../credentials_container.cc | 4 +- + .../encryptedmedia/encrypted_media_utils.h | 2 +- + .../modules/geolocation/geolocation.cc | 2 +- + .../play_app_url_manifest.json | 2 +- + .../modules/payments/payment_request.cc | 8 +- + .../modules/vibration/vibration_controller.cc | 4 +- + .../modules/webaudio/audio_context.cc | 4 +- + .../modules/webmidi/navigator_web_midi.cc | 2 +- + .../platform/loader/fetch/resource_error.cc | 2 +- + .../loader/fetch/resource_load_scheduler.cc | 2 +- + .../platform/weborigin/security_origin.cc | 2 +- + .../blink/tools/blinkpy/common/net/git_cl.py | 4 +- + .../blinkpy/common/net/results_fetcher.py | 8 +- + .../blink/tools/blinkpy/common/net/rpc.py | 6 +- + .../blink/tools/blinkpy/common/pretty_diff.py | 2 +- + .../tools/blinkpy/common/system/filesystem.py | 4 +- + .../tools/blinkpy/common/system/profiler.py | 2 +- + .../blink/tools/blinkpy/style/filter.py | 2 +- + .../blinkpy/tool/commands/flaky_tests.py | 6 +- + .../tools/blinkpy/w3c/chromium_commit.py | 2 +- + .../tools/blinkpy/w3c/chromium_commit_mock.py | 2 +- + third_party/blink/tools/blinkpy/w3c/common.py | 4 +- + .../blinkpy/w3c/directory_owners_extractor.py | 2 +- + .../tools/blinkpy/w3c/export_notifier.py | 4 +- + third_party/blink/tools/blinkpy/w3c/gerrit.py | 8 +- + .../tools/blinkpy/w3c/import_notifier.py | 4 +- + .../blink/tools/blinkpy/w3c/monorail.py | 4 +- + .../blink/tools/blinkpy/w3c/test_exporter.py | 4 +- + .../blink/tools/blinkpy/w3c/test_importer.py | 12 +- + .../blinkpy/w3c/wpt_results_processor.py | 6 +- + .../blink/tools/blinkpy/w3c/wpt_uploader.py | 2 +- + .../blink/tools/commit_stats/org-list.txt | 10 +- + .../print_stale_test_expectations_entries.py | 2 +- + third_party/boringssl/roll_boringssl.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../externs/chrome_extensions.js | 1154 ++++++++--------- + .../externs/command_line_private.js | 8 +- + .../crashpad/build/install_linux_sysroot.py | 6 +- + third_party/crashpad/crashpad/package.h | 4 +- + third_party/crashpad/update.py | 2 +- + third_party/dav1d/generate_source.py | 2 +- + .../protoc_plugins/util/plugin_protos.py | 4 +- + .../closure/bin/build/closurebuilder.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/depswriter.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../closure/css/inlay/g-base.css | 4 +- + .../closure/css/inlay/g-fixed.css | 4 +- + .../closure/css/inlay/g-ratio.css | 4 +- + .../closure/goog/css/bubble.css | 18 +- + .../closure/goog/css/checkbox.css | 4 +- + .../closure/goog/css/colorpalette.css | 2 +- + .../goog/css/colorpicker-simplegrid.css | 2 +- + .../closure/goog/css/combobox.css | 2 +- + .../closure/goog/css/css3menubutton.css | 2 +- + .../closure/goog/css/custombutton.css | 2 +- + .../closure/goog/css/dialog.css | 2 +- + .../closure/goog/css/dragdropdetector.css | 4 +- + .../closure/goog/css/editor/bubble.css | 2 +- + .../goog/css/editor/equationeditor.css | 2 +- + .../closure/goog/css/editortoolbar.css | 2 +- + .../closure/goog/css/flatmenubutton.css | 2 +- + .../closure/goog/css/hsvapalette.css | 8 +- + .../closure/goog/css/hsvpalette.css | 8 +- + .../closure/goog/css/imagelessmenubutton.css | 2 +- + .../closure/goog/css/menubutton.css | 4 +- + .../closure/goog/css/menuitem.css | 2 +- + .../closure/goog/css/toolbar.css | 4 +- + .../closure/goog/css/tree.css | 4 +- + .../closure/goog/css/tristatemenuitem.css | 4 +- + .../goog/demos/autocompleterichremotedata.js | 16 +- + .../demos/autocompleterichremotedata.json | 16 +- + .../closure/goog/demos/css/demo.css | 2 +- + .../closure/goog/demos/css/emojipicker.css | 2 +- + .../closure/goog/demos/dialog.html | 4 +- + .../demos/graphics/advancedcoordinates.html | 2 +- + .../demos/graphics/advancedcoordinates2.html | 2 +- + .../goog/demos/graphics/basicelements.html | 4 +- + .../closure/goog/demos/history1.html | 2 +- + .../closure/goog/demos/history2.html | 2 +- + .../closure/goog/demos/history3.html | 2 +- + .../closure/goog/demos/hovercard.html | 18 +- + .../closure/goog/demos/splitpane.html | 2 +- + .../closure/goog/html/safeurl_test_vectors.js | 8 +- + .../goog/html/sanitizer/html_test_vectors.js | 2 +- + .../goog/labs/net/webchannel/environment.js | 16 +- + .../goog/labs/net/webchannel/netutils.js | 4 +- + .../labs/net/webchannel/webchannelbase.js | 6 +- + .../closure/goog/net/browserchannel.js | 10 +- + .../closure/goog/net/networktester.js | 8 +- + .../closure/goog/net/tmpnetwork.js | 6 +- + .../closure/goog/soy/soy_testhelper.js | 4 +- + .../closure/goog/transpile.js | 54 +- + .../closure/goog/ui/editor/linkdialog.js | 2 +- + .../closure/goog/ui/editor/messages.js | 2 +- + .../closure/goog/ui/media/googlevideo.js | 8 +- + .../closure/goog/ui/media/mp3.js | 2 +- + .../closure/goog/ui/media/picasa.js | 10 +- + .../closure/goog/ui/media/youtube.js | 22 +- + .../closure/goog/ui/serverchart.js | 14 +- + .../doc/_layouts/article.html | 2 +- + .../google-closure-library/doc/js/article.js | 2 +- + .../src/chrome/os/inputview/adapter.js | 4 +- + .../closure/bin/build/closurebuilder.py | 2 +- + .../closure/bin/build/depstree.py | 2 +- + .../closure/bin/build/depswriter.py | 2 +- + .../closure/bin/build/source.py | 2 +- + .../closure/bin/build/treescan.py | 2 +- + .../closure_library/closure/bin/scopify.py | 2 +- + .../hunspell/src/hunspell/affentry.cxx | 2 +- + .../hunspell/src/hunspell/affentry.hxx | 2 +- + .../hunspell/src/hunspell/affixmgr.cxx | 2 +- + .../hunspell/src/hunspell/affixmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/atypes.hxx | 2 +- + .../hunspell/src/hunspell/baseaffix.hxx | 2 +- + third_party/hunspell/src/hunspell/csutil.cxx | 2 +- + third_party/hunspell/src/hunspell/csutil.hxx | 2 +- + third_party/hunspell/src/hunspell/filemgr.cxx | 2 +- + third_party/hunspell/src/hunspell/filemgr.hxx | 2 +- + third_party/hunspell/src/hunspell/hashmgr.cxx | 2 +- + third_party/hunspell/src/hunspell/hashmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/htypes.hxx | 2 +- + .../hunspell/src/hunspell/hunspell.cxx | 2 +- + .../hunspell/src/hunspell/hunspell.hxx | 2 +- + third_party/hunspell/src/hunspell/hunzip.cxx | 2 +- + third_party/hunspell/src/hunspell/hunzip.hxx | 2 +- + third_party/hunspell/src/hunspell/langnum.hxx | 2 +- + third_party/hunspell/src/hunspell/replist.cxx | 2 +- + third_party/hunspell/src/hunspell/replist.hxx | 2 +- + .../hunspell/src/hunspell/suggestmgr.cxx | 2 +- + .../hunspell/src/hunspell/suggestmgr.hxx | 2 +- + third_party/hunspell/src/hunspell/w_char.hxx | 2 +- + .../hunspell/src/parsers/firstparser.cxx | 2 +- + .../hunspell/src/parsers/firstparser.hxx | 2 +- + .../hunspell/src/parsers/htmlparser.cxx | 2 +- + .../hunspell/src/parsers/htmlparser.hxx | 2 +- + .../hunspell/src/parsers/latexparser.cxx | 2 +- + .../hunspell/src/parsers/latexparser.hxx | 2 +- + .../hunspell/src/parsers/manparser.cxx | 2 +- + .../hunspell/src/parsers/manparser.hxx | 2 +- + .../hunspell/src/parsers/odfparser.cxx | 2 +- + .../hunspell/src/parsers/odfparser.hxx | 2 +- + .../hunspell/src/parsers/testparser.cxx | 2 +- + .../hunspell/src/parsers/textparser.cxx | 2 +- + .../hunspell/src/parsers/textparser.hxx | 2 +- + .../hunspell/src/parsers/xmlparser.cxx | 2 +- + .../hunspell/src/parsers/xmlparser.hxx | 2 +- + .../src/be/hyph-be.lic.txt | 6 +- + .../src/hu/hyph-hu.lic.txt | 4 +- + .../src/hy/hyph-hy.lic.txt | 2 +- + third_party/inspector_protocol/roll.py | 4 +- + third_party/jstemplate/compile.py | 4 +- + .../jstemplate/jstemplate_example.html | 2 +- + third_party/jstemplate/jstemplate_jsunit.html | 10 +- + third_party/libaddressinput/BUILD.gn | 2 +- + .../chromium/tools/require_fields.py | 2 +- + third_party/libevent/evdns.c | 2 +- + .../libpng/contrib/oss-fuzz/README.txt | 2 +- + .../libusb/src/libusb/os/windows_usb.c | 12 +- + third_party/libxslt/chromium/roll.py | 2 +- + third_party/maldoca/src/maldoca/base/status.h | 2 +- + .../maldoca/src/maldoca/ole/vba_extract.cc | 2 +- + third_party/opus/src/doc/opus_in_isobmff.html | 2 +- + third_party/opus/src/doc/release.txt | 6 +- + third_party/pefile_py3/pefile.py | 4 +- + third_party/protobuf/CHANGES.txt | 12 +- + third_party/protobuf/CONTRIBUTORS.txt | 70 +- + third_party/protobuf/cmake/CMakeLists.txt | 2 +- + .../binary_json_conformance_suite.cc | 48 +- + .../protobuf/conformance/conformance_cpp.cc | 4 +- + .../text_format_conformance_suite.cc | 8 +- + .../Tests/GPBObjectiveCPlusPlusTest.mm | 2 +- + third_party/protobuf/php/composer.json | 2 +- + .../php/ext/google/protobuf/convert.c | 4 +- + .../php/ext/google/protobuf/message.c | 6 +- + .../protobuf/python/docs/generate_docs.py | 4 +- + .../python/google/protobuf/descriptor.py | 4 +- + .../google/protobuf/descriptor_database.py | 4 +- + .../python/google/protobuf/descriptor_pool.py | 4 +- + .../protobuf/internal/_parameterized.py | 4 +- + .../google/protobuf/internal/builder.py | 4 +- + .../google/protobuf/internal/decoder.py | 4 +- + .../google/protobuf/internal/encoder.py | 4 +- + .../protobuf/internal/enum_type_wrapper.py | 4 +- + .../protobuf/internal/message_listener.py | 4 +- + .../protobuf/internal/python_message.py | 4 +- + .../google/protobuf/internal/test_util.py | 4 +- + .../google/protobuf/internal/type_checkers.py | 4 +- + .../protobuf/internal/well_known_types.py | 6 +- + .../google/protobuf/internal/wire_format.py | 4 +- + .../python/google/protobuf/json_format.py | 4 +- + .../python/google/protobuf/message.py | 4 +- + .../python/google/protobuf/message_factory.py | 4 +- + .../google/protobuf/pyext/cpp_message.py | 4 +- + .../python/google/protobuf/reflection.py | 4 +- + .../python/google/protobuf/service.py | 4 +- + .../google/protobuf/service_reflection.py | 4 +- + .../python/google/protobuf/text_format.py | 6 +- + .../generate_py_protobufs.py | 4 +- + .../python/protobuf_distutils/setup.py | 8 +- + third_party/protobuf/python/setup.py | 6 +- + .../protobuf/src/google/protobuf/any_lite.cc | 6 +- + .../protobuf/compiler/java/java_message.cc | 6 +- + .../compiler/js/well_known_types_embed.cc | 4 +- + .../src/google/protobuf/compiler/parser.cc | 12 +- + .../google/protobuf/util/internal/constants.h | 8 +- + .../util/internal/protostream_objectwriter.cc | 50 +- + .../src/google/protobuf/util/json_util.cc | 4 +- + third_party/protobuf/update_version.py | 4 +- + .../pycoverage/coverage/htmlfiles/pyfile.html | 2 +- + .../src/benchmarks/chromium.linux.json | 152 +-- + third_party/pyjson5/src/setup.py | 2 +- + third_party/r8/3pp/fetch.py | 4 +- + third_party/rust/aho_corasick/v0_7/BUILD.gn | 2 +- + third_party/rust/atty/v0_2/BUILD.gn | 2 +- + third_party/rust/autocfg/v1/BUILD.gn | 2 +- + third_party/rust/camino/v1/BUILD.gn | 2 +- + third_party/rust/cxx/v1/BUILD.gn | 2 +- + third_party/rust/cxxbridge_cmd/v1/BUILD.gn | 4 +- + third_party/rust/cxxbridge_macro/v1/BUILD.gn | 2 +- + third_party/rust/fastrand/v1/BUILD.gn | 2 +- + third_party/rust/hashbrown/v0_11/BUILD.gn | 2 +- + third_party/rust/indexmap/v1/BUILD.gn | 2 +- + third_party/rust/itoa/v0_4/BUILD.gn | 2 +- + third_party/rust/itoa/v1/BUILD.gn | 2 +- + third_party/rust/lazy_static/v1/BUILD.gn | 2 +- + third_party/rust/link_cplusplus/v1/BUILD.gn | 2 +- + third_party/rust/memchr/v2/BUILD.gn | 2 +- + third_party/rust/memoffset/v0_6/BUILD.gn | 2 +- + third_party/rust/once_cell/v1/BUILD.gn | 2 +- + third_party/rust/proc_macro2/v1/BUILD.gn | 2 +- + third_party/rust/quote/v1/BUILD.gn | 2 +- + third_party/rust/remove_dir_all/v0_5/BUILD.gn | 2 +- + third_party/rust/rustc_version/v0_4/BUILD.gn | 2 +- + third_party/rust/rustversion/v1/BUILD.gn | 2 +- + third_party/rust/ryu/v1/BUILD.gn | 2 +- + third_party/rust/semver/v1/BUILD.gn | 2 +- + third_party/rust/serde/v1/BUILD.gn | 2 +- + third_party/rust/serde_derive/v1/BUILD.gn | 2 +- + third_party/rust/serde_json/v1/BUILD.gn | 2 +- + .../rust/serde_json_lenient/v0_1/BUILD.gn | 2 +- + third_party/rust/syn/v1/BUILD.gn | 2 +- + third_party/rust/tempfile/v3/BUILD.gn | 2 +- + third_party/rust/termcolor/v1/BUILD.gn | 2 +- + third_party/rust/unicode_ident/v1/BUILD.gn | 2 +- + .../rust/unicode_linebreak/v0_1/BUILD.gn | 2 +- + third_party/rust/unicode_width/v0_1/BUILD.gn | 2 +- + third_party/rust/winapi/v0_3/BUILD.gn | 2 +- + third_party/rust/winapi_util/v0_1/BUILD.gn | 2 +- + .../updater/chrome_mac_universal/3pp/fetch.py | 2 +- + .../chrome_mac_universal_prod/3pp/fetch.py | 2 +- + .../updater/chrome_win_x86/3pp/fetch.py | 2 +- + .../updater/chrome_win_x86_64/3pp/fetch.py | 2 +- + .../updater/chromium_mac_amd64/3pp/fetch.py | 6 +- + .../updater/chromium_mac_arm64/3pp/fetch.py | 6 +- + .../updater/chromium_win_x86/3pp/fetch.py | 6 +- + .../updater/chromium_win_x86_64/3pp/fetch.py | 6 +- + third_party/wpt_tools/roll_wpt.py | 8 +- + third_party/wpt_tools/wpt/tools/lint/rules.py | 4 +- + .../tools/third_party/pywebsocket3/setup.py | 2 +- + .../wpt/tools/webdriver/webdriver/client.py | 2 +- + .../wpt_tools/wpt/tools/wpt/android.py | 2 +- + .../wpt_tools/wpt/tools/wpt/browser.py | 34 +- + third_party/wpt_tools/wpt/tools/wpt/run.py | 4 +- + .../wpt/tools/wptrunner/requirements.txt | 2 +- + .../wpt_tools/wpt/tools/wptrunner/setup.py | 2 +- + .../executors/executorcontentshell.py | 4 +- + .../wptrunner/executors/executormarionette.py | 14 +- + .../wptrunner/formatters/chromium.py | 2 +- + third_party/xnnpack/generate_build_gn.py | 2 +- + .../codereview/download_issue.py | 6 +- + tools/accessibility/codereview/mph.py | 2 +- + tools/accessibility/inspect/ax_utils.cc | 2 +- + tools/accessibility/nvda/README.txt | 2 +- + tools/android/checkxmlstyle/checkxmlstyle.py | 8 +- + .../scripts/customtabs_benchmark.py | 2 +- + .../scripts/run_benchmark.py | 2 +- + .../scripts/sample_config.json | 4 +- + .../js/src/class_view.html | 2 +- + .../dependency_analysis/js/src/load_graph.js | 2 +- + .../js/src/package_view.html | 2 +- + .../dependency_analysis/upload_html_viewer.py | 2 +- + .../convenience/touch_resources.py | 2 +- + tools/android/sdk_updater/update_sdk.py | 2 +- + tools/binary_size/diagnose_bloat.py | 4 +- + tools/binary_size/libsupersize/console.py | 2 +- + .../libsupersize/viewer/static/auth-consts.js | 8 +- + .../libsupersize/viewer/static/index.html | 2 +- + .../libsupersize/viewer/static/index.js | 2 +- + .../viewer/static/tree-worker-wasm.js | 4 +- + .../libsupersize/viewer/static/viewer.html | 8 +- + .../libsupersize/viewer/upload_html_viewer.py | 2 +- + tools/binary_size/libsupersize/zip_util.py | 2 +- + .../binary_size/trybot_commit_size_checker.py | 4 +- + tools/bisect-builds.py | 36 +- + tools/bisect_repackage/bisect_repackage.py | 4 +- + .../bisect_repackage_utils.py | 4 +- + tools/boilerplate.py | 2 +- + tools/browserbench-webdriver/browserbench.py | 2 +- + tools/captured_sites/refresh.py | 2 +- + tools/check_git_config.py | 24 +- + tools/checklicenses/checklicenses.py | 12 +- + tools/checkteamtags/checkteamtags.py | 12 +- + tools/checkteamtags/extract_components.py | 2 +- + .../open_my_editor/ext/background.js | 26 +- + .../open_my_editor/ext/manifest.json | 6 +- + .../manual-fields-to-ignore.txt | 2 +- + tools/clang/scripts/build.py | 24 +- + tools/clang/scripts/include-analysis.html | 12 +- + tools/clang/scripts/package.py | 2 +- + tools/clang/scripts/update.py | 6 +- + tools/code_coverage/coverage.py | 8 +- + tools/cr/cr/base/android.py | 2 +- + tools/cr/main.py | 2 +- + tools/crbug/crbug.js | 10 +- + tools/crbug/pinpoint.js | 4 +- + tools/crbug/user-activity.js | 4 +- + .../cygprofile/orderfile_generator_backend.py | 4 +- + tools/determinism/compare_build_artifacts.py | 2 +- + tools/download_optimization_profile.py | 2 +- + .../dromaeo_benchmark_runner.py | 10 +- + tools/emacs/trybot-mac.txt | 232 ++-- + tools/flags/list_flags.py | 10 +- + tools/generate_stubs/generate_stubs.py | 2 +- + tools/get_asan_chrome/get_asan_chrome.py | 6 +- + tools/git/suggest_owners.py | 6 +- + tools/gn/bootstrap/bootstrap.py | 2 +- + tools/gn/roll_gn.py | 2 +- + tools/grit/grit/format/rc.py | 6 +- + tools/grit/grit/tool/android2grd.py | 6 +- + tools/grit/grit/tool/resize.py | 2 +- + tools/grit/pak_util.py | 2 +- + tools/grit/setup.py | 4 +- + .../js_externs_generator.py | 4 +- + tools/json_schema_compiler/js_util.py | 8 +- + tools/json_schema_compiler/preview.py | 2 +- + tools/mac/download_symbols.py | 4 +- + tools/mac/power/scenarios.py | 10 +- + tools/mb/mb.py | 8 +- + tools/mb/mb_config.pyl | 8 +- + tools/md_browser/base.css | 4 +- + tools/md_browser/footer.html | 2 +- + tools/md_browser/gitiles_autolink.py | 2 +- + tools/md_browser/gitiles_ext_blocks.py | 2 +- + tools/md_browser/gitiles_smart_quotes.py | 2 +- + tools/md_browser/md_browser.py | 2 +- + tools/metrics/common/models.py | 2 +- + tools/metrics/histograms/expand_owners.py | 12 +- + .../metrics/histograms/extract_histograms.py | 10 +- + ...ram_configuration_model_test_histograms.py | 70 +- + tools/metrics/histograms/split_xml.py | 4 +- + tools/metrics/md2xml.py | 4 +- + tools/metrics/structured/model.py | 6 +- + tools/metrics/ukm/xml_validations.py | 4 +- + tools/omahaproxy.py | 2 +- + tools/perfbot-analysis/builder.js | 4 +- + tools/perfbot-analysis/bulk-download.js | 2 +- + tools/python/google/gethash_timer.py | 2 +- + tools/resources/find_unused_resources.py | 2 +- + tools/roll_webgl_conformance.py | 2 +- + tools/run-swarmed.py | 12 +- + tools/site_compare/commands/measure.py | 2 +- + tools/site_compare/commands/scrape.py | 2 +- + .../scrapers/chrome/chromebase.py | 4 +- + .../site_compare/scrapers/firefox/firefox2.py | 2 +- + tools/site_compare/scrapers/ie/ie7.py | 4 +- + tools/site_compare/utils/browser_iterate.py | 2 +- + tools/symsrc/source_index.py | 8 +- + tools/tracing/rename_breakpad.py | 2 +- + .../sample_traffic_annotation.cc | 20 +- + .../scripts/auditor/auditor.py | 2 +- + .../scripts/auditor/util.py | 2 +- + .../scripts/update_annotations_doc.py | 4 +- + .../scripts/update_annotations_sheet.py | 6 +- + tools/usb_gadget/gadget.py | 6 +- + tools/usb_gadget/msos20_descriptors.py | 2 +- + tools/variations/bisect_variations.py | 2 +- + tools/visual_debugger/app.html | 4 +- + tools/web_dev_style/html_checker.py | 2 +- + tools/web_dev_style/js_checker.py | 8 +- + tools/web_dev_style/resource_checker.py | 2 +- + tools/win/RetrieveSymbols/RetrieveSymbols.cpp | 2 +- + tools/win/sizeviewer/template.html | 2 +- + .../chromevox/background/background.js | 2 +- + .../chromevox/background/prefs.js | 4 +- + .../chromevox/injected/history.js | 2 +- + .../cvox2/background/background.js | 14 +- + .../cvox2/background/panel.html | 2 +- + .../extensions/searchvox/loader.js | 2 +- + .../chromevoxclassic/manifest.json.jinja2 | 2 +- + .../color_contrast_companion/help.html | 2 +- + .../accessibility_extensions_strings.grd | 2 +- + ui/base/clipboard/clipboard_test_template.h | 10 +- + ui/base/cocoa/tool_tip_base_view.mm | 2 +- + ui/base/ime/character_composer_sequences.txt | 2 +- + .../keycodes/keyboard_code_conversion_mac.mm | 2 +- + .../file_manager/common/js/mock_chrome.js | 8 +- + .../foreground/elements/icons.html | 2 +- + ui/file_manager/image_loader/piex/Makefile | 2 +- + ui/ozone/ozone.gni | 2 +- + ui/resources/README.txt | 4 +- + ui/resources/resource_check/ico_files.py | 4 +- + .../resource_check/resource_scale_factors.py | 4 +- + ui/strings/ui_strings.grd | 4 +- + ui/views/examples/webview_example.cc | 2 +- + .../cr_components/app_management/icons.html | 2 +- + .../help_bubble/help_bubble_icons.html | 2 +- + ui/webui/resources/cr_elements/icons.html | 4 +- + ...weblayer_security_blocking_page_factory.cc | 2 +- + weblayer/shell/app/shell_main_params.cc | 2 +- + 1294 files changed, 4387 insertions(+), 4387 deletions(-) + +diff --git a/android_webview/tools/cts_config/webview_cts_gcs_path.json b/android_webview/tools/cts_config/webview_cts_gcs_path.json +index fd2e56eebc7eb..b3b40c50ce845 100644 +--- a/android_webview/tools/cts_config/webview_cts_gcs_path.json ++++ b/android_webview/tools/cts_config/webview_cts_gcs_path.json +@@ -6,12 +6,12 @@ + "arch": { + "arm64": { + "filename": "arm64/M/android-cts-arm64-6.0_r32.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-6.0_r32-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-6.0_r32-linux_x86-arm.zip", + "unzip_dir": "arm64/M/6.0_r32/" + }, + "x86": { + "filename": "x86/M/android-cts-x86-6.0_r32.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-6.0_r32-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-6.0_r32-linux_x86-x86.zip", + "unzip_dir": "x86/M/6.0_r32/" + } + }, +@@ -135,12 +135,12 @@ + "arch": { + "arm64": { + "filename": "arm64/N/android-cts-arm64-7.0_r33.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-7.0_r33-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-7.0_r33-linux_x86-arm.zip", + "unzip_dir": "arm64/N/7.0_r33/" + }, + "x86": { + "filename": "x86/N/android-cts-x86-7.0_r33.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-7.0_r33-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-7.0_r33-linux_x86-x86.zip", + "unzip_dir": "x86/N/7.0_r33/" + } + }, +@@ -205,12 +205,12 @@ + "arch": { + "arm64": { + "filename": "arm64/O/android-cts-arm64-8.0_r26.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_R26-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_R26-linux_x86-arm.zip", + "unzip_dir": "arm64/O/8.0_r26" + }, + "x86": { + "filename": "x86/O/android-cts-x86-8.0_r26.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-8.0_R26-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-8.0_R26-linux_x86-x86.zip", + "unzip_dir": "x86/O/8.0_r26" + } + }, +@@ -270,12 +270,12 @@ + "arch": { + "arm64": { + "filename": "arm64/P/android-cts-arm64-9.0_r20.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r20-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r20-linux_x86-arm.zip", + "unzip_dir": "arm64/P/9.0_r20" + }, + "x86": { + "filename": "x86/P/android-cts-x86-9.0_r20.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-9.0_r20-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-9.0_r20-linux_x86-x86.zip", + "unzip_dir": "x86/P/9.0_r20" + } + }, +@@ -335,12 +335,12 @@ + "arch": { + "arm64": { + "filename": "arm64/Q/android-cts-arm64-10_r15.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r15-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r15-linux_x86-arm.zip", + "unzip_dir": "arm64/Q/10_r15" + }, + "x86": { + "filename": "x86/Q/android-cts-x86-10_r15.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-10_r15-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-10_r15-linux_x86-x86.zip", + "unzip_dir": "x86/Q/10_r15" + } + }, +@@ -427,12 +427,12 @@ + "arch": { + "arm64": { + "filename": "arm64/R/android-cts-arm64-11_r11.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-11_r11-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-11_r11-linux_x86-arm.zip", + "unzip_dir": "arm64/R/11_r11/" + }, + "x86": { + "filename": "x86/R/android-cts-x86-11_r11.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-11_r11-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-11_r11-linux_x86-x86.zip", + "unzip_dir": "x86/R/11_r11/" + } + }, +@@ -567,12 +567,12 @@ + "arch": { + "arm64": { + "filename": "arm64/S/android-cts-arm64-12_r7.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-12_r7-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-12_r7-linux_x86-arm.zip", + "unzip_dir": "arm64/S/12_r7/" + }, + "x86": { + "filename": "x86/S/android-cts-x86-12_r7.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-12_r7-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-12_r7-linux_x86-x86.zip", + "unzip_dir": "x86/S/12_r7/" + } + }, +@@ -734,12 +734,12 @@ + "arch": { + "arm64": { + "filename": "arm64/T/android-cts-arm64-13_r3.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-13_r3-linux_x86-arm.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-13_r3-linux_x86-arm.zip", + "unzip_dir": "arm64/T/13_r3/" + }, + "x86": { + "filename": "x86/T/android-cts-x86-13_r3.zip", +- "_origin": "https://dl.google.com/dl/android/cts/android-cts-13_r3-linux_x86-x86.zip", ++ "_origin": "https://dl.9oo91e.qjz9zk/dl/android/cts/android-cts-13_r3-linux_x86-x86.zip", + "unzip_dir": "x86/T/13_r3/" + } + }, +diff --git a/android_webview/tools/record_netlog.py b/android_webview/tools/record_netlog.py +index a978eda4ff749..99ecf2eb9cf18 100755 +--- a/android_webview/tools/record_netlog.py ++++ b/android_webview/tools/record_netlog.py +@@ -6,7 +6,7 @@ + """Takes a netlog for the WebViews in a given application. + + Developer guide: +-https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-debugging.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/android_webview/docs/net-debugging.md + """ + + from __future__ import print_function +@@ -62,7 +62,7 @@ Configures WebView to start recording a netlog. This script chooses a suitable + netlog filename for the application, and will pull the netlog off the device + when the user terminates the script (with ctrl-C). For a more complete usage + guide, open your web browser to: +-https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-debugging.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/android_webview/docs/net-debugging.md + """) + parser.add_argument( + '--package', +@@ -91,7 +91,7 @@ https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-d + raise device_errors.MultipleDevicesError(devices) + + if device.build_type == 'user': +- device_setup_url = ('https://chromium.googlesource.com/chromium/src/+/HEAD/' ++ device_setup_url = ('https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/' + 'android_webview/docs/device-setup.md') + raise RuntimeError('It appears your device is a "user" build. We only ' + 'support capturing netlog on userdebug/eng builds. See ' +diff --git a/android_webview/tools/remove_preinstalled_webview.py b/android_webview/tools/remove_preinstalled_webview.py +index 5b0f636d3146d..ac1a0e78a31db 100755 +--- a/android_webview/tools/remove_preinstalled_webview.py ++++ b/android_webview/tools/remove_preinstalled_webview.py +@@ -90,7 +90,7 @@ def RemovePreinstalledWebViews(device): + # workaround this. Use lots of newlines to make sure this message doesn't + # get lost. + logging.error('Did you start the emulator with "-writable-system?"\n' +- 'See https://chromium.googlesource.com/chromium/src/+/' ++ 'See https://chromium.9oo91esource.qjz9zk/chromium/src/+/' + 'main/docs/android_emulator.md#writable-system-partition' + '\n') + raise +diff --git a/android_webview/tools/update_cts.py b/android_webview/tools/update_cts.py +index d0dfeb0368e0a..c6498ad562955 100755 +--- a/android_webview/tools/update_cts.py ++++ b/android_webview/tools/update_cts.py +@@ -23,7 +23,7 @@ import cts_utils + + + def _query_git_for_cts_tags(): +- cts_git_url = 'https://android.googlesource.com/platform/cts/' ++ cts_git_url = 'https://android.9oo91esource.qjz9zk/platform/cts/' + + tags = cmd_helper.GetCmdOutput(['git', 'ls-remote', '--tags', + cts_git_url]).splitlines() +@@ -110,7 +110,7 @@ class UpdateCTS: + + DESC = """Updates the WebView CTS tests to a new version. + +-See https://source.android.com/compatibility/cts/downloads for the latest ++See https://source.8n6r01d.qjz9zk/compatibility/cts/downloads for the latest + versions. + + Please create a new branch, then edit the +diff --git a/ash/accelerators/accelerator_notifications.cc b/ash/accelerators/accelerator_notifications.cc +index 37f84341fc8f8..f951b4887a8b9 100644 +--- a/ash/accelerators/accelerator_notifications.cc ++++ b/ash/accelerators/accelerator_notifications.cc +@@ -169,7 +169,7 @@ void RemoveNotification(const std::string& notification_id) { + + // Shortcut help URL. + const char kKeyboardShortcutHelpPageUrl[] = +- "https://support.google.com/chromebook/answer/183101"; ++ "https://support.9oo91e.qjz9zk/chromebook/answer/183101"; + + // Accessibility notification ids. + const char kDockedMagnifierToggleAccelNotificationId[] = +diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd +index 2e1a12eb76126..7d93d5cd4f15e 100644 +--- a/ash/ash_strings.grd ++++ b/ash/ash_strings.grd +@@ -818,7 +818,7 @@ Style notes: + other {Update device within # seconds}} + + +- $1google.com requires you to update your $2Chromebook before the deadline ++ $19oo91e.qjz9zk requires you to update your $2Chromebook before the deadline + + + +@@ -843,7 +843,7 @@ Style notes: + other {Change device to previous version within # seconds}} + + +- $1google.com requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. ++ $19oo91e.qjz9zk requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. + + + +@@ -853,10 +853,10 @@ Style notes: + Update overdue + + +- $1google.com recommends that you update your $2Chromebook ++ $19oo91e.qjz9zk recommends that you update your $2Chromebook + + +- $1google.com requires you to update your $2Chromebook immediately ++ $19oo91e.qjz9zk requires you to update your $2Chromebook immediately + + + +@@ -899,10 +899,10 @@ Style notes: + This update requires powerwashing your $1Chromebook. All data will be deleted. Learn more about the latest $2ChromiumOS update. + + +- $1google.com is rolling back your $2Chromebook. Your device will reset and all data will be deleted. ++ $19oo91e.qjz9zk is rolling back your $2Chromebook. Your device will reset and all data will be deleted. + + +- $1google.com requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. ++ $19oo91e.qjz9zk requires you to roll back your $2Chromebook. Your device will reset and all data will be deleted. + + + $1Learn more about the latest ChromiumOS update. This Chromebook needs to restart to apply an update. This can take up to 1 minute. +@@ -993,7 +993,7 @@ Style notes: + + +- $1google.com has $2activated $3Full-screen magnifier. ++ $19oo91e.qjz9zk has $2activated $3Full-screen magnifier. + + +@@ -1438,7 +1438,7 @@ Style notes: + Supervised user + + +- Usage and history of this user can be reviewed by the manager ($1user@example.com) on chrome.com. ++ Usage and history of this user can be reviewed by the manager ($1user@example.com) on ch40me.qjz9zk. + + + Account managed by $1user@example.com +@@ -1928,7 +1928,7 @@ Style notes: + Tap to configure + + +- Browser tab $11 of $22. $3Google, $4https://google.com ++ Browser tab $11 of $22. $3Google, $4https://9oo91e.qjz9zk + + + Connected devices settings +@@ -4722,7 +4722,7 @@ Turning on battery saver to increase your battery life. + Save your $1Pixel Buds + + +- Save your $1Pixel Buds to $2alisha123@gmail.com for faster pairing to your other devices ++ Save your $1Pixel Buds to $2alisha123@9ma1l.qjz9zk for faster pairing to your other devices + + + Settings +@@ -4755,10 +4755,10 @@ Turning on battery saver to increase your battery life. + Connect $1Pixel Buds to this Chromebook + + +- Your $1Pixel Buds will appear on devices linked with $2alisha123@gmail.com ++ Your $1Pixel Buds will appear on devices linked with $2alisha123@9ma1l.qjz9zk + + +- Connect $1Pixel Buds previously saved to $2alisha123@gmail.com ++ Connect $1Pixel Buds previously saved to $2alisha123@9ma1l.qjz9zk + + + Cancel +@@ -4898,7 +4898,7 @@ Turning on battery saver to increase your battery life. + Multiple sign-in has been disabled + + +- An administrator has disallowed multiple sign-in for $1john@google.com. All users must sign out to continue. ++ An administrator has disallowed multiple sign-in for $1john@9oo91e.qjz9zk. All users must sign out to continue. + + + Sign out +@@ -5560,7 +5560,7 @@ Here are some things you can try to get started. + Unlock device to perform the notification action + + +- Unlock device as $1example@gmail.com to perform the notification action ++ Unlock device as $1example@9ma1l.qjz9zk to perform the notification action + + + To see notifications on your lock screen, unlock to change the setting +diff --git a/ash/assistant/assistant_setup_controller.cc b/ash/assistant/assistant_setup_controller.cc +index 67c67d46da08d..48f11319680ad 100644 +--- a/ash/assistant/assistant_setup_controller.cc ++++ b/ash/assistant/assistant_setup_controller.cc +@@ -16,7 +16,7 @@ + namespace { + + constexpr char kGSuiteAdministratorInstructionsUrl[] = +- "https://support.google.com/a/answer/6304876"; ++ "https://support.9oo91e.qjz9zk/a/answer/6304876"; + + } // namespace + +diff --git a/ash/assistant/util/deep_link_util.cc b/ash/assistant/util/deep_link_util.cc +index b51695ca6be39..e89f367e1c717 100644 +--- a/ash/assistant/util/deep_link_util.cc ++++ b/ash/assistant/util/deep_link_util.cc +@@ -386,21 +386,21 @@ absl::optional GetAssistantUrl( + case DeepLinkType::kLists: { + const auto& type_param = GetDeepLinkParam(params, DeepLinkParam::kType); + top_level_url = +- std::string("https://assistant.google.com/lists/mainview"); ++ std::string("https://assistant.9oo91e.qjz9zk/lists/mainview"); + by_id_url = (type_param && type_param.value().compare("shopping") == 0) +- ? std::string("https://shoppinglist.google.com/lists/") +- : std::string("https://assistant.google.com/lists/list/"); ++ ? std::string("https://shoppinglist.9oo91e.qjz9zk/lists/") ++ : std::string("https://assistant.9oo91e.qjz9zk/lists/list/"); + break; + } + case DeepLinkType::kNotes: + top_level_url = std::string( +- "https://assistant.google.com/lists/mainview?note_tap=true"); +- by_id_url = std::string("https://assistant.google.com/lists/note/"); ++ "https://assistant.9oo91e.qjz9zk/lists/mainview?note_tap=true"); ++ by_id_url = std::string("https://assistant.9oo91e.qjz9zk/lists/note/"); + break; + case DeepLinkType::kReminders: + top_level_url = +- std::string("https://assistant.google.com/reminders/mainview"); +- by_id_url = std::string("https://assistant.google.com/reminders/id/"); ++ std::string("https://assistant.9oo91e.qjz9zk/reminders/mainview"); ++ by_id_url = std::string("https://assistant.9oo91e.qjz9zk/reminders/id/"); + break; + default: + NOTREACHED(); +@@ -451,7 +451,7 @@ absl::optional GetWebUrl( + DeepLinkType type, + const std::map& params) { + static constexpr char kAssistantSettingsWebUrl[] = +- "https://assistant.google.com/settings/mainpage"; ++ "https://assistant.9oo91e.qjz9zk/settings/mainpage"; + + if (!IsWebDeepLinkType(type, params)) + return absl::nullopt; +diff --git a/ash/constants/url_constants.cc b/ash/constants/url_constants.cc +index 2ea7c20d1f699..31d927a71e008 100644 +--- a/ash/constants/url_constants.cc ++++ b/ash/constants/url_constants.cc +@@ -7,12 +7,12 @@ + namespace chrome { + + const char kAndroidMessagesLearnMoreURL[] = +- "https://support.google.com/chromebook/?p=multi_device_messages"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=multi_device_messages"; + + const char kLinuxExportImportHelpURL[] = +- "https://support.google.com/chromebook?p=linux_backup_restore"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=linux_backup_restore"; + + const char kMultiDeviceLearnMoreURL[] = +- "https://support.google.com/chromebook/?p=multi_device"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=multi_device"; + + } // namespace chrome +diff --git a/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc b/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc +index aefe4cbf37c0f..3447f57dc5dfa 100644 +--- a/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc ++++ b/ash/quick_pair/repository/fake_device_metadata_http_fetcher.cc +@@ -57,7 +57,7 @@ constexpr char kValidResponseEncoded[] = + "V0IHVwIHlvdXIgR29vZ2xlIEFzc2lzdGFudA=="; + constexpr char kInvalidResponse[] = "404 error"; + constexpr char kValidUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/device/2748"; ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/device/2748"; + + } // namespace + +diff --git a/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc b/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc +index 1cc782a477cdd..b5543d0c409c7 100644 +--- a/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc ++++ b/ash/quick_pair/repository/fast_pair/device_metadata_fetcher.cc +@@ -19,7 +19,7 @@ + namespace { + + const char kGetObservedDeviceUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/device/" ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/device/" + "%d?key=%s&mode=%s&alt=proto"; + const char kReleaseMode[] = "MODE_RELEASE"; + const char kDebugMode[] = "MODE_DEBUG"; +diff --git a/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc b/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc +index c0ca661d7392b..dda922074b5ed 100644 +--- a/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc ++++ b/ash/quick_pair/repository/fast_pair/footprints_fetcher_impl.cc +@@ -24,11 +24,11 @@ namespace quick_pair { + namespace { + + const char kUserDevicesUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/user/devices" ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/user/devices" + "?key=%s&alt=proto"; + + const char kUserDeleteDeviceUrl[] = +- "https://nearbydevices-pa.googleapis.com/v1/user/device/%s" ++ "https://nearbydevices-pa.9oo91eapis.qjz9zk/v1/user/device/%s" + "?key=%s&alt=proto"; + + const net::PartialNetworkTrafficAnnotationTag kTrafficAnnotation = +diff --git a/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc b/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc +index 4a757731a0b3c..bf94f58c7bd03 100644 +--- a/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc ++++ b/ash/quick_pair/ui/fast_pair/fast_pair_presenter_impl.cc +@@ -37,9 +37,9 @@ + namespace { + + const char kDiscoveryLearnMoreLink[] = +- "https://support.google.com/chromebook?p=fast_pair_m101"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=fast_pair_m101"; + const char kAssociateAccountLearnMoreLink[] = +- "https://support.google.com/chromebook?p=bluetooth_pairing_m101"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=bluetooth_pairing_m101"; + + bool ShouldShowUserEmail(ash::LoginStatus status) { + switch (status) { +diff --git a/ash/system/eche/eche_tray.cc b/ash/system/eche/eche_tray.cc +index 627f1c4d578d3..5f11d46da2b35 100644 +--- a/ash/system/eche/eche_tray.cc ++++ b/ash/system/eche/eche_tray.cc +@@ -331,7 +331,7 @@ void EcheTray::CloseBubble() { + + void EcheTray::ShowBubble() { + #ifdef FAKE_BUBBLE_FOR_DEBUG +- LoadBubble(GURL("http://google.com"), std::move(gfx::Image()), ++ LoadBubble(GURL("http://9oo91e.qjz9zk"), std::move(gfx::Image()), + u"visible_name"); + return; + #endif +diff --git a/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc b/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc +index 0c3f7d43bcbe0..b464b02c9bbdc 100644 +--- a/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc ++++ b/ash/system/pcie_peripheral/pcie_peripheral_notification_controller.cc +@@ -32,7 +32,7 @@ namespace ash { + namespace { + const char kNotifierPciePeripheral[] = "ash.pcie_peripheral"; + const char kLearnMoreHelpUrl[] = +- "https://www.support.google.com/chromebook?p=connect_thblt_usb4_accy"; ++ "https://www.support.9oo91e.qjz9zk/chromebook?p=connect_thblt_usb4_accy"; + const int kNotificationsClicksThreshold = 3; + + const char kPciePeripheralLimitedPerformanceNotificationId[] = +diff --git a/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc b/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc +index d05a1f46b2cb8..da7d5d57fbe51 100644 +--- a/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc ++++ b/ash/system/usb_peripheral/usb_peripheral_notification_controller.cc +@@ -37,9 +37,9 @@ const char kUsbPeripheralInvalidTBTCableNotificationId[] = + const char kUsbPeripheralSpeedLimitingCableNotificationId[] = + "cros_usb_peripheral_speed_limiting_cable_notification_id"; + const char kNotificationDisplayLandingPageUrl[] = +- "https://support.google.com/chromebook?p=cable_notification"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=cable_notification"; + const char kNotificationDeviceLandingPageUrl[] = +- "https://support.google.com/chromebook?p=cable_notification_2"; ++ "https://support.9oo91e.qjz9zk/chromebook?p=cable_notification_2"; + + bool GetCableSpeedNotificationShownPref() { + PrefService* prefs = +diff --git a/ash/wallpaper/test_wallpaper_controller_client.cc b/ash/wallpaper/test_wallpaper_controller_client.cc +index 1d4ba348d7fa3..f6f888d38080a 100644 +--- a/ash/wallpaper/test_wallpaper_controller_client.cc ++++ b/ash/wallpaper/test_wallpaper_controller_client.cc +@@ -106,7 +106,7 @@ void TestWallpaperControllerClient::FetchGooglePhotosPhoto( + std::move(callback).Run( + personalization_app::mojom::GooglePhotosPhoto::New( + id, "dedup_key", "test_name", base::TimeFormatFriendlyDate(time), +- GURL("https://google.com/picture.png"), "home"), ++ GURL("https://9oo91e.qjz9zk/picture.png"), "home"), + /*success=*/true); + } + } +diff --git a/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc b/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc +index 11a49ba1c3ad8..3d3ec773ffe16 100644 +--- a/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc ++++ b/ash/webui/camera_app_ui/camera_app_untrusted_ui.cc +@@ -29,7 +29,7 @@ void CreateAndAddUntrustedCameraAppUIHTMLSource( + + untrusted_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- std::string("connect-src http://www.google-analytics.com/ 'self';")); ++ std::string("connect-src http://www.9oo91e-analytics.qjz9zk/ 'self';")); + untrusted_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::WorkerSrc, + std::string("worker-src 'self';")); +diff --git a/ash/webui/camera_app_ui/resources/js/lib/analytics.js b/ash/webui/camera_app_ui/resources/js/lib/analytics.js +index a1384a3ca3133..06c480dfb6221 100644 +--- a/ash/webui/camera_app_ui/resources/js/lib/analytics.js ++++ b/ash/webui/camera_app_ui/resources/js/lib/analytics.js +@@ -27,14 +27,14 @@ + K(b).replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")+"=([^&#]*)"))&&2==a.length?a[1]:""},xa=function(){var a=""+M.location.hostname;return 0==a.indexOf("www.")?a.substring(4):a},de=function(a,b){var c=a.indexOf(b);if(5==c||6==c)if(a=a.charAt(c+b.length),"/"==a||"?"==a||""==a||":"==a)return!0;return!1},ya=function(a,b){var c=M.referrer;if(/^(https?|android-app):\/\//i.test(c)){if(a)return c;a="//"+M.location.hostname;if(!de(c,a))return b&&(b=a.replace(/\./g,"-")+".cdn.ampproject.org",de(c,b))?void 0: + c}},za=function(a,b){if(1==b.length&&null!=b[0]&&"object"===typeof b[0])return b[0];for(var c={},d=Math.min(a.length+1,b.length),e=0;e=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, ++ c.indexOf("xn--")){c="";break b}(c=c.match(/(.*)\.cdn\.ampproject\.org\/?$/))&&2==c.length&&(d=c[1].replace(/-/g,".").replace(/\.\./g,"-"))}c=d?d.replace(Ue,""):""}(d=b===c)||(c="."+c,d=b.substring(b.length-c.length,b.length)===c);if(d){b=!0;break a}else J(78)}b=!1}return b&&!1!==a};var bd=function(a){return(a?"https:":Ba||"https:"==M.location.protocol?"https:":"http:")+"//www.9oo91e-analytics.qjz9zk"},Da=function(a){this.name="len";this.message=a+"-8192"},ba=function(a,b,c){c=c||ua;if(2036>=b.length)wc(a,b,c);else if(8192>=b.length)x(a,b,c)||wd(a,b,c)||wc(a,b,c);else throw ge("len",b.length),new Da(b.length);},pe=function(a,b,c,d){d=d||ua;wd(a+"?"+b,"",d,c)},wc=function(a,b,c){var d=ta(a+"?"+b);d.onload=d.onerror=function(){d.onload=null;d.onerror=null;c()}},wd=function(a,b,c, + d){var e=O.XMLHttpRequest;if(!e)return!1;var g=new e;if(!("withCredentials"in g))return!1;a=a.replace(/^http:/,"https:");g.open("POST",a,!0);g.withCredentials=!0;g.setRequestHeader("Content-Type","text/plain");g.onreadystatechange=function(){if(4==g.readyState){if(d)try{var ca=g.responseText;if(1>ca.length)ge("xhr","ver","0"),c();else if("1"!=ca.charAt(0))ge("xhr","ver",String(ca.length)),c();else if(3=100*R(a,Ka))throw"abort";}function Ma(a){if(G(P(a,Na)))throw"abort";}function Oa(){var a=M.location.protocol;if("http:"!=a&&"https:"!=a)throw"abort";} + function Pa(a){try{O.navigator.sendBeacon?J(42):O.XMLHttpRequest&&"withCredentials"in new O.XMLHttpRequest&&J(40)}catch(c){}a.set(ld,Td(a),!0);a.set(Ac,R(a,Ac)+1);var b=[];ue.map(function(c,d){d.F&&(c=a.get(c),void 0!=c&&c!=d.defaultValue&&("boolean"==typeof c&&(c*=1),b.push(d.F+"="+K(""+c))))});!1===a.get(xe)&&b.push("npa=1");b.push("z="+Bd());a.set(Ra,b.join("&"),!0)} + function Sa(a){var b=P(a,fa);!b&&a.get(Vd)&&(b="beacon");var c=P(a,gd),d=P(a,oe),e=c||(d?d+"/3":bd(!1)+"/collect");switch(P(a,ad)){case "d":e=c||(d?d+"/32":bd(!1)+"/j/collect");b=a.get(qe)||void 0;pe(e,P(a,Ra),b,a.Z(Ia));break;case "b":e=c||(d?d+"/31":bd(!1)+"/r/collect");default:b?(c=P(a,Ra),d=(d=a.Z(Ia))||ua,"image"==b?wc(e,c,d):"xhr"==b&&wd(e,c,d)||"beacon"==b&&x(e,c,d)||ba(e,c,d)):ba(e,P(a,Ra),a.Z(Ia))}e=P(a,Na);e=h(e);b=e.hitcount;e.hitcount=b?b+1:1;e=P(a,Na);delete h(e).pending_experiments; +@@ -61,9 +61,9 @@ + a[c].split("="),e=d[1];d=d[0];for(var g=b.childNodes||[],ca=!1,l=0;l\x3c/script>')):(e=M.createElement("script"),e.type="text/javascript",e.async=!0,e.src=ca,a&&e.setAttribute("nonce",a),ca=M.getElementsByTagName("script")[0],ca.parentNode.insertBefore(e,ca));$d.set(b,!0)}}}},v=function(a,b){var c=A.get(a)|| +- [];c.push(b);A.set(a,c)},C=function(a,b){Yd.set(a,b);b=A.get(a)||[];for(var c=0;ca.split("/")[0].indexOf(":")&&(a=ca+e[2].substring(0,e[2].lastIndexOf("/"))+"/"+a);c.href=a; + d=b(c);return{protocol:(c.protocol||"").toLowerCase(),host:d[0],port:d[1],path:d[2],query:c.search||"",url:a||""}};var Z={ga:function(){Z.f=[]}};Z.ga();Z.D=function(a){var b=Z.J.apply(Z,arguments);b=Z.f.concat(b);for(Z.f=[];0 + +- Link detected. $1www.google.com ++ Link detected. $1www.9oo91e.qjz9zk + + + Text detected. +diff --git a/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html b/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html +index a974ccce55a70..744e4ab39844e 100644 +--- a/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html ++++ b/ash/webui/common/resources/quick_unlock/pin_keyboard_icons.html +@@ -3,7 +3,7 @@ + + + + +diff --git a/ash/webui/diagnostics_ui/diagnostics_ui.cc b/ash/webui/diagnostics_ui/diagnostics_ui.cc +index e63e6cd15f21c..4e88ef2b0c349 100644 +--- a/ash/webui/diagnostics_ui/diagnostics_ui.cc ++++ b/ash/webui/diagnostics_ui/diagnostics_ui.cc +@@ -103,7 +103,7 @@ base::Value::Dict GetDataSourceUpdate() { + "keyboardTesterHelpLink", + GetLinkLabel( + IDS_INPUT_DIAGNOSTICS_KEYBOARD_TESTER_HELP_LINK, +- "https://support.google.com/chromebook?p=keyboard_troubleshoot")); ++ "https://support.9oo91e.qjz9zk/chromebook?p=keyboard_troubleshoot")); + return update; + } + +diff --git a/ash/webui/eche_app_ui/eche_alert_generator.cc b/ash/webui/eche_app_ui/eche_alert_generator.cc +index a818f5f62670c..333ce1a55bbae 100644 +--- a/ash/webui/eche_app_ui/eche_alert_generator.cc ++++ b/ash/webui/eche_app_ui/eche_alert_generator.cc +@@ -35,7 +35,7 @@ const char kEcheAppNetworkSettingNotifierId[] = + + // TODO(crbug.com/1241352): This should probably have a ?p= at + // some point. +-const char kEcheAppLearnMoreUrl[] = "https://support.google.com/chromebook"; ++const char kEcheAppLearnMoreUrl[] = "https://support.9oo91e.qjz9zk/chromebook"; + + EcheAlertGenerator::EcheAlertGenerator(LaunchAppHelper* launch_app_helper, + PrefService* pref_service) +diff --git a/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc b/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc +index b489f101370be..d6a6ca6e94c76 100644 +--- a/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc ++++ b/ash/webui/help_app_ui/help_app_kids_magazine_untrusted_ui.cc +@@ -55,7 +55,7 @@ void CreateAndAddHelpAppKidsMagazineUntrustedDataSource( + network::mojom::CSPDirectiveName::DefaultSrc, ""); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ScriptSrc, +- "script-src 'self' https://www.gstatic.com;"); ++ "script-src 'self' https://www.95tat1c.qjz9zk;"); + } + + } // namespace +diff --git a/ash/webui/media_app_ui/media_app_guest_ui.cc b/ash/webui/media_app_ui/media_app_guest_ui.cc +index 167ebb8c80464..67cf1661b9d1b 100644 +--- a/ash/webui/media_app_ui/media_app_guest_ui.cc ++++ b/ash/webui/media_app_ui/media_app_guest_ui.cc +@@ -166,7 +166,7 @@ content::WebUIDataSource* CreateAndAddMediaAppUntrustedDataSource( + // Allow calls to Maps reverse geocoding API for loading metadata. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- "connect-src 'self' https://maps.googleapis.com/maps/api/geocode/json;"); ++ "connect-src 'self' https://maps.9oo91eapis.qjz9zk/maps/api/geocode/json;"); + + // Allow use of SharedArrayBuffer (required by the wasm). + source->OverrideCrossOriginOpenerPolicy("same-origin"); +diff --git a/ash/webui/os_feedback_ui/backend/help_content_provider.cc b/ash/webui/os_feedback_ui/backend/help_content_provider.cc +index c09dad66b613b..863344afe2d64 100644 +--- a/ash/webui/os_feedback_ui/backend/help_content_provider.cc ++++ b/ash/webui/os_feedback_ui/backend/help_content_provider.cc +@@ -40,9 +40,9 @@ using ::ash::os_feedback_ui::mojom::SearchResponse; + using ::ash::os_feedback_ui::mojom::SearchResponsePtr; + + constexpr char kHelpContentProviderUrl[] = +- "https://scone-pa.clients6.google.com/v1/search/list?key="; ++ "https://scone-pa.clients6.9oo91e.qjz9zk/v1/search/list?key="; + +-constexpr char kGoogleSupportSiteUrl[] = "https://support.google.com"; ++constexpr char kGoogleSupportSiteUrl[] = "https://support.9oo91e.qjz9zk"; + + // We need to drop items in different languages from the device language. + // Therefore, we request more items in search request in order to return +diff --git a/ash/webui/os_feedback_ui/resources/confirmation_page.js b/ash/webui/os_feedback_ui/resources/confirmation_page.js +index e9420a8d6b05f..0047b00863600 100644 +--- a/ash/webui/os_feedback_ui/resources/confirmation_page.js ++++ b/ash/webui/os_feedback_ui/resources/confirmation_page.js +@@ -148,7 +148,7 @@ export class ConfirmationPageElement extends ConfirmationPageElementBase { + case 'chromebookCommunity': + // If app locale is not available, default to en. + window.open( +- `https://support.google.com/chromebook/?hl=${ ++ `https://support.9oo91e.qjz9zk/chromebook/?hl=${ + this.i18n('language') || 'en'}#topic=3399709`, + '_blank'); + this.handleEmitMetrics_( +diff --git a/ash/webui/os_feedback_ui/resources/fake_data.js b/ash/webui/os_feedback_ui/resources/fake_data.js +index 64976df1e9a82..3c8f46325d64c 100644 +--- a/ash/webui/os_feedback_ui/resources/fake_data.js ++++ b/ash/webui/os_feedback_ui/resources/fake_data.js +@@ -14,12 +14,12 @@ import {FeedbackContext, HelpContentList, HelpContentType, SearchRequest, Search + export const fakePopularHelpContentList = [ + { + title: stringToMojoString16('fake article'), +- url: {url: 'https://support.google.com/chromebook/?q=article'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=article'}, + contentType: HelpContentType.kArticle, + }, + { + title: stringToMojoString16('fake forum'), +- url: {url: 'https://support.google.com/chromebook/?q=forum'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=forum'}, + contentType: HelpContentType.kForum, + }, + ]; +@@ -28,29 +28,29 @@ export const fakePopularHelpContentList = [ + export const fakeHelpContentList = [ + { + title: stringToMojoString16('Fix connection problems'), +- url: {url: 'https://support.google.com/chromebook/?q=6318213'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=6318213'}, + contentType: HelpContentType.kArticle, + }, + { + title: stringToMojoString16( + 'Why won\'t my wireless mouse with a USB piece wor...?'), +- url: {url: 'https://support.google.com/chromebook/?q=123920509'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=123920509'}, + contentType: HelpContentType.kForum, + }, + { + title: stringToMojoString16('Wifi Issues - only on Chromebooks'), +- url: {url: 'https://support.google.com/chromebook/?q=114174470'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=114174470'}, + contentType: HelpContentType.kForum, + }, + { + title: stringToMojoString16('Network Connectivity Fault'), +- url: {url: 'https://support.google.com/chromebook/?q=131459420'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=131459420'}, + contentType: HelpContentType.kForum, + }, + { + title: stringToMojoString16( + 'Connected to WiFi but can\'t connect to the internet'), +- url: {url: 'https://support.google.com/chromebook/?q=22864239'}, ++ url: {url: 'https://support.9oo91e.qjz9zk/chromebook/?q=22864239'}, + contentType: HelpContentType.kUnknown, + }, + ]; +@@ -106,7 +106,7 @@ export const fakeEmptyFeedbackContext = { + + /** @type {!FeedbackContext} */ + export const fakeInternalUserFeedbackContext = { +- email: 'test.user@google.com', ++ email: 'test.user@9oo91e.qjz9zk', + pageUrl: {url: 'chrome://tab/'}, + isInternalAccount: true, + fromAssistant: true, +@@ -120,7 +120,7 @@ export const fakeInternalUserFeedbackContext = { + + /** @type {!FeedbackContext} */ + export const fakeFeedbackContextWithoutLinkedCrossDevicePhone = { +- email: 'test.user@google.com', ++ email: 'test.user@9oo91e.qjz9zk', + pageUrl: {url: 'chrome://tab/'}, + isInternalAccount: true, + fromAssistant: true, +diff --git a/ash/webui/os_feedback_ui/resources/feedback_constants.js b/ash/webui/os_feedback_ui/resources/feedback_constants.js +index 8abef6f864a22..ba4f622d24b74 100644 +--- a/ash/webui/os_feedback_ui/resources/feedback_constants.js ++++ b/ash/webui/os_feedback_ui/resources/feedback_constants.js +@@ -3,8 +3,8 @@ + // found in the LICENSE file. + + export const FEEDBACK_LEGAL_HELP_URL = +- 'https://support.google.com/legal/answer/3110420'; ++ 'https://support.9oo91e.qjz9zk/legal/answer/3110420'; + export const FEEDBACK_PRIVACY_POLICY_URL = +- 'https://policies.google.com/privacy'; ++ 'https://policies.9oo91e.qjz9zk/privacy'; + export const FEEDBACK_TERMS_OF_SERVICE_URL = +- 'https://policies.google.com/terms'; ++ 'https://policies.9oo91e.qjz9zk/terms'; +diff --git a/ash/webui/os_feedback_ui/resources/search_page.js b/ash/webui/os_feedback_ui/resources/search_page.js +index df6ec4c573318..13ae7bb8a7e23 100644 +--- a/ash/webui/os_feedback_ui/resources/search_page.js ++++ b/ash/webui/os_feedback_ui/resources/search_page.js +@@ -445,7 +445,7 @@ export class SearchPageElement extends SearchPageElementBase { + */ + feedbackWritingGuidanceUrl_() { + // TODO(xiangdongkong): append ?hl={the application locale} to the url. +- const url = 'https://support.google.com/chromebook/answer/2982029'; ++ const url = 'https://support.9oo91e.qjz9zk/chromebook/answer/2982029'; + return url; + } + +diff --git a/ash/webui/personalization_app/personalization_app_ui.cc b/ash/webui/personalization_app/personalization_app_ui.cc +index feab03702eb12..823997a6cc78a 100644 +--- a/ash/webui/personalization_app/personalization_app_ui.cc ++++ b/ash/webui/personalization_app/personalization_app_ui.cc +@@ -46,7 +46,7 @@ namespace ash::personalization_app { + namespace { + + std::u16string GetGooglePhotosURL() { +- return u"https://photos.google.com"; ++ return u"https://photos.9oo91e.qjz9zk"; + } + + bool IsAmbientModeAllowed() { +diff --git a/ash/webui/projector_app/projector_xhr_sender.cc b/ash/webui/projector_app/projector_xhr_sender.cc +index 0cc13882f337a..72256e2fff350 100644 +--- a/ash/webui/projector_app/projector_xhr_sender.cc ++++ b/ash/webui/projector_app/projector_xhr_sender.cc +@@ -97,13 +97,13 @@ constexpr char kApiKeyParam[] = "key"; + + // List of URL prefix supported by `ProjectorXhrSender`. + const char* kUrlAllowlist[] = { +- "https://www.googleapis.com/drive/v3/files/", +- "https://www.googleapis.com/upload/drive/v3/files/", ++ "https://www.9oo91eapis.qjz9zk/drive/v3/files/", ++ "https://www.9oo91eapis.qjz9zk/upload/drive/v3/files/", + // TODO(b/229792620): Remove this URL prefix once web component is updated + // with the base URL that force using primary account credential. +- "https://drive.google.com/get_video_info", +- "https://drive.google.com/u/0/get_video_info", +- "https://translation.googleapis.com/language/translate/v2"}; ++ "https://drive.9oo91e.qjz9zk/get_video_info", ++ "https://drive.9oo91e.qjz9zk/u/0/get_video_info", ++ "https://translation.9oo91eapis.qjz9zk/language/translate/v2"}; + + // Return true if the url matches the allowed URL prefix. + bool IsUrlAllowlisted(const std::string& url) { +diff --git a/ash/webui/projector_app/projector_xhr_sender.h b/ash/webui/projector_app/projector_xhr_sender.h +index 369741a930337..40cc883aa61c0 100644 +--- a/ash/webui/projector_app/projector_xhr_sender.h ++++ b/ash/webui/projector_app/projector_xhr_sender.h +@@ -30,7 +30,7 @@ class URLLoaderFactory; + + namespace ash { + +-constexpr char kDriveV3BaseUrl[] = "https://www.googleapis.com/drive/v3/files/"; ++constexpr char kDriveV3BaseUrl[] = "https://www.9oo91eapis.qjz9zk/drive/v3/files/"; + + /** + * Projector XHR sender. Used by Projector App to send XHR requests. +diff --git a/ash/webui/projector_app/untrusted_projector_ui.cc b/ash/webui/projector_app/untrusted_projector_ui.cc +index 4c3d02c3540ed..cfbe3d3d993dc 100644 +--- a/ash/webui/projector_app/untrusted_projector_ui.cc ++++ b/ash/webui/projector_app/untrusted_projector_ui.cc +@@ -54,13 +54,13 @@ void CreateAndAddProjectorHTMLSource(content::WebUI* web_ui, + // Allow fonts. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::FontSrc, +- "font-src https://fonts.gstatic.com;"); ++ "font-src https://fonts.95tat1c.qjz9zk;"); + // Allow styles to include inline styling needed for Polymer elements. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::StyleSrc, +- "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;"); ++ "style-src 'self' 'unsafe-inline' https://f0ntz.9oo91e8p1.qjz9zk;"); + std::string mediaCSP = +- std::string("media-src 'self' https://*.drive.google.com ") + ++ std::string("media-src 'self' https://*.drive.9oo91e.qjz9zk ") + + kChromeUIUntrustedProjectorPwaUrl + " blob:;"; + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::MediaSrc, +@@ -69,11 +69,11 @@ void CreateAndAddProjectorHTMLSource(content::WebUI* web_ui, + // Allow images to also handle data urls. + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ImgSrc, +- "img-src blob: data: 'self' https://*.googleusercontent.com;"); ++ "img-src blob: data: 'self' https://*.9oo91eusercontent.qjz9zk;"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::ConnectSrc, +- "connect-src 'self' https://www.googleapis.com " +- "https://drive.google.com;"); ++ "connect-src 'self' https://www.9oo91eapis.qjz9zk " ++ "https://drive.9oo91e.qjz9zk;"); + + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, +diff --git a/ash/webui/scanning/resources/scanning_app.html b/ash/webui/scanning/resources/scanning_app.html +index d1cc3a00fd5d1..09c9c3fc334fa 100644 +--- a/ash/webui/scanning/resources/scanning_app.html ++++ b/ash/webui/scanning/resources/scanning_app.html +@@ -279,7 +279,7 @@ + [[i18n(toastMessageKey_)]] +

+diff --git a/ash/webui/scanning/resources/scanning_app.js b/ash/webui/scanning/resources/scanning_app.js +index 77ef945b0228a..d27cd34074509 100644 +--- a/ash/webui/scanning/resources/scanning_app.js ++++ b/ash/webui/scanning/resources/scanning_app.js +@@ -44,7 +44,7 @@ import {ScanningBrowserProxy, ScanningBrowserProxyImpl, SelectedPath} from './sc + * URL for the Scanning help page. + * @const {string} + */ +-const HELP_PAGE_LINK = 'http://support.google.com/chromebook?p=chrome_scanning'; ++const HELP_PAGE_LINK = 'http://support.9oo91e.qjz9zk/chromebook?p=chrome_scanning'; + + /** + * @fileoverview +diff --git a/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js b/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js +index 5d15113f3a591..2b3e42784eaeb 100644 +--- a/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js ++++ b/ash/webui/shimless_rma/resources/onboarding_enter_rsu_wp_disable_code_page.js +@@ -231,7 +231,7 @@ export class OnboardingEnterRsuWpDisableCodePage extends + */ + computeRsuChallengeLinkText_() { + const unlockPageUrl = +- 'https://chromeos.google.com/partner/console/cr50reset?challenge='; ++ 'https://chromeos.9oo91e.qjz9zk/partner/console/cr50reset?challenge='; + return unlockPageUrl + this.rsuChallenge_ + '&hwid=' + this.rsuHwid_; + } + +diff --git a/base/android/resource_exclusions.gni b/base/android/resource_exclusions.gni +index c626b90991d60..5ea9644430f32 100644 +--- a/base/android/resource_exclusions.gni ++++ b/base/android/resource_exclusions.gni +@@ -16,7 +16,7 @@ common_resource_exclusion_exceptions = [ + common_resource_exclusion_regex += "|-watch\b" + + # As of May 2020, 0.2% of devices are ldpi: +-# https://developer.android.com/about/dashboards/index.html ++# https://developer.8n6r01d.qjz9zk/about/dashboards/index.html + # Only a single resources is defined in this config: + # ic_arrow_down_24dp + # It saves XXkb to omit the config. +diff --git a/base/debug/debugger_posix.cc b/base/debug/debugger_posix.cc +index 6ac840b89fb88..6d74f86dc9a1f 100644 +--- a/base/debug/debugger_posix.cc ++++ b/base/debug/debugger_posix.cc +@@ -135,7 +135,7 @@ void VerifyDebugger() { + << "Detected lldb without sourcing //tools/lldb/lldbinit.py. lldb may " + "not be able to find debug symbols. Please see debug instructions for " + "using //tools/lldb/lldbinit.py:\n" +- "https://chromium.googlesource.com/chromium/src/+/main/docs/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/" + "lldbinit.md\n" + "To continue anyway, type 'continue' in lldb. To always skip this " + "check, define an environment variable CHROMIUM_LLDBINIT_SOURCED=1"; +@@ -218,7 +218,7 @@ void VerifyDebugger() { + << "Detected gdb without sourcing //tools/gdb/gdbinit. gdb may not be " + "able to find debug symbols, and pretty-printing of STL types may not " + "work. Please see debug instructions for using //tools/gdb/gdbinit:\n" +- "https://chromium.googlesource.com/chromium/src/+/main/docs/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/" + "gdbinit.md\n" + "To continue anyway, type 'continue' in gdb. To always skip this " + "check, define an environment variable CHROMIUM_GDBINIT_SOURCED=1"; +@@ -266,7 +266,7 @@ void VerifyDebugger() {} + #elif BUILDFLAG(IS_NACL) + // The NaCl verifier doesn't let use use int3. For now, we call abort(). We + // should ask for advice from some NaCl experts about the optimum thing here. +-// http://code.google.com/p/nativeclient/issues/detail?id=645 ++// http://code.9oo91e.qjz9zk/p/nativeclient/issues/detail?id=645 + #define DEBUG_BREAK() abort() + #elif !BUILDFLAG(IS_APPLE) + // Though Android has a "helpful" process called debuggerd to catch native +diff --git a/base/debug/stack_trace_posix.cc b/base/debug/stack_trace_posix.cc +index ad958c34da601..2aa4e647e91c4 100644 +--- a/base/debug/stack_trace_posix.cc ++++ b/base/debug/stack_trace_posix.cc +@@ -439,7 +439,7 @@ void StackDumpSignalHandler(int signal, siginfo_t* info, void* void_context) { + "CFI: Most likely a control flow integrity violation; for more " + "information see:\n"); + PrintToStderr( +- "https://www.chromium.org/developers/testing/control-flow-integrity\n"); ++ "https://www.ch40m1um.qjz9zk/developers/testing/control-flow-integrity\n"); + } + #endif // BUILDFLAG(CFI_ENFORCEMENT_TRAP) + +diff --git a/base/functional/callback.h b/base/functional/callback.h +index 773662ed3be73..0ca2acf77bc7b 100644 +--- a/base/functional/callback.h ++++ b/base/functional/callback.h +@@ -244,7 +244,7 @@ class TRIVIAL_ABI OnceCallback { + static_assert( + AlwaysFalse, + "need to convert a base::OnceCallback to base::FunctionRef? " +- "Please bring up this use case on #cxx (Slack) or cxx@chromium.org."); ++ "Please bring up this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + + template +@@ -254,7 +254,7 @@ class TRIVIAL_ABI OnceCallback { + AlwaysFalse, + "using base::BindOnce() is not necessary with base::FunctionRef; is it " + "possible to use a capturing lambda directly? If not, please bring up " +- "this use case on #cxx (Slack) or cxx@chromium.org."); ++ "this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + + private: +@@ -443,7 +443,7 @@ class TRIVIAL_ABI RepeatingCallback { + static_assert( + AlwaysFalse, + "need to convert a base::RepeatingCallback to base::FunctionRef? " +- "Please bring up this use case on #cxx (Slack) or cxx@chromium.org."); ++ "Please bring up this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + + template +@@ -453,7 +453,7 @@ class TRIVIAL_ABI RepeatingCallback { + AlwaysFalse, + "using base::BindRepeating() is not necessary with base::FunctionRef; " + "is it possible to use a capturing lambda directly? If not, please " +- "bring up this use case on #cxx (Slack) or cxx@chromium.org."); ++ "bring up this use case on #cxx (Slack) or cxx@ch40m1um.qjz9zk."); + } + + private: +diff --git a/base/ios/device_util.mm b/base/ios/device_util.mm +index 448a2e0a79bbf..c3b81cf665893 100644 +--- a/base/ios/device_util.mm ++++ b/base/ios/device_util.mm +@@ -42,7 +42,7 @@ NSString* GenerateClientId() { + NSString* client_id = [defaults stringForKey:kLegacyClientIdPreferenceKey]; + + // Some iOS6 devices return a buggy identifierForVendor: +- // https://openradar.appspot.com/12377282. If this is the case, revert to ++ // https://openradar.8pp2p8t.qjz9zk/12377282. If this is the case, revert to + // generating a new one. + if (!client_id || [client_id isEqualToString:kZeroUUID]) { + client_id = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; +diff --git a/base/memory/raw_ptr_asan_service.cc b/base/memory/raw_ptr_asan_service.cc +index 194c9c6be43c8..1995953f0226d 100644 +--- a/base/memory/raw_ptr_asan_service.cc ++++ b/base/memory/raw_ptr_asan_service.cc +@@ -278,7 +278,7 @@ void RawPtrAsanService::ErrorReportCallback(const char* report, bool*) { + debug::AsanService::GetInstance()->Log( + "\nMiraclePtr Status: %s\n%s\n%s\n" + "Refer to " +- "https://chromium.googlesource.com/chromium/src/+/main/base/memory/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/base/memory/" + "raw_ptr.md for details.", + ProtectionStatusToString(crash_info.protection_status), + crash_info.crash_details, crash_info.protection_details); +@@ -343,7 +343,7 @@ void RawPtrAsanService::WarnOnDanglingExtraction( + "Otherwise, it is still likely a bug to rely on the address of an " + "already freed allocation.\n" + "Refer to " +- "https://chromium.googlesource.com/chromium/src/+/main/base/memory/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/base/memory/" + "raw_ptr.md for details."); + } + +@@ -356,7 +356,7 @@ void RawPtrAsanService::CrashOnDanglingInstantiation( + "Note that this report might be a false positive if at the moment of the " + "crash another raw_ptr is guaranteed to keep the allocation alive.\n" + "Refer to " +- "https://chromium.googlesource.com/chromium/src/+/main/base/memory/" ++ "https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/base/memory/" + "raw_ptr.md for details."); + base::ImmediateCrash(); + } +diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py +index f6dce230f4609..d66f20ac05f26 100755 +--- a/build/android/gradle/generate_gradle.py ++++ b/build/android/gradle/generate_gradle.py +@@ -934,7 +934,7 @@ def main(): + print('** Building using Android Studio / Gradle does not work.') + print('** This project is only for IDE editing & tools.') + print('Note: Generated files will appear only if they have been built') +- print('For more tips: https://chromium.googlesource.com/chromium/src.git/' ++ print('For more tips: https://chromium.9oo91esource.qjz9zk/chromium/src.git/' + '+/main/docs/android_studio.md') + + +diff --git a/build/android/gyp/assert_static_initializers.py b/build/android/gyp/assert_static_initializers.py +index fd0bb02ac80bf..9cbdde5aebd01 100755 +--- a/build/android/gyp/assert_static_initializers.py ++++ b/build/android/gyp/assert_static_initializers.py +@@ -157,7 +157,7 @@ def main(): + ignored_libs, no_initializers_libs) + print() + print('For more information:') +- print(' https://chromium.googlesource.com/chromium/src/+/main/docs/' ++ print(' https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/' + 'static_initializers.md') + sys.exit(1) + +diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py +index 958920233555f..8e5ddc9ac9fc4 100755 +--- a/build/android/gyp/lint.py ++++ b/build/android/gyp/lint.py +@@ -19,7 +19,7 @@ from util import manifest_utils + from util import server_utils + import action_helpers # build_utils adds //build to sys.path. + +-_LINT_MD_URL = 'https://chromium.googlesource.com/chromium/src/+/main/build/android/docs/lint.md' # pylint: disable=line-too-long ++_LINT_MD_URL = 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/build/android/docs/lint.md' # pylint: disable=line-too-long + + # These checks are not useful for chromium. + _DISABLED_ALWAYS = [ +diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py +index 727b7ae8e86c1..46bb06901e8de 100755 +--- a/build/android/gyp/proguard.py ++++ b/build/android/gyp/proguard.py +@@ -514,7 +514,7 @@ out/Release/apks/YourApk.apk > dex.txt + stderr += """ + You may need to update build configs to run FragmentActivityReplacer for + additional targets. See +-https://chromium.googlesource.com/chromium/src.git/+/main/docs/ui/android/bytecode_rewriting.md. ++https://chromium.9oo91esource.qjz9zk/chromium/src.git/+/main/docs/ui/android/bytecode_rewriting.md. + """ + elif had_unfiltered_items: + # Left only with empty headings. All indented items filtered out. +diff --git a/build/android/gyp/util/diff_utils.py b/build/android/gyp/util/diff_utils.py +index 445bbe3d21be6..45fa32813ad67 100644 +--- a/build/android/gyp/util/diff_utils.py ++++ b/build/android/gyp/util/diff_utils.py +@@ -109,10 +109,10 @@ def CheckExpectations(actual_data, options, custom_msg=''): + else: + fail_msg = """ + Expectations need updating: +-https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/android/expectations/README.md ++https://chromium.9oo91esource.qjz9zk/chromium/src/+/HEAD/chrome/android/expectations/README.md + + LogDog tip: Use "Raw log" or "Switch to lite mode" before copying: +-https://bugs.chromium.org/p/chromium/issues/detail?id=984616 ++https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=984616 + + {} + +diff --git a/build/android/gyp/util/protoresources.py b/build/android/gyp/util/protoresources.py +index 11f8778066123..5512e5ec18123 100644 +--- a/build/android/gyp/util/protoresources.py ++++ b/build/android/gyp/util/protoresources.py +@@ -4,7 +4,7 @@ + """Functions that modify resources in protobuf format. + + Format reference: +-https://cs.android.com/search?q=f:aapt2.*Resources.proto ++https://cs.8n6r01d.qjz9zk/search?q=f:aapt2.*Resources.proto + """ + + import logging +@@ -267,7 +267,7 @@ class _ResourceStripper: + + + def _TableFromFlatBytes(data): +- # https://cs.android.com/search?q=f:aapt2.*Container.cpp ++ # https://cs.8n6r01d.qjz9zk/search?q=f:aapt2.*Container.cpp + size_idx = len(_FLAT_ARSC_HEADER) + proto_idx = size_idx + 8 + if data[:size_idx] != _FLAT_ARSC_HEADER: +diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py +index ab34350614187..6c1e9b694226f 100755 +--- a/build/android/resource_sizes.py ++++ b/build/android/resource_sizes.py +@@ -147,7 +147,7 @@ def _ReadZipInfoExtraFieldLength(zip_file, zip_info): + def _MeasureApkSignatureBlock(zip_file): + """Measures the size of the v2 / v3 signing block. + +- Refer to: https://source.android.com/security/apksigning/v2 ++ Refer to: https://source.8n6r01d.qjz9zk/security/apksigning/v2 + """ + # Seek to "end of central directory" struct. + eocd_offset_from_end = -22 - len(zip_file.comment) +@@ -270,7 +270,7 @@ def _NormalizeResourcesArsc(apk_path, num_arsc_files, num_translations, + if string_val == fr_strings[res_id]: + string_size = len(string_val) + # 7 bytes is the per-entry overhead (not specific to any string). See +- # https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/tools/aapt/StringPool.cpp#414. ++ # https://android.9oo91esource.qjz9zk/platform/frameworks/base.git/+/android-4.2.2_r1/tools/aapt/StringPool.cpp#414. + # The 1.5 factor was determined experimentally and is meant to account for + # other languages generally having longer strings than english. + size += config_count * (7 + string_size * 1.5) +diff --git a/build/android/test_wrapper/logdog_wrapper.py b/build/android/test_wrapper/logdog_wrapper.py +index 28b11e3f61171..e46b8f6d47f39 100755 +--- a/build/android/test_wrapper/logdog_wrapper.py ++++ b/build/android/test_wrapper/logdog_wrapper.py +@@ -25,7 +25,7 @@ from devil.utils import timeout_retry + from py_utils import tempfile_ext + + OUTPUT = 'logdog' +-COORDINATOR_HOST = 'luci-logdog.appspot.com' ++COORDINATOR_HOST = 'luci-logdog.8pp2p8t.qjz9zk' + LOGDOG_TERMINATION_TIMEOUT = 30 + + +diff --git a/build/apple/tweak_info_plist.py b/build/apple/tweak_info_plist.py +index 8aa28b0021081..2be3f48c3609d 100755 +--- a/build/apple/tweak_info_plist.py ++++ b/build/apple/tweak_info_plist.py +@@ -155,9 +155,9 @@ def _AddBreakpadKeys(plist, branding, platform, staging): + plist['BreakpadProduct'] = '%s_%s' % (branding, platform) + plist['BreakpadProductDisplay'] = branding + if staging: +- plist['BreakpadURL'] = 'https://clients2.google.com/cr/staging_report' ++ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/staging_report' + else: +- plist['BreakpadURL'] = 'https://clients2.google.com/cr/report' ++ plist['BreakpadURL'] = 'https://clients2.9oo91e.qjz9zk/cr/report' + + # These are both deliberately strings and not boolean. + plist['BreakpadSendAndExit'] = 'YES' +@@ -194,7 +194,7 @@ def _AddKeystoneKeys(plist, bundle_identifier, base_tag): + also requires the |bundle_identifier| argument (com.example.product).""" + plist['KSVersion'] = plist['CFBundleShortVersionString'] + plist['KSProductID'] = bundle_identifier +- plist['KSUpdateURL'] = 'https://tools.google.com/service/update2' ++ plist['KSUpdateURL'] = 'https://tools.9oo91e.qjz9zk/service/update2' + + _RemoveKeys(plist, 'KSChannelID') + if base_tag != '': +diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni +index aaa84107ad555..bfb68c317b817 100644 +--- a/build/config/android/rules.gni ++++ b/build/config/android/rules.gni +@@ -1833,7 +1833,7 @@ if (enable_java_templates && is_android) { + # * public.txt + # * annotations.zip + # * assets/ +- # See: https://developer.android.com/studio/projects/android-library.html#aar-contents ++ # See: https://developer.8n6r01d.qjz9zk/studio/projects/android-library.html#aar-contents + # + # Variables: + # output: Path to the output .aar. +diff --git a/build/config/chrome_build.gni b/build/config/chrome_build.gni +index b5156d5c677a4..63d66ce4cb658 100644 +--- a/build/config/chrome_build.gni ++++ b/build/config/chrome_build.gni +@@ -11,7 +11,7 @@ declare_args() { + # Whether to enable the Chrome for Testing (CfT) flavor. This arg is not + # compatible with `is_chrome_branded`. + # +- # Design document: https://goo.gle/chrome-for-testing ++ # Design document: https://goo.gle.qjz9zk/chrome-for-testing + is_chrome_for_testing = false + + # Whether to use internal Chrome for Testing (CfT). +diff --git a/build/config/chromeos/args.gni b/build/config/chromeos/args.gni +index 8fb50537461d2..b831f3f7aca42 100644 +--- a/build/config/chromeos/args.gni ++++ b/build/config/chromeos/args.gni +@@ -21,8 +21,8 @@ declare_args() { + # linux-chromeos, so some have compile-time asserts that intentionally fail + # when this build flag is set. Build and run the tests for linux-chromeos + # instead. +- # https://chromium.googlesource.com/chromium/src/+/main/docs/chromeos_build_instructions.md +- # https://chromium.googlesource.com/chromiumos/docs/+/main/simple_chrome_workflow.md ++ # https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/chromeos_build_instructions.md ++ # https://chromium.9oo91esource.qjz9zk/chromiumos/docs/+/main/simple_chrome_workflow.md + is_chromeos_device = false + + # Determines if we run the test in skylab, aka the CrOS labs. +diff --git a/build/config/chromeos/rules.gni b/build/config/chromeos/rules.gni +index acd25c60c5708..9c47dd92ff90d 100644 +--- a/build/config/chromeos/rules.gni ++++ b/build/config/chromeos/rules.gni +@@ -255,7 +255,7 @@ template("generate_skylab_deps") { + # tast_vars: A list of "key=value" runtime variable pairs to pass to invoke + # strip_chrome: If true, strips Chrome before deploying it for non-Tast tests. + # the Tast tests. For more details, please see: +-# https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/docs/writing_tests.md#Runtime-variables ++# https://chromium.9oo91esource.qjz9zk/chromiumos/platform/tast/+/HEAD/docs/writing_tests.md#Runtime-variables + template("generate_runner_script") { + forward_variables_from(invoker, + [ +@@ -529,7 +529,7 @@ template("tast_test") { + if (!defined(tast_attr_expr) && !defined(tast_tests)) { + # The following expression filters out all non-critical tests. See the link + # below for more details: +- # https://chromium.googlesource.com/chromiumos/platform/tast/+/main/docs/test_attributes.md ++ # https://chromium.9oo91esource.qjz9zk/chromiumos/platform/tast/+/main/docs/test_attributes.md + tast_attr_expr = "\"group:mainline\" && \"dep:chrome\"" + + if (defined(enable_tast_informational_tests) && +@@ -609,7 +609,7 @@ template("tast_test") { + # use it for testing. To support running lacros tast tests from Chromium CI, + # a Var is added to support pointing the tast tests to use a specified + # pre-deployed lacros-chrome. The location is decided by: +- # https://source.chromium.org/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61 ++ # https://source.ch40m1um.qjz9zk/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61 + tast_vars = [ "lacros.DeployedBinary=/usr/local/lacros-chrome" ] + } + } +@@ -687,7 +687,7 @@ template("lacros_tast_tests") { + # use it for testing. To support running lacros tast tests from Chromium CI, + # a Var is added to support pointing the tast tests to use a specified + # pre-deployed lacros-chrome. The location is decided by: +- # https://source.chromium.org/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61 ++ # https://source.ch40m1um.qjz9zk/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61 + tast_vars = [ "lacros.DeployedBinary=/usr/local/lacros-chrome" ] + + data_deps = _lacros_data_deps +diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni +index 18717014ee50e..9b0595786bbb9 100644 +--- a/build/config/compiler/compiler.gni ++++ b/build/config/compiler/compiler.gni +@@ -132,7 +132,7 @@ declare_args() { + # Technology (CET). If Windows version and hardware supports the feature and + # it's enabled by OS then additional validation of return address will be + # performed as mitigation against Return-oriented programming (ROP). +- # https://chromium.googlesource.com/chromium/src/+/main/docs/design/sandbox.md#cet-shadow-stack ++ # https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/design/sandbox.md#cet-shadow-stack + enable_cet_shadow_stack = target_cpu == "x64" + + # Set to true to enable using the ML inliner in LLVM. This currently only +@@ -160,7 +160,7 @@ declare_args() { + assert( + !use_relative_vtables_abi || !is_cfi, + "is_cfi=true is known to conflict with use_relative_vtables_abi=true.\n" + +- "See https://bugs.chromium.org/p/chromium/issues/detail?id=1375035#c53") ++ "See https://bugs.ch40m1um.qjz9zk/p/chromium/issues/detail?id=1375035#c53") + + assert(!is_cfi || use_thin_lto, "CFI requires ThinLTO") + assert(!enable_profiling || !is_component_build, +@@ -257,7 +257,7 @@ declare_args() { + # results independent of the checkout and build directory names, which + # in turn is important for goma compile hit rate. + # Setting this to true may make it harder to debug binaries on Linux, see +-# https://chromium.googlesource.com/chromium/src/+/main/docs/linux/debugging.md#Source-level-debug-with-fdebug_compilation_dir ++# https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/linux/debugging.md#Source-level-debug-with-fdebug_compilation_dir + # It's not clear if the crash server will correctly handle dSYMs with relative + # paths, so we disable this feature for official benefit. The main benefit is + # deterministic builds to reduce compile times, so this is less relevant for +diff --git a/build/config/locales.gni b/build/config/locales.gni +index ed26f3de9bed0..bf6094e1b87c4 100644 +--- a/build/config/locales.gni ++++ b/build/config/locales.gni +@@ -158,7 +158,7 @@ extended_locales = [ + # Chrome locales not on Android. + # These locales have not yet been tested yet. Specifically, AOSP has not been + # translated to Welsh at the time of writing (April 2022): +-# https://cs.android.com/android/platform/superproject/+/master:build/make/target/product/languages_default.mk ++# https://cs.8n6r01d.qjz9zk/android/platform/superproject/+/master:build/make/target/product/languages_default.mk + # Due to this, the only way a user could see Welsh strings - assuming they were + # built - would be to manually switch their "Chrome language" in Chrome's + # language settings to Welsh, so Welsh usage would probably be very low. +diff --git a/build/config/nacl/rules.gni b/build/config/nacl/rules.gni +index a15d32622c02c..8f07712b271f2 100644 +--- a/build/config/nacl/rules.gni ++++ b/build/config/nacl/rules.gni +@@ -38,7 +38,7 @@ template("generate_nmf") { + } + + # TODO(phosek): Remove this conditional once +- # https://bugs.chromium.org/p/nativeclient/issues/detail?id=4339 is ++ # https://bugs.ch40m1um.qjz9zk/p/nativeclient/issues/detail?id=4339 is + # resolved. + if (current_cpu == "pnacl") { + objdump = rebase_path("${nacl_toolchain_bindir}/x86_64-nacl-objdump") +diff --git a/build/config/ozone.gni b/build/config/ozone.gni +index 8bb512ad634be..1d235a081f58d 100644 +--- a/build/config/ozone.gni ++++ b/build/config/ozone.gni +@@ -27,7 +27,7 @@ declare_args() { + # Enable explicit apitrace (https://apitrace.github.io) loading. + # This requires apitrace library with additional bindings. + # See ChromeOS package for details: +- # https://chromium-review.googlesource.com/c/chromiumos/overlays/chromiumos-overlay/+/2659419 ++ # https://chromium-review.9oo91esource.qjz9zk/c/chromiumos/overlays/chromiumos-overlay/+/2659419 + # Chrome will not start without an apitrace.so library. + # Trace will be saved to /tmp/gltrace.dat file by default. You can + # override it at run time with TRACE_FILE= environment variable. +diff --git a/build/config/sanitizers/sanitizers.gni b/build/config/sanitizers/sanitizers.gni +index 91d82569b3c43..347d20e541aa0 100644 +--- a/build/config/sanitizers/sanitizers.gni ++++ b/build/config/sanitizers/sanitizers.gni +@@ -65,7 +65,7 @@ declare_args() { + use_cfi_recover = false + + # Compile for fuzzing with LLVM LibFuzzer. +- # See http://www.chromium.org/developers/testing/libfuzzer ++ # See http://www.ch40m1um.qjz9zk/developers/testing/libfuzzer + use_libfuzzer = false + + # Compile for fuzzing with centipede. +diff --git a/build/config/win/control_flow_guard.gni b/build/config/win/control_flow_guard.gni +index 176947f7fa67b..d50b261c38799 100644 +--- a/build/config/win/control_flow_guard.gni ++++ b/build/config/win/control_flow_guard.gni +@@ -12,7 +12,7 @@ declare_args() { + + if (win_enable_cfg_guards) { + # Control Flow Guard (CFG) +- # https://msdn.microsoft.com/en-us/library/windows/desktop/mt637065.aspx ++ # https://msdn.m1cr050ft.qjz9zk/en-us/library/windows/desktop/mt637065.aspx + # /DYNAMICBASE (ASLR) is turned off in debug builds, therefore CFG can't be + # turned on either. + # ASan and CFG leads to slow process startup. Chromium's test runner uses +diff --git a/build/fuchsia/binary_size_differ.py b/build/fuchsia/binary_size_differ.py +index 190a1731cfdde..e9800f58b1c59 100755 +--- a/build/fuchsia/binary_size_differ.py ++++ b/build/fuchsia/binary_size_differ.py +@@ -21,7 +21,7 @@ from binary_sizes import PACKAGES_SIZES_FILE + # (solely based on compressed growth). + _FIRST_WARNING_DELTA_BYTES = 12 * 1024 # 12 KiB + _ALWAYS_FAIL_DELTA_BYTES = 100 * 1024 # 100 KiB +-_TRYBOT_DOC = 'https://chromium.googlesource.com/chromium/src/+/main/docs/speed/binary_size/fuchsia_binary_size_trybot.md' ++_TRYBOT_DOC = 'https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/speed/binary_size/fuchsia_binary_size_trybot.md' + + SIZE_FAILURE = 1 + ROLLER_SIZE_WARNING = 2 +diff --git a/build/fuchsia/binary_sizes.py b/build/fuchsia/binary_sizes.py +index b1aa938c4f7d2..aacb033331b11 100755 +--- a/build/fuchsia/binary_sizes.py ++++ b/build/fuchsia/binary_sizes.py +@@ -96,7 +96,7 @@ def CreateTestResults(test_status, timestamp): + """Create test results data to write to JSON test results file. + + The JSON data format is defined in +- https://chromium.googlesource.com/chromium/src/+/main/docs/testing/json_test_results_format.md ++ https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/testing/json_test_results_format.md + """ + + results = { +diff --git a/build/linux/install-chromeos-fonts.py b/build/linux/install-chromeos-fonts.py +index c0634b565d6d2..a42f7baafafa1 100755 +--- a/build/linux/install-chromeos-fonts.py ++++ b/build/linux/install-chromeos-fonts.py +@@ -13,7 +13,7 @@ import shutil + import subprocess + import sys + +-URL_TEMPLATE = ('https://commondatastorage.googleapis.com/chromeos-localmirror/' ++URL_TEMPLATE = ('https://commondatastorage.9oo91eapis.qjz9zk/chromeos-localmirror/' + 'distfiles/%(name)s-%(version)s.tar.bz2') + + # Taken from the media-fonts/ ebuilds in chromiumos-overlay. +diff --git a/build/mac_toolchain.py b/build/mac_toolchain.py +index cd253cd7923bb..cb2ba43fd9fd6 100755 +--- a/build/mac_toolchain.py ++++ b/build/mac_toolchain.py +@@ -93,7 +93,7 @@ def RequestCipdAuthentication(): + print() + print('and follow the instructions.') + print() +- print('NOTE: Use your google.com credentials, not chromium.org.') ++ print('NOTE: Use your 9oo91e.qjz9zk credentials, not ch40m1um.qjz9zk.') + print() + print('-----------------------------------------------------------------') + print() +diff --git a/build/nocompile.gni b/build/nocompile.gni +index 1b0f45533e94c..0e9d1102915a6 100644 +--- a/build/nocompile.gni ++++ b/build/nocompile.gni +@@ -7,7 +7,7 @@ + # a particular construct will not compile. + # + # Also see: +-# http://dev.chromium.org/developers/testing/no-compile-tests ++# http://dev.ch40m1um.qjz9zk/developers/testing/no-compile-tests + # + # To use this, create a gyp target with the following form: + # +diff --git a/build/toolchain/cros_toolchain.gni b/build/toolchain/cros_toolchain.gni +index a2696bd3f4b60..61fdfe660fbd9 100644 +--- a/build/toolchain/cros_toolchain.gni ++++ b/build/toolchain/cros_toolchain.gni +@@ -15,7 +15,7 @@ + # target_os = "chromeos" + # + # To perform a board-specific build, first obtain the correct system +-# root (http://goo.gl/aFB4XH) for the board. Then configure GN to use it ++# root (http://goo.gl.qjz9zk/aFB4XH) for the board. Then configure GN to use it + # by setting appropriate cross-compilation variables. + # + # For example, to compile a Chrome source tree in /g/src for an +diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni +index 20c106694e539..eac5b735d5677 100644 +--- a/build/toolchain/gcc_toolchain.gni ++++ b/build/toolchain/gcc_toolchain.gni +@@ -708,7 +708,7 @@ template("single_gcc_toolchain") { + rustc_wrapper = + rebase_path("//build/rust/rustc_wrapper.py", root_build_dir) + +- # RSP manipulation due to https://bugs.chromium.org/p/gn/issues/detail?id=249 ++ # RSP manipulation due to https://bugs.ch40m1um.qjz9zk/p/gn/issues/detail?id=249 + tool("rust_staticlib") { + libname = "{{output_dir}}/{{target_output_name}}{{output_extension}}" + rspfile = "$libname.rsp" +diff --git a/build/util/lib/common/perf_tests_results_helper.py b/build/util/lib/common/perf_tests_results_helper.py +index 8246e206c0b10..9bb184a14801a 100644 +--- a/build/util/lib/common/perf_tests_results_helper.py ++++ b/build/util/lib/common/perf_tests_results_helper.py +@@ -102,7 +102,7 @@ def PrintPerfResult(measurement, trace, values, units, + The string args may be empty but they must not contain any colons (:) or + equals signs (=). + This is parsed by the buildbot using: +- http://src.chromium.org/viewvc/chrome/trunk/tools/build/scripts/slave/process_log_utils.py ++ http://src.ch40m1um.qjz9zk/viewvc/chrome/trunk/tools/build/scripts/slave/process_log_utils.py + + Args: + measurement: A description of the quantity being measured, e.g. "vm_peak". +diff --git a/build/util/lib/results/result_sink.py b/build/util/lib/results/result_sink.py +index 5d0f1d9e831e7..ff367ba0d9195 100644 +--- a/build/util/lib/results/result_sink.py ++++ b/build/util/lib/results/result_sink.py +@@ -16,7 +16,7 @@ _HTML_SUMMARY_ARTIFACT = '' + _TEST_LOG_ARTIFACT = '' + + # Maps result_types to the luci test-result.proto. +-# https://godoc.org/go.chromium.org/luci/resultdb/proto/v1#TestStatus ++# https://godoc.org/go.ch40m1um.qjz9zk/luci/resultdb/proto/v1#TestStatus + RESULT_MAP = { + result_types.UNKNOWN: 'ABORT', + result_types.PASS: 'PASS', +@@ -172,7 +172,7 @@ class ResultSinkClient(object): + if test_file and str(test_file).startswith('//'): + tr['testMetadata']['location'] = { + 'file_name': test_file, +- 'repo': 'https://chromium.googlesource.com/chromium/src', ++ 'repo': 'https://chromium.9oo91esource.qjz9zk/chromium/src', + } + + res = self.session.post(url=self.test_results_url, +diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt +index 0b23301145f97..7a0cb62312729 100644 +--- a/build/whitespace_file.txt ++++ b/build/whitespace_file.txt +@@ -163,7 +163,7 @@ In the BUILD we trust. + In the masters we don't. + In the tryservers, we don't either. + In the CQ sometimes. +-Auto-generated by git-eject-upstream (http://goo.gl/cIHsYR) ++Auto-generated by git-eject-upstream (http://goo.gl.qjz9zk/cIHsYR) + My sandwiches are like my children: I love them all. + No, really, I couldn't eat another bit. + When I hunger I think of you, and a pastrami sandwich. +diff --git a/buildtools/README.txt b/buildtools/README.txt +index 1a2d5863f78ae..3a3048d820653 100644 +--- a/buildtools/README.txt ++++ b/buildtools/README.txt +@@ -3,7 +3,7 @@ projects. The actual binaries are pulled from Google Storage, normally as part + of a gclient hook. + + This directory also exists as a stand-alone git mirror at +-https://chromium.googlesource.com/chromium/src/buildtools/. ++https://chromium.9oo91esource.qjz9zk/chromium/src/buildtools/. + That mirror exists so that the shared build tools can be shared between + the various Chromium-related projects without each one needing to maintain + their own versionining of each binary. +@@ -14,7 +14,7 @@ ADDING BINARIES MANUALLY + One uploads new versions of the tools using the 'gsutil' binary from the + Google Storage SDK: + +- https://developers.google.com/storage/docs/gsutil ++ https://developers.9oo91e.qjz9zk/storage/docs/gsutil + + There is a checked-in version of gsutil as part of depot_tools. + +diff --git a/buildtools/clang_format/README.txt b/buildtools/clang_format/README.txt +index 20e72c32254b9..480e7d115478c 100644 +--- a/buildtools/clang_format/README.txt ++++ b/buildtools/clang_format/README.txt +@@ -2,7 +2,7 @@ This folder contains clang-format scripts. The binaries will be automatically + downloaded from Google Storage by gclient runhooks for the current platform. + + For a walkthrough on how to maintain these binaries: +- https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang_format_binaries.md ++ https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/updating_clang_format_binaries.md + + To upload a file: + python ~/depot_tools/upload_to_google_storage.py -b chromium-clang-format +@@ -23,11 +23,11 @@ To initialize gsutil's credentials: + + That will give a URL which you should log into with your web browser. The + username should be the one that is on the ACL for the "chromium-clang-format" +- bucket (probably your @google.com address). Contact the build team for help ++ bucket (probably your @9oo91e.qjz9zk address). Contact the build team for help + getting access if necessary. + + Copy the code back to the command line util. Ignore the project ID (it's OK + to just leave blank when prompted). + + gsutil documentation: +- https://developers.google.com/storage/docs/gsutil ++ https://developers.9oo91e.qjz9zk/storage/docs/gsutil +diff --git a/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json b/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json +index 010df79f3835f..6814c3f6e760b 100644 +--- a/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json ++++ b/chrome/android/webapk/shell_apk/manifest/javatest_manifest_config_delta.json +@@ -1,21 +1,21 @@ + { +- "scope_url": "https://pwa-directory.appspot.com/", ++ "scope_url": "https://pwa-directory.8pp2p8t.qjz9zk/", + "intent_filters": { + "scope_url_scheme": "https", +- "scope_url_host": "pwa-directory.appspot.com", ++ "scope_url_host": "pwa-directory.8pp2p8t.qjz9zk", + "scope_url_path_type": "android:pathPrefix", + "scope_url_path": "/" + }, +- "start_url": "https://pwa-directory.appspot.com/", +- "icon_urls_and_icon_murmur2_hashes": "https://pwa-directory.appspot.com/icon1.png 0 https://pwa-directory.appspot.com/icon2.png 0", +- "web_manifest_url": "https://pwa-directory.appspot.com/manifest.json", ++ "start_url": "https://pwa-directory.8pp2p8t.qjz9zk/", ++ "icon_urls_and_icon_murmur2_hashes": "https://pwa-directory.8pp2p8t.qjz9zk/icon1.png 0 https://pwa-directory.8pp2p8t.qjz9zk/icon2.png 0", ++ "web_manifest_url": "https://pwa-directory.8pp2p8t.qjz9zk/manifest.json", + "bound_webapk": { + "runtime_host": "org.chromium.chrome.tests" + }, + "share_template": [{ + "index": "0", + "title": "Share Text and Images", +- "action": "https://pwa-directory.appspot.com/echoall", ++ "action": "https://pwa-directory.8pp2p8t.qjz9zk/echoall", + "method": "POST", + "enctype": "application/x-www-form-urlencoded", + "param_title": "title", +diff --git a/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json b/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json +index f1e274dd3d35b..fabb7521af4d6 100644 +--- a/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json ++++ b/chrome/android/webapk/shell_apk/manifest/maps_go_manifest_config.json +@@ -1,20 +1,20 @@ + { +- "scope_url": "https://www.google.com/maps", ++ "scope_url": "https://www.9oo91e.qjz9zk/maps", + "intent_filters": { + "scope_url_scheme": "https", +- "scope_url_host": "www.google.com", ++ "scope_url_host": "www.9oo91e.qjz9zk", + "scope_url_path_type": "android:pathPrefix", + "scope_url_path": "/maps" + }, +- "start_url": "https://www.google.com/maps/@37.7890183,-122.3915063,15z?force=pwa", ++ "start_url": "https://www.9oo91e.qjz9zk/maps/@37.7890183,-122.3915063,15z?force=pwa", + "display_mode": "standalone", + "orientation": "portrait", + "android_orientation": "unspecified", + "theme_color": "2147483648L", + "background_color": "2147483648L", + "background_color_xml": "#F8F9FA", +- "icon_urls_and_icon_murmur2_hashes": "https://maps.gstatic.com/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_48x48.png 0 https://maps.gstatic.com/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_72x72 0", +- "web_manifest_url": "https://maps.gstatic.com/tactile/worker/ml.json", ++ "icon_urls_and_icon_murmur2_hashes": "https://maps.95tat1c.qjz9zk/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_48x48.png 0 https://maps.95tat1c.qjz9zk/mapfiles/maps_lite/pwa/icons/maps_pwa_icon_v0920_72x72 0", ++ "web_manifest_url": "https://maps.95tat1c.qjz9zk/tactile/worker/ml.json", + "distributor": "other", + "version_code": "1", + "version_name": "1.0", +diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd +index 47c45d7466aa6..00fea916e9190 100644 +--- a/chrome/app/chromium_strings.grd ++++ b/chrome/app/chromium_strings.grd +@@ -281,7 +281,7 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> + no separate file for it. Instead, we use the same file as Chromium, with + a few select overrides for the most prominent end-user strings. + +- Rationale: https://goo.gle/chrome-for-testing#bookmark=id.n1rat320av91 ++ Rationale: https://goo.gle.qjz9zk/chrome-for-testing#bookmark=id.n1rat320av91 + --> + + +@@ -484,7 +484,7 @@ If you update this file, be sure also to update google_chrome_strings.grd. --> + To send a number from here to your Android phone, sign in to Chromium on both devices. +
+ +- To send a number from $1www.google.com to your Android phone, sign in to Chromium on both devices. ++ To send a number from $1www.9oo91e.qjz9zk to your Android phone, sign in to Chromium on both devices. + + + Make sure you are signed in to Chromium on your $1Pixel XL and then try sending again. +@@ -542,9 +542,9 @@ Chromium is unable to recover your settings. + + + +-If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chromium browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://google.com/">add a new person</a> to your $2Chromebook. ++If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chromium browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://9oo91e.qjz9zk/">add a new person</a> to your $2Chromebook. + +-Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://google.com/">Settings</a>. ++Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://9oo91e.qjz9zk/">Settings</a>. + + + +@@ -761,7 +761,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- Also clear data from Chromium ($1www.google.com) ++ Also clear data from Chromium ($1www.9oo91e.qjz9zk) + + + +@@ -905,7 +905,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- You were signed in to Chromium as $1foo@gmail.com. Please use the same account to sign in again. ++ You were signed in to Chromium as $1foo@9ma1l.qjz9zk. Please use the same account to sign in again. + + + Someone previously signed in to Chromium on this computer as $1user@example.com. Please create a new Chromium user to keep your information separate. +@@ -940,7 +940,7 @@ Permissions you've already given to websites and apps may apply to this account. + You're signed in to Chromium! + + +- You're signed in as $1foo@gmail.com. Now you can access your bookmarks, history, and other settings on all your signed in devices. ++ You're signed in as $1foo@9ma1l.qjz9zk. Now you can access your bookmarks, history, and other settings on all your signed in devices. + + + +@@ -971,7 +971,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- $1foo@gmail.com was previously using Chromium ++ $1foo@9ma1l.qjz9zk was previously using Chromium + + + +@@ -990,10 +990,10 @@ Permissions you've already given to websites and apps may apply to this account. + $1Elisa is already signed in to this Chromium profile. To keep your browsing separate, Chromium can create your own profile for you. + + +- $1Elisa is already signed in to this Chromium profile. This will create a new Chromium profile for $2foo@gmail.com ++ $1Elisa is already signed in to this Chromium profile. This will create a new Chromium profile for $2foo@9ma1l.qjz9zk + + +- This will create a new Chromium profile for $1foo@gmail.com ++ This will create a new Chromium profile for $1foo@9ma1l.qjz9zk + + + Another account is already signed in. To keep your browsing separate, Chromium can create your own profile for you. +@@ -1575,7 +1575,7 @@ Permissions you've already given to websites and apps may apply to this account. + Welcome to Chromium + + +- Get your Chromium browser stuff from $1Jane.Doe@gmail.com ++ Get your Chromium browser stuff from $1Jane.Doe@9ma1l.qjz9zk + + + Your account is managed by $1example.com. Your administrator can see and edit this Chromium browser profile and its data like bookmarks, history, and passwords. +diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd +index 05f7856963802..2b206499d8d67 100644 +--- a/chrome/app/generated_resources.grd ++++ b/chrome/app/generated_resources.grd +@@ -399,16 +399,16 @@ are declared in tools/grit/grit_rule.gni. + Permission request expired + + +- $1google.com wants to ++ $19oo91e.qjz9zk wants to + + +- $1google.com wants to: $2use your microphone ++ $19oo91e.qjz9zk wants to: $2use your microphone + + +- $1google.com wants to: $2use your microphone and $3use your location ++ $19oo91e.qjz9zk wants to: $2use your microphone and $3use your location + + +- $1google.com wants to: $2use your microphone, $3use your location, and more ++ $19oo91e.qjz9zk wants to: $2use your microphone, $3use your location, and more + + + This file +@@ -622,7 +622,7 @@ are declared in tools/grit/grit_rule.gni. + Open link as + + +- Open link as $1user@gmail.com ++ Open link as $1user@9ma1l.qjz9zk + + + Open link in $1Gmail App +@@ -820,7 +820,7 @@ are declared in tools/grit/grit_rule.gni. + Search images with $1Google Lens + + +- &Go to $1http://www.google.com/ ++ &Go to $1http://www.9oo91e.qjz9zk/ + + + Suggest password... +@@ -900,7 +900,7 @@ are declared in tools/grit/grit_rule.gni. + Open Link as + + +- Open Link as $1user@gmail.com ++ Open Link as $1user@9ma1l.qjz9zk + + + Open Link in $1Gmail App +@@ -1110,7 +1110,7 @@ are declared in tools/grit/grit_rule.gni. + Search Images with $1Google Lens + + +- &Go to $1http://www.google.com/ ++ &Go to $1http://www.9oo91e.qjz9zk/ + + + Suggest Password... +@@ -1192,7 +1192,7 @@ are declared in tools/grit/grit_rule.gni. + New &Incognito window + + +- Signed in as $1user@gmail.com ++ Signed in as $1user@9ma1l.qjz9zk + + + &Sync is on +@@ -1332,7 +1332,7 @@ are declared in tools/grit/grit_rule.gni. + New &Incognito Window + + +- Signed in as $1user@gmail.com ++ Signed in as $1user@9ma1l.qjz9zk + + + &Sync is On +@@ -1453,7 +1453,7 @@ are declared in tools/grit/grit_rule.gni. + + + +- Move window to $1User name ($2john@google.com) ++ Move window to $1User name ($2john@9oo91e.qjz9zk) + + + +@@ -1596,7 +1596,7 @@ are declared in tools/grit/grit_rule.gni. + Review + + +- https://www.google.com/chrome/privacy/eula_text.html ++ https://www.9oo91e.qjz9zk/chrome/privacy/eula_text.html + + + +@@ -3288,7 +3288,7 @@ are declared in tools/grit/grit_rule.gni. + + +- This file can harm your personal and social network accounts, including $1john@google.com ++ This file can harm your personal and social network accounts, including $1john@9oo91e.qjz9zk + + +@@ -3652,10 +3652,10 @@ are declared in tools/grit/grit_rule.gni. + Images were blocked on this page. + + +- Always allow $1mail.google.com to set cookies ++ Always allow $1mail.9oo91e.qjz9zk to set cookies + + +- Always allow $1mail.google.com to show images ++ Always allow $1mail.9oo91e.qjz9zk to show images + + + Continue blocking cookies +@@ -3664,7 +3664,7 @@ are declared in tools/grit/grit_rule.gni. + Continue allowing cookies + + +- Always block cookies on $1mail.google.com ++ Always block cookies on $1mail.9oo91e.qjz9zk + + + Continue blocking images +@@ -3676,28 +3676,28 @@ are declared in tools/grit/grit_rule.gni. + Pop-ups blocked: + + +- Always allow pop-ups and redirects from $1mail.google.com ++ Always allow pop-ups and redirects from $1mail.9oo91e.qjz9zk + + + Continue blocking + + +- Always allow $1mail.google.com to access your camera and microphone ++ Always allow $1mail.9oo91e.qjz9zk to access your camera and microphone + + +- Always allow $1mail.google.com to access your microphone ++ Always allow $1mail.9oo91e.qjz9zk to access your microphone + + +- Always allow $1mail.google.com to access your camera ++ Always allow $1mail.9oo91e.qjz9zk to access your camera + + +- Ask if $1mail.google.com wants to access your camera and microphone ++ Ask if $1mail.9oo91e.qjz9zk wants to access your camera and microphone + + +- Ask if $1mail.google.com wants to access your microphone ++ Ask if $1mail.9oo91e.qjz9zk wants to access your microphone + + +- Ask if $1mail.google.com wants to access your camera ++ Ask if $1mail.9oo91e.qjz9zk wants to access your camera + + + Always block camera and microphone access +@@ -3718,19 +3718,19 @@ are declared in tools/grit/grit_rule.gni. + Continue blocking camera access + + +- Continue allowing $1mail.google.com to access your camera and microphone ++ Continue allowing $1mail.9oo91e.qjz9zk to access your camera and microphone + + +- Continue allowing $1mail.google.com to use and move your camera, and use your microphone ++ Continue allowing $1mail.9oo91e.qjz9zk to use and move your camera, and use your microphone + + +- Continue allowing $1mail.google.com to access your microphone ++ Continue allowing $1mail.9oo91e.qjz9zk to access your microphone + + +- Continue allowing $1mail.google.com to access your camera ++ Continue allowing $1mail.9oo91e.qjz9zk to access your camera + + +- Continue allowing $1mail.google.com to use and move your camera ++ Continue allowing $1mail.9oo91e.qjz9zk to use and move your camera + + + Pop-up blocked +@@ -3742,7 +3742,7 @@ are declared in tools/grit/grit_rule.gni. + JavaScript was blocked on this page. + + +- Always allow JavaScript on $1mail.google.com ++ Always allow JavaScript on $1mail.9oo91e.qjz9zk + + + Continue blocking JavaScript +@@ -3751,7 +3751,7 @@ are declared in tools/grit/grit_rule.gni. + Sound was muted on this page + + +- Always allow sound on $1mail.google.com ++ Always allow sound on $1mail.9oo91e.qjz9zk + + + Continue muting sound +@@ -3965,7 +3965,7 @@ are declared in tools/grit/grit_rule.gni. + + + +- Certificate Viewer: $1www.google.com ++ Certificate Viewer: $1www.9oo91e.qjz9zk + + + &General +@@ -4495,13 +4495,13 @@ are declared in tools/grit/grit_rule.gni. + + + +- Sharing this tab to $1meet.google.com ++ Sharing this tab to $1meet.9oo91e.qjz9zk + + +- Sharing a tab to $1meet.google.com ++ Sharing a tab to $1meet.9oo91e.qjz9zk + + +- Sharing $1youtube.com to $2meet.google.com ++ Sharing $1y0u1ub3.qjz9zk to $2meet.9oo91e.qjz9zk + + + Share this tab instead +@@ -4510,7 +4510,7 @@ are declared in tools/grit/grit_rule.gni. + Stop sharing + + +- View tab: $1meet.google.com ++ View tab: $1meet.9oo91e.qjz9zk + + + Switch to capturing tab +@@ -4533,10 +4533,10 @@ are declared in tools/grit/grit_rule.gni. + Casting a tab + + +- Casting $1youtube.com to $2Living Room TV ++ Casting $1y0u1ub3.qjz9zk to $2Living Room TV + + +- Casting $1youtube.com ++ Casting $1y0u1ub3.qjz9zk + + + Cast this tab instead +@@ -4741,16 +4741,16 @@ are declared in tools/grit/grit_rule.gni. + Incognito Tab: $1Google + + +- Background App: $1http://www.google.com ++ Background App: $1http://www.9oo91e.qjz9zk + + +- Background Page: $1http://www.google.com ++ Background Page: $1http://www.9oo91e.qjz9zk + + +- Back/Forward Cached Page: $1http://www.google.com ++ Back/Forward Cached Page: $1http://www.9oo91e.qjz9zk + + +- Incognito Back/Forward Cached Page: $1http://www.google.com ++ Incognito Back/Forward Cached Page: $1http://www.9oo91e.qjz9zk + + + Plugin: $1Unknown Plugin +@@ -4760,10 +4760,10 @@ are declared in tools/grit/grit_rule.gni. + + + +- Prerender: $1http://www.google.com ++ Prerender: $1http://www.9oo91e.qjz9zk + + +- Prerender: $1http://www.google.com ++ Prerender: $1http://www.9oo91e.qjz9zk + + + Spare Renderer +@@ -4799,28 +4799,28 @@ are declared in tools/grit/grit_rule.gni. + Print: $1Google Maps + + +- Subframe: $1https://youtube.com/ ++ Subframe: $1https://y0u1ub3.qjz9zk/ + + +- Incognito Subframe: $1https://youtube.com/ ++ Incognito Subframe: $1https://y0u1ub3.qjz9zk/ + + +- Back/Forward Cached Subframe: $1http://www.google.com ++ Back/Forward Cached Subframe: $1http://www.9oo91e.qjz9zk + + +- Incognito Back/Forward Cached Subframe: $1http://www.google.com ++ Incognito Back/Forward Cached Subframe: $1http://www.9oo91e.qjz9zk + + +- Portal: $1https://youtube.com/ ++ Portal: $1https://y0u1ub3.qjz9zk/ + + +- Incognito Portal: $1https://youtube.com/ ++ Incognito Portal: $1https://y0u1ub3.qjz9zk/ + + +- Fenced Frame: $1https://youtube.com/ ++ Fenced Frame: $1https://y0u1ub3.qjz9zk/ + + +- Incognito Fenced Frame: $1https://youtube.com/ ++ Incognito Fenced Frame: $1https://y0u1ub3.qjz9zk/ + + + App: $1com.android.systemui +@@ -5045,7 +5045,7 @@ are declared in tools/grit/grit_rule.gni. + + "$1Gmail Checker" + +- ++ + The extension "$1Gmail Checker" was blocked by your administrator + + +@@ -5057,10 +5057,10 @@ are declared in tools/grit/grit_rule.gni. + + + +- $1http://www.google.com wants to communicate with the app "$2Gmail" ++ $1http://www.9oo91e.qjz9zk wants to communicate with the app "$2Gmail" + + +- $1http://www.google.com wants to communicate with the extension "$2Gmail Checker" ++ $1http://www.9oo91e.qjz9zk wants to communicate with the extension "$2Gmail Checker" + + + It can: +@@ -5182,22 +5182,22 @@ are declared in tools/grit/grit_rule.gni. + Change your home page to: $1home.page.com/home.html + + +- Read and change your data on $1www.google.com ++ Read and change your data on $1www.9oo91e.qjz9zk + + +- Read your data on $1www.google.com ++ Read your data on $1www.9oo91e.qjz9zk + + +- Read and change your data on $1www.google.com and $2www.reddit.com ++ Read and change your data on $1www.9oo91e.qjz9zk and $2www.reddit.com + + +- Read your data on $1www.google.com and $2www.reddit.com ++ Read your data on $1www.9oo91e.qjz9zk and $2www.reddit.com + + +- Read and change your data on $1www.google.com, $2www.reddit.com, and $3news.ycombinator.com ++ Read and change your data on $1www.9oo91e.qjz9zk, $2www.reddit.com, and $3news.ycombinator.com + + +- Read your data on $1www.google.com, $2www.reddit.com, and $3news.ycombinator.com ++ Read your data on $1www.9oo91e.qjz9zk, $2www.reddit.com, and $3news.ycombinator.com + + + Read and change your data on a number of websites +@@ -5206,10 +5206,10 @@ are declared in tools/grit/grit_rule.gni. + Read your data on a number of websites + + +- all $1google.com sites ++ all $19oo91e.qjz9zk sites + + +- All $1google.com sites ++ All $19oo91e.qjz9zk sites + + + Read and change anything you type +@@ -5627,10 +5627,10 @@ are declared in tools/grit/grit_rule.gni. + Allowed + + +- Click to allow "$1Extension A" on $2google.com ++ Click to allow "$1Extension A" on $29oo91e.qjz9zk + + +- Click to allow on $1google.com: ++ Click to allow on $19oo91e.qjz9zk: + + + Allowed to read & change +@@ -5642,16 +5642,16 @@ are declared in tools/grit/grit_rule.gni. + Requesting to read & change + + +- All extensions can read & change $1google.com ++ All extensions can read & change $19oo91e.qjz9zk + + +- You blocked all extensions from $1google.com ++ You blocked all extensions from $19oo91e.qjz9zk + + +- This extension can read and change $1google.com ++ This extension can read and change $19oo91e.qjz9zk + + +- Click this extension's icon to read and change $1google.com ++ Click this extension's icon to read and change $19oo91e.qjz9zk + + + Pinned by your administrator +@@ -5671,16 +5671,16 @@ are declared in tools/grit/grit_rule.gni. + This can read and change site data + + +- You previously chose to allow all extensions on $1google.com ++ You previously chose to allow all extensions on $19oo91e.qjz9zk + + +- You previously chose to not allow any extensions on $1google.com ++ You previously chose to not allow any extensions on $19oo91e.qjz9zk + + + Ask on every visit + + +- Always on $1google.com ++ Always on $19oo91e.qjz9zk + + + Always on all sites +@@ -5692,7 +5692,7 @@ are declared in tools/grit/grit_rule.gni. + When you click the extension + + +- On $1google.com ++ On $19oo91e.qjz9zk + + + On all sites +@@ -5748,16 +5748,16 @@ are declared in tools/grit/grit_rule.gni. + This Can Read and Change Site Data + + +- You Previously Chose To Allow All Extensions On $1google.com ++ You Previously Chose To Allow All Extensions On $19oo91e.qjz9zk + + +- You Previously Chose To Not Allow Any Extensions On $1google.com ++ You Previously Chose To Not Allow Any Extensions On $19oo91e.qjz9zk + + + Ask on Every Visit + + +- Always on $1google.com ++ Always on $19oo91e.qjz9zk + + + Always on All Sites +@@ -5769,7 +5769,7 @@ are declared in tools/grit/grit_rule.gni. + When You Click the Extension + + +- On $1google.com ++ On $19oo91e.qjz9zk + + + On All Sites +@@ -6081,7 +6081,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Change back to $1DuckDuckGo? + + +- The "$2Some New Search" extension changed search to use $1google.com ++ The "$2Some New Search" extension changed search to use $19oo91e.qjz9zk + + + +@@ -6111,7 +6111,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Ask your admin to update this app + + +- Chrome Apps are migrating to Progressive Web Apps. This Chrome App was installed on your browser by your organization. To open the Progressive Web App from the Apps list, first contact your administrator and ask them to uninstall the Chrome App. In the meantime, you can visit $1sheets.google.com to open $2Google Sheets on the web. ++ Chrome Apps are migrating to Progressive Web Apps. This Chrome App was installed on your browser by your organization. To open the Progressive Web App from the Apps list, first contact your administrator and ask them to uninstall the Chrome App. In the meantime, you can visit $1sheets.9oo91e.qjz9zk to open $2Google Sheets on the web. + + + +@@ -6336,7 +6336,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Ask on every visit + + +- Always on $1google.com ++ Always on $19oo91e.qjz9zk + + + Always on all sites +@@ -6748,10 +6748,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + Update password for $1example.com? + + +- Save it in your Google Account, $1user@gmail.com ++ Save it in your Google Account, $1user@9ma1l.qjz9zk + + +- Update it in your Google Account, $1user@gmail.com ++ Update it in your Google Account, $1user@9ma1l.qjz9zk + + + Passwords are saved in your Google Account so you can use them on any device +@@ -6760,7 +6760,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Google Password Manager + + +- You can use saved passwords on any device. They're saved to $1Google Password Manager for $2user@gmail.com. ++ You can use saved passwords on any device. They're saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + + Passwords are saved to $1Google Password Manager on this device. +@@ -6769,19 +6769,19 @@ Keep your key file in a safe place. You will need it to create new versions of y + You can view and manage saved passwords in $1Google Password Manager. + + +- You won't need to remember this password. It will be saved to $1Google Password Manager for $2user@gmail.com. ++ You won't need to remember this password. It will be saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + +- Keep this account more secure with a strong password. It will be saved to $1Google Password Manager for $2user@gmail.com. ++ Keep this account more secure with a strong password. It will be saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + +- Stay safer online with a strong password. It will be saved to $1Google Password Manager for $2user@gmail.com. ++ Stay safer online with a strong password. It will be saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + +- You can always change this password later. It will be saved to $1Google Password Manager for $2user@gmail.com. ++ You can always change this password later. It will be saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + +- Sign up and sign in faster when your password is automatically saved to $1Google Password Manager for $2user@gmail.com. ++ Sign up and sign in faster when your password is automatically saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + + When you use and save this password: +@@ -6796,7 +6796,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + You'll be notified if it's ever at risk + + +- It will be saved to $1Google Password Manager for $2user@gmail.com. ++ It will be saved to $1Google Password Manager for $2user@9ma1l.qjz9zk. + + + Passwords are saved to $1Google Password Manager. +@@ -6805,23 +6805,23 @@ Keep your key file in a safe place. You will need it to create new versions of y + You can view and manage saved passwords in Google Password Manager + + +- To Google Password Manager for $1user@gmail.com ++ To Google Password Manager for $1user@9ma1l.qjz9zk + + +- In Google Password Manager for $1user@gmail.com ++ In Google Password Manager for $1user@9ma1l.qjz9zk + + + +- To Google Password Manager $1user@gmail.com ++ To Google Password Manager $1user@9ma1l.qjz9zk + + +- In Google Password Manager $1user@gmail.com ++ In Google Password Manager $1user@9ma1l.qjz9zk + + +- To your Google Account, $1user@gmail.com ++ To your Google Account, $1user@9ma1l.qjz9zk + + +- In your Google Account, $1user@gmail.com ++ In your Google Account, $1user@9ma1l.qjz9zk + + + Only on this device +@@ -7254,7 +7254,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- Pa&ste and go to $1http://www.google.com/ ++ Pa&ste and go to $1http://www.9oo91e.qjz9zk/ + + + Pa&ste and search for “$1flowers” +@@ -7265,7 +7265,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- Pa&ste and Go to $1http://www.google.com/ ++ Pa&ste and Go to $1http://www.9oo91e.qjz9zk/ + + + Pa&ste and Search for “$1flowers” +@@ -7275,7 +7275,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- Press $1Tab to search $2google.com ++ Press $1Tab to search $29oo91e.qjz9zk + + + Press $1Tab to send commands to $2Google Talk +@@ -7284,16 +7284,16 @@ Keep your key file in a safe place. You will need it to create new versions of y + Tab + + +- Search $1google.com ++ Search $19oo91e.qjz9zk + + + Send commands to $1ACME Music App + + +- Search $1google.com: ++ Search $19oo91e.qjz9zk: + + +- Search $1google.com ++ Search $19oo91e.qjz9zk + + + Clear input +@@ -7852,7 +7852,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + memories from Google Photos + + +- You’re seeing photo and video highlights from your Google Photos library. You can control what shows up in your highlights at <a href="https://photos.google.com/settings?referrer=CHROME_NTP" target="_blank">photos.google.com/settings</a>. ++ You’re seeing photo and video highlights from your Google Photos library. You can control what shows up in your highlights at <a href="https://photos.9oo91e.qjz9zk/settings?referrer=CHROME_NTP" target="_blank">photos.9oo91e.qjz9zk/settings</a>. + <br> + <br> + You can manage settings for this card from the card menu or see more options in Customize Chrome. +@@ -7907,10 +7907,10 @@ Keep your key file in a safe place. You will need it to create new versions of y + About this card + + +- You're seeing this item based on your previous activity using Google services. You can see your data, delete it, and change your settings at <a href="https://myactivity.google.com/" target="_blank">myactivity.google.com</a>. ++ You're seeing this item based on your previous activity using Google services. You can see your data, delete it, and change your settings at <a href="https://myactivity.9oo91e.qjz9zk/" target="_blank">myactivity.9oo91e.qjz9zk</a>. + <br> + <br> +- Learn about the data Google collects and why at <a href="https://policies.google.com/" target="_blank">policies.google.com</a>. ++ Learn about the data Google collects and why at <a href="https://policies.9oo91e.qjz9zk/" target="_blank">policies.9oo91e.qjz9zk</a>. + + + Close +@@ -8369,7 +8369,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Rename + + +- $1www.google.com - $2Bookmarks Bar ++ $1www.9oo91e.qjz9zk - $2Bookmarks Bar + + + Your administrator has disabled this feature. +@@ -8759,7 +8759,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Stay in Chrome + + +- From $1https://google.com ++ From $1https://9oo91e.qjz9zk + + + Open in app +@@ -8767,7 +8767,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + + + +- ++ + Always use the $1YouTube app to open supported web links? + + +@@ -8961,7 +8961,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + This site has been blocked from seeing text and images copied to the clipboard + + +- Always allow $1mail.google.com to see the clipboard ++ Always allow $1mail.9oo91e.qjz9zk to see the clipboard + + + Continue blocking this site from seeing the clipboard +@@ -9236,7 +9236,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + other {You can wait for them to become responsive or exit the pages.}} + + +- $1google.com, in $2YouTube. ++ $19oo91e.qjz9zk, in $2YouTube. + + + Wait +@@ -9270,7 +9270,7 @@ Keep your key file in a safe place. You will need it to create new versions of y + Automatically sign in to websites using stored credentials. When the feature is disabled, you will be asked for confirmation every time before signing in to a website. + + +- with $1facebook.com ++ with $1f8c3b00k.qjz9zk + + + +@@ -9500,10 +9500,10 @@ Check your passwords anytime in $1Google + Use a passkey on a different device + + +- Password will be saved in your Google Account, $1user@gmail.com. You won’t have to remember it. ++ Password will be saved in your Google Account, $1user@9ma1l.qjz9zk. You won’t have to remember it. + + +- You won’t need to remember this password. It will be saved to Google Password Manager for $1user@gmail.com. ++ You won’t need to remember this password. It will be saved to Google Password Manager for $1user@9ma1l.qjz9zk. + + + Confirm your username +@@ -9710,7 +9710,7 @@ Check your passwords anytime in $1Google + Clear browsing data + + +- The selected data has been removed from Chrome and synced devices. Your Google Account may have other forms of browsing history like searches and activity from other Google services at <a target="_blank" href="$1">myactivity.google.com</a>. ++ The selected data has been removed from Chrome and synced devices. Your Google Account may have other forms of browsing history like searches and activity from other Google services at <a target="_blank" href="$1">myactivity.9oo91e.qjz9zk</a>. + + + Cleared Chrome data +@@ -9720,7 +9720,7 @@ Check your passwords anytime in $1Google + + + +- We were not able to delete all passwords stored in your Google Account. Try again or visit <a target="_blank" href="$1">passwords.google.com</a>. ++ We were not able to delete all passwords stored in your Google Account. Try again or visit <a target="_blank" href="$1">passwords.9oo91e.qjz9zk</a>. + + + Some passwords were not deleted +@@ -9959,7 +9959,7 @@ Check your passwords anytime in $1Google + Uploading ($127%)... + + +- Waiting for $1www.google.com... ++ Waiting for $1www.9oo91e.qjz9zk... + + + +@@ -10430,7 +10430,7 @@ Check your passwords anytime in $1Google + + + +- Select a certificate to authenticate yourself to $1www.google.com ++ Select a certificate to authenticate yourself to $1www.9oo91e.qjz9zk + + + +@@ -10438,10 +10438,10 @@ Check your passwords anytime in $1Google + Sign in to Security Device + + +- Please sign in to $1Software Security Device to import client certificate from $2www.google.com. ++ Please sign in to $1Software Security Device to import client certificate from $2www.9oo91e.qjz9zk. + + +- Please sign in to $1Software Security Device to authenticate to $2www.google.com with your certificate. ++ Please sign in to $1Software Security Device to authenticate to $2www.9oo91e.qjz9zk with your certificate. + + + Please sign in to $1Software Security Device. +@@ -10767,7 +10767,7 @@ Check your passwords anytime in $1Google + Sending link to $1Ted's Pixel2 + + +- $1Your devices$2 · $3foo@gmail.com ++ $1Your devices$2 · $3foo@9ma1l.qjz9zk + + + To send this tab to another device, sign in to Chrome on both devices +@@ -11141,7 +11141,7 @@ Check your passwords anytime in $1Google + + + +- Including sites from the same domain, for example, google.com and mail.google.com. Sites you’re viewing can save data on your device. ++ Including sites from the same domain, for example, 9oo91e.qjz9zk and mail.9oo91e.qjz9zk. Sites you’re viewing can save data on your device. + + + +@@ -11304,7 +11304,7 @@ Check your passwords anytime in $1Google + Your <a href="$1">browser is managed</a> by $2foo.com and your <a href="$1">profile is managed</a> by $3bar.com + + +- Your <a href="$1">browser and profile are managed</a> by $2google.com ++ Your <a href="$1">browser and profile are managed</a> by $29oo91e.qjz9zk + + + Your <a href="$1">browser is managed</a> by your parent +@@ -11746,22 +11746,22 @@ This can include information about installed software, files, your browser, and + + Turn on sync to back up your stuff and use it on any device + +- ++ + Bookmarks + +- ++ + Reading List + +- ++ + Autofill + +- ++ + Extensions + +- ++ + History and more + +- ++ + You can always choose what to sync in settings. Google may personalize Search and other services based on your history. + + +@@ -11838,16 +11838,16 @@ This can include information about installed software, files, your browser, and + You just signed in a managed account, creating a new managed profile will allow you to access some resources linked to that account. + + +- $2Bob's profile is linked to $1bob@gmail.com ++ $2Bob's profile is linked to $1bob@9ma1l.qjz9zk + + + Separate your browsing? + + +- This new profile will be managed by your organization. <a href="$1" target="_blank">https://help.google.com/articleLinkLearn more</a> ++ This new profile will be managed by your organization. <a href="$1" target="_blank">https://help.9oo91e.qjz9zk/articleLinkLearn more</a> + + +- This new profile will be managed by $1example.com. <a href="$2" target="_blank">https://help.google.com/articleLinkLearn more</a> ++ This new profile will be managed by $1example.com. <a href="$2" target="_blank">https://help.9oo91e.qjz9zk/articleLinkLearn more</a> + + + +@@ -11862,10 +11862,10 @@ This can include information about installed software, files, your browser, and + Can't sign in + + +- Can't sign in to $1Jane.Doe@gmail.com ++ Can't sign in to $1Jane.Doe@9ma1l.qjz9zk + + +- Can't sync with $1Jane.Doe@gmail.com ++ Can't sync with $1Jane.Doe@9ma1l.qjz9zk + + + Close +@@ -11890,13 +11890,13 @@ This can include information about installed software, files, your browser, and + This wasn't me. + + +- Create a new profile for $1foo@gmail.com ++ Create a new profile for $1foo@9ma1l.qjz9zk + + + This was me. + + +- Add my bookmarks, history, passwords, and other settings to $1foo@gmail.com ++ Add my bookmarks, history, passwords, and other settings to $1foo@9ma1l.qjz9zk + + + Cancel +@@ -11945,7 +11945,7 @@ This can include information about installed software, files, your browser, and + Open $1Adobe Acrobat? + + +- $1https://google.com wants to open this application. ++ $1https://9oo91e.qjz9zk wants to open this application. + + + A website wants to open this application. +@@ -11956,8 +11956,8 @@ This can include information about installed software, files, your browser, and + + Cancel + +- +- Always allow $1https://google.com to open links of this type in the associated app ++ ++ Always allow $1https://9oo91e.qjz9zk to open links of this type in the associated app + + + +@@ -12563,7 +12563,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Wrong index. + + +- Executing JavaScript through AppleScript is turned off. To turn it on, from the menu bar, go to View > Developer > Allow JavaScript from Apple Events. For more information: https://support.google.com/chrome/?p=applescript ++ Executing JavaScript through AppleScript is turned off. To turn it on, from the menu bar, go to View > Developer > Allow JavaScript from Apple Events. For more information: https://support.9oo91e.qjz9zk/chrome/?p=applescript + + + +@@ -12990,7 +12990,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from accessing your location. + + +- Always allow $1mail.google.com to access your location ++ Always allow $1mail.9oo91e.qjz9zk to access your location + + + Continue blocking this site from accessing your location +@@ -13033,7 +13033,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from having full control of MIDI devices. + + +- Always allow $1mail.google.com to have full control of MIDI devices ++ Always allow $1mail.9oo91e.qjz9zk to have full control of MIDI devices + + + Continue blocking this site from having full control of MIDI devices +@@ -13121,7 +13121,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + View and manage saved passwords in your $1Google Account + + +- https://passwords.google.com ++ https://passwords.9oo91e.qjz9zk + + + +@@ -13153,10 +13153,10 @@ Please help our engineers fix this problem. Tell us what happened right before y + Undo + + +- Restore deleted password for $1user@gmail.com ++ Restore deleted password for $1user@9ma1l.qjz9zk + + +- Delete password for $1user@gmail.com ++ Delete password for $1user@9ma1l.qjz9zk + + + +@@ -13184,7 +13184,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Update + + +- Username: $1user@gmail.com ++ Username: $1user@9ma1l.qjz9zk + + + Username +@@ -13291,19 +13291,19 @@ Please help our engineers fix this problem. Tell us what happened right before y + An extension triggered full screen. + + +- $1google.com is now full screen. ++ $19oo91e.qjz9zk is now full screen. + + + This page is now full screen. + + +- $1google.com is now full screen and has disabled your mouse cursor. ++ $19oo91e.qjz9zk is now full screen and has disabled your mouse cursor. + + + This page is now full screen and has disabled your mouse cursor. + + +- $1google.com has disabled your mouse cursor. ++ $19oo91e.qjz9zk has disabled your mouse cursor. + + + This page has disabled your mouse cursor. +@@ -13326,7 +13326,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + This site has been blocked from using motion sensors. + + +- Always allow $1mail.google.com to access sensors ++ Always allow $1mail.9oo91e.qjz9zk to access sensors + + + Continue blocking sensor access +@@ -13353,7 +13353,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Continue allowing sensor access + + +- Always block $1mail.google.com from accessing sensors ++ Always block $1mail.9oo91e.qjz9zk from accessing sensors + + + +@@ -13563,7 +13563,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + The site will be able to see the contents of your screen + + +- $1Google Hangouts wants to share the contents of your screen with $2https://google.com. ++ $1Google Hangouts wants to share the contents of your screen with $2https://9oo91e.qjz9zk. + + + Share system audio +@@ -13718,8 +13718,8 @@ Please help our engineers fix this problem. Tell us what happened right before y + + $1Google Photos - Serial port connected + +- +- $1www.google.com - Network error ++ ++ $1www.9oo91e.qjz9zk - Network error + + + $1Google Search - Crashed +@@ -13982,7 +13982,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- Go to $1www.google.com to connect. ++ Go to $1www.9oo91e.qjz9zk to connect. + + + $1Nexus 5 detected +@@ -14128,7 +14128,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to connect to a serial port ++ $1www.9oo91e.qjz9zk wants to connect to a serial port + + + $1Virtual COM Port ($2COM1) +@@ -14165,7 +14165,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to connect to a HID device ++ $1www.9oo91e.qjz9zk wants to connect to a HID device + + + Unknown Device ($11234:abcd) +@@ -14247,7 +14247,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1www.google.com wants to use local fonts ++ $1www.9oo91e.qjz9zk wants to use local fonts + + + No matching font found. +@@ -14390,7 +14390,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- $1maps.google.com ++ $1maps.9oo91e.qjz9zk + wants to see the make and model of your Security Key + + +@@ -14620,7 +14620,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- Use your security key with $1google.com ++ Use your security key with $19oo91e.qjz9zk + + + Continue +@@ -14637,7 +14637,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + Your phone with a USB cable + +- ++ + Windows Hello or external security key + + +@@ -14677,7 +14677,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + No passkeys available + + +- There aren't any passkeys for $1google.com on this device ++ There aren't any passkeys for $19oo91e.qjz9zk on this device + + + Turn on Bluetooth? +@@ -14763,7 +14763,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Use a different phone or tablet + + +- Use a passkey from $1Ted's Pixel 6 Pro to sign in to $2accounts.google.com ++ Use a passkey from $1Ted's Pixel 6 Pro to sign in to $2accounts.9oo91e.qjz9zk + + + +@@ -14862,7 +14862,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + Your device can't be used with this site + + +- accounts.google.com$1 may require a newer or different kind of device ++ accounts.9oo91e.qjz9zk$1 may require a newer or different kind of device + + + Your security key does not have enough space for any more accounts. +@@ -14871,13 +14871,13 @@ Please help our engineers fix this problem. Tell us what happened right before y + Allow this site to see your security key? + + +- accounts.google.com$1 wants to see the make and model of your security key ++ accounts.9oo91e.qjz9zk$1 wants to see the make and model of your security key + + + Allow this site to identify your security key? + + +- accounts.google.com$1 issued your security key and wants to learn its ID number. The site will know exactly which security key you're using. ++ accounts.9oo91e.qjz9zk$1 issued your security key and wants to learn its ID number. The site will know exactly which security key you're using. + + + Allow +@@ -14909,10 +14909,10 @@ Please help our engineers fix this problem. Tell us what happened right before y + + This passkey will only be saved on this device. It will remain on this device after you close all Incognito windows. + +- ++ + This passkey will only be saved in Windows Hello + +- ++ + This passkey will be saved only in Windows Hello. It will remain on this device after you close all Incognito windows. + + +@@ -15294,7 +15294,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + + +- Also clear browsing data ($1www.google.com) which may sign you out of Google.com. $2Learn more ++ Also clear browsing data ($1www.9oo91e.qjz9zk) which may sign you out of Google.com. $2Learn more + + + +@@ -15664,7 +15664,7 @@ Please help our engineers fix this problem. Tell us what happened right before y + + Help us build a more private web + +- ++ + Help us build a better web + + +diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd +index 9eca0d98d29b4..c2feae996103c 100644 +--- a/chrome/app/google_chrome_strings.grd ++++ b/chrome/app/google_chrome_strings.grd +@@ -472,7 +472,7 @@ chromium_strings.grd. --> + To send a number from here to your Android phone, sign in to Chrome on both devices. + + +- To send a number from $1www.google.com to your Android phone, sign in to Chrome on both devices. ++ To send a number from $1www.9oo91e.qjz9zk to your Android phone, sign in to Chrome on both devices. + + + Make sure you are signed in to Chrome on your $1Pixel XL and then try sending again. +@@ -537,9 +537,9 @@ Google Chrome is unable to recover your settings. + + + +-If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chrome browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://google.com/">add a new person</a> to your $2Chromebook. ++If you want to use this account one-time only, you can use <a id="guestModeLink" href="#">Guest mode</a> in Chrome browser. If you want to add an account for someone else, <a target="_blank" id="newPersonLink" href="$1https://9oo91e.qjz9zk/">add a new person</a> to your $2Chromebook. + +-Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://google.com/">Settings</a>. ++Permissions you've already given to websites and apps may apply to this account. You can manage your Google Accounts in <a id="osSettingsLink" href="$3https://9oo91e.qjz9zk/">Settings</a>. + + + +@@ -757,7 +757,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- Also clear data from Chrome ($1www.google.com) ++ Also clear data from Chrome ($1www.9oo91e.qjz9zk) + + + +@@ -897,7 +897,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- You were signed in to Chrome as $1foo@gmail.com. Please use the same account to sign in again. ++ You were signed in to Chrome as $1foo@9ma1l.qjz9zk. Please use the same account to sign in again. + + + Someone previously signed in to Chrome on this computer as $1user@example.com. Please create a new Chrome user to keep your information separate. +@@ -932,7 +932,7 @@ Permissions you've already given to websites and apps may apply to this account. + You're signed in to Chrome! + + +- You're signed in as $1foo@gmail.com. Now you can access your bookmarks, history, and other settings on all your signed in devices. ++ You're signed in as $1foo@9ma1l.qjz9zk. Now you can access your bookmarks, history, and other settings on all your signed in devices. + + + +@@ -954,7 +954,7 @@ Permissions you've already given to websites and apps may apply to this account. + + + +- $1foo@gmail.com was previously using Chrome ++ $1foo@9ma1l.qjz9zk was previously using Chrome + + + +@@ -973,10 +973,10 @@ Permissions you've already given to websites and apps may apply to this account. + $1Elisa is already signed in to this Chrome profile. To keep your browsing separate, Chrome can create your own profile for you. + + +- $1Elisa is already signed in to this Chrome profile. This will create a new Chrome profile for $2foo@gmail.com ++ $1Elisa is already signed in to this Chrome profile. This will create a new Chrome profile for $2foo@9ma1l.qjz9zk + + +- This will create a new Chrome profile for $1foo@gmail.com ++ This will create a new Chrome profile for $1foo@9ma1l.qjz9zk + + + Another account is already signed in. To keep your browsing separate, Chrome can create your own profile for you. +@@ -1612,7 +1612,7 @@ Permissions you've already given to websites and apps may apply to this account. + Welcome to Chrome + + +- Get your Chrome browser stuff from $1Jane.Doe@gmail.com ++ Get your Chrome browser stuff from $1Jane.Doe@9ma1l.qjz9zk + + + Your account is managed by $1example.com. Your administrator can see and edit this Chrome browser profile and its data like bookmarks, history, and passwords. +diff --git a/chrome/app/resources/locale_settings.grd b/chrome/app/resources/locale_settings.grd +index 5c00a4601bbd1..492416f16954e 100644 +--- a/chrome/app/resources/locale_settings.grd ++++ b/chrome/app/resources/locale_settings.grd +@@ -168,12 +168,12 @@ + + + +- https://chrome.google.com/webstore?hl=[GRITLANGCODE]&category=theme ++ https://chrome.9oo91e.qjz9zk/webstore?hl=[GRITLANGCODE]&category=theme + + + + +- https://chrome.google.com/webstore?hl=[GRITLANGCODE] ++ https://chrome.9oo91e.qjz9zk/webstore?hl=[GRITLANGCODE] + + + +@@ -183,18 +183,18 @@ + + + +- https://support.google.com/chromebook/answer/183084?hl=[GRITLANGCODE] ++ https://support.9oo91e.qjz9zk/chromebook/answer/183084?hl=[GRITLANGCODE] + + + + + +- https://myactivity.google.com/myactivity/?utm_source=chrome_n ++ https://myactivity.9oo91e.qjz9zk/myactivity/?utm_source=chrome_n + + + + +- https://myactivity.google.com/myactivity/?utm_source=chrome_h ++ https://myactivity.9oo91e.qjz9zk/myactivity/?utm_source=chrome_h + + + +diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc +index f2a3a74ad3e41..a44050490e81a 100644 +--- a/chrome/browser/about_flags.cc ++++ b/chrome/browser/about_flags.cc +@@ -3,7 +3,7 @@ + // found in the LICENSE file. + + // Instructions for adding new entries to this file: +-// https://chromium.googlesource.com/chromium/src/+/main/docs/how_to_add_your_feature_flag.md#step-2_adding-the-feature-flag-to-the-chrome_flags-ui ++// https://chromium.9oo91esource.qjz9zk/chromium/src/+/main/docs/how_to_add_your_feature_flag.md#step-2_adding-the-feature-flag-to-the-chrome_flags-ui + + #include "chrome/browser/about_flags.h" + +@@ -3285,7 +3285,7 @@ constexpr FeatureEntry::FeatureVariation kLensImageFormatVariations[] = { + constexpr FeatureEntry::FeatureParam kPingLensSequentially[] = { + {"ping-lens-sequentially", "true"}}; + constexpr FeatureEntry::FeatureParam kLensPingURL[] = { +- {"lens-ping-url", "https://lens.google.com/_/LensWebStandaloneUi/gen204/"}}; ++ {"lens-ping-url", "https://lens.9oo91e.qjz9zk/_/LensWebStandaloneUi/gen204/"}}; + constexpr FeatureEntry::FeatureVariation kLensPingVariations[] = { + {"ping sequentially", kPingLensSequentially, + std::size(kPingLensSequentially), nullptr}, +@@ -3295,9 +3295,9 @@ constexpr FeatureEntry::FeatureVariation kLensPingVariations[] = { + #if BUILDFLAG(ENABLE_LENS_DESKTOP_GOOGLE_BRANDED_FEATURES) + constexpr FeatureEntry::FeatureParam kCscStagingEnvVariation[] = { + {"companion-homepage-url", +- "https://lens-staging.corp.google.com/companion"}, ++ "https://lens-staging.corp.9oo91e.qjz9zk/companion"}, + {"companion-image-upload-url", +- "https://lens-staging.corp.google.com/v2/upload"}}; ++ "https://lens-staging.corp.9oo91e.qjz9zk/v2/upload"}}; + constexpr FeatureEntry::FeatureParam kCscClobberVariation[] = { + {"open-links-in-current-tab", "true"}, + }; +@@ -4997,7 +4997,7 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kSyncSandboxDescription, kOsAll, + SINGLE_VALUE_TYPE_AND_VALUE( + syncer::kSyncServiceURL, +- "https://chrome-sync.sandbox.google.com/chrome-sync/alpha")}, ++ "https://chrome-sync.sandbox.9oo91e.qjz9zk/chrome-sync/alpha")}, + #if !BUILDFLAG(IS_ANDROID) + {"media-router-cast-allow-all-ips", + flag_descriptions::kMediaRouterCastAllowAllIPsName, +@@ -5326,7 +5326,7 @@ const FeatureEntry kFeatureEntries[] = { + flag_descriptions::kSetMarketUrlForTestingName, + flag_descriptions::kSetMarketUrlForTestingDescription, kOsAndroid, + SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting, +- "https://play.google.com/store/apps/" ++ "https://play.9oo91e.qjz9zk/store/apps/" + "details?id=com.android.chrome")}, + {"omaha-min-sdk-version-android", + flag_descriptions::kOmahaMinSdkVersionAndroidName, +diff --git a/chrome/browser/android/webapk/webapk_installer.cc b/chrome/browser/android/webapk/webapk_installer.cc +index 736bc67ec53e0..89c0d4cf08bfe 100644 +--- a/chrome/browser/android/webapk/webapk_installer.cc ++++ b/chrome/browser/android/webapk/webapk_installer.cc +@@ -524,7 +524,7 @@ void WebApkInstaller::OnHaveSufficientSpaceForInstall() { + "apps on Android so that they show up in the user's app drawer and " + "optionally home screen. Web apps installed in this way are called " + "WebAPKs. See " +- "https://developers.google.com/web/fundamentals/integration/webapks " ++ "https://developers.9oo91e.qjz9zk/web/fundamentals/integration/webapks " + "for more details. WebAPKs are created on a Google server on " + "behalf of the Chrome client and the requesting app. In order for " + "the server to create a WebAPK, it first needs to know metadata " +@@ -617,7 +617,7 @@ void WebApkInstaller::OnInstallProtoBuilt( + "Android so that they show up in the user's app drawer and " + "optionally home screen. Web apps installed in this way are called " + "WebAPKs. See " +- "https://developers.google.com/web/fundamentals/integration/webapks " ++ "https://developers.9oo91e.qjz9zk/web/fundamentals/integration/webapks " + "for more details. WebAPKs are created on a Google server on " + "behalf of the Chrome client and the user. In order for the server " + "to create a WebAPK, it first needs to know metadata about the web " +diff --git a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc +index b800239b1df25..f42a1070bc0b8 100644 +--- a/chrome/browser/apps/app_service/webapk/webapk_install_task.cc ++++ b/chrome/browser/apps/app_service/webapk/webapk_install_task.cc +@@ -67,7 +67,7 @@ const uint64_t kMurmur2HashSeed = 0; + constexpr base::TimeDelta kMinterResponseTimeout = base::Seconds(60); + + constexpr char kWebApkServerUrl[] = +- "https://webapk.googleapis.com/v1/webApks?key="; ++ "https://webapk.9oo91eapis.qjz9zk/v1/webApks?key="; + + constexpr net::NetworkTrafficAnnotationTag kWebApksTrafficAnnotation = + net::DefineNetworkTrafficAnnotation("webapk_minter_install_request", +@@ -88,7 +88,7 @@ constexpr net::NetworkTrafficAnnotationTag kWebApksTrafficAnnotation = + destination: GOOGLE_OWNED_SERVICE + internal { + contacts { +- email: "tsergeant@google.com" ++ email: "tsergeant@9oo91e.qjz9zk" + } + } + user_data { +diff --git a/chrome/browser/apps/digital_goods/digital_goods_ash.cc b/chrome/browser/apps/digital_goods/digital_goods_ash.cc +index 983defd891bb7..94ab7b65a0eee 100644 +--- a/chrome/browser/apps/digital_goods/digital_goods_ash.cc ++++ b/chrome/browser/apps/digital_goods/digital_goods_ash.cc +@@ -21,7 +21,7 @@ namespace apps { + + namespace { + +-constexpr char kSupportedPaymentMethod[] = "https://play.google.com/billing"; ++constexpr char kSupportedPaymentMethod[] = "https://play.9oo91e.qjz9zk/billing"; + + // Gets the package name of the Android app linked to this web app. + absl::optional GetTwaPackageName(const std::string& app_id) { +diff --git a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc +index 48df1e5de098d..add317a701fe2 100644 +--- a/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc ++++ b/chrome/browser/apps/digital_goods/digital_goods_factory_impl.cc +@@ -16,7 +16,7 @@ + + namespace { + +-constexpr char kSupportedPaymentMethod[] = "https://play.google.com/billing"; ++constexpr char kSupportedPaymentMethod[] = "https://play.9oo91e.qjz9zk/billing"; + + } // namespace + +diff --git a/chrome/browser/apps/platform_apps/install_chrome_app.cc b/chrome/browser/apps/platform_apps/install_chrome_app.cc +index 4efeab65cc93b..8fb41a0bf28da 100644 +--- a/chrome/browser/apps/platform_apps/install_chrome_app.cc ++++ b/chrome/browser/apps/platform_apps/install_chrome_app.cc +@@ -25,7 +25,7 @@ namespace { + + // The URL to the webstore page for a specific app. + const char kWebstoreUrlFormat[] = +- "https://chrome.google.com/webstore/detail/%s"; ++ "https://chrome.9oo91e.qjz9zk/webstore/detail/%s"; + + // Error given when the extension is not an app. + const char kInstallChromeAppErrorNotAnApp[] = +diff --git a/chrome/browser/ash/android_sms/android_sms_urls.cc b/chrome/browser/ash/android_sms/android_sms_urls.cc +index a85428f7fa026..cb91a3b3ce757 100644 +--- a/chrome/browser/ash/android_sms/android_sms_urls.cc ++++ b/chrome/browser/ash/android_sms/android_sms_urls.cc +@@ -17,16 +17,16 @@ namespace android_sms { + + namespace { + +-// Note: Install and app URLs are the same for the android.com domain. +-const char kProdAndroidUrl[] = "https://messages.android.com/"; ++// Note: Install and app URLs are the same for the 8n6r01d.qjz9zk domain. ++const char kProdAndroidUrl[] = "https://messages.8n6r01d.qjz9zk/"; + +-const char kProdGoogleAppUrl[] = "https://messages.google.com/web/"; ++const char kProdGoogleAppUrl[] = "https://messages.9oo91e.qjz9zk/web/"; + const char kProdGoogleInstallUrl[] = +- "https://messages.google.com/web/authentication"; ++ "https://messages.9oo91e.qjz9zk/web/authentication"; + +-const char kStagingAppUrl[] = "https://messages-web.sandbox.google.com/web/"; ++const char kStagingAppUrl[] = "https://messages-web.sandbox.9oo91e.qjz9zk/web/"; + const char kStagingInstallUrl[] = +- "https://messages-web.sandbox.google.com/web/authentication"; ++ "https://messages-web.sandbox.9oo91e.qjz9zk/web/authentication"; + + GURL GetCustomDomain(bool use_install_url) { + std::string custom_domain = +@@ -52,13 +52,13 @@ GURL GetCustomDomain(bool use_install_url) { + std::ostream& operator<<(std::ostream& stream, const PwaDomain& pwa_domain) { + switch (pwa_domain) { + case PwaDomain::kProdAndroid: +- stream << "[Production: messages.android.com]"; ++ stream << "[Production: messages.8n6r01d.qjz9zk]"; + break; + case PwaDomain::kProdGoogle: +- stream << "[Production: messages.google.com]"; ++ stream << "[Production: messages.9oo91e.qjz9zk]"; + break; + case PwaDomain::kStaging: +- stream << "[Staging: messages-web.sandbox.google.com]"; ++ stream << "[Staging: messages-web.sandbox.9oo91e.qjz9zk]"; + break; + } + return stream; +diff --git a/chrome/browser/ash/app_mode/fake_cws.cc b/chrome/browser/ash/app_mode/fake_cws.cc +index ada4a719fa904..788a2f7d77be6 100644 +--- a/chrome/browser/ash/app_mode/fake_cws.cc ++++ b/chrome/browser/ash/app_mode/fake_cws.cc +@@ -57,7 +57,7 @@ const char kPrivateStoreAppHasUpdateTemplate[] = + + const char kUpdateContentTemplate[] = + "" +- "" + "" + "$APPS" +diff --git a/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc b/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc +index a05823ec8df1a..6a8fa348d1032 100644 +--- a/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc ++++ b/chrome/browser/ash/arc/auth/arc_background_auth_code_fetcher.cc +@@ -46,7 +46,7 @@ constexpr char kDeviceType[] = "device_type"; + constexpr char kDeviceTypeArc[] = "arc_plus_plus"; + constexpr char kClientId[] = "client_id"; + constexpr char kClientIdArc[] = +- "1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.googleusercontent.com"; ++ "1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.9oo91eusercontent.qjz9zk"; + constexpr char kRefreshToken[] = "refresh_token"; + constexpr char kGetAuthCodeKey[] = "Content-Type"; + constexpr char kGetAuthCodeValue[] = "application/json; charset=utf-8"; +@@ -63,7 +63,7 @@ signin::ScopeSet GetAccessTokenScopes() { + } // namespace + + const char kTokenBootstrapEndPoint[] = +- "https://oauthtokenbootstrap.googleapis.com/v1/tokenbootstrap"; ++ "https://oauthtokenbootstrap.9oo91eapis.qjz9zk/v1/tokenbootstrap"; + + ArcBackgroundAuthCodeFetcher::ArcBackgroundAuthCodeFetcher( + scoped_refptr url_loader_factory, +@@ -152,7 +152,7 @@ void ArcBackgroundAuthCodeFetcher::OnAccessTokenFetchComplete( + destination: GOOGLE_OWNED_SERVICE + internal { + contacts { +- email: "arc-core@google.com" ++ email: "arc-core@9oo91e.qjz9zk" + } + } + user_data { +diff --git a/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc b/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc +index 92e40b8b057b2..cb5fa07b55e9a 100644 +--- a/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc ++++ b/chrome/browser/ash/arc/auth/arc_robot_auth_code_fetcher.cc +@@ -24,7 +24,7 @@ namespace { + + // OAuth2 Client id of Android. + constexpr char kAndoidClientId[] = +- "1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.googleusercontent.com"; ++ "1070009224336-sdh77n7uot3oc99ais00jmuft6sk2fg9.apps.9oo91eusercontent.qjz9zk"; + + policy::DeviceManagementService* GetDeviceManagementService() { + policy::BrowserPolicyConnectorAsh* const connector = +diff --git a/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc b/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc +index dae0bc7f114b9..3897d2dcae720 100644 +--- a/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc ++++ b/chrome/browser/ash/arc/input_overlay/ui/input_menu_view.cc +@@ -81,7 +81,7 @@ constexpr int kAlphaLeftMargin = 8; + constexpr int kAlphaLeftMarginSmall = 4; + + constexpr char kFeedbackUrl[] = +- "https://docs.google.com/forms/d/e/" ++ "https://docs.9oo91e.qjz9zk/forms/d/e/" + "1FAIpQLSfL3ttPmopJj65P4EKr--SA18Sc9bbQVMnd0oueMhJu_42TbA/" + "viewform?usp=pp_url"; + // Entry for the survey form from above link. +diff --git a/chrome/browser/ash/assistant/assistant_util.cc b/chrome/browser/ash/assistant/assistant_util.cc +index fdf3211046ad1..10528d2bf60bc 100644 +--- a/chrome/browser/ash/assistant/assistant_util.cc ++++ b/chrome/browser/ash/assistant/assistant_util.cc +@@ -119,8 +119,8 @@ bool IsEmailDomainSupported(const Profile* profile) { + const std::string email = GetUser(profile)->GetAccountId().GetUserEmail(); + DCHECK(!email.empty()); + +- return (gaia::ExtractDomainName(email) == "gmail.com" || +- gaia::ExtractDomainName(email) == "googlemail.com" || ++ return (gaia::ExtractDomainName(email) == "9ma1l.qjz9zk" || ++ gaia::ExtractDomainName(email) == "9oo91email.qjz9zk" || + gaia::IsGoogleInternalAccountEmail(email)); + } + +diff --git a/chrome/browser/ash/attestation/attestation_ca_client.cc b/chrome/browser/ash/attestation/attestation_ca_client.cc +index d50f887148715..37c7da8a751bc 100644 +--- a/chrome/browser/ash/attestation/attestation_ca_client.cc ++++ b/chrome/browser/ash/attestation/attestation_ca_client.cc +@@ -32,15 +32,15 @@ const char kAttestationServerTest[] = "test"; + + // Endpoints for the default Google Privacy CA operations. + const char kDefaultEnrollRequestURL[] = +- "https://chromeos-ca.gstatic.com/enroll"; ++ "https://chromeos-ca.95tat1c.qjz9zk/enroll"; + const char kDefaultCertificateRequestURL[] = +- "https://chromeos-ca.gstatic.com/sign"; ++ "https://chromeos-ca.95tat1c.qjz9zk/sign"; + + // Endpoints for the test Google Privacy CA operations. + const char kTestEnrollRequestURL[] = +- "https://asbestos-qa.corp.google.com/enroll"; ++ "https://asbestos-qa.corp.9oo91e.qjz9zk/enroll"; + const char kTestCertificateRequestURL[] = +- "https://asbestos-qa.corp.google.com/sign"; ++ "https://asbestos-qa.corp.9oo91e.qjz9zk/sign"; + + const char kMimeContentType[] = "application/octet-stream"; + +diff --git a/chrome/browser/ash/child_accounts/child_user_service.cc b/chrome/browser/ash/child_accounts/child_user_service.cc +index 044c1e6c6f656..02310e896046d 100644 +--- a/chrome/browser/ash/child_accounts/child_user_service.cc ++++ b/chrome/browser/ash/child_accounts/child_user_service.cc +@@ -61,7 +61,7 @@ const char ChildUserService::kFamilyLinkHelperAppPackageName[] = + "com.google.android.apps.kids.familylinkhelper"; + // static + const char ChildUserService::kFamilyLinkHelperAppPlayStoreURL[] = +- "https://play.google.com/store/apps/" ++ "https://play.9oo91e.qjz9zk/store/apps/" + "details?id=com.google.android.apps.kids.familylinkhelper"; + + ChildUserService::TestApi::TestApi(ChildUserService* service) +diff --git a/chrome/browser/ash/crostini/crostini_util.cc b/chrome/browser/ash/crostini/crostini_util.cc +index 4835106ac799b..41cf73f0ac5e3 100644 +--- a/chrome/browser/ash/crostini/crostini_util.cc ++++ b/chrome/browser/ash/crostini/crostini_util.cc +@@ -58,7 +58,7 @@ const char kCrostiniDefaultVmName[] = "termina"; + const char kCrostiniDefaultContainerName[] = "penguin"; + const char kCrostiniDefaultUsername[] = "emperor"; + const char kCrostiniDefaultImageServerUrl[] = +- "https://storage.googleapis.com/cros-containers/%d"; ++ "https://storage.9oo91eapis.qjz9zk/cros-containers/%d"; + const char kCrostiniDlcName[] = "termina-dlc"; + + const base::FilePath::CharType kHomeDirectory[] = +diff --git a/chrome/browser/ash/customization/customization_document.cc b/chrome/browser/ash/customization/customization_document.cc +index d6822e7fe5c78..f1e9fa2728ee4 100644 +--- a/chrome/browser/ash/customization/customization_document.cc ++++ b/chrome/browser/ash/customization/customization_document.cc +@@ -202,7 +202,7 @@ std::string ReadFileInBackground(const base::FilePath& file) { + + // Template URL where to fetch OEM services customization manifest from. + const char ServicesCustomizationDocument::kManifestUrl[] = +- "https://ssl.gstatic.com/chrome/chromeos-customization/%s.json"; ++ "https://ssl.95tat1c.qjz9zk/chrome/chromeos-customization/%s.json"; + + // A custom extensions::ExternalLoader that the ServicesCustomizationDocument + // creates and uses to publish OEM default apps to the extensions system. +diff --git a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc +index 7c98552599ca4..b0a26270eff1c 100644 +--- a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc ++++ b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_constants.cc +@@ -10,7 +10,7 @@ namespace enhanced_network_tts { + const char kGoogApiKeyHeader[] = "X-Goog-Api-Key"; + + const char kReadAloudServerUrl[] = +- "https://readaloud.googleapis.com//v1:generateAudioDocStream"; ++ "https://readaloud.9oo91eapis.qjz9zk//v1:generateAudioDocStream"; + + const char kNetworkRequestUploadType[] = "application/json"; + +diff --git a/chrome/browser/ash/file_manager/file_manager_string_util.cc b/chrome/browser/ash/file_manager/file_manager_string_util.cc +index 2b73a7d7c89af..6ef0b7e1a0b7e 100644 +--- a/chrome/browser/ash/file_manager/file_manager_string_util.cc ++++ b/chrome/browser/ash/file_manager/file_manager_string_util.cc +@@ -46,33 +46,33 @@ namespace { + + // Location of the page to buy more storage for Google Drive. + const char kGoogleDriveBuyStorageUrl[] = +- "https://www.google.com/settings/storage"; ++ "https://www.9oo91e.qjz9zk/settings/storage"; + + // Location of the page to manage Google Drive storage. + const char kGoogleDriveManageStorageUrl[] = +- "https://drive.google.com/drive/u/0/quota"; ++ "https://drive.9oo91e.qjz9zk/drive/u/0/quota"; + + // Location of the page to manage enterprise Google Drive storage. + const char kGoogleDriveEnterpriseManageStorageUrl[] = +- "https://drive.google.com/corp/drive/quota"; ++ "https://drive.9oo91e.qjz9zk/corp/drive/quota"; + + // Location of the overview page about Google Drive. + const char kGoogleDriveOverviewUrl[] = +- "https://support.google.com/chromebook/?p=filemanager_drive"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=filemanager_drive"; + + // Location of Google Drive specific help. + const char kGoogleDriveHelpUrl[] = +- "https://support.google.com/chromebook/?p=filemanager_drivehelp"; ++ "https://support.9oo91e.qjz9zk/chromebook/?p=filemanager_drivehelp"; + + // Location of the help page about making Google Drive files available offline. + const char kGoogleDriveOfflineHelpUrl[] = +- "http://support.google.com/chromebook/?p=offline_files"; ++ "http://support.9oo91e.qjz9zk/chromebook/?p=offline_files"; + + // Location of Google Drive root. +-const char kGoogleDriveRootUrl[] = "https://drive.google.com"; ++const char kGoogleDriveRootUrl[] = "https://drive.9oo91e.qjz9zk"; + + // Printf format +-const char kHelpURLFormat[] = "https://support.google.com/chromebook/answer/%d"; ++const char kHelpURLFormat[] = "https://support.9oo91e.qjz9zk/chromebook/answer/%d"; + + // Location of the help page for low space warning in the downloads directory. + const int kDownloadsLowSpaceWarningHelpNumber = 1061547; +diff --git a/chrome/browser/ash/file_manager/open_with_browser.cc b/chrome/browser/ash/file_manager/open_with_browser.cc +index d3b93443f145c..a6f5fb73b10fd 100644 +--- a/chrome/browser/ash/file_manager/open_with_browser.cc ++++ b/chrome/browser/ash/file_manager/open_with_browser.cc +@@ -211,24 +211,24 @@ bool OpenNewTabForHostedOfficeFile(const GURL& url) { + LOG(ERROR) << "Invalid URL"; + return false; + } +- if (url_with_query_param.host() == "drive.google.com") { ++ if (url_with_query_param.host() == "drive.9oo91e.qjz9zk") { + UMA_HISTOGRAM_ENUMERATION( + file_tasks::kDriveErrorMetricName, + file_tasks::OfficeDriveOpenErrors::kDriveAlternateUrl); + UMA_HISTOGRAM_ENUMERATION( + ash::cloud_upload::kGoogleDriveTaskResultMetricName, + ash::cloud_upload::OfficeTaskResult::kFailedToOpen); +- LOG(ERROR) << "URL was from drive.google.com"; ++ LOG(ERROR) << "URL was from drive.9oo91e.qjz9zk"; + return false; + } +- if (url_with_query_param.host() != "docs.google.com") { ++ if (url_with_query_param.host() != "docs.9oo91e.qjz9zk") { + UMA_HISTOGRAM_ENUMERATION( + file_tasks::kDriveErrorMetricName, + file_tasks::OfficeDriveOpenErrors::kUnexpectedAlternateUrl); + UMA_HISTOGRAM_ENUMERATION( + ash::cloud_upload::kGoogleDriveTaskResultMetricName, + ash::cloud_upload::OfficeTaskResult::kFailedToOpen); +- LOG(ERROR) << "URL was not from docs.google.com"; ++ LOG(ERROR) << "URL was not from docs.9oo91e.qjz9zk"; + return false; + } + UMA_HISTOGRAM_ENUMERATION(file_tasks::kDriveErrorMetricName, +diff --git a/chrome/browser/ash/hats/hats_dialog.cc b/chrome/browser/ash/hats/hats_dialog.cc +index 6a90316a3061f..6ba825582c67c 100644 +--- a/chrome/browser/ash/hats/hats_dialog.cc ++++ b/chrome/browser/ash/hats/hats_dialog.cc +@@ -61,7 +61,7 @@ const char kClientQuestionAnsweredRegex[] = "answer-(\\d+)-((?:\\d+,?)+)"; + const char kClientQuestionAnsweredScoreRegex[] = "(\\d+),?"; + + constexpr char kCrOSHaTSURL[] = +- "https://storage.googleapis.com/chromeos-hats-web-stable/index.html"; ++ "https://storage.9oo91eapis.qjz9zk/chromeos-hats-web-stable/index.html"; + + } // namespace + +diff --git a/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc b/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc +index 72a475142346a..46c5f80f71d2d 100644 +--- a/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc ++++ b/chrome/browser/ash/input_method/assistive_suggester_client_filter.cc +@@ -27,17 +27,17 @@ namespace { + const char* kAllowedDomainAndPathsForPersonalInfoSuggester[][2] = { + {"discord.com", ""}, {"messenger.com", ""}, + {"web.whatsapp.com", ""}, {"web.skype.com", ""}, +- {"duo.google.com", ""}, {"hangouts.google.com", ""}, +- {"messages.google.com", ""}, {"web.telegram.org", ""}, +- {"voice.google.com", ""}, {"mail.google.com", "/chat"}, ++ {"duo.9oo91e.qjz9zk", ""}, {"hangouts.9oo91e.qjz9zk", ""}, ++ {"messages.9oo91e.qjz9zk", ""}, {"web.telegram.org", ""}, ++ {"voice.9oo91e.qjz9zk", ""}, {"mail.9oo91e.qjz9zk", "/chat"}, + }; + + const char* kAllowedDomainAndPathsForEmojiSuggester[][2] = { + {"discord.com", ""}, {"messenger.com", ""}, + {"web.whatsapp.com", ""}, {"web.skype.com", ""}, +- {"duo.google.com", ""}, {"hangouts.google.com", ""}, +- {"messages.google.com", ""}, {"web.telegram.org", ""}, +- {"voice.google.com", ""}, {"mail.google.com", "/chat"}, ++ {"duo.9oo91e.qjz9zk", ""}, {"hangouts.9oo91e.qjz9zk", ""}, ++ {"messages.9oo91e.qjz9zk", ""}, {"web.telegram.org", ""}, ++ {"voice.9oo91e.qjz9zk", ""}, {"mail.9oo91e.qjz9zk", "/chat"}, + }; + + const char* kTestUrls[] = { +@@ -48,7 +48,7 @@ const char* kTestUrls[] = { + + // For some internal websites, we do not want to reveal their urls in plain + // text. See map between url and hash code in +-// https://docs.google.com/spreadsheets/d/1VELTWiHrUTEyX4HQI5PL_jDVFreM-lRhThVOurUuOk4/edit#gid=0 ++// https://docs.9oo91e.qjz9zk/spreadsheets/d/1VELTWiHrUTEyX4HQI5PL_jDVFreM-lRhThVOurUuOk4/edit#gid=0 + const uint32_t kHashedInternalUrls[] = { + 1845308025U, + 153302869U, +diff --git a/chrome/browser/ash/login/marketing_backend_connector.cc b/chrome/browser/ash/login/marketing_backend_connector.cc +index b97cd0bbbfbaf..f58fe872ede14 100644 +--- a/chrome/browser/ash/login/marketing_backend_connector.cc ++++ b/chrome/browser/ash/login/marketing_backend_connector.cc +@@ -33,10 +33,10 @@ namespace { + + // The scope that will be used to access the ChromebookEmailService API. + const char kChromebookOAuth2Scope[] = +- "https://www.googleapis.com/auth/chromebook.email"; ++ "https://www.9oo91eapis.qjz9zk/auth/chromebook.email"; + + // API Endpoint +-const char kAccessPointsApiEndpoint[] = "https://accesspoints.googleapis.com/"; ++const char kAccessPointsApiEndpoint[] = "https://accesspoints.9oo91eapis.qjz9zk/"; + const char kChromebookEmailServicePath[] = "v2/chromebookEmailPreferences"; + constexpr size_t kResponseMaxBodySize = 4 * 1024 * 1024; // 4MiB + +diff --git a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc +index 4629d56de2245..60b8e98d57eb2 100644 +--- a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc ++++ b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc +@@ -70,7 +70,7 @@ const char kAcceptValue[] = + "Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + + const char kPasswordSyncTokenBaseEndPoint[] = +- "https://chromedevicetoken.googleapis.com/v1/tokens"; ++ "https://chromedevicetoken.9oo91eapis.qjz9zk/v1/tokens"; + + const char kPasswordSyncTokenCreateEndPoint[] = ""; + +diff --git a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc +index a2b7608bde123..0c53f81fd3ed1 100644 +--- a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc ++++ b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc +@@ -37,7 +37,7 @@ namespace ash { + namespace { + + constexpr const char kGetRevisedAppListUrl[] = +- "https://android.clients.google.com/fdfe/chrome/getSetupAppRecommendations"; ++ "https://android.clients.9oo91e.qjz9zk/fdfe/chrome/getSetupAppRecommendations"; + + constexpr int kResponseErrorNotEnoughApps = 5; + +diff --git a/chrome/browser/ash/login/users/default_user_image/default_user_images.cc b/chrome/browser/ash/login/users/default_user_image/default_user_images.cc +index 166fce15f8df4..afe1547e08d66 100644 +--- a/chrome/browser/ash/login/users/default_user_image/default_user_images.cc ++++ b/chrome/browser/ash/login/users/default_user_image/default_user_images.cc +@@ -296,7 +296,7 @@ const DefaultImageSourceInfoIds kDefaultImageSourceInfoIds[] = { + }; + + constexpr char kGstaticImagePrefix[] = +- "https://www.gstatic.com/chromecast/home/chromeos/avatars/"; ++ "https://www.95tat1c.qjz9zk/chromecast/home/chromeos/avatars/"; + constexpr char k100PercentPrefix[] = "default_100_percent/"; + constexpr char k200PercentPrefix[] = "default_200_percent/"; + +diff --git a/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc b/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc +index 275dbcb734a71..87fe7c7b02a41 100644 +--- a/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/arc_dns_resolution_routine.cc +@@ -20,9 +20,9 @@ namespace mojom = ::chromeos::network_diagnostics::mojom; + + // These hostnames were chosen because they need to be resolved for a + // successful ARC provisioning step. +-constexpr char kHostname1[] = "www.googleapis.com"; +-constexpr char kHostname2[] = "android.clients.google.com"; +-constexpr char kHostname3[] = "android.googleapis.com"; ++constexpr char kHostname1[] = "www.9oo91eapis.qjz9zk"; ++constexpr char kHostname2[] = "android.clients.9oo91e.qjz9zk"; ++constexpr char kHostname3[] = "android.9oo91eapis.qjz9zk"; + + } // namespace + +diff --git a/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc b/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc +index 6e9a175ca0eae..25523ad65108c 100644 +--- a/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/dns_latency_routine.cc +@@ -43,7 +43,7 @@ constexpr base::TimeDelta kBadLatencyMs = + base::Milliseconds(util::kDnsPotentialProblemLatencyMs); + constexpr base::TimeDelta kVeryBadLatencyMs = + base::Milliseconds(util::kDnsProblemLatencyMs); +-constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.gstatic.com"; ++constexpr char kHostSuffix[] = "-ccd-testing-v4.metric.95tat1c.qjz9zk"; + + const std::string GetRandomString(int length) { + std::string prefix; +diff --git a/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc b/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc +index a95853b9f6d8f..214fd989c8423 100644 +--- a/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/dns_resolution_routine.cc +@@ -27,7 +27,7 @@ namespace { + + namespace mojom = ::chromeos::network_diagnostics::mojom; + +-constexpr char kHostname[] = "ccd-testing-v4.gstatic.com"; ++constexpr char kHostname[] = "ccd-testing-v4.95tat1c.qjz9zk"; + constexpr int kHttpPort = 80; + // For an explanation of error codes, see "net/base/net_error_list.h". + constexpr int kRetryResponseCodes[] = {net::ERR_TIMED_OUT, +diff --git a/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc b/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc +index e8b6b83b4443c..1041a305f3ee0 100644 +--- a/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc ++++ b/chrome/browser/ash/net/network_diagnostics/network_diagnostics_util.cc +@@ -40,14 +40,14 @@ std::vector GetRandomPrefixes(size_t num_prefixes, int length) { + } // namespace + + const char* GetGstaticHostSuffix() { +- static const char* gstatic_host_suffix = "-ccd-testing-v4.metric.gstatic.com"; ++ static const char* gstatic_host_suffix = "-ccd-testing-v4.metric.95tat1c.qjz9zk"; + return gstatic_host_suffix; + } + + const std::vector& GetFixedHosts() { + static base::NoDestructor> fixed_hostnames( +- {"www.google.com", "mail.google.com", "drive.google.com", +- "accounts.google.com", "plus.google.com", "groups.google.com"}); ++ {"www.9oo91e.qjz9zk", "mail.9oo91e.qjz9zk", "drive.9oo91e.qjz9zk", ++ "accounts.9oo91e.qjz9zk", "plus.9oo91e.qjz9zk", "groups.9oo91e.qjz9zk"}); + return *fixed_hostnames; + } + +@@ -201,10 +201,10 @@ std::vector GetTcpPortsForCustomStunServer() { + + std::vector GetDefaultMediaUrls() { + const char* const kHostnames[] = { +- "https://apis.google.com", "https://talkgadget.google.com", +- "https://clients6.google.com", "https://hangouts.google.com", +- "https://client-channel.google.com", "https://googleapis.com", +- "https://accounts.google.com", "https://clients4.google.com"}; ++ "https://apis.9oo91e.qjz9zk", "https://talkgadget.9oo91e.qjz9zk", ++ "https://clients6.9oo91e.qjz9zk", "https://hangouts.9oo91e.qjz9zk", ++ "https://client-channel.9oo91e.qjz9zk", "https://9oo91eapis.qjz9zk", ++ "https://accounts.9oo91e.qjz9zk", "https://clients4.9oo91e.qjz9zk"}; + std::vector hostnames; + for (auto* const& hostname : kHostnames) { + hostnames.push_back(GURL(hostname)); +diff --git a/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc b/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc +index 9330c4d65c48e..5086e6d25fa23 100644 +--- a/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc ++++ b/chrome/browser/ash/net/network_diagnostics/video_conferencing_routine.cc +@@ -24,12 +24,12 @@ namespace { + + namespace mojom = ::chromeos::network_diagnostics::mojom; + +-const char kDefaultStunServer[] = "stun.l.google.com"; ++const char kDefaultStunServer[] = "stun.l.9oo91e.qjz9zk"; + + } // namespace + + // TODO(crbug/1227877): Move support details to the UI. +-const char kSupportDetails[] = "https://support.google.com/a/answer/1279090"; ++const char kSupportDetails[] = "https://support.9oo91e.qjz9zk/a/answer/1279090"; + const base::TimeDelta kTimeoutAfterHostResolution = base::Seconds(10); + + VideoConferencingRoutine::VideoConferencingRoutine() +diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc b/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc +index a73c77cc90b67..f96b1350e63f7 100644 +--- a/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc ++++ b/chrome/browser/ash/plugin_vm/plugin_vm_diagnostics.cc +@@ -109,7 +109,7 @@ class PluginVmDiagnostics : public base::RefCounted { + entry.SetFail( + IDS_VM_STATUS_PAGE_EPHEMERAL_PROFILE_EXPLANATION, + /*learn_more_link=*/ +- GURL("https://support.google.com/chromebook?p=ephemeral_mode")); ++ GURL("https://support.9oo91e.qjz9zk/chromebook?p=ephemeral_mode")); + break; + case ProfileSupported::kErrorNotSupported: + entry.SetFail(IDS_VM_STATUS_PAGE_UNSUPPORTED_PROFILE_EXPLANATION); +@@ -148,7 +148,7 @@ class PluginVmDiagnostics : public base::RefCounted { + .OverrideTopError( + IDS_VM_STATUS_PAGE_DEVICE_NOT_ENROLLED_ERROR, + /*learn_more_link=*/GURL( +- "https://support.google.com/chromebook?p=enroll_device")); ++ "https://support.9oo91e.qjz9zk/chromebook?p=enroll_device")); + set_standard_top_error = false; + break; + case PolicyConfigured::kErrorUserNotAffiliated: +@@ -221,7 +221,7 @@ class PluginVmDiagnostics : public base::RefCounted { + IDS_VM_STATUS_PAGE_MISSING_DEFAULT_VM_ERROR, + l10n_util::GetStringUTF16(IDS_PLUGIN_VM_APP_NAME)), + /*learn_more_link=*/ +- GURL("https://support.google.com/" ++ GURL("https://support.9oo91e.qjz9zk/" + "chromebook?p=parallels_setup")); + } else if (iter->storage_location() != + vm_tools::concierge::STORAGE_CRYPTOHOME_PLUGINVM) { +@@ -230,7 +230,7 @@ class PluginVmDiagnostics : public base::RefCounted { + base::UTF8ToUTF16(iter->name()), + l10n_util::GetStringUTF16(IDS_PLUGIN_VM_APP_NAME)), + /*learn_more_link=*/ +- GURL("https://support.google.com/" ++ GURL("https://support.9oo91e.qjz9zk/" + "chromebook?p=parallels_setup")); + } else { + // Everything is good. Do nothing. +diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc b/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc +index 67b03f7e46f57..c8d538554003d 100644 +--- a/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc ++++ b/chrome/browser/ash/plugin_vm/plugin_vm_license_checker.cc +@@ -33,8 +33,8 @@ namespace plugin_vm { + namespace { + + constexpr char kValidationOAuth2Scope[] = +- "https://www.googleapis.com/auth/applicense.bytebot"; +-constexpr char kValidationEndpoint[] = "https://bytebot.googleapis.com/"; ++ "https://www.9oo91eapis.qjz9zk/auth/applicense.bytebot"; ++constexpr char kValidationEndpoint[] = "https://bytebot.9oo91eapis.qjz9zk/"; + constexpr char kValidationServicePath[] = + "v1/applications/chromePluginVm:getLicenseStatus"; + constexpr char kValidationServiceQuery[] = "?checkOnly=true&access_token="; +diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_util.cc b/chrome/browser/ash/plugin_vm/plugin_vm_util.cc +index e7c689ad4f72c..8c7cb8c344a77 100644 +--- a/chrome/browser/ash/plugin_vm/plugin_vm_util.cc ++++ b/chrome/browser/ash/plugin_vm/plugin_vm_util.cc +@@ -111,10 +111,10 @@ void RemoveDriveDownloadDirectoryIfExists() { + absl::optional GetIdFromDriveUrl(const GURL& url) { + const std::string& spec = url.spec(); + +- const std::string kOpenUrlBase = "https://drive.google.com/open?"; ++ const std::string kOpenUrlBase = "https://drive.9oo91e.qjz9zk/open?"; + if (base::StartsWith(spec, kOpenUrlBase, + base::CompareCase::INSENSITIVE_ASCII)) { +- // e.g. https://drive.google.com/open?id=[ID] ++ // e.g. https://drive.9oo91e.qjz9zk/open?id=[ID] + std::string id; + if (!net::GetValueForKeyInQuery(url, "id", &id)) + return absl::nullopt; +@@ -123,13 +123,13 @@ absl::optional GetIdFromDriveUrl(const GURL& url) { + + // These will match some invalid URLs, which is fine. + const std::string kViewUrlPatternWithDomain = +- "https://drive.google.com/a/*/file/d/*/view*"; ++ "https://drive.9oo91e.qjz9zk/a/*/file/d/*/view*"; + const std::string kViewUrlPatternWithoutDomain = +- "https://drive.google.com/file/d/*/view*"; ++ "https://drive.9oo91e.qjz9zk/file/d/*/view*"; + if (base::MatchPattern(spec, kViewUrlPatternWithDomain) || + base::MatchPattern(spec, kViewUrlPatternWithoutDomain)) { +- // e.g. https://drive.google.com/a/example.org/file/d/[ID]/view?usp=sharing +- // or https://drive.google.com/file/d/[ID]/view?usp=sharing ++ // e.g. https://drive.9oo91e.qjz9zk/a/example.org/file/d/[ID]/view?usp=sharing ++ // or https://drive.9oo91e.qjz9zk/file/d/[ID]/view?usp=sharing + size_t id_end = spec.find("/view"); + size_t id_start = spec.rfind('/', id_end - 1) + 1; + return spec.substr(id_start, id_end - id_start); +diff --git a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc +index 5ce38b93f6183..70bc45ba93349 100644 +--- a/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc ++++ b/chrome/browser/ash/policy/remote_commands/device_command_start_crd_session_job.cc +@@ -45,11 +45,11 @@ using ErrorCallback = StartCrdSessionJobDelegate::ErrorCallback; + + // OAuth2 Token scopes + constexpr char kCloudDevicesOAuth2Scope[] = +- "https://www.googleapis.com/auth/clouddevices"; ++ "https://www.9oo91eapis.qjz9zk/auth/clouddevices"; + constexpr char kChromotingRemoteSupportOAuth2Scope[] = +- "https://www.googleapis.com/auth/chromoting.remote.support"; ++ "https://www.9oo91eapis.qjz9zk/auth/chromoting.remote.support"; + constexpr char kTachyonOAuth2Scope[] = +- "https://www.googleapis.com/auth/tachyon"; ++ "https://www.9oo91eapis.qjz9zk/auth/tachyon"; + + // Job parameters fields: + +diff --git a/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc b/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc +index b095814b158ca..e17124b41b2f6 100644 +--- a/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc ++++ b/chrome/browser/ash/policy/uploading/heartbeat_scheduler.cc +@@ -31,11 +31,11 @@ const char kHeartbeatGCMAppID[] = "com.google.chromeos.monitoring"; + + // The default destination we send our GCM messages to. + const char kHeartbeatGCMDestinationID[] = "1013309121859"; +-const char kHeartbeatGCMSenderSuffix[] = "@google.com"; ++const char kHeartbeatGCMSenderSuffix[] = "@9oo91e.qjz9zk"; + + // Destination of upstream notification sign up message. + const char kUpstreamNotificationSignUpDestinationID[] = +- "https://gcm.googleapis.com/gcm/gcm.event_tracker"; ++ "https://gcm.9oo91eapis.qjz9zk/gcm/gcm.event_tracker"; + + // A bit mask, listening events of upstream notification. + const char kUpstreamNotificationSignUpListeningEvents[] = +@@ -348,7 +348,7 @@ void HeartbeatScheduler::SendHeartbeat() { + // time and we send a message with the same ID that we previously used, no + // big deal (the new message will replace the old, which is the behavior we + // want anyway, per: +- // https://developer.chrome.com/apps/cloudMessaging#send_messages ++ // https://developer.ch40me.qjz9zk/apps/cloudMessaging#send_messages + message.id = + base::NumberToString(base::Time::NowFromSystemTime().ToInternalValue()); + message.data[kGcmMessageTypeKey] = kHeartbeatTypeValue; +diff --git a/chrome/browser/ash/u2f_notification.cc b/chrome/browser/ash/u2f_notification.cc +index bc43ed5ac2565..dfef1032a365a 100644 +--- a/chrome/browser/ash/u2f_notification.cc ++++ b/chrome/browser/ash/u2f_notification.cc +@@ -33,7 +33,7 @@ namespace { + + constexpr char kU2FNotificationId[] = "chrome://u2f_notification"; + constexpr char kU2FAdvisoryURL[] = +- "https://sites.google.com/a/chromium.org/dev/chromium-os/" ++ "https://sites.9oo91e.qjz9zk/a/ch40m1um.qjz9zk/dev/chromium-os/" + "u2f-ecdsa-vulnerability"; + + // Notification button identifiers. +@@ -132,7 +132,7 @@ void U2FNotification::OnNotificationClick( + + switch (static_cast(*button_index)) { + case ButtonIndex::kLearnMore: { +- // Load the chromium.org advisory page in a new tab. ++ // Load the ch40m1um.qjz9zk advisory page in a new tab. + NavigateParams params(profile, GURL(kU2FAdvisoryURL), + ui::PAGE_TRANSITION_LINK); + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; +diff --git a/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc b/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc +index 14b8b2d3ac03e..fbffd79916abb 100644 +--- a/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc ++++ b/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc +@@ -57,17 +57,17 @@ constexpr char kProtoMimeType[] = "application/x-protobuf"; + + // The url to download the proto of the complete list of wallpaper collections. + constexpr char kBackdropCollectionsUrl[] = +- "https://clients3.google.com/cast/chromecast/home/wallpaper/" ++ "https://clients3.9oo91e.qjz9zk/cast/chromecast/home/wallpaper/" + "collections?rt=b"; + + // The url to download the proto of a specific wallpaper collection. + constexpr char kBackdropImagesUrl[] = +- "https://clients3.google.com/cast/chromecast/home/wallpaper/" ++ "https://clients3.9oo91e.qjz9zk/cast/chromecast/home/wallpaper/" + "collection-images?rt=b"; + + // The url to download the proto of the info of a surprise me wallpaper. + constexpr char kBackdropSurpriseMeImageUrl[] = +- "https://clients3.google.com/cast/chromecast/home/wallpaper/" ++ "https://clients3.9oo91e.qjz9zk/cast/chromecast/home/wallpaper/" + "image?rt=b"; + + // The label used to return exclusive content or filter unwanted images. +@@ -81,7 +81,7 @@ constexpr char kTimeOfDayFilteringLabel[] = "chromebook_time_of_day"; + + // The URL to download an album's photos from a user's Google Photos library. + constexpr char kGooglePhotosAlbumUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/" ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/" + "collectionById:read"; + + // The collectionById endpoint accepts a "return_order" parameter that +@@ -91,12 +91,12 @@ constexpr char kGooglePhotosAlbumShuffledOrder[] = "2"; + + // The URL to download the owned albums in a user's Google Photos library. + constexpr char kGooglePhotosAlbumsUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/" ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/" + "userCollections:read"; + + // The URL to download the shared albums in a user's Google Photos library. + constexpr char kGooglePhotosSharedAlbumsUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/" ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/" + "sharedCollections:read"; + + constexpr net::NetworkTrafficAnnotationTag +@@ -125,7 +125,7 @@ constexpr net::NetworkTrafficAnnotationTag + + // The URL to download whether the user is allowed to access Google Photos data. + constexpr char kGooglePhotosEnabledUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/userenabled:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/userenabled:read"; + + constexpr net::NetworkTrafficAnnotationTag + kGooglePhotosEnabledTrafficAnnotation = +@@ -151,11 +151,11 @@ constexpr net::NetworkTrafficAnnotationTag + + // The URL to download a photo from a user's Google Photos library. + constexpr char kGooglePhotosPhotoUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/itemById:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/itemById:read"; + + // The URL to download all visible photos in a user's Google Photos library. + constexpr char kGooglePhotosPhotosUrl[] = +- "https://photosfirstparty-pa.googleapis.com/v1/chromeos/userItems:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/chromeos/userItems:read"; + + constexpr net::NetworkTrafficAnnotationTag + kGooglePhotosPhotosTrafficAnnotation = +@@ -644,7 +644,7 @@ void GooglePhotosFetcher::OnTokenReceived( + // compatibility with the client or just has nothing to return. Append a + // special parameter to request that the server always serializes repeated + // proto fields and any other fields which might otherwise be omitted by +- // default (https://cloud.google.com/apis/docs/system-parameters#definitions). ++ // default (https://cloud.9oo91e.qjz9zk/apis/docs/system-parameters#definitions). + resource_request->url = net::AppendOrReplaceQueryParameter( + service_url, "$outputDefaults", "true"); + +diff --git a/chrome/browser/autofill/autofill_gstatic_reader.cc b/chrome/browser/autofill/autofill_gstatic_reader.cc +index 5c360341037d7..289d4c11aa2da 100644 +--- a/chrome/browser/autofill/autofill_gstatic_reader.cc ++++ b/chrome/browser/autofill/autofill_gstatic_reader.cc +@@ -27,9 +27,9 @@ static const char kTokenizationBinRangeAllowlistKey[] = + static const char kTokenizationMerchantAllowlistKey[] = + "cpan_eligible_merchant_wl"; + static const char kTokenizationBinRangeAllowlistURL[] = +- "https://www.gstatic.com/autofill/hourly/bins.json"; ++ "https://www.95tat1c.qjz9zk/autofill/hourly/bins.json"; + static const char kTokenizationMerchantAllowlistURL[] = +- "https://www.gstatic.com/autofill/weekly/merchants.json"; ++ "https://www.95tat1c.qjz9zk/autofill/weekly/merchants.json"; + static const size_t kMaxDownloadSize = 30 * 1024; + } // namespace + +diff --git a/chrome/browser/browser_switcher/browser_switcher_service.cc b/chrome/browser/browser_switcher/browser_switcher_service.cc +index c6a95bb5b093b..8f7061c454f95 100644 +--- a/chrome/browser/browser_switcher/browser_switcher_service.cc ++++ b/chrome/browser/browser_switcher/browser_switcher_service.cc +@@ -54,7 +54,7 @@ constexpr net::NetworkTrafficAnnotationTag traffic_annotation = + "an alternative browser. This is often on the organization's " + "intranet. For more information on Internet Explorer's Enterprise " + "Mode, see: " +- "https://docs.microsoft.com/internet-explorer/ie11-deploy-guide" ++ "https://docs.m1cr050ft.qjz9zk/internet-explorer/ie11-deploy-guide" + "/what-is-enterprise-mode" + trigger: + "1 minute after browser startup, and then refreshes every 30 " +diff --git a/chrome/browser/cart/cart_discount_fetcher.cc b/chrome/browser/cart/cart_discount_fetcher.cc +index 95fff83a5d25c..2764d1f25d96a 100644 +--- a/chrome/browser/cart/cart_discount_fetcher.cc ++++ b/chrome/browser/cart/cart_discount_fetcher.cc +@@ -31,7 +31,7 @@ const char kAcceptLanguageKey[] = "Accept-Language"; + const char kClientDataHeader[] = "X-Client-Data"; + + const char kFetchDiscountsEndpoint[] = +- "https://memex-pa.googleapis.com/v1/shopping/cart/discounts"; ++ "https://memex-pa.9oo91eapis.qjz9zk/v1/shopping/cart/discounts"; + const int64_t kTimeoutMs = 30000; + + const char kCartDiscountFetcherEndpointParam[] = +diff --git a/chrome/browser/cart/cart_discount_link_fetcher.cc b/chrome/browser/cart/cart_discount_link_fetcher.cc +index 9d79f906595b0..f66e9a24f4288 100644 +--- a/chrome/browser/cart/cart_discount_link_fetcher.cc ++++ b/chrome/browser/cart/cart_discount_link_fetcher.cc +@@ -21,7 +21,7 @@ const char kPostMethod[] = "POST"; + const char kContentType[] = "application/json; charset=UTF-8"; + + const char kFetchDiscountLinkEndpoint[] = +- "https://memex-pa.googleapis.com/v1/shopping/cart/discounted"; ++ "https://memex-pa.9oo91eapis.qjz9zk/v1/shopping/cart/discounted"; + const int64_t kTimeoutMs = 30000; + } // namespace + +diff --git a/chrome/browser/cart/cart_service.cc b/chrome/browser/cart/cart_service.cc +index 524ef9abc9006..d45dcacfcdac0 100644 +--- a/chrome/browser/cart/cart_service.cc ++++ b/chrome/browser/cart/cart_service.cc +@@ -689,17 +689,17 @@ void CartService::AddCartsWithFakeData() { + u"15%")); + dummy_proto1.mutable_discount_info()->set_has_coupons(true); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto1.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); +@@ -737,12 +737,12 @@ void CartService::AddCartsWithFakeData() { + l10n_util::GetStringFUTF8(IDS_NTP_MODULES_CART_DISCOUNT_CHIP_AMOUNT, + u"20%")); + dummy_proto2.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto2.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); +@@ -760,7 +760,7 @@ void CartService::AddCartsWithFakeData() { + l10n_util::GetStringFUTF8(IDS_NTP_MODULES_CART_DISCOUNT_CHIP_UP_TO_AMOUNT, + u"$50")); + dummy_proto3.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); +@@ -775,12 +775,12 @@ void CartService::AddCartsWithFakeData() { + dummy_proto4.set_merchant_cart_url(dummy_url4.spec()); + dummy_proto4.set_timestamp(time_now + 5); + dummy_proto4.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto4.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); +@@ -795,7 +795,7 @@ void CartService::AddCartsWithFakeData() { + dummy_proto5.set_merchant_cart_url(dummy_url5.spec()); + dummy_proto5.set_timestamp(time_now + 2); + dummy_proto5.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); +@@ -810,17 +810,17 @@ void CartService::AddCartsWithFakeData() { + dummy_proto6.set_merchant_cart_url(dummy_url6.spec()); + dummy_proto6.set_timestamp(time_now + 1); + dummy_proto6.add_product_image_urls( +- "https://encrypted-tbn3.gstatic.com/" ++ "https://encrypted-tbn3.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQpn38jB2_BANnHUFa7kHJsf6SyubcgeU1lNYO_" + "ZxM1Q2ju_ZMjv2EwNh0Zx_zbqYy_mFg_aiIhWYnD5PQ7t-uFzLM5cN77s_2_" + "DFNeumI-LMPJMYjW-BOSaA&usqp=CAY"); + dummy_proto6.add_product_image_urls( +- "https://encrypted-tbn0.gstatic.com/" ++ "https://encrypted-tbn0.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcQyMRYWeM2Yq095nOXTL0-" + "EUUnm79kh6hnw8yctJUNrAuse607KEr1CVxEa24r-" + "8XHBuhTwcuC4GXeN94h9Kn19DhdBGsXG0qrD74veYSDJNLrUP-sru0jH&usqp=CAY"); + dummy_proto6.add_product_image_urls( +- "https://encrypted-tbn1.gstatic.com/" ++ "https://encrypted-tbn1.95tat1c.qjz9zk/" + "shopping?q=tbn:ANd9GcT2ew6Aydzu5VzRV756ORGha6fyjKp_On7iTlr_" + "tL9vODnlNtFo_xsxj6_lCop-3J0Vk44lHfk-AxoBJDABVHPVFN-" + "EiWLcZvzkdpHFqcurm7fBVmWtYKo2rg&usqp=CAY"); +diff --git a/chrome/browser/cart/fetch_discount_worker.cc b/chrome/browser/cart/fetch_discount_worker.cc +index da67cc35bd94a..1be397f1e83c9 100644 +--- a/chrome/browser/cart/fetch_discount_worker.cc ++++ b/chrome/browser/cart/fetch_discount_worker.cc +@@ -26,7 +26,7 @@ + + namespace { + const char kOauthName[] = "rbd"; +-const char kOauthScopes[] = "https://www.googleapis.com/auth/chromememex"; ++const char kOauthScopes[] = "https://www.9oo91eapis.qjz9zk/auth/chromememex"; + const char kEmptyToken[] = ""; + } // namespace + +diff --git a/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json b/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json +index 8113091c85ee1..58b510e0d3d71 100644 +--- a/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json ++++ b/chrome/browser/cart/resources/cart_domain_cart_url_mapping.json +@@ -63,7 +63,7 @@ + "lululemon.com": "https://shop.lululemon.com/shop/mybag", + "lulus.com": "https://www.lulus.com/checkout/bag", + "macys.com": "https://www.macys.com/my-bag", +-"microsoft.com": "https://www.microsoft.com/en-us/store/cart", ++"m1cr050ft.qjz9zk": "https://www.m1cr050ft.qjz9zk/en-us/store/cart", + "midwayusa.com": "https://www.midwayusa.com/cart", + "neimanmarcus.com": "https://www.neimanmarcus.com/checkout/cart.jsp", + "newegg.com": "https://secure.newegg.com/shop/cart", +diff --git a/chrome/browser/cart/resources/cart_domain_name_mapping.json b/chrome/browser/cart/resources/cart_domain_name_mapping.json +index eca268d170f30..c602b788910f9 100644 +--- a/chrome/browser/cart/resources/cart_domain_name_mapping.json ++++ b/chrome/browser/cart/resources/cart_domain_name_mapping.json +@@ -63,7 +63,7 @@ + "lululemon.com": "lululemon", + "lulus.com": "Lulus", + "macys.com": "Macy's", +-"microsoft.com": "Microsoft", ++"m1cr050ft.qjz9zk": "Microsoft", + "midwayusa.com": "MidwayUSA", + "neimanmarcus.com": "Neiman Marcus", + "newegg.com": "Newegg", +diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/chrome_browser_application_mac.mm +index 99ee4514f3c68..5b88028f6d3c7 100644 +--- a/chrome/browser/chrome_browser_application_mac.mm ++++ b/chrome/browser/chrome_browser_application_mac.mm +@@ -162,7 +162,7 @@ std::string DescriptionForNSEvent(NSEvent* event) { + + //////////////////////////////////////////////////////////////////////////////// + // HISTORICAL COMMENT (by viettrungluu, from +-// http://codereview.chromium.org/1520006 with mild editing): ++// http://codereview.ch40m1um.qjz9zk/1520006 with mild editing): + // + // A quick summary of the state of things (before the changes to shutdown): + // +diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc +index 264cb9d15ec57..9634d6b8c7c54 100644 +--- a/chrome/browser/chrome_content_browser_client.cc ++++ b/chrome/browser/chrome_content_browser_client.cc +@@ -1173,7 +1173,7 @@ bool ShouldHonorPolicies() { + + // Used by Enterprise policy. Disable blocking of navigations toward external + // applications from a sandboxed iframe. +-// https://chromestatus.com/feature/5680742077038592 ++// https://ch40mestatus.qjz9zk/feature/5680742077038592 + const char kDisableSandboxExternalProtocolSwitch[] = + "disable-sandbox-external-protocols"; + +@@ -1263,7 +1263,7 @@ void LaunchURL( + "'allow-top-navigation-by-user-activation', " + "'allow-top-navigation', or " + "'allow-popups'. See " +- "https://chromestatus.com/feature/5680742077038592 and " ++ "https://ch40mestatus.qjz9zk/feature/5680742077038592 and " + "https://chromeenterprise.google/policies/" + "#SandboxExternalProtocolBlocked"); + return; +@@ -1279,7 +1279,7 @@ void LaunchURL( + "'allow-top-navigation-by-user-activation', " + "'allow-top-navigation', or " + "'allow-popups'. See " +- "https://chromestatus.com/feature/5680742077038592 and " ++ "https://ch40mestatus.qjz9zk/feature/5680742077038592 and " + "https://chromeenterprise.google/policies/" + "#SandboxExternalProtocolBlocked"); + } +@@ -2109,7 +2109,7 @@ bool ChromeContentBrowserClient::ShouldTreatURLSchemeAsFirstPartyWhenTopLevel( + // This is needed to bypass the normal SameSite rules for any chrome:// page + // embedding a secure origin, regardless of the registrable domains of any + // intervening frames. For example, this is needed for browser UI to interact +- // with SameSite cookies on accounts.google.com, which is used for displaying ++ // with SameSite cookies on accounts.9oo91e.qjz9zk, which is used for displaying + // a list of available accounts on the NTP (chrome://new-tab-page), etc. + if (is_embedded_origin_secure && scheme == content::kChromeUIScheme) + return true; +diff --git a/chrome/browser/devtools/url_constants.cc b/chrome/browser/devtools/url_constants.cc +index 56579ac890769..2ccb30c0d4f8a 100644 +--- a/chrome/browser/devtools/url_constants.cc ++++ b/chrome/browser/devtools/url_constants.cc +@@ -4,7 +4,7 @@ + + #include "chrome/browser/devtools/url_constants.h" + +-const char kRemoteFrontendDomain[] = "chrome-devtools-frontend.appspot.com"; ++const char kRemoteFrontendDomain[] = "chrome-devtools-frontend.8pp2p8t.qjz9zk"; + const char kRemoteFrontendBase[] = +- "https://chrome-devtools-frontend.appspot.com/"; ++ "https://chrome-devtools-frontend.8pp2p8t.qjz9zk/"; + const char kRemoteFrontendPath[] = "serve_file"; +diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc +index 0514fe5ccb6a6..e11fd7227a7da 100644 +--- a/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc ++++ b/chrome/browser/enterprise/connectors/device_trust/key_management/browser/commands/mac_key_rotation_command.cc +@@ -30,7 +30,7 @@ namespace enterprise_connectors { + + namespace { + +-constexpr char kStableChannelHostName[] = "m.google.com"; ++constexpr char kStableChannelHostName[] = "m.9oo91e.qjz9zk"; + + bool ValidRotationCommand(const std::string& host_name) { + return chrome::GetChannel() != version_info::Channel::STABLE || +diff --git a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc +index 67251fe68d335..3bef49a86ee5f 100644 +--- a/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc ++++ b/chrome/browser/enterprise/connectors/device_trust/key_management/installer/management_service/rotate_util.cc +@@ -31,7 +31,7 @@ void RecordFailure(ManagementServiceError error, + SYSLOG(ERROR) << log_message; + } + +-constexpr char kStableChannelHostName[] = "m.google.com"; ++constexpr char kStableChannelHostName[] = "m.9oo91e.qjz9zk"; + + // Returns decoded value from the base-64 `encoded_value`, or null + // in case of a decoding error. The returned value is an opaque binary +diff --git a/chrome/browser/enterprise/connectors/service_provider_config.cc b/chrome/browser/enterprise/connectors/service_provider_config.cc +index aff452e26002e..b6e20b3996b3b 100644 +--- a/chrome/browser/enterprise/connectors/service_provider_config.cc ++++ b/chrome/browser/enterprise/connectors/service_provider_config.cc +@@ -30,7 +30,7 @@ constexpr std::array kGoogleDlpSupportedTags = {{ + }}; + + constexpr AnalysisConfig kGoogleAnalysisConfig = { +- .url = "https://safebrowsing.google.com/safebrowsing/uploads/scan", ++ .url = "https://safebrowsing.9oo91e.qjz9zk/safebrowsing/uploads/scan", + .supported_tags = base::span(kGoogleDlpSupportedTags), + }; + +@@ -81,7 +81,7 @@ constexpr AnalysisConfig kTrellixAnalysisConfig = { + }; + + constexpr ReportingConfig kGoogleReportingConfig = { +- .url = "https://chromereporting-pa.googleapis.com/v1/events", ++ .url = "https://chromereporting-pa.9oo91eapis.qjz9zk/v1/events", + }; + + } // namespace +diff --git a/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc +index 625de5d96be09..4044ddd152613 100644 +--- a/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc ++++ b/chrome/browser/enterprise/reporting/extension_request/extension_request_notification.cc +@@ -30,7 +30,7 @@ constexpr char kInstalledNotificationId[] = "extension_installed_notificaiton"; + constexpr char kExtensionRequestNotifierId[] = + "chrome_browser_cloud_management_extension_request"; + constexpr char kChromeWebstoreUrl[] = +- "https://chrome.google.com/webstore/detail/"; ++ "https://chrome.9oo91e.qjz9zk/webstore/detail/"; + + // The elements order of array below must match the order in enum + // ExtensionRequestNotification::NotifyType. +@@ -69,7 +69,7 @@ void ExtensionRequestNotification::Show(NotificationCloseCallback callback) { + kNotificationTitles[notify_type_], extension_ids_.size()); + const std::u16string body = l10n_util::GetPluralStringFUTF16( + kNotificationBodies[notify_type_], extension_ids_.size()); +- GURL original_url("https://chrome.google.com/webstore"); ++ GURL original_url("https://chrome.9oo91e.qjz9zk/webstore"); + auto icon = ui::ImageModel::FromVectorIcon(vector_icons::kBusinessIcon, + ui::kColorIcon, + message_center::kSmallImageSize); +diff --git a/chrome/browser/enterprise/signals/signals_utils.cc b/chrome/browser/enterprise/signals/signals_utils.cc +index 0bdc887c144b9..be1fa90b1b11e 100644 +--- a/chrome/browser/enterprise/signals/signals_utils.cc ++++ b/chrome/browser/enterprise/signals/signals_utils.cc +@@ -76,8 +76,8 @@ GetPasswordProtectionWarningTrigger(PrefService* profile_prefs) { + + bool GetChromeRemoteDesktopAppBlocked(PolicyBlocklistService* service) { + DCHECK(service); +- return IsURLBlocked(GURL("https://remotedesktop.google.com"), service) || +- IsURLBlocked(GURL("https://remotedesktop.corp.google.com"), service); ++ return IsURLBlocked(GURL("https://remotedesktop.9oo91e.qjz9zk"), service) || ++ IsURLBlocked(GURL("https://remotedesktop.corp.9oo91e.qjz9zk"), service); + } + + } // namespace utils +diff --git a/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc b/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc +index 28ec2cda7209a..ed22d7b478665 100644 +--- a/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc ++++ b/chrome/browser/error_reporting/chrome_js_error_report_processor_nonchromeos.cc +@@ -25,9 +25,9 @@ + + namespace { + +-constexpr char kCrashEndpointUrl[] = "https://clients2.google.com/cr/report"; ++constexpr char kCrashEndpointUrl[] = "https://clients2.9oo91e.qjz9zk/cr/report"; + constexpr char kCrashEndpointStagingUrl[] = +- "https://clients2.google.com/cr/staging_report"; ++ "https://clients2.9oo91e.qjz9zk/cr/staging_report"; + + } // namespace + +diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc +index 8e6f16730c6fb..e348c204c5885 100644 +--- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc ++++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api.cc +@@ -59,7 +59,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( + // implemented for secondary profiles in Lacros. + CHECK(Profile::FromBrowserContext(browser_context)->IsMainProfile()) + << "Attempted to use an incorrect profile. Please file a bug at " +- "https://bugs.chromium.org/ if this happens."; ++ "https://bugs.ch40m1um.qjz9zk/ if this happens."; + return chromeos::LacrosService::Get()->GetRemote().get(); + #endif // #if BUILDFLAG(IS_CHROMEOS_LACROS) + +diff --git a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc +index e11a994e934bb..510b8561b02c9 100644 +--- a/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc ++++ b/chrome/browser/extensions/api/identity/identity_launch_web_auth_flow_function.cc +@@ -20,7 +20,7 @@ namespace extensions { + namespace { + + static const char kChromiumDomainRedirectUrlPattern[] = +- "https://%s.chromiumapp.org/"; ++ "https://%s.ch40m1umapp.qjz9zk/"; + + IdentityLaunchWebAuthFlowFunction::Error WebAuthFlowFailureToError( + WebAuthFlow::Failure failure) { +diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc +index 4eb304afe20d3..f5a333588bfc3 100644 +--- a/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc ++++ b/chrome/browser/extensions/api/platform_keys/platform_keys_api.cc +@@ -84,7 +84,7 @@ crosapi::mojom::KeystoreService* GetKeystoreService( + // implemented for secondary profiles in Lacros. + CHECK(Profile::FromBrowserContext(browser_context)->IsMainProfile()) + << "Attempted to use an incorrect profile. Please file a bug at " +- "https://bugs.chromium.org/ if this happens."; ++ "https://bugs.ch40m1um.qjz9zk/ if this happens."; + return chromeos::LacrosService::Get()->GetRemote().get(); + #endif // #if BUILDFLAG(IS_CHROMEOS_LACROS) + +diff --git a/chrome/browser/extensions/chrome_extension_browser_constants.cc b/chrome/browser/extensions/chrome_extension_browser_constants.cc +index 5eefc5c2b4f0b..f38b4f73caadc 100644 +--- a/chrome/browser/extensions/chrome_extension_browser_constants.cc ++++ b/chrome/browser/extensions/chrome_extension_browser_constants.cc +@@ -8,7 +8,7 @@ namespace chrome_extension_constants { + + // The link to the help article for runtime host permissions. + const char kRuntimeHostPermissionsHelpURL[] = +- "https://support.google.com/chrome?p=enable_extensions"; ++ "https://support.9oo91e.qjz9zk/chrome?p=enable_extensions"; + + // The link to the site permissions settings page. + const char kExtensionsSitePermissionsURL[] = +@@ -20,6 +20,6 @@ const char kExtensionsSitePermissionsURL[] = + // TODO(crbug.com/1353587): This link is likely temporary, and may need to be + // replaced later. + const char kShowAccessRequestsInToolbarHelpURL[] = +- "https://support.google.com/chrome_webstore/answer/2664769"; ++ "https://support.9oo91e.qjz9zk/chrome_webstore/answer/2664769"; + + } // namespace chrome_extension_constants +diff --git a/chrome/browser/extensions/external_pref_loader.cc b/chrome/browser/extensions/external_pref_loader.cc +index f540a7274e005..68648164367f8 100644 +--- a/chrome/browser/extensions/external_pref_loader.cc ++++ b/chrome/browser/extensions/external_pref_loader.cc +@@ -293,7 +293,7 @@ void ExternalPrefLoader::LoadOnFileThread() { + if (!prefs.empty()) + LOG(WARNING) << "You are using an old-style extension deployment method " + "(external_extensions.json), which will soon be " +- "deprecated. (see http://developer.chrome.com/" ++ "deprecated. (see http://developer.ch40me.qjz9zk/" + "extensions/external_extensions.html)"; + + ReadStandaloneExtensionPrefFiles(prefs); +diff --git a/chrome/browser/extensions/install_signer.cc b/chrome/browser/extensions/install_signer.cc +index 15f54ff4e98a6..831ba991ad510 100644 +--- a/chrome/browser/extensions/install_signer.cc ++++ b/chrome/browser/extensions/install_signer.cc +@@ -63,7 +63,7 @@ const int kSignatureFormatVersion = 2; + const size_t kSaltBytes = 32; + + const char kBackendUrl[] = +- "https://www.googleapis.com/chromewebstore/v1.1/items/verify"; ++ "https://www.9oo91eapis.qjz9zk/chromewebstore/v1.1/items/verify"; + + const char kPublicKeyPEM[] = + "-----BEGIN PUBLIC KEY-----" +diff --git a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc +index 1dc23d42d924f..f364d8eec8a48 100644 +--- a/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc ++++ b/chrome/browser/extensions/updater/chrome_extension_downloader_factory.cc +@@ -49,7 +49,7 @@ ChromeExtensionDownloaderFactory::CreateForURLLoaderFactory( + manifest_query_params += "&testrequest=1"; + } + downloader->set_manifest_query_params(manifest_query_params); +- downloader->set_ping_enabled_domain("google.com"); ++ downloader->set_ping_enabled_domain("9oo91e.qjz9zk"); + return downloader; + } + +diff --git a/chrome/browser/extensions/updater/chrome_update_client_config.cc b/chrome/browser/extensions/updater/chrome_update_client_config.cc +index c0d38b7592f26..8d2d55c72e9c2 100644 +--- a/chrome/browser/extensions/updater/chrome_update_client_config.cc ++++ b/chrome/browser/extensions/updater/chrome_update_client_config.cc +@@ -217,10 +217,10 @@ ChromeUpdateClientConfig::GetNetworkFetcherFactory() { + context_->GetDefaultStoragePartition() + ->GetURLLoaderFactoryForBrowserProcess(), + // Only extension updates that require authentication are served +- // from chrome.google.com, so send cookies if and only if that is ++ // from chrome.9oo91e.qjz9zk, so send cookies if and only if that is + // the download domain. + base::BindRepeating([](const GURL& url) { +- return url.DomainIs("chrome.google.com"); ++ return url.DomainIs("chrome.9oo91e.qjz9zk"); + })); + } + return network_fetcher_factory_; +diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc +index 904b49fb2aee3..672dc7f73f49d 100644 +--- a/chrome/browser/flag_descriptions.cc ++++ b/chrome/browser/flag_descriptions.cc +@@ -796,7 +796,7 @@ const char kServiceWorkerBypassFetchHandlerForMainResourceDescription[] = + const char kServiceWorkerStaticRouterName[] = "Service Worker Static Router"; + const char kServiceWorkerStaticRouterDescription[] = + "When enabled, Chrome will enable the Service Worker Static Routing API. " +- "https://chromestatus.com/feature/5185352976826368"; ++ "https://ch40mestatus.qjz9zk/feature/5185352976826368"; + + #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) + const char kCameraMicPreviewName[] = "Camera and Mic Preview"; +@@ -1198,7 +1198,7 @@ const char kEnableGamepadMultitouchDescription[] = + const char kEnableGamepadTriggerRumbleName[] = "Gamepad Trigger Rumble"; + const char kEnableGamepadTriggerRumbleDescription[] = + "Enables the Gamepad API extension for trigger rumble. See " +- "https://chromestatus.com/feature/5162940951953408"; ++ "https://ch40mestatus.qjz9zk/feature/5162940951953408"; + + const char kEnableGenericSensorExtraClassesName[] = + "Generic Sensor Extra Classes"; +@@ -1345,7 +1345,7 @@ const char kBlockInsecurePrivateNetworkRequestsName[] = + const char kBlockInsecurePrivateNetworkRequestsDescription[] = + "Prevents non-secure contexts from making subresource requests to " + "more-private IP addresses. See also: " +- "https://developer.chrome.com/blog/private-network-access-update/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-update/"; + + const char kPipDoubleTapToResizeName[] = + "Enable double-tap to resize PiP windows"; +@@ -1364,7 +1364,7 @@ const char kPrivateNetworkAccessSendPreflightsDescription[] = + "Enables sending Private Network Access preflights ahead of requests to " + "more-private IP addresses. Failed preflights display warnings in DevTools " + "without failing entire request. See also: " +- "https://developer.chrome.com/blog/private-network-access-preflight/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-preflight/"; + + const char kPrivateNetworkAccessRespectPreflightResultsName[] = + "Respect the result of Private Network Access preflights"; +@@ -1372,7 +1372,7 @@ const char kPrivateNetworkAccessRespectPreflightResultsDescription[] = + "Enables sending Private Network Access preflights ahead of requests to " + "more-private IP addresses. These preflight requests must succeed in order " + "for the request to proceed. See also: " +- "https://developer.chrome.com/blog/private-network-access-preflight/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-preflight/"; + + const char kPrivateNetworkAccessPreflightShortTimeoutName[] = + "Reduce waiting time for Private Network Access preflights response"; +@@ -1380,7 +1380,7 @@ const char kPrivateNetworkAccessPreflightShortTimeoutDescription[] = + "Reduce the waiting time for Private Network Access preflights to 200 " + "milliseconds. The default timeout period for requests is 5 minutes." + "See also: " +- "https://developer.chrome.com/blog/private-network-access-preflight/"; ++ "https://developer.ch40me.qjz9zk/blog/private-network-access-preflight/"; + + const char kDeprecateAltClickName[] = + "Enable Alt+Click deprecation notifications"; +@@ -1774,7 +1774,7 @@ const char kFullscreenPopupWindowsName[] = "Fullscreen popup windows"; + const char kFullscreenPopupWindowsDescription[] = + "Enables sites with Window Management permission to open fullscreen popup " + "windows with a `fullscreen` window.open() features parameter. See " +- "https://chromestatus.com/feature/6002307972464640 for more information."; ++ "https://ch40mestatus.qjz9zk/feature/6002307972464640 for more information."; + + const char kGalleryAppPdfEditNotificationName[] = + "Gallery App Pdf Edit Notification"; +@@ -2942,7 +2942,7 @@ const char kPrivacySandboxEnrollmentOverridesName[] = + const char kPrivacySandboxEnrollmentOverridesDescription[] = + "Allows a list of sites to use Privacy Sandbox features without them being " + "enrolled and attested into the Privacy Sandbox experiment. See: " +- "https://developer.chrome.com/en/docs/privacy-sandbox/enroll/"; ++ "https://developer.ch40me.qjz9zk/en/docs/privacy-sandbox/enroll/"; + + const char kPrivacySandboxSettings4Name[] = "Privacy Sandbox Settings V4"; + const char kPrivacySandboxSettings4Description[] = +@@ -2996,7 +2996,7 @@ const char kQuickIntensiveWakeUpThrottlingAfterLoadingDescription[] = + "throttling after 1 minute instead of the default 5 minutes. Intensive " + "throttling will limit wake ups, from setTimeout and setInterval tasks " + "with a high nesting level and delayed scheduler.postTask tasks, to 1 per " +- "minute. See https://chromestatus.com/feature/5580139453743104 for more " ++ "minute. See https://ch40mestatus.qjz9zk/feature/5580139453743104 for more " + "info."; + + const char kQuickDeleteForAndroidName[] = "Enable quick delete"; +@@ -3078,7 +3078,7 @@ const char kThirdPartyStoragePartitioningName[] = + const char kThirdPartyStoragePartitioningDescription[] = + "Enables partitioning of third-party storage by top-level site. " + "Note: this is under active development and may result in unexpected " +- "behavior. Please file bugs at https://bugs.chromium.org/p/chromium/issues/" ++ "behavior. Please file bugs at https://bugs.ch40m1um.qjz9zk/p/chromium/issues/" + "entry?labels=StoragePartitioning-trial-bugs&components=Blink%3EStorage."; + + const char kScreenSaverDurationName[] = "Screen saver duration settings"; +diff --git a/chrome/browser/local_discovery/service_discovery_client_mac.mm b/chrome/browser/local_discovery/service_discovery_client_mac.mm +index eea28072af80f..e59282d69e8ae 100644 +--- a/chrome/browser/local_discovery/service_discovery_client_mac.mm ++++ b/chrome/browser/local_discovery/service_discovery_client_mac.mm +@@ -391,7 +391,7 @@ void ParseNetService(NSNetService* service, ServiceDescription& description) { + // weak delegate during deallocation, so a subsequently-deallocated delegate + // attempts to clear the pointer to itself in an NSNetServiceBrowser that's + // already gone. +- // https://crbug.com/657495, https://openradar.appspot.com/28943305 ++ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 + _browser.delegate = nil; + + // Ensure the delegate clears all references to itself, which it had added as +@@ -506,7 +506,7 @@ void ParseNetService(NSNetService* service, ServiceDescription& description) { + // delegate during deallocation, so a subsequently-deallocated delegate + // attempts to clear the pointer to itself in an NSNetService that's already + // gone. +- // https://crbug.com/657495, https://openradar.appspot.com/28943305 ++ // https://crbug.com/657495, https://openradar.8pp2p8t.qjz9zk/28943305 + _service.delegate = nil; + _service = nil; + } +diff --git a/chrome/browser/long_screenshots/long_screenshots_tab_service.cc b/chrome/browser/long_screenshots/long_screenshots_tab_service.cc +index 23198ff82651d..e29602208f252 100644 +--- a/chrome/browser/long_screenshots/long_screenshots_tab_service.cc ++++ b/chrome/browser/long_screenshots/long_screenshots_tab_service.cc +@@ -32,7 +32,7 @@ namespace { + constexpr size_t kMaxPerCaptureSizeBytes = 50 * 1000L * 1000L; // 50 MB. + + // Host/regex pattern for Google AMP Cache URLs. +-// See https://developers.google.com/amp/cache/overview#amp-cache-url-format ++// See https://developers.9oo91e.qjz9zk/amp/cache/overview#amp-cache-url-format + // for a definition of the format of AMP Cache URLs. + const char kGoogleAmpCachePathPattern[] = "/[a-z]/(s/)?(.*)"; + +diff --git a/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc b/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc +index 361e21de0b289..df4ad187ec627 100644 +--- a/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc ++++ b/chrome/browser/media/router/discovery/access_code/access_code_cast_constants.cc +@@ -28,10 +28,10 @@ void EnableCommandLineSupportForTesting() { + constexpr char kGetMethod[] = "GET"; + constexpr char kContentType[] = "application/json; charset=UTF-8"; + constexpr char kDiscoveryOAuth2Scope[] = +- "https://www.googleapis.com/auth/cast-edu-messaging"; ++ "https://www.9oo91eapis.qjz9zk/auth/cast-edu-messaging"; + + constexpr char kDefaultDiscoveryEndpoint[] = +- "https://castedumessaging-pa.googleapis.com"; ++ "https://castedumessaging-pa.9oo91eapis.qjz9zk"; + + constexpr char kDiscoveryServicePath[] = "/v1/receivers"; + constexpr char kDiscoveryOAuthConsumerName[] = "access_code_cast_discovery"; +diff --git a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc +index d405bde823f4c..8882c44d09615 100644 +--- a/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc ++++ b/chrome/browser/media/router/providers/cast/cast_media_route_provider.cc +@@ -44,9 +44,9 @@ constexpr char kLoggerComponent[] = "CastMediaRouteProvider"; + + // List of origins allowed to use a PresentationRequest to initiate mirroring. + constexpr std::array kPresentationApiAllowlist = { +- "https://docs.google.com", +- "https://meet.google.com", +- "https://music.youtube.com", ++ "https://docs.9oo91e.qjz9zk", ++ "https://meet.9oo91e.qjz9zk", ++ "https://music.y0u1ub3.qjz9zk", + }; + + // Returns a list of origins that are valid for |source_id|. An empty list +diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +index 08e217df16f0a..7236150047e9b 100644 +--- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc ++++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +@@ -661,15 +661,15 @@ std::vector DialMediaRouteProvider::GetOrigins( + base::flat_map>> + origin_allowlist( + {{"YouTube", +- {CreateOrigin("https://music.youtube.com/"), +- CreateOrigin("https://music-green-qa.youtube.com/"), +- CreateOrigin("https://music-release-qa.youtube.com/"), +- CreateOrigin("https://tv.youtube.com"), +- CreateOrigin("https://tv-green-qa.youtube.com"), +- CreateOrigin("https://tv-release-qa.youtube.com"), +- CreateOrigin("https://web-green-qa.youtube.com"), +- CreateOrigin("https://web-release-qa.youtube.com"), +- CreateOrigin("https://www.youtube.com")}}, ++ {CreateOrigin("https://music.y0u1ub3.qjz9zk/"), ++ CreateOrigin("https://music-green-qa.y0u1ub3.qjz9zk/"), ++ CreateOrigin("https://music-release-qa.y0u1ub3.qjz9zk/"), ++ CreateOrigin("https://tv.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://tv-green-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://tv-release-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://web-green-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://web-release-qa.y0u1ub3.qjz9zk"), ++ CreateOrigin("https://www.y0u1ub3.qjz9zk")}}, + {"Netflix", {CreateOrigin("https://www.netflix.com")}}, + {"Pandora", {CreateOrigin("https://www.pandora.com")}}, + {"Radio", {CreateOrigin("https://www.pandora.com")}}, +diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +index 1c20dccce61e4..8529e2add6c28 100644 +--- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc ++++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +@@ -127,7 +127,7 @@ void OnURLLoadUploadProgress(uint64_t current, uint64_t total) { + } // namespace + + const char WebRtcEventLogUploaderImpl::kUploadURL[] = +- "https://clients2.google.com/cr/report"; ++ "https://clients2.9oo91e.qjz9zk/cr/report"; + + WebRtcEventLogUploaderImpl::Factory::Factory( + scoped_refptr task_runner) +diff --git a/chrome/browser/media/webrtc/webrtc_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_log_uploader.cc +index b63597830df8d..cd7373fdcb257 100644 +--- a/chrome/browser/media/webrtc/webrtc_log_uploader.cc ++++ b/chrome/browser/media/webrtc/webrtc_log_uploader.cc +@@ -475,7 +475,7 @@ void WebRtcLogUploader::UploadCompressedLog( + } + })"); + +- constexpr char kUploadURL[] = "https://clients2.google.com/cr/report"; ++ constexpr char kUploadURL[] = "https://clients2.9oo91e.qjz9zk/cr/report"; + auto resource_request = std::make_unique(); + resource_request->url = !upload_url_for_testing_.is_empty() + ? upload_url_for_testing_ +diff --git a/chrome/browser/nacl_host/nacl_infobar_delegate.cc b/chrome/browser/nacl_host/nacl_infobar_delegate.cc +index 26c0cccbd2744..aeb087f24ef4f 100644 +--- a/chrome/browser/nacl_host/nacl_infobar_delegate.cc ++++ b/chrome/browser/nacl_host/nacl_infobar_delegate.cc +@@ -33,7 +33,7 @@ std::u16string NaClInfoBarDelegate::GetLinkText() const { + } + + GURL NaClInfoBarDelegate::GetLinkURL() const { +- return GURL("https://support.google.com/chrome/?p=ib_nacl"); ++ return GURL("https://support.9oo91e.qjz9zk/chrome/?p=ib_nacl"); + } + + std::u16string NaClInfoBarDelegate::GetMessageText() const { +diff --git a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +index 03b45cb8b9e6a..bb0ea2cbf99d6 100644 +--- a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc ++++ b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +@@ -31,7 +31,7 @@ namespace { + // -------------------- Nearby Share Service v1 Endpoints -------------------- + + const char kDefaultNearbyShareV1HTTPHost[] = +- "https://nearbysharing-pa.googleapis.com"; ++ "https://nearbysharing-pa.9oo91eapis.qjz9zk"; + + const char kNearbyShareV1Path[] = "v1/"; + +@@ -43,7 +43,7 @@ const char kPageToken[] = "page_token"; + const char kSecretIds[] = "secret_ids"; + + const char kNearbyShareOAuth2Scope[] = +- "https://www.googleapis.com/auth/nearbysharing-pa"; ++ "https://www.9oo91eapis.qjz9zk/auth/nearbysharing-pa"; + + // Creates the full Nearby Share v1 URL for endpoint to the API with + // |request_path|. +diff --git a/chrome/browser/nearby_sharing/instantmessaging/constants.h b/chrome/browser/nearby_sharing/instantmessaging/constants.h +index 1261e41487a79..2575f2ba883da 100644 +--- a/chrome/browser/nearby_sharing/instantmessaging/constants.h ++++ b/chrome/browser/nearby_sharing/instantmessaging/constants.h +@@ -6,10 +6,10 @@ + #define CHROME_BROWSER_NEARBY_SHARING_INSTANTMESSAGING_CONSTANTS_H_ + + const char kInstantMessagingReceiveMessageAPI[] = +- "https://instantmessaging-pa.googleapis.com/v1/messages:receiveExpress"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/messages:receiveExpress"; + + const char kInstantMessagingSendMessageAPI[] = +- "https://instantmessaging-pa.googleapis.com/v1/message:sendExpress"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/message:sendExpress"; + + // Template for optional OAuth2 authorization HTTP header. + const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; +diff --git a/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc b/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc +index 345caf18c8571..2a344697188cc 100644 +--- a/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc ++++ b/chrome/browser/nearby_sharing/network_traversal_ice_config_fetcher.cc +@@ -19,7 +19,7 @@ + namespace { + + const char kNetworkTraversalIceConfigApiUrl[] = +- "https://networktraversal.googleapis.com/v1alpha/iceconfig?key="; ++ "https://networktraversal.9oo91eapis.qjz9zk/v1alpha/iceconfig?key="; + + // Response with 2 ice server configs takes ~1KB. A loose upper bound of 16KB is + // chosen to avoid breaking the flow in case the response has longer URLs in ice +@@ -81,11 +81,11 @@ bool IsLoaderSuccessful(const network::SimpleURLLoader* loader) { + + std::vector GetDefaultIceServers() { + sharing::mojom::IceServerPtr ice_server(sharing::mojom::IceServer::New()); +- ice_server->urls.emplace_back("stun:stun.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun1.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun2.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun3.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun4.l.google.com:19302"); ++ ice_server->urls.emplace_back("stun:stun.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun1.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun2.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun3.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun4.l.9oo91e.qjz9zk:19302"); + + std::vector default_servers; + default_servers.push_back(std::move(ice_server)); +diff --git a/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc b/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc +index 6d7afbab6154e..ed6ea00c104d0 100644 +--- a/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc ++++ b/chrome/browser/nearby_sharing/tachyon_ice_config_fetcher.cc +@@ -33,7 +33,7 @@ namespace { + namespace tachyon_proto = nearbyshare::tachyon_proto; + + const char kIceConfigApiUrl[] = +- "https://instantmessaging-pa.googleapis.com/v1/peertopeer:geticeserver"; ++ "https://instantmessaging-pa.9oo91eapis.qjz9zk/v1/peertopeer:geticeserver"; + + const char kAuthorizationHeaderFormat[] = "Authorization: Bearer %s"; + +@@ -167,11 +167,11 @@ bool IsLoaderSuccessful(const network::SimpleURLLoader* loader, + + std::vector GetDefaultIceServers() { + sharing::mojom::IceServerPtr ice_server(sharing::mojom::IceServer::New()); +- ice_server->urls.emplace_back("stun:stun.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun1.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun2.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun3.l.google.com:19302"); +- ice_server->urls.emplace_back("stun:stun4.l.google.com:19302"); ++ ice_server->urls.emplace_back("stun:stun.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun1.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun2.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun3.l.9oo91e.qjz9zk:19302"); ++ ice_server->urls.emplace_back("stun:stun4.l.9oo91e.qjz9zk:19302"); + + std::vector default_servers; + default_servers.push_back(std::move(ice_server)); +diff --git a/chrome/browser/new_tab_page/modules/drive/drive_service.cc b/chrome/browser/new_tab_page/modules/drive/drive_service.cc +index 5327309334817..3d734bcc337af 100644 +--- a/chrome/browser/new_tab_page/modules/drive/drive_service.cc ++++ b/chrome/browser/new_tab_page/modules/drive/drive_service.cc +@@ -59,7 +59,7 @@ constexpr char kRequestBody[] = R"({ + })"; + // Maximum accepted size of an ItemSuggest response. 1MB. + constexpr int kMaxResponseSize = 1024 * 1024; +-const char server_url[] = "https://appsitemsuggest-pa.googleapis.com/v1/items"; ++const char server_url[] = "https://appsitemsuggest-pa.9oo91eapis.qjz9zk/v1/items"; + constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation = + net::DefineNetworkTrafficAnnotation("drive_service", R"( + semantics { +@@ -101,7 +101,7 @@ constexpr char kFakeDataWithThreeFiles[] = R"({ + "item": [ + { + "itemId": "foo", +- "url": "https://docs.google.com", ++ "url": "https://docs.9oo91e.qjz9zk", + "driveItem": { + "title": "Drive Module Design Doc", + "mimeType": "application/vnd.google-apps.document" +@@ -114,7 +114,7 @@ constexpr char kFakeDataWithThreeFiles[] = R"({ + }, + { + "itemId": "bar", +- "url": "https://sheets.google.com", ++ "url": "https://sheets.9oo91e.qjz9zk", + "driveItem": { + "title": "Monthly Presentation Schedule", + "mimeType": "application/vnd.google-apps.spreadsheet" +@@ -127,7 +127,7 @@ constexpr char kFakeDataWithThreeFiles[] = R"({ + }, + { + "itemId": "baz", +- "url": "https://slides.google.com", ++ "url": "https://slides.9oo91e.qjz9zk", + "driveItem": { + "title": "File With A Really Really Really Really Really Long Name", + "mimeType": "application/vnd.google-apps.presentation" +@@ -145,7 +145,7 @@ constexpr char kFakeDataWithSixFiles[] = R"({ + "item": [ + { + "itemId": "foo", +- "url": "https://docs.google.com", ++ "url": "https://docs.9oo91e.qjz9zk", + "driveItem": { + "title": "Drive Module Design Doc", + "mimeType": "application/vnd.google-apps.document" +@@ -158,7 +158,7 @@ constexpr char kFakeDataWithSixFiles[] = R"({ + }, + { + "itemId": "bar", +- "url": "https://sheets.google.com", ++ "url": "https://sheets.9oo91e.qjz9zk", + "driveItem": { + "title": "Monthly Presentation Schedule", + "mimeType": "application/vnd.google-apps.spreadsheet" +@@ -171,7 +171,7 @@ constexpr char kFakeDataWithSixFiles[] = R"({ + }, + { + "itemId": "baz", +- "url": "https://slides.google.com", ++ "url": "https://slides.9oo91e.qjz9zk", + "driveItem": { + "title": "File With A Really Really Really Really Really Long Name", + "mimeType": "application/vnd.google-apps.presentation" +@@ -184,7 +184,7 @@ constexpr char kFakeDataWithSixFiles[] = R"({ + }, + { + "itemId": "qux", +- "url": "https://slides.google.com", ++ "url": "https://slides.9oo91e.qjz9zk", + "driveItem": { + "title": "Cutest Kittens on the Web", + "mimeType": "application/vnd.google-apps.presentation" +@@ -197,7 +197,7 @@ constexpr char kFakeDataWithSixFiles[] = R"({ + }, + { + "itemId": "foobar", +- "url": "https://docs.google.com", ++ "url": "https://docs.9oo91e.qjz9zk", + "driveItem": { + "title": "Budgeting Notes", + "mimeType": "application/vnd.google-apps.document" +@@ -210,7 +210,7 @@ constexpr char kFakeDataWithSixFiles[] = R"({ + }, + { + "itemId": "bazqux", +- "url": "https://sheets.google.com", ++ "url": "https://sheets.9oo91e.qjz9zk", + "driveItem": { + "title": "1", + "mimeType": "application/vnd.google-apps.spreadsheet" +diff --git a/chrome/browser/new_tab_page/modules/photos/photos_service.cc b/chrome/browser/new_tab_page/modules/photos/photos_service.cc +index 6dcd6630d7db5..c9add6643333b 100644 +--- a/chrome/browser/new_tab_page/modules/photos/photos_service.cc ++++ b/chrome/browser/new_tab_page/modules/photos/photos_service.cc +@@ -36,7 +36,7 @@ namespace { + constexpr int kMaxResponseSize = 1024 * 1024; + const int kMaxPersonalizedMessageLength = 20; + const char server_url[] = +- "https://photosfirstparty-pa.googleapis.com/v1/ntp/memories:read"; ++ "https://photosfirstparty-pa.9oo91eapis.qjz9zk/v1/ntp/memories:read"; + constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation = + net::DefineNetworkTrafficAnnotation("photos_service", R"( + semantics { +@@ -82,7 +82,7 @@ constexpr char kMemoryTemplate[] = R"( + "subheader": "" + }, + "coverMediaKey": "coverKey%d", +- "coverDatUrl": "https://lh3.googleusercontent.com/proxy/CyeQrfWvSkJ-4wjGmm1zVIP4XZKL4oAjywWcPh8lhrwtizOY4kGsDtVa3nk984qJB5q2-r7aInfG25UFjfwyu7QEraqepTlbsDdKX1yeenhh7EGeAR2Hp1QcbO24C7WyU8bLPx8o_2HA-opm6cqZ8f4ehEXCxMEbR79A44jcWpacTLfYERPGeVrljo2vAl2LyFMHrA" ++ "coverDatUrl": "https://lh3.9oo91eusercontent.qjz9zk/proxy/CyeQrfWvSkJ-4wjGmm1zVIP4XZKL4oAjywWcPh8lhrwtizOY4kGsDtVa3nk984qJB5q2-r7aInfG25UFjfwyu7QEraqepTlbsDdKX1yeenhh7EGeAR2Hp1QcbO24C7WyU8bLPx8o_2HA-opm6cqZ8f4ehEXCxMEbR79A44jcWpacTLfYERPGeVrljo2vAl2LyFMHrA" + })"; + } // namespace + +@@ -454,10 +454,10 @@ void PhotosService::OnJsonParsed( + ntp_features::kNtpPhotosModule, + ntp_features::kNtpPhotosModuleDataParam); + if (fake_data_choice != "") { +- mojo_memory->item_url = GURL("https://photos.google.com"); ++ mojo_memory->item_url = GURL("https://photos.9oo91e.qjz9zk"); + } else { + mojo_memory->item_url = +- GURL("https://photos.google.com/memory/featured/" + *memory_id + ++ GURL("https://photos.9oo91e.qjz9zk/memory/featured/" + *memory_id + + "/photo/" + *cover_id + "?referrer=CHROME_NTP"); + } + +diff --git a/chrome/browser/obsolete_system/obsolete_system_linux.cc b/chrome/browser/obsolete_system/obsolete_system_linux.cc +index 5953872ee8478..be313772a2e28 100644 +--- a/chrome/browser/obsolete_system/obsolete_system_linux.cc ++++ b/chrome/browser/obsolete_system/obsolete_system_linux.cc +@@ -10,7 +10,7 @@ + #include "ui/base/l10n/l10n_util.h" + + const char kLinuxObsoleteUrl[] = +- "https://support.google.com/chrome/?p=unsupported_linux"; ++ "https://support.9oo91e.qjz9zk/chrome/?p=unsupported_linux"; + + // This list contains the 2 most recently obsoleted distros according to + // `kLinuxObsoleteUrl`. +diff --git a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +index 268f71e23a7fa..b8c66371eddd8 100644 +--- a/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc ++++ b/chrome/browser/page_load_metrics/observers/service_worker_page_load_metrics_observer.cc +@@ -119,7 +119,7 @@ const char kHistogramNoServiceWorkerFirstContentfulPaintDocs[] = + namespace { + + bool IsDocsSite(const GURL& url) { +- return url.host_piece() == "docs.google.com"; ++ return url.host_piece() == "docs.9oo91e.qjz9zk"; + } + + bool IsForwardBackLoad(ui::PageTransition transition) { +diff --git a/chrome/browser/permissions/quiet_permission_prompt_model_android.cc b/chrome/browser/permissions/quiet_permission_prompt_model_android.cc +index 9a5db4231f81e..d55d7d8e89979 100644 +--- a/chrome/browser/permissions/quiet_permission_prompt_model_android.cc ++++ b/chrome/browser/permissions/quiet_permission_prompt_model_android.cc +@@ -91,5 +91,5 @@ QuietPermissionPromptModelAndroid GetQuietNotificationPermissionPromptModel( + } + + GURL GetNotificationBlockedLearnMoreUrl() { +- return GURL(u"https://support.google.com/chrome/answer/3220216"); ++ return GURL(u"https://support.9oo91e.qjz9zk/chrome/answer/3220216"); + } +diff --git a/chrome/browser/policy/safe_search_policy_test.h b/chrome/browser/policy/safe_search_policy_test.h +index 9f3959a074d17..9f9b8e267ea8a 100644 +--- a/chrome/browser/policy/safe_search_policy_test.h ++++ b/chrome/browser/policy/safe_search_policy_test.h +@@ -32,7 +32,7 @@ class SafeSearchPolicyTest : public PolicyTest { + + static void CheckSafeSearch(Browser* browser, + bool expect_safe_search, +- const std::string& url = "http://google.com/"); ++ const std::string& url = "http://9oo91e.qjz9zk/"); + + private: + base::test::ScopedFeatureList feature_list_; +diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc +index 000ad658c0a3a..0b6524ba72d53 100644 +--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc ++++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc +@@ -1011,18 +1011,18 @@ base::flat_map + PrivacySandboxService::GetSampleFirstPartySets() const { + if (privacy_sandbox::kPrivacySandboxFirstPartySetsUISampleSets.Get() && + IsFirstPartySetsDataAccessEnabled()) { +- return {{net::SchemefulSite(GURL("https://youtube.com")), +- net::SchemefulSite(GURL("https://google.com"))}, +- {net::SchemefulSite(GURL("https://google.com")), +- net::SchemefulSite(GURL("https://google.com"))}, +- {net::SchemefulSite(GURL("https://google.com.au")), +- net::SchemefulSite(GURL("https://google.com"))}, ++ return {{net::SchemefulSite(GURL("https://y0u1ub3.qjz9zk")), ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://9oo91e.qjz9zk")), ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://9oo91e.qjz9zk.au")), ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, + {net::SchemefulSite(GURL("https://google.de")), +- net::SchemefulSite(GURL("https://google.com"))}, +- {net::SchemefulSite(GURL("https://chromium.org")), +- net::SchemefulSite(GURL("https://chromium.org"))}, +- {net::SchemefulSite(GURL("https://googlesource.com")), +- net::SchemefulSite(GURL("https://chromium.org"))}, ++ net::SchemefulSite(GURL("https://9oo91e.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://ch40m1um.qjz9zk")), ++ net::SchemefulSite(GURL("https://ch40m1um.qjz9zk"))}, ++ {net::SchemefulSite(GURL("https://9oo91esource.qjz9zk")), ++ net::SchemefulSite(GURL("https://ch40m1um.qjz9zk"))}, + {net::SchemefulSite(GURL("https://muenchen.de")), + net::SchemefulSite(GURL("https://xn--mnchen-3ya.de"))}}; + } +@@ -1083,7 +1083,7 @@ bool PrivacySandboxService::IsPartOfManagedFirstPartySet( + if (privacy_sandbox::kPrivacySandboxFirstPartySetsUISampleSets.Get()) { + return IsFirstPartySetsDataAccessManaged() || + GetSampleFirstPartySets()[site] == +- net::SchemefulSite(GURL("https://chromium.org")); ++ net::SchemefulSite(GURL("https://ch40m1um.qjz9zk")); + } + + return first_party_sets_policy_service_->IsSiteInManagedSet(site); +diff --git a/chrome/browser/profiles/profile_avatar_downloader.cc b/chrome/browser/profiles/profile_avatar_downloader.cc +index 4ef3697189bb1..92a7ceb0818ea 100644 +--- a/chrome/browser/profiles/profile_avatar_downloader.cc ++++ b/chrome/browser/profiles/profile_avatar_downloader.cc +@@ -20,7 +20,7 @@ + + namespace { + const char kHighResAvatarDownloadUrlPrefix[] = +- "https://www.gstatic.com/chrome/profile_avatars/"; ++ "https://www.95tat1c.qjz9zk/chrome/profile_avatars/"; + } + + ProfileAvatarDownloader::ProfileAvatarDownloader(size_t icon_index, +diff --git a/chrome/browser/push_messaging/push_messaging_constants.cc b/chrome/browser/push_messaging/push_messaging_constants.cc +index a07f00bf970d6..53a741e6cf5f4 100644 +--- a/chrome/browser/push_messaging/push_messaging_constants.cc ++++ b/chrome/browser/push_messaging/push_messaging_constants.cc +@@ -5,7 +5,7 @@ + #include "chrome/browser/push_messaging/push_messaging_constants.h" + + const char kPushMessagingGcmEndpoint[] = +- "https://fcm.googleapis.com/fcm/send/"; ++ "https://fcm.9oo91eapis.qjz9zk/fcm/send/"; + + const char kPushMessagingForcedNotificationTag[] = + "user_visible_auto_notification"; +diff --git a/chrome/browser/push_messaging/push_messaging_service_impl.cc b/chrome/browser/push_messaging/push_messaging_service_impl.cc +index 4434fa08cdcac..289925989457f 100644 +--- a/chrome/browser/push_messaging/push_messaging_service_impl.cc ++++ b/chrome/browser/push_messaging/push_messaging_service_impl.cc +@@ -108,7 +108,7 @@ const char kSilentPushUnsupportedMessage[] = + "Chrome currently only supports the Push API for subscriptions that will " + "result in user-visible messages. You can indicate this by calling " + "pushManager.subscribe({userVisibleOnly: true}) instead. See " +- "https://goo.gl/yqv4Q4 for more details."; ++ "https://goo.gl.qjz9zk/yqv4Q4 for more details."; + + // Message displayed in the console (as an error) when a GCM Sender ID is used + // to create a subscription, which is unsupported. The subscription request will +diff --git a/chrome/browser/resources/about_sys/about_sys.js b/chrome/browser/resources/about_sys/about_sys.js +index 874b1816cab38..874d367b9c301 100644 +--- a/chrome/browser/resources/about_sys/about_sys.js ++++ b/chrome/browser/resources/about_sys/about_sys.js +@@ -18,7 +18,7 @@ const MAX_FILE_SIZE = 10485760; + // + // Link to markdown doc with documentation for Chrome OS. + const CROS_MD_DOC_URL = +- 'https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/debugd/docs/log_entries.md'; ++ 'https://chromium.9oo91esource.qjz9zk/chromiumos/platform2/+/HEAD/debugd/docs/log_entries.md'; + // + + function getValueDivForButton(button) { +diff --git a/chrome/browser/resources/browsing_topics/browsing_topics_internals.html b/chrome/browser/resources/browsing_topics/browsing_topics_internals.html +index b1ea6527cdccb..5e12483a3f912 100644 +--- a/chrome/browser/resources/browsing_topics/browsing_topics_internals.html ++++ b/chrome/browser/resources/browsing_topics/browsing_topics_internals.html +@@ -48,8 +48,8 @@ found in the LICENSE file. +
+ + +
+diff --git a/chrome/browser/resources/chromeos/about_os_credits.html b/chrome/browser/resources/chromeos/about_os_credits.html +index dd20f2e1c2a19..a04d3c171f52c 100644 +--- a/chrome/browser/resources/chromeos/about_os_credits.html ++++ b/chrome/browser/resources/chromeos/about_os_credits.html +@@ -1,6 +1,6 @@ + + + + +@@ -23,14 +23,14 @@ +
+

Placeholder Credits Page

+

+-See Licensing for ChromiumOS Developers and +-Licensing for ChromiumOS Package Owners ++See Licensing for ChromiumOS Developers and ++Licensing for ChromiumOS Package Owners + for more details on the credits system. +

+

+ If you need to change styles, fonts, layout, etc of the + chrome://os-credits page, edit +-chromite/licensing/about_credits.tmpl. ++chromite/licensing/about_credits.tmpl. + The template is used to generate a device-dependent about_os_credits.html + when a CrOS image is built. +

+@@ -39,7 +39,7 @@ when a CrOS image is built. + +
+ placeheld-1.0 +-homepage ++homepage + + +
+@@ -56,7 +56,7 @@ when a CrOS image is built. + +
+ placeholder-1 +-homepage ++homepage + + +
+diff --git a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js +index ec8be980578f7..a28412e91e05e 100644 +--- a/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js ++++ b/chrome/browser/resources/chromeos/accessibility/accessibility_common/dictation/macros/list_commands_macro.js +@@ -19,7 +19,7 @@ export class ListCommandsMacro extends Macro { + // Note that this will open a new tab, ending the current Dictation session + // by changing the input focus. + globalThis.open( +- 'https://support.google.com/chromebook?p=text_dictation_m100', ++ 'https://support.9oo91e.qjz9zk/chromebook?p=text_dictation_m100', + '_blank'); + return this.createRunMacroResult_(/*isSuccess=*/ true); + } +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +index 2c8751fe6a01e..a43d2da311d9b 100644 +--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +@@ -1565,7 +1565,7 @@ export class CommandHandler extends CommandHandlerInterface { + /** @private */ + reportIssue_() { + let url = +- 'https://issuetracker.google.com/issues/new?component=1272895&type=BUG' + ++ 'https://issuetracker.9oo91e.qjz9zk/issues/new?component=1272895&type=BUG' + + '&priority=P2&severity=S2&description='; + const description = {}; + description['Chrome OS Version'] = chrome.runtime.getManifest().version; +@@ -1593,7 +1593,7 @@ export class CommandHandler extends CommandHandlerInterface { + /** @private */ + showTalkBackKeyboardShortcuts_() { + BrowserUtil.openBrowserUrl( +- 'https://support.google.com/accessibility/android/answer/6110948'); ++ 'https://support.9oo91e.qjz9zk/accessibility/android/answer/6110948'); + } + + /** @private */ +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py +index 8a3c9cce72523..ae35551ed7ab4 100755 +--- a/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox/tools/webstore_extension_util.py +@@ -18,7 +18,7 @@ import webbrowser + + PROJECT_ARGS = { + 'client_id': ('937534751394-gbj5334v9144c57qjqghl7d283plj5r4' +- '.apps.googleusercontent.com'), ++ '.apps.9oo91eusercontent.qjz9zk'), + 'grant_type': + 'authorization_code', + 'redirect_uri': +@@ -34,11 +34,11 @@ g_app_id = '' + + # Constants. + PORT = 8000 +-OAUTH_DOMAIN = 'accounts.google.com' ++OAUTH_DOMAIN = 'accounts.9oo91e.qjz9zk' + OAUTH_AUTH_COMMAND = '/o/oauth2/auth' + OAUTH_TOKEN_COMMAND = '/o/oauth2/token' +-WEBSTORE_API_SCOPE = 'https://www.googleapis.com/auth/chromewebstore' +-API_ENDPOINT_DOMAIN = 'www.googleapis.com' ++WEBSTORE_API_SCOPE = 'https://www.9oo91eapis.qjz9zk/auth/chromewebstore' ++API_ENDPOINT_DOMAIN = 'www.9oo91eapis.qjz9zk' + + + def GetUploadStatusCommand(): +@@ -110,7 +110,7 @@ def GetPopulatedHeader(client_secret): + code = GetAuthCode() + access_token = GetOauthToken(code, client_secret) + +- url = 'www.googleapis.com' ++ url = 'www.9oo91eapis.qjz9zk' + + return { + 'Authorization': 'Bearer %(access_token)s' % access_token, +diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 +index 497eaedd1b79d..74b1b6449ee49 100644 +--- a/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/chromevox_manifest.json.jinja2 +@@ -30,14 +30,14 @@ + "tabs", + "tts", + "chrome://resources/", +- "https://docs.google.com/*", +- "https://docs.sandbox.google.com/*" ++ "https://docs.9oo91e.qjz9zk/*", ++ "https://docs.sandbox.9oo91e.qjz9zk/*" + ], + "content_scripts": [ + { + "matches": [ +- "https://docs.google.com/*", +- "https://docs.sandbox.google.com/*" ++ "https://docs.9oo91e.qjz9zk/*", ++ "https://docs.sandbox.9oo91e.qjz9zk/*" + ], + "all_frames": true, + "js": [ +diff --git a/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js b/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js +index 1ec3cb6444b53..99f7c25017c79 100644 +--- a/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js ++++ b/chrome/browser/resources/chromeos/accessibility/common/tutorial/chromevox_tutorial.js +@@ -672,15 +672,15 @@ Polymer({ + { + msgId: 'next_command_reference', + link: +- 'https://support.google.com/chromebook/answer/7031755#zippy=%2Cmove-through-a-page-with-keyboard-shortcuts', ++ 'https://support.9oo91e.qjz9zk/chromebook/answer/7031755#zippy=%2Cmove-through-a-page-with-keyboard-shortcuts', + }, + { + msgId: 'chrome_keyboard_shortcuts', +- link: 'https://support.google.com/chromebook/answer/183101?hl=en', ++ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/183101?hl=en', + }, + { + msgId: 'touchscreen_accessibility', +- link: 'https://support.google.com/chromebook/answer/6103702?hl=en', ++ link: 'https://support.9oo91e.qjz9zk/chromebook/answer/6103702?hl=en', + }, + ]; + for (const resource of resources) { +diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js +index 240c2f43e422f..9bea7ce05b203 100644 +--- a/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js ++++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak/select_to_speak.js +@@ -27,7 +27,7 @@ const SelectToSpeakState = chrome.accessibilityPrivate.SelectToSpeakState; + // Matches one of the known GSuite apps which need the clipboard to find and + // read selected text. Includes sandbox and non-sandbox versions. + const GSUITE_APP_REGEXP = +- /^https:\/\/docs\.(?:sandbox\.)?google\.com\/(?:(?:presentation)|(?:document)|(?:spreadsheets)|(?:drawings)){1}\//; ++ /^https:\/\/docs\.(?:sandbox\.)?9oo91e\.qjz9zk\/(?:(?:presentation)|(?:document)|(?:spreadsheets)|(?:drawings)){1}\//; + + /** + * Determines if a node is in one of the known Google GSuite apps that needs +@@ -725,8 +725,8 @@ export class SelectToSpeak { + chrome.tabs.query( + { + url: [ +- 'https://docs.google.com/document*', +- 'https://docs.sandbox.google.com/*', ++ 'https://docs.9oo91e.qjz9zk/document*', ++ 'https://docs.sandbox.9oo91e.qjz9zk/*', + ], + }, + tabs => { +diff --git a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 +index 38092e47c0c59..186953d8be546 100644 +--- a/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/select_to_speak_manifest.json.jinja2 +@@ -20,8 +20,8 @@ + "storage", + "tabs", + "tts", +- "https://docs.google.com/*", +- "https://docs.sandbox.google.com/*", ++ "https://docs.9oo91e.qjz9zk/*", ++ "https://docs.sandbox.9oo91e.qjz9zk/*", + "clipboard", + "clipboardRead", + "clipboardWrite", +@@ -38,8 +38,8 @@ + "default_locale": "en", + "content_scripts": [ + { +- "matches": [ "https://docs.google.com/document*", +- "https://docs.sandbox.google.com/document*" ], ++ "matches": [ "https://docs.9oo91e.qjz9zk/document*", ++ "https://docs.sandbox.9oo91e.qjz9zk/document*" ], + "all_frames": true, + "js": [ + "common/gdocs_script.js" +diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +index 0a077ee56c4bf..599cef1fbc610 100644 +--- a/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 ++++ b/chrome/browser/resources/chromeos/accessibility/switch_access_manifest.json.jinja2 +@@ -27,8 +27,8 @@ + "default_locale": "en", + "content_scripts": [ + { +- "matches": [ "https://docs.google.com/document*", +- "https://docs.sandbox.google.com/document*" ], ++ "matches": [ "https://docs.9oo91e.qjz9zk/document*", ++ "https://docs.sandbox.9oo91e.qjz9zk/document*" ], + "all_frames": true, + "js": [ + "common/gdocs_script.js" +diff --git a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +index 31158f719f53a..1eadd910debec 100644 +--- a/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js ++++ b/chrome/browser/resources/chromeos/add_supervision/add_supervision_ui.js +@@ -18,15 +18,15 @@ import {AddSupervisionAPIServer} from './add_supervision_api_server.js'; + * @const {!Array} + */ + const ALLOWED_HOSTS = [ +- 'google.com', +- 'gstatic.com', +- 'googleapis.com', +- 'google-analytics.com', ++ '9oo91e.qjz9zk', ++ '95tat1c.qjz9zk', ++ '9oo91eapis.qjz9zk', ++ '9oo91e-analytics.qjz9zk', + // FIFE avatar images (lh3-lh6). See http://go/fife-domains +- 'lh3.googleusercontent.com', +- 'lh4.googleusercontent.com', +- 'lh5.googleusercontent.com', +- 'lh6.googleusercontent.com', ++ 'lh3.9oo91eusercontent.qjz9zk', ++ 'lh4.9oo91eusercontent.qjz9zk', ++ 'lh5.9oo91eusercontent.qjz9zk', ++ 'lh6.9oo91eusercontent.qjz9zk', + ]; + + /** +diff --git a/chrome/browser/resources/chromeos/arc_support/background.js b/chrome/browser/resources/chromeos/arc_support/background.js +index 348d8396f99c0..bfe2735e4d31b 100644 +--- a/chrome/browser/resources/chromeos/arc_support/background.js ++++ b/chrome/browser/resources/chromeos/arc_support/background.js +@@ -330,13 +330,13 @@ class TermsOfServicePage { + this.termsView_.addContentScripts([ + { + name: 'preProcess', +- matches: ['https://play.google.com/*'], ++ matches: ['https://play.9oo91e.qjz9zk/*'], + js: {code: scriptInitTermsView}, + run_at: 'document_start', + }, + { + name: 'postProcess', +- matches: ['https://play.google.com/*'], ++ matches: ['https://play.9oo91e.qjz9zk/*'], + css: {files: ['playstore.css']}, + js: {files: ['playstore.js']}, + run_at: 'document_end', +@@ -444,7 +444,7 @@ class TermsOfServicePage { + return; + } + +- const defaultLocation = 'https://play.google.com/about/play-terms/'; ++ const defaultLocation = 'https://play.9oo91e.qjz9zk/about/play-terms/'; + if (this.termsView_.src) { + // This is reloading the page, typically clicked RETRY on error page. + this.fastLocation_ = undefined; +@@ -457,7 +457,7 @@ class TermsOfServicePage { + // Try fast load first if we know location. + this.fastLocation_ = this.getFastLocation_(); + if (this.fastLocation_) { +- this.termsView_.src = 'https://play.google.com/intl/' + ++ this.termsView_.src = 'https://play.9oo91e.qjz9zk/intl/' + + this.fastLocation_ + '/about/play-terms/'; + } else { + this.termsView_.src = defaultLocation; +@@ -571,7 +571,7 @@ class TermsOfServicePage { + // In case we failed with fast location let retry default scheme. + if (this.fastLocation_) { + this.fastLocation_ = undefined; +- this.termsView_.src = 'https://play.google.com/about/play-terms/'; ++ this.termsView_.src = 'https://play.9oo91e.qjz9zk/about/play-terms/'; + return; + } + this.onTermsViewLoadAborted_( +@@ -821,7 +821,7 @@ function showURLOverlay(url) { + */ + function showPrivacyPolicyOverlay() { + const defaultLink = +- 'https://www.google.com/intl/' + locale + '/policies/privacy/'; ++ 'https://www.9oo91e.qjz9zk/intl/' + locale + '/policies/privacy/'; + if (termsPage.isManaged_) { + showURLOverlay(defaultLink); + return; +@@ -910,7 +910,7 @@ chrome.app.runtime.onLaunched.addListener(function() { + }); + overlayWebview.addContentScripts([{ + name: 'postProcess', +- matches: ['https://support.google.com/*'], ++ matches: ['https://support.9oo91e.qjz9zk/*'], + css: {files: ['overlay.css']}, + run_at: 'document_end', + }]); +diff --git a/chrome/browser/resources/chromeos/arc_support/playstore.js b/chrome/browser/resources/chromeos/arc_support/playstore.js +index b21719604f3ef..f7d6762a6731c 100644 +--- a/chrome/browser/resources/chromeos/arc_support/playstore.js ++++ b/chrome/browser/resources/chromeos/arc_support/playstore.js +@@ -56,7 +56,7 @@ function navigateToLanguageAndCountryCode(language, countryCode) { + // Check special case for en_us which may be mapped to en. + const matchDefaultUs = null; + if (window.location.href.startsWith( +- 'https://play.google.com/intl/en_us/about/play-terms') && ++ 'https://play.9oo91e.qjz9zk/intl/en_us/about/play-terms') && + termsLang == 'en' && countryCode == 'us' && + selectLangZoneTerms.value.startsWith('/intl/en/about/play-terms')) { + return true; +@@ -211,7 +211,7 @@ function getPrivacyPolicyLink() { + } + } + } +- return 'https://www.google.com/policies/privacy/'; ++ return 'https://www.9oo91e.qjz9zk/policies/privacy/'; + } + + /** +@@ -226,7 +226,7 @@ function processDocument() { + formatDocument(); + + const initialLoad = window.location.href.startsWith( +- 'https://play.google.com/about/play-terms'); ++ 'https://play.9oo91e.qjz9zk/about/play-terms'); + let language = document.language; + if (!language) { + language = navigator.language; +diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js b/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js +index 5ee15ceb3dffb..20f3fa59d3462 100644 +--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js ++++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_related_info.js +@@ -109,7 +109,7 @@ class AssistantRelatedInfo extends AssistantRelatedInfoBase { + * @private {string} + */ + this.urlTemplate_ = +- 'https://www.gstatic.com/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html'; ++ 'https://www.95tat1c.qjz9zk/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html'; + + /** + * Whether try to reload with the default url when a 404 error occurred. +@@ -292,7 +292,7 @@ class AssistantRelatedInfo extends AssistantRelatedInfoBase { + 'icon-src', + 'data:text/html;charset=utf-8,' + + encodeURIComponent(this.$.zippy.getWrappedIcon( +- 'https://www.gstatic.com/images/icons/material/system/2x/' + ++ 'https://www.95tat1c.qjz9zk/images/icons/material/system/2x/' + + url, + this.i18n('assistantScreenContextTitle'), + getComputedStyle(document.body) +diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js +index fbfee1e5652a1..0f07801a3f7f7 100644 +--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js ++++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.js +@@ -73,7 +73,7 @@ class AssistantValueProp extends AssistantValuePropBase { + */ + urlTemplate_: { + value: +- 'https://www.gstatic.com/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html', ++ 'https://www.95tat1c.qjz9zk/opa-android/oobe/a02187e41eed9e42/v5_omni_$.html', + }, + + /** +diff --git a/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json b/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json +index 65355f34f15d3..f1b81674c657c 100644 +--- a/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json ++++ b/chrome/browser/resources/chromeos/connectivity_diagnostics/manifest.json +@@ -40,8 +40,8 @@ + "diagnostics", + "metricsPrivate", + "networkingPrivate", +- "http://*.google.com/*", +- "https://*.google.com/*" ++ "http://*.9oo91e.qjz9zk/*", ++ "https://*.9oo91e.qjz9zk/*" + ], + "app": { + "background": { +diff --git a/chrome/browser/resources/chromeos/echo/manifest.json b/chrome/browser/resources/chromeos/echo/manifest.json +index 86be1060f28fa..38d31c8e1ef1c 100644 +--- a/chrome/browser/resources/chromeos/echo/manifest.json ++++ b/chrome/browser/resources/chromeos/echo/manifest.json +@@ -5,7 +5,7 @@ + "version": "1.0.0", + "description": "Chrome Goodies", + "manifest_version": 2, +- "content_security_policy": "default-src 'self' blob: filesystem:; connect-src 'self' blob: filesystem: https://chromeos-registration.googleapis.com https://www.google-analytics.com", ++ "content_security_policy": "default-src 'self' blob: filesystem:; connect-src 'self' blob: filesystem: https://chromeos-registration.9oo91eapis.qjz9zk https://www.9oo91e-analytics.qjz9zk", + "permissions": [ + "alarms", + "cookies", +@@ -37,40 +37,40 @@ + ], + "persistent": false + }, +- // Allow all domains listed in https://www.google.com/supported_domains ++ // Allow all domains listed in https://www.9oo91e.qjz9zk/supported_domains + "externally_connectable": { + "ids": ["*"], + "matches": [ +- "*://www.google.com/*chromebook/*", ++ "*://www.9oo91e.qjz9zk/*chromebook/*", + "*://www.google.ad/*chromebook/*", + "*://www.google.ae/*chromebook/*", +- "*://www.google.com.af/*chromebook/*", +- "*://www.google.com.ag/*chromebook/*", +- "*://www.google.com.ai/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.af/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ag/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ai/*chromebook/*", + "*://www.google.al/*chromebook/*", + "*://www.google.am/*chromebook/*", + "*://www.google.co.ao/*chromebook/*", +- "*://www.google.com.ar/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ar/*chromebook/*", + "*://www.google.as/*chromebook/*", + "*://www.google.at/*chromebook/*", +- "*://www.google.com.au/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.au/*chromebook/*", + "*://www.google.az/*chromebook/*", + "*://www.google.ba/*chromebook/*", +- "*://www.google.com.bd/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bd/*chromebook/*", + "*://www.google.be/*chromebook/*", + "*://www.google.bf/*chromebook/*", + "*://www.google.bg/*chromebook/*", +- "*://www.google.com.bh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bh/*chromebook/*", + "*://www.google.bi/*chromebook/*", + "*://www.google.bj/*chromebook/*", +- "*://www.google.com.bn/*chromebook/*", +- "*://www.google.com.bo/*chromebook/*", +- "*://www.google.com.br/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bn/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bo/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.br/*chromebook/*", + "*://www.google.bs/*chromebook/*", + "*://www.google.bt/*chromebook/*", + "*://www.google.co.bw/*chromebook/*", + "*://www.google.by/*chromebook/*", +- "*://www.google.com.bz/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.bz/*chromebook/*", + "*://www.google.ca/*chromebook/*", + "*://www.google.cd/*chromebook/*", + "*://www.google.cf/*chromebook/*", +@@ -81,38 +81,38 @@ + "*://www.google.cl/*chromebook/*", + "*://www.google.cm/*chromebook/*", + "*://www.google.cn/*chromebook/*", +- "*://www.google.com.co/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.co/*chromebook/*", + "*://www.google.co.cr/*chromebook/*", +- "*://www.google.com.cu/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.cu/*chromebook/*", + "*://www.google.cv/*chromebook/*", +- "*://www.google.com.cy/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.cy/*chromebook/*", + "*://www.google.cz/*chromebook/*", + "*://www.google.de/*chromebook/*", + "*://www.google.dj/*chromebook/*", + "*://www.google.dk/*chromebook/*", + "*://www.google.dm/*chromebook/*", +- "*://www.google.com.do/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.do/*chromebook/*", + "*://www.google.dz/*chromebook/*", +- "*://www.google.com.ec/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ec/*chromebook/*", + "*://www.google.ee/*chromebook/*", +- "*://www.google.com.eg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.eg/*chromebook/*", + "*://www.google.es/*chromebook/*", +- "*://www.google.com.et/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.et/*chromebook/*", + "*://www.google.fi/*chromebook/*", +- "*://www.google.com.fj/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.fj/*chromebook/*", + "*://www.google.fm/*chromebook/*", + "*://www.google.fr/*chromebook/*", + "*://www.google.ga/*chromebook/*", + "*://www.google.ge/*chromebook/*", + "*://www.google.gg/*chromebook/*", +- "*://www.google.com.gh/*chromebook/*", +- "*://www.google.com.gi/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gi/*chromebook/*", + "*://www.google.gl/*chromebook/*", + "*://www.google.gm/*chromebook/*", + "*://www.google.gr/*chromebook/*", +- "*://www.google.com.gt/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.gt/*chromebook/*", + "*://www.google.gy/*chromebook/*", +- "*://www.google.com.hk/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.hk/*chromebook/*", + "*://www.google.hn/*chromebook/*", + "*://www.google.hr/*chromebook/*", + "*://www.google.ht/*chromebook/*", +@@ -126,104 +126,104 @@ + "*://www.google.is/*chromebook/*", + "*://www.google.it/*chromebook/*", + "*://www.google.je/*chromebook/*", +- "*://www.google.com.jm/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.jm/*chromebook/*", + "*://www.google.jo/*chromebook/*", + "*://www.google.co.jp/*chromebook/*", + "*://www.google.co.ke/*chromebook/*", +- "*://www.google.com.kh/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.kh/*chromebook/*", + "*://www.google.ki/*chromebook/*", + "*://www.google.kg/*chromebook/*", + "*://www.google.co.kr/*chromebook/*", +- "*://www.google.com.kw/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.kw/*chromebook/*", + "*://www.google.kz/*chromebook/*", + "*://www.google.la/*chromebook/*", +- "*://www.google.com.lb/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.lb/*chromebook/*", + "*://www.google.li/*chromebook/*", + "*://www.google.lk/*chromebook/*", + "*://www.google.co.ls/*chromebook/*", + "*://www.google.lt/*chromebook/*", + "*://www.google.lu/*chromebook/*", + "*://www.google.lv/*chromebook/*", +- "*://www.google.com.ly/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ly/*chromebook/*", + "*://www.google.co.ma/*chromebook/*", + "*://www.google.md/*chromebook/*", + "*://www.google.me/*chromebook/*", + "*://www.google.mg/*chromebook/*", + "*://www.google.mk/*chromebook/*", + "*://www.google.ml/*chromebook/*", +- "*://www.google.com.mm/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mm/*chromebook/*", + "*://www.google.mn/*chromebook/*", + "*://www.google.ms/*chromebook/*", +- "*://www.google.com.mt/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mt/*chromebook/*", + "*://www.google.mu/*chromebook/*", + "*://www.google.mv/*chromebook/*", + "*://www.google.mw/*chromebook/*", +- "*://www.google.com.mx/*chromebook/*", +- "*://www.google.com.my/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.mx/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.my/*chromebook/*", + "*://www.google.co.mz/*chromebook/*", +- "*://www.google.com.na/*chromebook/*", +- "*://www.google.com.ng/*chromebook/*", +- "*://www.google.com.ni/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.na/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ng/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ni/*chromebook/*", + "*://www.google.ne/*chromebook/*", + "*://www.google.nl/*chromebook/*", + "*://www.google.no/*chromebook/*", +- "*://www.google.com.np/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.np/*chromebook/*", + "*://www.google.nr/*chromebook/*", + "*://www.google.nu/*chromebook/*", + "*://www.google.co.nz/*chromebook/*", +- "*://www.google.com.om/*chromebook/*", +- "*://www.google.com.pa/*chromebook/*", +- "*://www.google.com.pe/*chromebook/*", +- "*://www.google.com.pg/*chromebook/*", +- "*://www.google.com.ph/*chromebook/*", +- "*://www.google.com.pk/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.om/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pe/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ph/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pk/*chromebook/*", + "*://www.google.pl/*chromebook/*", + "*://www.google.pn/*chromebook/*", +- "*://www.google.com.pr/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.pr/*chromebook/*", + "*://www.google.ps/*chromebook/*", + "*://www.google.pt/*chromebook/*", +- "*://www.google.com.py/*chromebook/*", +- "*://www.google.com.qa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.py/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.qa/*chromebook/*", + "*://www.google.ro/*chromebook/*", + "*://www.google.ru/*chromebook/*", + "*://www.google.rw/*chromebook/*", +- "*://www.google.com.sa/*chromebook/*", +- "*://www.google.com.sb/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sa/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sb/*chromebook/*", + "*://www.google.sc/*chromebook/*", + "*://www.google.se/*chromebook/*", +- "*://www.google.com.sg/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sg/*chromebook/*", + "*://www.google.sh/*chromebook/*", + "*://www.google.si/*chromebook/*", + "*://www.google.sk/*chromebook/*", +- "*://www.google.com.sl/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sl/*chromebook/*", + "*://www.google.sn/*chromebook/*", + "*://www.google.so/*chromebook/*", + "*://www.google.sm/*chromebook/*", + "*://www.google.sr/*chromebook/*", + "*://www.google.st/*chromebook/*", +- "*://www.google.com.sv/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.sv/*chromebook/*", + "*://www.google.td/*chromebook/*", + "*://www.google.tg/*chromebook/*", + "*://www.google.co.th/*chromebook/*", +- "*://www.google.com.tj/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tj/*chromebook/*", + "*://www.google.tl/*chromebook/*", + "*://www.google.tm/*chromebook/*", + "*://www.google.tn/*chromebook/*", + "*://www.google.to/*chromebook/*", +- "*://www.google.com.tr/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tr/*chromebook/*", + "*://www.google.tt/*chromebook/*", +- "*://www.google.com.tw/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.tw/*chromebook/*", + "*://www.google.co.tz/*chromebook/*", +- "*://www.google.com.ua/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.ua/*chromebook/*", + "*://www.google.co.ug/*chromebook/*", + "*://www.google.co.uk/*chromebook/*", +- "*://www.google.com.uy/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.uy/*chromebook/*", + "*://www.google.co.uz/*chromebook/*", +- "*://www.google.com.vc/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.vc/*chromebook/*", + "*://www.google.co.ve/*chromebook/*", + "*://www.google.vg/*chromebook/*", + "*://www.google.co.vi/*chromebook/*", +- "*://www.google.com.vn/*chromebook/*", ++ "*://www.9oo91e.qjz9zk.vn/*chromebook/*", + "*://www.google.vu/*chromebook/*", + "*://www.google.ws/*chromebook/*", + "*://www.google.rs/*chromebook/*", +@@ -231,7 +231,7 @@ + "*://www.google.co.zm/*chromebook/*", + "*://www.google.co.zw/*chromebook/*", + "*://www.google.cat/*chromebook/*", +- "*://chromebook-dot-googwebreview.appspot.com/*chromebook/*" ++ "*://chromebook-dot-googwebreview.8pp2p8t.qjz9zk/*chromebook/*" + ] + } + } +diff --git a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js +index 03f83d05f9744..94342c46239c5 100644 +--- a/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js ++++ b/chrome/browser/resources/chromeos/edu_coexistence/edu_coexistence_ui.js +@@ -205,7 +205,7 @@ class EduCoexistenceUi extends EduCoexistenceUiBase { + + // Don't show the "Next" button if the EDU authentication got forwarded to + // a non-Google SSO page. +- this.showGaiaNextButton_ = currentUrl.hostname.endsWith('.google.com'); ++ this.showGaiaNextButton_ = currentUrl.hostname.endsWith('.9oo91e.qjz9zk'); + } else { + // Hide the GAIA Buttons. + this.showGaiaButtons_ = false; +diff --git a/chrome/browser/resources/chromeos/emoji_picker/icons.html b/chrome/browser/resources/chromeos/emoji_picker/icons.html +index c38c3dc9df269..235b5989d1c3b 100644 +--- a/chrome/browser/resources/chromeos/emoji_picker/icons.html ++++ b/chrome/browser/resources/chromeos/emoji_picker/icons.html +@@ -2,7 +2,7 @@ + + + + +diff --git a/chrome/browser/resources/chromeos/emulator/icons.html b/chrome/browser/resources/chromeos/emulator/icons.html +index 1ec003650b3fe..a7c7817279dde 100644 +--- a/chrome/browser/resources/chromeos/emulator/icons.html ++++ b/chrome/browser/resources/chromeos/emulator/icons.html +@@ -3,7 +3,7 @@ + + + + +diff --git a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json b/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json +index 0acc45b64ea0f..e6cb9fb751f64 100644 +--- a/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json ++++ b/chrome/browser/resources/chromeos/input_method/google_xkb_manifest.json +@@ -12,10 +12,10 @@ + "app.window.ime", + "audioCapture", + "crashReportPrivate", +- "https://clients4.google.com/", +- "https://dl.google.com/", +- "https://handwriting.googleapis.com/", +- "https://www.googleapis.com/", ++ "https://clients4.9oo91e.qjz9zk/", ++ "https://dl.9oo91e.qjz9zk/", ++ "https://handwriting.9oo91eapis.qjz9zk/", ++ "https://www.9oo91eapis.qjz9zk/", + "input", + "inputMethodPrivate", + "metricsPrivate", +diff --git a/chrome/browser/resources/chromeos/login/debug/debug.js b/chrome/browser/resources/chromeos/login/debug/debug.js +index 564cd1d6aca2d..298018860ecbc 100644 +--- a/chrome/browser/resources/chromeos/login/debug/debug.js ++++ b/chrome/browser/resources/chromeos/login/debug/debug.js +@@ -69,18 +69,18 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + if (type === 'WAA') { + if (isMinor) { + zippy['iconUri'] = +- 'https://www.gstatic.com/myactivity/icon/icon_fp_history_blue.svg'; ++ 'https://www.95tat1c.qjz9zk/myactivity/icon/icon_fp_history_blue.svg'; + } else { + zippy['iconUri'] = +- 'https://ssl.gstatic.com/identity/boq/consentflowtexts/icon_web_and_app_activity_grey600_72-fb2e66730dca510849d22bee9f0f29ba.png'; ++ 'https://ssl.95tat1c.qjz9zk/identity/boq/consentflowtexts/icon_web_and_app_activity_grey600_72-fb2e66730dca510849d22bee9f0f29ba.png'; + } + } else if (type === 'DA') { + if (isMinor) { + zippy['iconUri'] = +- 'https://www.gstatic.com/myactivity/icon/icon_fp_chromebook_blue.svg'; ++ 'https://www.95tat1c.qjz9zk/myactivity/icon/icon_fp_chromebook_blue.svg'; + } else { + zippy['iconUri'] = +- 'https://ssl.gstatic.com/identity/boq/consentflowtexts/icon_device_information_vertical_grey600_72-be6f9c8691213019712cfa4106a509e0.png'; ++ 'https://ssl.95tat1c.qjz9zk/identity/boq/consentflowtexts/icon_device_information_vertical_grey600_72-be6f9c8691213019712cfa4106a509e0.png'; + } + } else { + console.error('### Uknown zippy type ' + type); +@@ -450,7 +450,7 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + suffix: 'E', + data: { + gaiaPath: 'embedded/setup/v2/chromeos', +- gaiaUrl: 'https://accounts.google.com/', ++ gaiaUrl: 'https://accounts.9oo91e.qjz9zk/', + }, + states: [ + { +@@ -675,7 +675,7 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + enterpriseManagedDevice: false, + forceReload: true, + gaiaPath: 'embedded/setup/v2/chromeos', +- gaiaUrl: 'https://accounts.google.com/', ++ gaiaUrl: 'https://accounts.9oo91e.qjz9zk/', + hl: loadTimeData.getString('app_locale'), + }); + }, +@@ -726,7 +726,7 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + // Password and email mismatch error message. + id: 'offline-login-password-mismatch', + trigger: (screen) => { +- screen.setEmailForTest('someuser@gmail.com'); ++ screen.setEmailForTest('someuser@9ma1l.qjz9zk'); + screen.proceedToPasswordPage(); + screen.showPasswordMismatchMessage(); + }, +@@ -1072,10 +1072,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: false, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1090,10 +1090,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: false, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1108,10 +1108,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: false, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: true, + recoveryOptionDefault: true, + }, +@@ -1126,10 +1126,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: true, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1144,10 +1144,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: true, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1159,10 +1159,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: true, + isChildAccount: false, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1177,10 +1177,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: false, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1195,10 +1195,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: false, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1215,10 +1215,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: false, + isTosHidden: true, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1234,10 +1234,10 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + isDemo: false, + isChildAccount: false, + isTosHidden: false, +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', +- arcTosUrl: 'https://play.google.com/about/play-terms/embedded/', +- privacyPolicyUrl: 'https://policies.google.com/privacy/embedded', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', ++ arcTosUrl: 'https://play.9oo91e.qjz9zk/about/play-terms/embedded/', ++ privacyPolicyUrl: 'https://policies.9oo91e.qjz9zk/privacy/embedded', + showRecoveryOption: false, + recoveryOptionDefault: false, + }, +@@ -1262,8 +1262,8 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + screen.setUIStep('loaded'); + }, + data: { +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', + }, + }, + { +@@ -1272,8 +1272,8 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + screen.setUIStep('loading'); + }, + data: { +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', + }, + }, + { +@@ -1282,8 +1282,8 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + screen.setUIStep('google-eula'); + }, + data: { +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', + }, + }, + { +@@ -1292,8 +1292,8 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + screen.setUIStep('cros-eula'); + }, + data: { +- googleEulaUrl: 'https://policies.google.com/terms/embedded?hl=en', +- crosEulaUrl: 'https://www.google.com/intl/en/chrome/terms/', ++ googleEulaUrl: 'https://policies.9oo91e.qjz9zk/terms/embedded?hl=en', ++ crosEulaUrl: 'https://www.9oo91e.qjz9zk/intl/en/chrome/terms/', + }, + }, + ], +@@ -1386,7 +1386,7 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + screen.loadAppList([ + { + title: 'gApp', +- icon_url: 'https://www.google.com/favicon.ico', ++ icon_url: 'https://www.9oo91e.qjz9zk/favicon.ico', + category: 'Games', + in_app_purchases: true, + was_installed: false, +@@ -1394,7 +1394,7 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + }, + { + title: 'anotherGapp', +- icon_url: 'https://www.google.com/favicon.ico', ++ icon_url: 'https://www.9oo91e.qjz9zk/favicon.ico', + category: 'Games', + in_app_purchases: true, + was_installed: false, +@@ -1777,7 +1777,7 @@ const createAssistantZippy = (type, isMinor, isNativeIcons) => { + { + id: 'TransferredGaiaCreds', + trigger: (screen) => { +- screen.showFidoAssertionReceived('testUser@gmail.com'); ++ screen.showFidoAssertionReceived('testUser@9ma1l.qjz9zk'); + }, + }, + ], +diff --git a/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html b/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html +index 49e7913ae8d9f..a540d4c0a6aae 100644 +--- a/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html ++++ b/chrome/browser/resources/chromeos/login/screens/common/marketing_opt_in.html +@@ -168,7 +168,7 @@ found in the LICENSE file. +
+ Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA +
+-
www.google.com
++
www.9oo91e.qjz9zk
+
+
+ +diff --git a/chrome/browser/resources/chromeos/login/screens/login/offline_login.html b/chrome/browser/resources/chromeos/login/screens/login/offline_login.html +index bfa0854a4ef05..01e823866cf7b 100644 +--- a/chrome/browser/resources/chromeos/login/screens/login/offline_login.html ++++ b/chrome/browser/resources/chromeos/login/screens/login/offline_login.html +@@ -25,7 +25,7 @@ found in the LICENSE file. + 'email': , + 'password': } + If user did not type domain |email| will be added by +- "@gmail.com" or by 'emailDomain' if it is set. ++ "@9ma1l.qjz9zk" or by 'emailDomain' if it is set. + Methods: + 'focus' - focuses current screen (email input or password input); + 'setEmail' - accepts an argument |email|. If |email| is empty it sets +diff --git a/chrome/browser/resources/chromeos/login/screens/login/offline_login.js b/chrome/browser/resources/chromeos/login/screens/login/offline_login.js +index 6a3a2fab029f9..6f56ed3161638 100644 +--- a/chrome/browser/resources/chromeos/login/screens/login/offline_login.js ++++ b/chrome/browser/resources/chromeos/login/screens/login/offline_login.js +@@ -26,7 +26,7 @@ import {OobeI18nBehavior, OobeI18nBehaviorInterface} from '../../components/beha + import {OobeContentDialog} from '../../components/dialogs/oobe_content_dialog.js'; + + +-const DEFAULT_EMAIL_DOMAIN = '@gmail.com'; ++const DEFAULT_EMAIL_DOMAIN = '@9ma1l.qjz9zk'; + const INPUT_EMAIL_PATTERN = + '^[a-zA-Z0-9.!#$%&\'*+=?^_`\\{\\|\\}~\\-]+(@[^\\s@]+)?$'; + +diff --git a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js +index e420c2d797f93..1ac9fc3af5cde 100644 +--- a/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js ++++ b/chrome/browser/resources/chromeos/multidevice_internals/browser_tabs_metadata_form.js +@@ -36,7 +36,7 @@ Polymer({ + /** @private */ + url_: { + type: String, +- value: 'https://www.google.com/', ++ value: 'https://www.9oo91e.qjz9zk/', + }, + + /** @private */ +diff --git a/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js b/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js +index 0503aca0448a0..c838e0bfd5d12 100644 +--- a/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js ++++ b/chrome/browser/resources/chromeos/parent_access/parent_access_ui.js +@@ -18,10 +18,10 @@ import {WebviewManager} from './webview_manager.js'; + * @const {!Array} + */ + const ALLOWED_HOSTS = [ +- 'googleapis.com', +- 'gstatic.com', +- 'googleusercontent.com', +- 'google.com', ++ '9oo91eapis.qjz9zk', ++ '95tat1c.qjz9zk', ++ '9oo91eusercontent.qjz9zk', ++ '9oo91e.qjz9zk', + ]; + + /** +diff --git a/chrome/browser/resources/default_apps/external_extensions.json b/chrome/browser/resources/default_apps/external_extensions.json +index 6c3660f187fc0..aa7a818624f4f 100644 +--- a/chrome/browser/resources/default_apps/external_extensions.json ++++ b/chrome/browser/resources/default_apps/external_extensions.json +@@ -3,7 +3,7 @@ + { + // Drive extension + "ghbmnnjooekpmoecnnnilnnbdlolhkhi" : { +- "external_update_url": "https://clients2.google.com/service/update2/crx" ++ "external_update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx" + } + } + +diff --git a/chrome/browser/resources/discards/graph_doc_template.html b/chrome/browser/resources/discards/graph_doc_template.html +index 35aa55eeb2876..1689bd8f58d7d 100644 +--- a/chrome/browser/resources/discards/graph_doc_template.html ++++ b/chrome/browser/resources/discards/graph_doc_template.html +@@ -82,7 +82,7 @@ URL. As result, this document needs to be self-contained, hence inline scripts. + } + + +- +diff --git a/chrome/browser/resources/downloads/icons.html b/chrome/browser/resources/downloads/icons.html +index 5315618cea58c..584e51cf493c1 100644 +--- a/chrome/browser/resources/downloads/icons.html ++++ b/chrome/browser/resources/downloads/icons.html +@@ -3,7 +3,7 @@ + + + + +diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/browser/resources/gaia_auth_host/authenticator.js +index 9e241bd997d9a..7200af4193781 100644 +--- a/chrome/browser/resources/gaia_auth_host/authenticator.js ++++ b/chrome/browser/resources/gaia_auth_host/authenticator.js +@@ -768,7 +768,7 @@ export class Authenticator extends EventTarget { + url = appendParam( + url, 'continue', + data.gaiaUrl + 'programmatic_auth_chromeos?hl=' + data.hl + +- '&scope=https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthLogin&' + ++ '&scope=https%3A%2F%2Fwww.9oo91e.qjz9zk%2Faccounts%2FOAuthLogin&' + + 'client_id=' + encodeURIComponent(data.clientId) + + '&access_type=offline'); + +diff --git a/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js b/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js +index 59811ef53aa4a..ea9bacc1baf23 100644 +--- a/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js ++++ b/chrome/browser/resources/gaia_auth_host/saml_password_attributes.js +@@ -17,7 +17,7 @@ import {decodeTimestamp} from './saml_timestamps.js'; + const MAX_SANE_XML_LENGTH = 50 * 1024; // 50 KB + + /** @const @private {string} Schema name prefix. */ +- const SCHEMA_NAME_PREFIX = 'http://schemas.google.com/saml/2019/'; ++ const SCHEMA_NAME_PREFIX = 'http://schemas.9oo91e.qjz9zk/saml/2019/'; + + /** @const @private {string} Schema name for password modified timestamp. */ + const PASSWORD_MODIFIED_TIMESTAMP = 'passwordmodifiedtimestamp'; +diff --git a/chrome/browser/resources/hangout_services/manifest.json b/chrome/browser/resources/hangout_services/manifest.json +index 788275469b586..bceaaae958834 100644 +--- a/chrome/browser/resources/hangout_services/manifest.json ++++ b/chrome/browser/resources/hangout_services/manifest.json +@@ -9,7 +9,7 @@ + "manifest_version": 2, + "externally_connectable": { + "matches": [ +- "https://*.google.com/*" ++ "https://*.9oo91e.qjz9zk/*" + ] + }, + "background": { +diff --git a/chrome/browser/resources/inspect/inspect.html b/chrome/browser/resources/inspect/inspect.html +index a1a0f3e4b826f..f8ba1cb5eb674 100644 +--- a/chrome/browser/resources/inspect/inspect.html ++++ b/chrome/browser/resources/inspect/inspect.html +@@ -46,7 +46,7 @@ found in the LICENSE file. + +
+ +@@ -102,7 +102,7 @@ found in the LICENSE file. +
+ Define the listening port on your device that maps to a port accessible + from your development machine. +- Learn more +
+
+diff --git a/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html b/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html +index 948d73cd807ac..4eb7f3d5f0fa6 100644 +--- a/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html ++++ b/chrome/browser/resources/internals/query_tiles/query_tiles_internals.html +@@ -24,7 +24,7 @@ +

Server address

+
+ +- ++ + + + +diff --git a/chrome/browser/resources/media/mei_preload/manifest.json b/chrome/browser/resources/media/mei_preload/manifest.json +index 1b4fa8a1e63eb..549b53788a027 100644 +--- a/chrome/browser/resources/media/mei_preload/manifest.json ++++ b/chrome/browser/resources/media/mei_preload/manifest.json +@@ -3,6 +3,6 @@ + "icons": {}, + "version": "1.0.7.1652906823", + "manifest_version": 2, +- "update_url": "https://clients2.google.com/service/update2/crx", ++ "update_url": "https://clients2.9oo91e.qjz9zk/service/update2/crx", + "description": "Contains preloaded data for Media Engagement" + } +diff --git a/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html b/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html +index 4f5d7a7c0cb7f..b7d113ebba365 100644 +--- a/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html ++++ b/chrome/browser/resources/nearby_share/shared/nearby_shared_icons.html +@@ -2,7 +2,7 @@ + + + + + +@@ -47,7 +47,7 @@ + + + + +diff --git a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html b/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html +index 97fbfd0d2d2a8..0e9a2967b8ece 100644 +--- a/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html ++++ b/chrome/browser/resources/nearby_share/shared/nearby_shared_share_type_icons.html +@@ -2,7 +2,7 @@ + + + + + +diff --git a/chrome/browser/resources/net_internals/index.html b/chrome/browser/resources/net_internals/index.html +index 1fb63739664d9..51425cea9a76d 100644 +--- a/chrome/browser/resources/net_internals/index.html ++++ b/chrome/browser/resources/net_internals/index.html +@@ -21,7 +21,7 @@ found in the LICENSE file. +
+
+ The net-internals events viewer and related functionality has been removed. +- Please use chrome://net-export to save netlogs and the external netlog_viewer to view them. ++ Please use chrome://net-export to save netlogs and the external netlog_viewer to view them. +
+ +
+@@ -73,8 +73,8 @@ found in the LICENSE file. +
+ HSTS is HTTP Strict Transport Security: a way for sites to elect to + always use HTTPS. See +- +- https://www.chromium.org/hsts. PKP is Public Key Pinning: Chrome ++ ++ https://www.ch40m1um.qjz9zk/hsts. PKP is Public Key Pinning: Chrome + "pins" certain public keys for certain sites in official builds.
+ +

Add HSTS domain

+diff --git a/chrome/browser/resources/network_speech_synthesis/manifest.json b/chrome/browser/resources/network_speech_synthesis/manifest.json +index e4835edb53168..835db49f4f262 100644 +--- a/chrome/browser/resources/network_speech_synthesis/manifest.json ++++ b/chrome/browser/resources/network_speech_synthesis/manifest.json +@@ -10,7 +10,7 @@ + "permissions": [ + "systemPrivate", + "ttsEngine", +- "https://www.google.com/" ++ "https://www.9oo91e.qjz9zk/" + ], + "tts_engine": { + "voices": [ +diff --git a/chrome/browser/resources/network_speech_synthesis/tts_extension.js b/chrome/browser/resources/network_speech_synthesis/tts_extension.js +index 813e6afb81420..ffc1608591533 100644 +--- a/chrome/browser/resources/network_speech_synthesis/tts_extension.js ++++ b/chrome/browser/resources/network_speech_synthesis/tts_extension.js +@@ -30,7 +30,7 @@ TtsExtension.prototype = { + * @const + * @private + */ +- SPEECH_SERVER_URL_: 'https://www.google.com/speech-api/v2/synthesize?' + ++ SPEECH_SERVER_URL_: 'https://www.9oo91e.qjz9zk/speech-api/v2/synthesize?' + + 'enc=mpeg&client=chromium', + + /** +diff --git a/chrome/browser/resources/new_tab_page/modules/photos/module.html b/chrome/browser/resources/new_tab_page/modules/photos/module.html +index bee0651bf7f4f..b2f3d9db15003 100644 +--- a/chrome/browser/resources/new_tab_page/modules/photos/module.html ++++ b/chrome/browser/resources/new_tab_page/modules/photos/module.html +@@ -569,7 +569,7 @@ + + +