Browse Source

Update to 92.0.4515.107

tags/92.0.4515.107-1^0 92.0.4515.107-1-webview
wchen342 2 months ago
parent
commit
75cfeb1b29
Signed by: wchen342 GPG Key ID: 9C19365D69B04CEC
58 changed files with 1183 additions and 1302 deletions
  1. +2
    -2
      .build_config
  2. +5
    -0
      CHANGELOG.md
  3. +241
    -149
      domain_sub_2.list
  4. +2
    -2
      misc/misc.sh
  5. +14
    -14
      patches/Bromite/AImageReader-CFI-crash-mitigations.patch
  6. +27
    -27
      patches/Bromite/Add-a-proxy-configuration-page.patch
  7. +29
    -29
      patches/Bromite/Add-an-always-incognito-mode.patch
  8. +76
    -76
      patches/Bromite/Add-bookmark-import-export-actions.patch
  9. +10
    -10
      patches/Bromite/Add-exit-menu-item.patch
  10. +6
    -6
      patches/Bromite/Add-flag-to-disable-WebGL.patch
  11. +0
    -172
      patches/Bromite/Add-flags-to-disable-device-motion-orientation-APIs.patch
  12. +14
    -14
      patches/Bromite/Add-option-to-not-persist-tabs-across-sessions.patch
  13. +1
    -1
      patches/Bromite/Change-default-webRTC-policy-to-not-use-any-address.patch
  14. +1
    -1
      patches/Bromite/Disable-DRM-media-origin-IDs-preprovisioning.patch
  15. +1
    -1
      patches/Bromite/DoH-secure-mode-by-default.patch
  16. +13
    -12
      patches/Bromite/Inject-scripts-for-AMP-tracking-ads-and-video.patch
  17. +2
    -2
      patches/Bromite/Remove-account-permissions-from-manifest.patch
  18. +4
    -4
      patches/Bromite/Revert-flags-remove-disable-pull-to-refresh-effect.patch
  19. +13
    -13
      patches/Other/debug-fix.patch
  20. +4
    -3
      patches/Other/gs-download-use-normal-python.patch
  21. +30
    -35
      patches/Unobtainium/kill-Auth.patch
  22. +9
    -9
      patches/Unobtainium/kill-GCM.patch
  23. +1
    -1
      patches/Unobtainium/kill-Location-fall-back-to-system.patch
  24. +3
    -3
      patches/Unobtainium/kill-Translate.patch
  25. +1
    -1
      patches/Vanadium/0003-switch-to-fstack-protector-strong.patch
  26. +1
    -1
      patches/Vanadium/0016-disable-seed-based-field-trials.patch
  27. +1
    -1
      patches/Vanadium/0031-disable-media-router-media-remoting-by-default.patch
  28. +3
    -3
      patches/Vanadium/0032-disable-media-router-by-default.patch
  29. +2
    -2
      patches/series
  30. +5
    -1
      patches/src-fix/android-rlz-fix-missing-variable.patch
  31. +1
    -1
      patches/src-fix/fix-base-feature.patch
  32. +2
    -2
      patches/src-fix/fix-prefs.patch
  33. +63
    -47
      patches/src-fix/fix-safe-browsing.patch
  34. +2
    -2
      patches/src-fix/fix-unkown-warning-clang.patch
  35. +4
    -4
      patches/ungoogled-chromium-android/Add-always-desktop-option.patch
  36. +3
    -3
      patches/ungoogled-chromium-android/Add-folder-button-bookmark.patch
  37. +6
    -6
      patches/ungoogled-chromium-android/Add-force-tablet-ui-option.patch
  38. +3
    -3
      patches/ungoogled-chromium-android/Add-save-data-flag.patch
  39. +4
    -4
      patches/ungoogled-chromium-android/Add_trichrome_apk.patch
  40. +2
    -2
      patches/ungoogled-chromium-android/Change-package-name-chromium.patch
  41. +2
    -2
      patches/ungoogled-chromium-android/Disable-contextual-search.patch
  42. +1
    -1
      patches/ungoogled-chromium-android/Disable-homepage-by-default.patch
  43. +2
    -14
      patches/ungoogled-chromium-android/Disable-prefetch.patch
  44. +5
    -6
      patches/ungoogled-chromium-android/Disable-tflite.patch
  45. +1
    -1
      patches/ungoogled-chromium-android/Enable-ProactivelySwapBrowsingInstance.patch
  46. +6
    -6
      patches/ungoogled-chromium-android/Enable-update-notification.patch
  47. +44
    -47
      patches/ungoogled-chromium-android/Remove-UI-elements.patch
  48. +30
    -70
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.gms.auth.patch
  49. +7
    -7
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.gms.cast.patch
  50. +65
    -85
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.gms.common-auth-signin-dynamic-com.google.android.gms.tasks.patch
  51. +42
    -35
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.gms.fido-com.google.android.gms.iid-com.google.android.gms.instantapps-com.google.android.gms.location.patch
  52. +1
    -1
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.gms.flags-com.google.android.gms.location.places-com.google.android.gms.stats.patch
  53. +15
    -345
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.gms.gcm.patch
  54. +7
    -7
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.gms.vision-com.google.android.gms.clearcut-com.google.android.gms.phenotype.patch
  55. +4
    -4
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.play.core.splitcompat-com.google.android.play.core.splitinstall.patch
  56. +1
    -1
      patches/ungoogled-chromium-android/Remove-dependency-on-com.google.android.play.patch
  57. +338
    -0
      patches/ungoogled-chromium-android/Remove-dependency-on-firebase.patch
  58. +1
    -1
      patches/ungoogled-chromium-android/Tricrhome-webview-64.patch

+ 2
- 2
.build_config View File

@ -10,7 +10,7 @@ trichrome_webview_target=trichrome_webview_apk
trichrome_webview_64_target=trichrome_webview_64_apk
all=all
chromium_version=91.0.4472.164
ungoogled_chromium_version=91.0.4472.164
chromium_version=92.0.4515.107
ungoogled_chromium_version=92.0.4515.107
ungoogled_chromium_revision=1
ungoogled_chromium_android_revision=1

+ 5
- 0
CHANGELOG.md View File

@ -1,6 +1,11 @@
# 92.0.4515.107-1
* Remove DeviceOrientation API related flags. See [bromite/bromite/issues/1204](https://github.com/bromite/bromite/issues/1204).
* Remove FireBase dependencies and move to a separate patch
# 91.0.4472.164-1
* Upstream security fixes
* Fix update notification flag
* Add always incognito mode
# 91.0.4472.114-2
* Add back 64-bit Trichrome


+ 241
- 149
domain_sub_2.list
File diff suppressed because it is too large
View File


+ 2
- 2
misc/misc.sh View File

@ -13,7 +13,7 @@
## Create second pruning list
pruning_list_2="pruning_2.list"
pushd src
find . ! '(' -size 0 -o -size 1 -o -name '*.py' -o -name '*.pyc' -o -name '*.java' -o -name '*.h' -o -name '*.c' -o -name '*.cc' -o -name '*.m' -o -name '*.mm' -o -name '*.cpp' -o -name '*.asm' -o -name '*.rb' -o -name '*.mojom' -o -name '*.hlsl' -o -name '*.avif' -o -name '*.bat' -o -name '*.sh' -o -name '*.am' -o -name '*.map' -o -name '*.go' -o -name '*.aidl' -o -name '*.ac' -o -name '*.m4' -o -name '*.idl' -o -name '*.fidl' -o -name '*.yaml' -o -name '*.nc' -o -name '*.el' -o -name '*.tcl' -o -iname '*.png' -o -iname '*.gif' -o -name '*.svg' -o -iname '*.jpg' -o -iname '*.wav' -o -name '*.webp' -o -name '*.webm' -o -name '*.tiff' -o -iname '*.bmp' -o -name '*.ico' -o -name '*.icon' -o -name '*.icns' -o -name '*.mp3' -o -name '*.pdf' -o -name '*.flac' -o -name '*.ogg' -o -name '*.ai' -o -name '*.cur' -o -name '*.xcf' -o -name '*.xml' -o -name '*.css' -o -name '*.htm' -o -name '*.html' -o -name '*.xhtml' -o -name '*.js' -o -name '*.json' -o -name '*.json5' -o -name '*.jsonp' -o -name '*.headers' -o -name '*.xsl' -o -name '*.ttf' -o -name '*.woff' -o -name '*.woff2' -o -name '*.info' -o -name '*.golden' -o -name '*.ninja' -o -name '*.gn' -o -name '*.gni' -o -name '*.config' -o -name '*.cfg' -o -name '*.flags' -o -name '*.proto' -o -name '*.ver' -o -name '*.def' -o -name '*.vim' -o -name '*.gradle' -o -name 'gradlew' -o -name '*.jinja' -o -name '*.jinja2' -o -name '*.typemap' -o -name '*.settings' -o -name '*.pydeps' -o -name '*.test' -o -name '*.ps1' -o -name '*.pyl' -o -name '*.csv' -o -name '*.ztf' -o -name '*.filter' -o -name '*.asciipb' -o -name '*.version' -o -name '*.skeletons' -o -name '*.fbs' -o -name '*.lst' -o -name '*.list' -o -name '*.sig' -o -name '*.sigs' -o -name '*.fragment' -o -name '*.grd' -o -name '*.grdp' -o -name '*.tmpl' -o -name '*.template' -o -name '*.md5' -o -name '*.sha1' -o -name '*.plist' -o -name '*.xtb' -o -name '*.in' -o -name '*.manifest' -o -name '*.properties' -o -name '*.chromium' -o -name '*.txt' -o -name '*.yml' -o -name '*.md' -o -name '*.diff' -o -name '*.patch' -o -name '*.cmake' -o -name 'Makefile' -o -name 'Dockerfile' -o -name 'pylintrc' -o -name 'resource_ids' -o -name '*.README' -o -name 'README' -o -name 'COPYING' -o -name 'AUTHORS' -o -name 'DEPS' -o -name 'OWNERS' -o -name 'VERSION' -o -name 'LICENSE' -o -name 'PKG-INFO' -o -name 'WORKSPACE' -o -name 'BUILD' -o -name '*.BUILD' -o -name '.gitignore' -o -name '.git-blame-ignore-revs' ')' -type f -exec grep -IL . "{}" \; | grep -v -E '/\.git/|/test/|/test_data/|/examples/|/web_tests/|/testdata/|/eu-strip/|/android_sdk/|/android_tools/|icudt.\.dat|chromium-debug\.keystore|gradle-wrapper\.jar|afdo\.prof|/ulp_language_code_locator/|error_prone_ant|/closure_compiler/|/dom_distiller/|/desugar/' > "../${pruning_list_2}"
find . ! '(' -size 0 -o -size 1 -o -name '*.py' -o -name '*.pyc' -o -name '*.java' -o -name '*.h' -o -name '*.c' -o -name '*.cc' -o -name '*.m' -o -name '*.mm' -o -name '*.cpp' -o -name '*.asm' -o -name '*.rb' -o -name '*.mojom' -o -name '*.hlsl' -o -name '*.avif' -o -name '*.bat' -o -name '*.sh' -o -name '*.am' -o -name '*.map' -o -name '*.go' -o -name '*.aidl' -o -name '*.ac' -o -name '*.m4' -o -name '*.idl' -o -name '*.fidl' -o -name '*.yaml' -o -name '*.nc' -o -name '*.el' -o -name '*.tcl' -o -iname '*.png' -o -iname '*.gif' -o -name '*.svg' -o -iname '*.jpg' -o -iname '*.wav' -o -name '*.webp' -o -name '*.webm' -o -name '*.tiff' -o -iname '*.bmp' -o -name '*.ico' -o -name '*.icon' -o -name '*.icns' -o -name '*.mp3' -o -name '*.pdf' -o -name '*.flac' -o -name '*.ogg' -o -name '*.ai' -o -name '*.cur' -o -name '*.xcf' -o -name '*.xml' -o -name '*.css' -o -name '*.htm' -o -name '*.html' -o -name '*.xhtml' -o -name '*.js' -o -name '*.json' -o -name '*.json5' -o -name '*.jsonp' -o -name '*.headers' -o -name '*.xsl' -o -name '*.ttf' -o -name '*.woff' -o -name '*.woff2' -o -name '*.info' -o -name '*.golden' -o -name '*.ninja' -o -name '*.gn' -o -name '*.gni' -o -name '*.config' -o -name '*.cfg' -o -name '*.flags' -o -name '*.proto' -o -name '*.ver' -o -name '*.def' -o -name '*.vim' -o -name '*.gradle' -o -name 'gradlew' -o -name '*.jinja' -o -name '*.jinja2' -o -name '*.typemap' -o -name '*.settings' -o -name '*.pydeps' -o -name '*.test' -o -name '*.ps1' -o -name '*.pyl' -o -name '*.csv' -o -name '*.ztf' -o -name '*.filter' -o -name '*.asciipb' -o -name '*.version' -o -name '*.skeletons' -o -name '*.fbs' -o -name '*.lst' -o -name '*.list' -o -name '*.sig' -o -name '*.sigs' -o -name '*.fragment' -o -name '*.grd' -o -name '*.grdp' -o -name '*.tmpl' -o -name '*.template' -o -name '*.md5' -o -name '*.sha1' -o -name '*.plist' -o -name '*.xtb' -o -name '*.in' -o -name '*.manifest' -o -name '*.properties' -o -name '*.chromium' -o -name '*.txt' -o -name '*.yml' -o -name '*.md' -o -name '*.diff' -o -name '*.patch' -o -name '*.cmake' -o -name 'Makefile' -o -name 'Dockerfile' -o -name 'pylintrc' -o -name 'resource_ids' -o -name '*.README' -o -name 'README' -o -name 'COPYING' -o -name 'AUTHORS' -o -name 'DEPS' -o -name 'OWNERS' -o -name 'VERSION' -o -name 'LICENSE' -o -name 'PKG-INFO' -o -name 'WORKSPACE' -o -name 'BUILD' -o -name '*.BUILD' -o -name '.gitignore' -o -name '.git-blame-ignore-revs' ')' -type f -exec grep -IL . "{}" \; | grep -v -E '/\.git/|/test/|/test_data/|/examples/|/web_tests/|/testdata/|/eu-strip/|/android_sdk/|/android_tools/|/android_deps/|/out/|icudt.\.dat|chromium-debug\.keystore|gradle-wrapper\.jar|afdo\.prof|/ulp_language_code_locator/|error_prone_ant|/closure_compiler/|/dom_distiller/|/desugar/' > "../${pruning_list_2}"
popd
@ -31,7 +31,7 @@ touch "../${substitution_list_temp}"
while read line
do
line="$(echo "$line" | cut -d '#' -f1)"
grep -RIl --exclude-dir={out,.pc} --include="*.gn*" --include="*.proto" --include="*.def" --include="*.jinja*" --include="*.xml" --include="*.css" --include="*.htm" --include="*.html" --include="*.xhtml" --include="*.js" --include="*.json*"--include="*.py" --include="*.java" --include="*.h" --include="*.c" --include="*.cc" --include="*.cpp" --include="*.m" --include="*.mm" --include="*.asm" --include="*.rb" --include="*.mojom" --include="*.hlsl" --include="*.am" --include="*.map" --include="*.go" --include="*.aidl" --include="*.ac" --include="*.m4" --include="*.idl" --include="*.fidl" --include="*.yaml" --include="*.nc" --include="*.el" --include="*.tcl" -P "$line" . | grep -v -E '/\.git/|/android_sdk/|/android_ndk/|/test/|/java_test/|test.cc|tests.cc|test.java|/javatests/|/android_tools/|/web_tests/|test.py|test.mm' >> "../${substitution_list_temp}"
grep -RIl --exclude-dir={out,.pc} --include="*.gn*" --include="*.proto" --include="*.def" --include="*.jinja*" --include="*.xml" --include="*.css" --include="*.htm" --include="*.html" --include="*.xhtml" --include="*.js" --include="*.json*"--include="*.py" --include="*.java" --include="*.h" --include="*.c" --include="*.cc" --include="*.cpp" --include="*.m" --include="*.mm" --include="*.asm" --include="*.rb" --include="*.mojom" --include="*.hlsl" --include="*.am" --include="*.map" --include="*.go" --include="*.aidl" --include="*.ac" --include="*.m4" --include="*.idl" --include="*.fidl" --include="*.yaml" --include="*.nc" --include="*.el" --include="*.tcl" -P "$line" . | grep -v -E '/\.git/|/android_sdk/|/android_ndk/|/test/|/java_test/|test.cc|tests.cc|test.java|/javatests/|/android_tools/|/web_tests/|test.py|test.mm|Unzip.java' >> "../${substitution_list_temp}"
done < ../ungoogled-chromium/domain_regex.list
sort -u "../${substitution_list_temp}" | uniq > "../${substitution_list_2}"
rm "../${substitution_list_temp}"


+ 14
- 14
patches/Bromite/AImageReader-CFI-crash-mitigations.patch View File

@ -79,18 +79,18 @@ See discussions at:
AndroidImageReader();
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1940,7 +1940,7 @@
@@ -1922,7 +1922,7 @@
{
"name": "enable-image-reader",
"owners": [ "vikassoni", "liberato" ],
- "expiry_milestone": 90
- "expiry_milestone": 95
+ "expiry_milestone": -1
},
{
"name": "enable-immersive-fullscreen-toolbar",
--- a/gpu/config/gpu_driver_bug_list.json
+++ b/gpu/config/gpu_driver_bug_list.json
@@ -3207,6 +3207,22 @@
@@ -3189,6 +3189,22 @@
]
},
{
@ -115,7 +115,7 @@ See discussions at:
"description": "DXVA video decoder crashes on some AMD GPUs.",
--- a/gpu/config/gpu_finch_features.cc
+++ b/gpu/config/gpu_finch_features.cc
@@ -49,6 +49,11 @@ bool IsDeviceBlocked(const char* field,
@@ -50,6 +50,11 @@ bool IsDeviceBlocked(const char* field,
} // namespace
#if defined(OS_ANDROID)
@ -139,7 +139,7 @@ See discussions at:
GPU_EXPORT extern const base::Feature kWebViewSurfaceControl;
--- a/gpu/config/gpu_util.cc
+++ b/gpu/config/gpu_util.cc
@@ -112,6 +112,9 @@ GpuFeatureStatus GetAndroidSurfaceContro
@@ -114,6 +114,9 @@ GpuFeatureStatus GetAndroidSurfaceContro
#if !defined(OS_ANDROID)
return kGpuFeatureStatusDisabled;
#else
@ -149,7 +149,7 @@ See discussions at:
if (!gpu_preferences.enable_android_surface_control)
return kGpuFeatureStatusDisabled;
@@ -317,6 +320,11 @@ void AdjustGpuFeatureStatusToWorkarounds
@@ -319,6 +322,11 @@ void AdjustGpuFeatureStatusToWorkarounds
gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] =
kGpuFeatureStatusBlocklisted;
}
@ -163,7 +163,7 @@ See discussions at:
// Estimates roughly user total disk space by counting in the drives where
--- a/gpu/config/gpu_workaround_list.txt
+++ b/gpu/config/gpu_workaround_list.txt
@@ -14,6 +14,7 @@ decode_encode_srgb_for_generatemipmap
@@ -13,6 +13,7 @@ decode_encode_srgb_for_generatemipmap
depth_stencil_renderbuffer_resize_emulation
disable_2d_canvas_auto_flush
disable_accelerated_av1_decode
@ -173,7 +173,7 @@ See discussions at:
disable_accelerated_vp8_decode
--- a/gpu/ipc/service/gpu_init.cc
+++ b/gpu/ipc/service/gpu_init.cc
@@ -502,6 +502,11 @@ bool GpuInit::InitializeAndStartSandbox(
@@ -503,6 +503,11 @@ bool GpuInit::InitializeAndStartSandbox(
}
}
@ -214,7 +214,7 @@ See discussions at:
}
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -631,6 +631,10 @@ const base::Feature kMediaDrmPreprovisio
@@ -632,6 +632,10 @@ const base::Feature kMediaDrmPreprovisio
const base::Feature kMediaDrmPreprovisioningAtStartup{
"MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT};
@ -222,16 +222,16 @@ See discussions at:
+const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
// Prevents using SurfaceLayer for videos. This is meant to be used by embedders
// that cannot support SurfaceLayer at the moment.
const base::Feature kDisableSurfaceLayerForVideo{
// Enable picture in picture web api for android.
const base::Feature kPictureInPictureAPI{"PictureInPictureAPI",
base::FEATURE_DISABLED_BY_DEFAULT};
--- a/media/base/media_switches.h
+++ b/media/base/media_switches.h
@@ -205,6 +205,7 @@ MEDIA_EXPORT extern const base::Feature
@@ -207,6 +207,7 @@ MEDIA_EXPORT extern const base::Feature
MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense;
MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning;
MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup;
+MEDIA_EXPORT extern const base::Feature kAImageReaderVideoOutput;
MEDIA_EXPORT extern const base::Feature kDisableSurfaceLayerForVideo;
MEDIA_EXPORT extern const base::Feature kCanPlayHls;
MEDIA_EXPORT extern const base::Feature kPictureInPictureAPI;
MEDIA_EXPORT extern const base::Feature kHlsPlayer;

+ 27
- 27
patches/Bromite/Add-a-proxy-configuration-page.patch View File

@ -54,20 +54,20 @@ for SimpleURLLoaders as well.
<integer name="download_infobar_sweep_down_delay">800</integer>
--- a/chrome/android/java/res/xml/privacy_preferences.xml
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -33,6 +33,10 @@
android:key="secure_dns"
android:title="@string/settings_secure_dns_title"
android:fragment="org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings"/>
@@ -6,6 +6,10 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
+ <org.chromium.chrome.browser.about_settings.HyperlinkPreference
+ android:key="proxy"
+ android:title="@string/proxy_title"
+ app:url="@string/proxy_url"/>
+ app:url="@string/proxy_url" />
<Preference
android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings"
android:key="do_not_track"
android:key="clear_browsing_data"
android:title="@string/clear_browsing_data_title"
--- 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
@@ -56,6 +56,7 @@ public class PrivacySettings
@@ -54,6 +54,7 @@ public class PrivacySettings
private static final String PREF_DO_NOT_TRACK = "do_not_track";
private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
@ -77,19 +77,19 @@ for SimpleURLLoaders as well.
private ManagedPreferenceDelegate mManagedPreferenceDelegate;
--- a/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
+++ b/chrome/browser/autocomplete/chrome_autocomplete_provider_client.cc
@@ -343,6 +343,8 @@ std::vector<std::u16string>
ChromeAutocompleteProviderClient::GetBuiltinsToProvideAsUserTypes() {
std::vector<std::u16string> builtins_to_provide;
@@ -363,6 +363,8 @@ ChromeAutocompleteProviderClient::GetBui
base::ASCIIToUTF16(chrome::kChromeUISettingsURL));
#endif
builtins_to_provide.push_back(
+ base::ASCIIToUTF16(chrome::kChromeUIProxyConfigURL));
+ builtins_to_provide.push_back(
base::ASCIIToUTF16(chrome::kChromeUIChromeURLsURL));
#if !defined(OS_ANDROID)
builtins_to_provide.push_back(
base::ASCIIToUTF16(chrome::kChromeUIVersionURL));
return builtins_to_provide;
}
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -88,6 +88,12 @@
<include name="IDR_VIDEO_PLAYER_JS" file="resources\video_tutorials\video_player.js" type="BINDATA" />
@@ -101,6 +101,12 @@
<include name="IDR_HANGOUT_SERVICES_MANIFEST" file="resources\hangout_services\manifest.json" type="BINDATA" />
</if>
+ <!-- Bromite Proxy Configuration UI -->
@ -99,8 +99,8 @@ for SimpleURLLoaders as well.
+ </if>
+
<if expr="not is_android">
<!-- New Tab Page -->
<part file="resources/local_ntp/icons.grdp" />
<!-- Page not available for guest. -->
<include name="IDR_PAGE_NOT_AVAILABLE_FOR_GUEST_APP_HTML" file="resources\page_not_available_for_guest\app.html" type="BINDATA" />
--- a/chrome/browser/net/proxy_service_factory.cc
+++ b/chrome/browser/net/proxy_service_factory.cc
@@ -15,6 +15,9 @@
@ -165,7 +165,7 @@ for SimpleURLLoaders as well.
};
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -154,6 +154,8 @@
@@ -157,6 +157,8 @@
#include "printing/buildflags/buildflags.h"
#include "rlz/buildflags/buildflags.h"
@ -174,7 +174,7 @@ for SimpleURLLoaders as well.
#if BUILDFLAG(ENABLE_BACKGROUND_MODE)
#include "chrome/browser/background/background_mode_manager.h"
#endif
@@ -742,6 +744,8 @@ void RegisterLocalState(PrefRegistrySimp
@@ -784,6 +786,8 @@ void RegisterLocalState(PrefRegistrySimp
PluginsResourceService::RegisterPrefs(registry);
#endif
@ -609,7 +609,7 @@ for SimpleURLLoaders as well.
+})();
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -257,6 +257,8 @@ static_library("ui") {
@@ -258,6 +258,8 @@ static_library("ui") {
"webui/metrics_handler.h",
"webui/net_export_ui.cc",
"webui/net_export_ui.h",
@ -620,7 +620,7 @@ for SimpleURLLoaders as well.
"webui/ntp_tiles_internals_ui.cc",
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -52,6 +52,7 @@
@@ -53,6 +53,7 @@
#include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
#include "chrome/browser/ui/webui/policy/policy_ui.h"
#include "chrome/browser/ui/webui/predictors/predictors_ui.h"
@ -628,7 +628,7 @@ for SimpleURLLoaders as well.
#include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
#include "chrome/browser/ui/webui/signin_internals_ui.h"
#include "chrome/browser/ui/webui/sync_internals/sync_internals_ui.h"
@@ -574,6 +575,8 @@ WebUIFactoryFunction GetWebUIFactoryFunc
@@ -601,6 +602,8 @@ WebUIFactoryFunction GetWebUIFactoryFunc
return &NewWebUI<MemoryInternalsUI>;
if (url.host_piece() == chrome::kChromeUINetExportHost)
return &NewWebUI<NetExportUI>;
@ -1095,7 +1095,7 @@ for SimpleURLLoaders as well.
+#endif // CHROME_BROWSER_UI_WEBUI_PROXY_CONFIG_UI_H_
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -33,6 +33,8 @@ const char kChromeUICertificateViewerHos
@@ -34,6 +34,8 @@ const char kChromeUICertificateViewerHos
const char kChromeUICertificateViewerURL[] = "chrome://view-cert/";
const char kChromeUIChromeSigninHost[] = "chrome-signin";
const char kChromeUIChromeSigninURL[] = "chrome://chrome-signin/";
@ -1104,7 +1104,7 @@ for SimpleURLLoaders as well.
const char kChromeUIChromeURLsHost[] = "chrome-urls";
const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/";
const char kChromeUIComponentsHost[] = "components";
@@ -335,6 +337,7 @@ bool IsSystemWebUIHost(base::StringPiece
@@ -336,6 +338,7 @@ bool IsSystemWebUIHost(base::StringPiece
kChromeUIMobileSetupHost,
kChromeUIMultiDeviceSetupHost,
kChromeUINetworkHost,
@ -1112,7 +1112,7 @@ for SimpleURLLoaders as well.
kChromeUIOobeHost,
kChromeUIOSCreditsHost,
kChromeUIOSSettingsHost,
@@ -551,6 +554,7 @@ const char* const kChromeHostURLs[] = {
@@ -553,6 +556,7 @@ const char* const kChromeHostURLs[] = {
#if !defined(OS_ANDROID)
#if !BUILDFLAG(IS_CHROMEOS_ASH)
kChromeUIAppLauncherPageHost,
@ -1133,7 +1133,7 @@ for SimpleURLLoaders as well.
extern const char kChromeUINewTabHost[];
--- a/components/policy/core/browser/proxy_policy_handler.cc
+++ b/components/policy/core/browser/proxy_policy_handler.cc
@@ -200,7 +200,7 @@ void ProxyPolicyHandler::ApplyPolicySett
@@ -197,7 +197,7 @@ void ProxyPolicyHandler::ApplyPolicySett
bypass_list->GetAsString(&bypass_list_string);
prefs->SetValue(proxy_config::prefs::kProxy,
ProxyConfigDictionary::CreateFixedServers(


+ 29
- 29
patches/Bromite/Add-an-always-incognito-mode.patch View File

@ -34,7 +34,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
+ "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/AfterStartupTaskUtils.java",
"java/src/org/chromium/chrome/browser/ActivityUtils.java",
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
@@ -0,0 +1,80 @@
@ -120,7 +120,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
+}
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -57,6 +57,7 @@ import org.chromium.base.supplier.Unowne
@@ -58,6 +58,7 @@ import org.chromium.base.supplier.Unowne
import org.chromium.base.task.PostTask;
import org.chromium.cc.input.BrowserControlsState;
import org.chromium.chrome.R;
@ -128,7 +128,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
import org.chromium.chrome.browser.IntentHandler.TabOpenType;
import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout;
@@ -1703,8 +1704,9 @@ public class ChromeTabbedActivity extend
@@ -1743,8 +1744,9 @@ public class ChromeTabbedActivity extend
Bundle savedInstanceState = getSavedInstanceState();
// We determine the model as soon as possible so every systems get initialized coherently.
@ -142,7 +142,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
mNextTabPolicySupplier = new ChromeNextTabPolicySupplier(mOverviewModeBehaviorSupplier);
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -93,6 +93,7 @@ import org.chromium.chrome.browser.conte
@@ -94,6 +94,7 @@ import org.chromium.chrome.browser.conte
import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager.ContextualSearchTabPromotionDelegate;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
@ -150,7 +150,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
import org.chromium.chrome.browser.dependency_injection.ModuleFactoryOverrides;
import org.chromium.chrome.browser.device.DeviceClassManager;
@@ -1808,6 +1809,9 @@ public abstract class ChromeActivity<C e
@@ -1837,6 +1838,9 @@ public abstract class ChromeActivity<C e
throw new IllegalStateException(
"Attempting to access TabCreator before initialization");
}
@ -162,7 +162,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
--- 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
@@ -359,6 +359,12 @@ public class AppMenuPropertiesDelegateIm
@@ -363,6 +363,12 @@ public class AppMenuPropertiesDelegateIm
}
private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) {
@ -174,7 +174,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
+
// We have to iterate all menu items since same menu item ID may be associated with more
// than one menu items.
boolean isMenuGroupTabsVisible = TabUiFeatureUtilities.isTabGroupsAndroidEnabled()
boolean isMenuGroupTabsVisible = TabUiFeatureUtilities.isTabGroupsAndroidEnabled(mContext)
--- 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,7 +30,9 @@ import org.chromium.base.Callback;
@ -184,10 +184,10 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
+import org.chromium.base.ContextUtils;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.AppHooks;
import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator.ContextMenuUma.Action;
@@ -336,6 +338,10 @@ public class ChromeContextMenuPopulator
@@ -408,6 +410,10 @@ public class ChromeContextMenuPopulator
boolean hasSaveImage = false;
mShowEphemeralTabNewLabel = null;
@ -198,7 +198,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
List<Pair<Integer, ModelList>> groupedItems = new ArrayList<>();
if (mParams.isAnchor()) {
@@ -354,6 +360,7 @@ public class ChromeContextMenuPopulator
@@ -426,6 +432,7 @@ public class ChromeContextMenuPopulator
linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
}
}
@ -206,7 +206,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) {
linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB));
}
@@ -376,7 +383,7 @@ public class ChromeContextMenuPopulator
@@ -450,7 +457,7 @@ public class ChromeContextMenuPopulator
}
}
if (FirstRunStatus.getFirstRunFlowComplete()) {
@ -311,7 +311,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
.setWebContents(webContents)
--- 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.ui.text.SpanApplier;
@@ -47,6 +47,7 @@ import org.chromium.ui.text.SpanApplier;
*/
public class PrivacySettings
extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
@ -321,9 +321,9 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
private static final String PREF_SECURE_DNS = "secure_dns";
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -43,6 +43,10 @@ import org.chromium.ui.base.PageTransiti
import org.chromium.ui.base.WindowAndroid;
import org.chromium.url.GURL;
@@ -47,6 +47,10 @@ import org.chromium.url.GURL;
import java.nio.ByteBuffer;
+import org.chromium.base.ContextUtils;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
@ -332,7 +332,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
/**
* This class creates various kinds of new tabs and adds them to the right {@link TabModel}.
*/
@@ -71,6 +75,7 @@ public class ChromeTabCreator extends Ta
@@ -77,6 +81,7 @@ public class ChromeTabCreator extends Ta
private final Activity mActivity;
private final StartupTabPreloader mStartupTabPreloader;
private final boolean mIncognito;
@ -340,7 +340,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
private WindowAndroid mNativeWindow;
private TabModel mTabModel;
@@ -93,6 +98,10 @@ public class ChromeTabCreator extends Ta
@@ -99,6 +104,10 @@ public class ChromeTabCreator extends Ta
mNativeWindow = nativeWindow;
mTabDelegateFactorySupplier = tabDelegateFactory;
mIncognito = incognito;
@ -351,7 +351,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
mOverviewNTPCreator = overviewNTPCreator;
mAsyncTabParamsManager = asyncTabParamsManager;
mTabModelSelectorSupplier = tabModelSelectorSupplier;
@@ -255,6 +264,8 @@ public class ChromeTabCreator extends Ta
@@ -262,6 +271,8 @@ public class ChromeTabCreator extends Ta
if (creationState == TabCreationState.LIVE_IN_FOREGROUND && !openInForeground) {
creationState = TabCreationState.LIVE_IN_BACKGROUND;
}
@ -360,7 +360,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
mTabModel.addTab(tab, position, type, creationState);
return tab;
} finally {
@@ -289,6 +300,8 @@ public class ChromeTabCreator extends Ta
@@ -296,6 +307,8 @@ public class ChromeTabCreator extends Ta
@TabCreationState
int creationState = openInForeground ? TabCreationState.LIVE_IN_FOREGROUND
: TabCreationState.LIVE_IN_BACKGROUND;
@ -369,7 +369,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
mTabModel.addTab(tab, position, type, creationState);
return true;
}
@@ -332,7 +345,6 @@ public class ChromeTabCreator extends Ta
@@ -339,7 +352,6 @@ public class ChromeTabCreator extends Ta
// TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome.
public Tab launchUrlFromExternalApp(String url, String referer, String headers, String appId,
boolean forceNewTab, Intent intent, long intentTimestamp) {
@ -377,7 +377,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
if (forceNewTab && !isLaunchedFromChrome) {
@@ -446,6 +458,8 @@ public class ChromeTabCreator extends Ta
@@ -453,6 +465,8 @@ public class ChromeTabCreator extends Ta
.setSerializedCriticalPersistedTabData(serializedCriticalPersistedTabData)
.build();
}
@ -405,7 +405,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -686,6 +689,13 @@ public class TabPersistentStore {
@@ -687,6 +690,13 @@ public class TabPersistentStore {
}
}
}
@ -421,7 +421,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
if (model.isIncognito() != isIncognito) {
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappIntentDataProvider.java
@@ -21,6 +21,9 @@ import org.chromium.chrome.browser.brows
@@ -27,6 +27,9 @@ import org.chromium.chrome.browser.brows
import org.chromium.chrome.browser.flags.ActivityType;
import org.chromium.components.browser_ui.widget.TintedDrawable;
@ -431,7 +431,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
/**
* Stores info about a web app.
*/
@@ -34,6 +37,8 @@ public class WebappIntentDataProvider ex
@@ -41,6 +44,8 @@ public class WebappIntentDataProvider ex
private final @ActivityType int mActivityType;
private final Intent mIntent;
@ -440,7 +440,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
/**
* Returns the toolbar color to use if a custom color is not specified by the webapp.
*/
@@ -53,6 +58,10 @@ public class WebappIntentDataProvider ex
@@ -63,6 +68,10 @@ public class WebappIntentDataProvider ex
mWebappExtras = webappExtras;
mWebApkExtras = webApkExtras;
mActivityType = (webApkExtras != null) ? ActivityType.WEB_APK : ActivityType.WEBAPP;
@ -451,7 +451,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
}
@Override
@@ -141,6 +150,11 @@ public class WebappIntentDataProvider ex
@@ -156,6 +165,11 @@ public class WebappIntentDataProvider ex
}
@Override
@ -465,7 +465,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
}
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -408,7 +408,7 @@ const base::Feature kCCTIncognito{"CCTIn
@@ -421,7 +421,7 @@ const base::Feature kCCTIncognito{"CCTIn
base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kCCTIncognitoAvailableToThirdParty{
@ -476,9 +476,9 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
base::FEATURE_ENABLED_BY_DEFAULT};
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -926,6 +926,13 @@ Your Google account may have other forms
@@ -941,6 +941,13 @@ Your Google account may have other forms
<message name="IDS_CLEAR_BROWSING_HISTORY_SUMMARY_SYNCED_NO_LINK" desc="A text for the basic tab explaining browsing history for users with history sync. This version is shown when the link to MyActivity is displayed separately.">
Clears history from all signed-in devices.
Clears history from all synced devices.
</message>
+ <!-- always incognito -->
+ <message name="IDS_ALWAYS_INCOGNITO_TITLE" desc="Title for always incognito mode">


+ 76
- 76
patches/Bromite/Add-bookmark-import-export-actions.patch View File

@ -13,17 +13,17 @@ Completely remove contacts picker permission from the file dialog
chrome/android/java/res/menu/bookmark_action_bar_menu.xml | 14
chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActionBar.java | 12
chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkActivity.java | 28
chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java | 278 +++++++++
chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java | 277 +++++++++
chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkDelegate.java | 10
chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkManager.java | 22
chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPage.java | 8
chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java | 2
chrome/browser/BUILD.gn | 6
chrome/browser/about_flags.cc | 6
chrome/browser/android/bookmarks/bookmark_bridge.cc | 284 ++++++++++
chrome/browser/android/bookmarks/bookmark_bridge.cc | 285 ++++++++++
chrome/browser/android/bookmarks/bookmark_bridge.h | 28
chrome/browser/bookmarks/bookmark_html_writer.cc | 8
chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java | 7
chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationCustomView.java | 8
chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java | 10
chrome/browser/flag_descriptions.cc | 5
chrome/browser/flag_descriptions.h | 3
@ -38,13 +38,12 @@ Completely remove contacts picker permission from the file dialog
chrome/utility/BUILD.gn | 7
chrome/utility/importer/bookmark_html_reader.cc | 27
chrome/utility/importer/bookmark_html_reader.h | 8
content/browser/BUILD.gn | 1
ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java | 18
ui/android/java/strings/android_ui_strings.grd | 3
ui/shell_dialogs/select_file_dialog.h | 2
ui/shell_dialogs/select_file_dialog_android.cc | 6
ui/shell_dialogs/select_file_dialog_android.h | 2
38 files changed, 878 insertions(+), 23 deletions(-)
37 files changed, 877 insertions(+), 24 deletions(-)
--- a/base/android/content_uri_utils.cc
+++ b/base/android/content_uri_utils.cc
@ -128,10 +127,10 @@ Completely remove contacts picker permission from the file dialog
*
--- a/chrome/android/java/AndroidManifest.xml
+++ b/chrome/android/java/AndroidManifest.xml
@@ -38,7 +38,6 @@ by a child template that "extends" this
{% endif %}
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
@@ -56,7 +56,6 @@ by a child template that "extends" this
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/>
{% endif %}
- <uses-permission-sdk-23 android:name="android.permission.READ_CONTACTS"/>
<uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
<uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
@ -323,7 +322,7 @@ Completely remove contacts picker permission from the file dialog
/**
* Provides the communication channel for Android to fetch and manipulate the
@@ -587,6 +625,210 @@ public class BookmarkBridge {
@@ -587,6 +625,209 @@ public class BookmarkBridge {
}
/**
@ -477,8 +476,7 @@ Completely remove contacts picker permission from the file dialog
+ mCustomView = (DownloadLocationCustomView) LayoutInflater.from(mContext).inflate(
+ R.layout.download_location_dialog, null);
+ mCustomView.initialize(
+ DownloadLocationDialogType.DEFAULT, new File(standardBoorkmarkName),
+ /*totalBytes*/ 0, context.getString(R.string.export_bookmarks_alert_title));
+ DownloadLocationDialogType.DEFAULT, /*totalBytes*/ 0);
+ mCustomView.mDontShowAgain.setVisibility(View.GONE);
+
+ Resources resources = mContext.getResources();
@ -534,7 +532,7 @@ Completely remove contacts picker permission from the file dialog
* Synchronously gets a list of bookmarks that match the specified search query.
* @param query Keyword used for searching bookmarks.
* @param maxNumberOfResult Maximum number of result to fetch.
@@ -1022,6 +1264,39 @@ public class BookmarkBridge {
@@ -1022,6 +1263,39 @@ public class BookmarkBridge {
depthList.add(depth);
}
@ -574,7 +572,7 @@ Completely remove contacts picker permission from the file dialog
private static List<Pair<Integer, Integer>> createPairsList(int[] left, int[] right) {
List<Pair<Integer, Integer>> pairList = new ArrayList<Pair<Integer, Integer>>();
for (int i = 0; i < left.length; i++) {
@@ -1089,6 +1364,9 @@ public class BookmarkBridge {
@@ -1089,6 +1363,9 @@ public class BookmarkBridge {
int getChildCount(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type);
void getChildIDs(long nativeBookmarkBridge, BookmarkBridge caller, long id, int type,
List<BookmarkId> bookmarksList);
@ -686,7 +684,7 @@ Completely remove contacts picker permission from the file dialog
initWithView(mManager.getView());
--- 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
@@ -100,7 +100,7 @@ public class NativePageFactory {
@@ -101,7 +101,7 @@ public class NativePageFactory {
protected NativePage buildBookmarksPage(Tab tab) {
return new BookmarkPage(mActivity.getComponentName(), mActivity.getSnackbarManager(),
mActivity.getTabModelSelector().isIncognitoSelected(),
@ -697,8 +695,8 @@ Completely remove contacts picker permission from the file dialog
protected NativePage buildDownloadsPage(Tab tab) {
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1838,6 +1838,8 @@ static_library("browser") {
"webapps/chrome_webapps_client.h",
@@ -1856,6 +1856,8 @@ static_library("browser") {
"webid/federated_identity_sharing_permission_context_factory.h",
"window_placement/window_placement_permission_context.cc",
"window_placement/window_placement_permission_context.h",
+ "importer/profile_writer.cc",
@ -706,7 +704,7 @@ Completely remove contacts picker permission from the file dialog
]
configs += [
@@ -2934,6 +2936,8 @@ static_library("browser") {
@@ -2962,6 +2964,8 @@ static_library("browser") {
"autofill/manual_filling_view_interface.h",
"banners/android/chrome_app_banner_manager_android.cc",
"banners/android/chrome_app_banner_manager_android.h",
@ -715,7 +713,7 @@ Completely remove contacts picker permission from the file dialog
"browser_process_platform_part_android.cc",
"browser_process_platform_part_android.h",
"chrome_browser_field_trials_mobile.cc",
@@ -3443,8 +3447,6 @@ static_library("browser") {
@@ -3485,8 +3489,6 @@ static_library("browser") {
"badging/badge_manager_factory.h",
"banners/app_banner_manager_desktop.cc",
"banners/app_banner_manager_desktop.h",
@ -726,9 +724,9 @@ Completely remove contacts picker permission from the file dialog
"browsing_data/chrome_browsing_data_lifetime_manager_factory.cc",
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -7299,6 +7299,12 @@ const FeatureEntry kFeatureEntries[] = {
FEATURE_VALUE_TYPE(features::kDesktopPWAsAppIconShortcutsMenuUI)},
#endif
@@ -7379,6 +7379,12 @@ const FeatureEntry kFeatureEntries[] = {
flag_descriptions::kPlaybackSpeedButtonDescription, kOsAll,
FEATURE_VALUE_TYPE(media::kPlaybackSpeedButton)},
+ {"export-bookmarks-use-saf",
+ flag_descriptions::kBookmarksExportUseSafName,
@ -741,7 +739,15 @@ Completely remove contacts picker permission from the file dialog
// Histograms" in tools/metrics/histograms/README.md (run the
--- a/chrome/browser/android/bookmarks/bookmark_bridge.cc
+++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
@@ -38,6 +38,7 @@
@@ -21,6 +21,7 @@
#include "base/containers/stack.h"
#include "base/guid.h"
#include "base/i18n/string_compare.h"
+#include "base/strings/string_piece.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/android/chrome_jni_headers/BookmarkBridge_jni.h"
#include "chrome/browser/android/bookmarks/partner_bookmarks_reader.h"
@@ -39,6 +40,7 @@
#include "components/bookmarks/common/android/bookmark_type.h"
#include "components/bookmarks/common/bookmark_pref_names.h"
#include "components/bookmarks/managed/managed_bookmark_service.h"
@ -749,7 +755,7 @@ Completely remove contacts picker permission from the file dialog
#include "components/dom_distiller/core/url_utils.h"
#include "components/prefs/pref_service.h"
#include "components/query_parser/query_parser.h"
@@ -47,6 +48,24 @@
@@ -48,6 +50,24 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/web_contents.h"
@ -774,7 +780,7 @@ Completely remove contacts picker permission from the file dialog
using base::android::AttachCurrentThread;
using base::android::ConvertUTF8ToJavaString;
using base::android::ConvertUTF16ToJavaString;
@@ -63,8 +82,93 @@ using bookmarks::BookmarkNode;
@@ -64,8 +84,93 @@ using bookmarks::BookmarkNode;
using bookmarks::BookmarkType;
using content::BrowserThread;
@ -868,7 +874,7 @@ Completely remove contacts picker permission from the file dialog
const int kInvalidId = -1;
class BookmarkTitleComparer {
@@ -149,6 +253,10 @@ BookmarkBridge::~BookmarkBridge() {
@@ -152,6 +257,10 @@ BookmarkBridge::~BookmarkBridge() {
if (partner_bookmarks_shim_)
partner_bookmarks_shim_->RemoveObserver(this);
reading_list_manager_->RemoveObserver(this);
@ -879,7 +885,7 @@ Completely remove contacts picker permission from the file dialog
}
void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef<jobject>&) {
@@ -539,6 +647,182 @@ jint BookmarkBridge::GetTotalBookmarkCou
@@ -542,6 +651,182 @@ jint BookmarkBridge::GetTotalBookmarkCou
return count;
}
@ -899,7 +905,7 @@ Completely remove contacts picker permission from the file dialog
+ //NOTE: extension and description are not used on Android, thus not set
+ ui::SelectFileDialog::FileTypeInfo file_type_info;
+
+ const std::vector<std::u16string> v_accept_types = { base::UTF8ToUTF16("text/html") };
+ const std::vector<std::u16string> v_accept_types = { base::UTF8ToUTF16(base::StringPiece("text/html")) };
+
+ // Android needs the original MIME types and an additional capture value.
+ std::pair<std::vector<std::u16string>, bool> accept_types =
@ -1022,7 +1028,7 @@ Completely remove contacts picker permission from the file dialog
+ favicon_base::FaviconUsageDataList favicons;
+
+ bookmark_html_reader::ImportBookmarksFile(
+ base::Callback<bool(void)>(),
+ base::RepeatingCallback<bool(void)>(),
+ base::BindRepeating(internal::CanImportURL),
+ contents,
+ &bookmarks,
@ -1033,7 +1039,7 @@ Completely remove contacts picker permission from the file dialog
+
+ if (!bookmarks.empty()) {
+ // adding bookmarks will begin extensive changes to the model
+ writer->AddBookmarksWithModel(bookmark_model_, bookmarks, base::ASCIIToUTF16("Imported"));
+ writer->AddBookmarksWithModel(bookmark_model_, bookmarks, base::ASCIIToUTF16(base::StringPiece("Imported")));
+ }
+ if (!search_engines.empty()) {
+ TemplateURLService::OwnedTemplateURLVector owned_template_urls;
@ -1065,7 +1071,7 @@ Completely remove contacts picker permission from the file dialog
--- a/chrome/browser/android/bookmarks/bookmark_bridge.h
+++ b/chrome/browser/android/bookmarks/bookmark_bridge.h
@@ -17,6 +17,7 @@
#include "base/scoped_observer.h"
#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"
@ -1139,7 +1145,7 @@ Completely remove contacts picker permission from the file dialog
// This is owned by profile.
@@ -332,6 +355,9 @@ class BookmarkBridge : public bookmarks:
// Observes the profile destruction and creation.
ScopedObserver<Profile, ProfileObserver> profile_observer_{this};
base::ScopedObservation<Profile, ProfileObserver> profile_observation_{this};
+ const std::string FileSelectedImpl(const base::FilePath& path);
+ void FileSelectedImplOnUIThread(const base::FilePath& path,
@ -1173,7 +1179,7 @@ Completely remove contacts picker permission from the file dialog
return false;
--- 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
@@ -46,7 +46,7 @@ public class DownloadLocationCustomView
private TextView mFileSize;
private Spinner mFileLocation;
private TextView mLocationAvailableSpace;
@ -1182,15 +1188,16 @@ Completely remove contacts picker permission from the file dialog
private @DownloadLocationDialogType int mDialogType;
private long mTotalBytes;
@@ -71,6 +71,7 @@ public class DownloadLocationCustomView
@@ -68,7 +68,7 @@ public class DownloadLocationCustomView
mDontShowAgain = findViewById(R.id.show_again_checkbox);
}
+ public
void initialize(@DownloadLocationDialogType int dialogType, File suggestedPath, long totalBytes,
CharSequence title) {
- 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;
@@ -135,7 +136,7 @@ public class DownloadLocationCustomView
mTotalBytes = totalBytes;
@@ -117,7 +117,7 @@ public class DownloadLocationCustomView
* @return The text that the user inputted as the name of the file.
*/
@Nullable
@ -1199,7 +1206,7 @@ Completely remove contacts picker permission from the file dialog
if (mFileName == null || mFileName.getText() == null) return null;
return mFileName.getText().toString();
}
@@ -144,7 +145,7 @@ public class DownloadLocationCustomView
@@ -126,7 +126,7 @@ public class DownloadLocationCustomView
* @return The file path based on what the user selected as the location of the file.
*/
@Nullable
@ -1210,14 +1217,17 @@ Completely remove contacts picker permission from the file dialog
return selected;
--- 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
@@ -34,13 +34,13 @@ import java.util.ArrayList;
@@ -36,16 +36,16 @@ 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<PropertyModel, DownloadLocationCustomView, PropertyKey>
mPropertyModelChangeProcessor;
- private DownloadLocationCustomView mCustomView;
- private ModalDialogManager mModalDialogManager;
+ protected PropertyModel mDialogModel;
+ protected DownloadLocationCustomView mCustomView;
+ protected ModalDialogManager mModalDialogManager;
private long mTotalBytes;
@ -1225,10 +1235,10 @@ Completely remove contacts picker permission from the file dialog
private String mSuggestedPath;
- private Context mContext;
+ protected Context mContext;
private boolean mLocationDialogManaged;
/**
* Initializes the download location dialog.
@@ -119,7 +119,7 @@ public class DownloadLocationDialogCoord
@@ -127,7 +127,7 @@ public class DownloadLocationDialogCoord
* Called after retrieved the download directory options.
* @param dirs An list of available download directories.
*/
@ -1239,7 +1249,7 @@ Completely remove contacts picker permission from the file dialog
// name conflict or disk error.
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -5229,6 +5229,11 @@ const char kWebrtcPipeWireCapturerDescri
@@ -5221,6 +5221,11 @@ const char kWebrtcPipeWireCapturerDescri
"capturing the desktop content on the Wayland display server.";
#endif // #if defined(WEBRTC_USE_PIPEWIRE)
@ -1253,7 +1263,7 @@ Completely remove contacts picker permission from the file dialog
// alphabetical order just like the header file.
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -3069,6 +3069,9 @@ extern const char kWebrtcPipeWireCapture
@@ -3073,6 +3073,9 @@ extern const char kWebrtcPipeWireCapture
extern const char kWebrtcPipeWireCapturerDescription[];
#endif // #if defined(WEBRTC_USE_PIPEWIRE)
@ -1265,7 +1275,7 @@ Completely remove contacts picker permission from the file dialog
// alphabetical order. See top instructions for more.
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -142,6 +142,7 @@ const base::Feature* kFeaturesExposedToJ
@@ -151,6 +151,7 @@ const base::Feature* const kFeaturesExpo
&kBackgroundThreadPool,
&kBentoOffline,
&kBookmarkBottomSheet,
@ -1273,9 +1283,9 @@ Completely remove contacts picker permission from the file dialog
&kCastDeviceFilter,
&kCloseTabSuggestions,
&kCriticalPersistedTabData,
@@ -746,6 +747,10 @@ const base::Feature kVoiceButtonInTopToo
const base::Feature kVrBrowsingFeedback{"VrBrowsingFeedback",
base::FEATURE_ENABLED_BY_DEFAULT};
@@ -759,6 +760,10 @@ const base::Feature kVrBrowsingFeedback{
const base::Feature kWebNotesStylize{"WebNotesStylize",
base::FEATURE_DISABLED_BY_DEFAULT};
+// disabled by default because of an issue on Android 6.0
+const base::Feature kBookmarksExportUseSaf{"BookmarksExportUseSaf",
@ -1291,14 +1301,14 @@ Completely remove contacts picker permission from the file dialog
extern const base::Feature kVrBrowsingFeedback;
extern const base::Feature kPrefetchNotificationSchedulingIntegration;
+extern const base::Feature kBookmarksExportUseSaf;
extern const base::Feature kWebNotesStylize;
} // namespace android
} // namespace chrome
--- 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
@@ -489,6 +489,7 @@ public abstract class ChromeFeatureList
public static final String WEB_AUTH_PHONE_SUPPORT = "WebAuthenticationPhoneSupport";
public static final String WEB_FEED = "WebFeed";
@@ -501,6 +501,7 @@ public abstract class ChromeFeatureList
public static final String WEBNOTES_STYLIZE = "WebNotesStylize";
public static final String WIPE_DATA_ON_CHILD_ACCOUNT_SIGNIN = "WipeDataOnChildAccountSignin";
public static final String XSURFACE_METRICS_REPORTING = "XsurfaceMetricsReporting";
+ public static final String BOOKMARKS_EXPORT_USESAF = "BookmarksExportUseSaf";
@ -1340,15 +1350,15 @@ Completely remove contacts picker permission from the file dialog
// If the bookmark bar is currently empty, we should import directly to it.
--- a/chrome/browser/importer/profile_writer.h
+++ b/chrome/browser/importer/profile_writer.h
@@ -12,6 +12,7 @@
@@ -11,6 +11,7 @@
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/time/time.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"
@@ -69,6 +70,11 @@ class ProfileWriter : public base::RefCo
@@ -68,6 +69,11 @@ class ProfileWriter : public base::RefCo
virtual void AddBookmarks(const std::vector<ImportedBookmarkEntry>& bookmarks,
const std::u16string& top_level_folder_name);
@ -1362,7 +1372,7 @@ Completely remove contacts picker permission from the file dialog
// Adds the TemplateURLs in |template_urls| to the local store.
--- 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
@@ -109,6 +109,8 @@ public final class ChromePreferenceKeys
@@ -117,6 +117,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";
@ -1371,7 +1381,7 @@ Completely remove contacts picker permission from the file dialog
/**
* Whether Chrome is set as the default browser.
@@ -979,6 +981,7 @@ public final class ChromePreferenceKeys
@@ -1015,6 +1017,7 @@ public final class ChromePreferenceKeys
AUTOFILL_ASSISTANT_PROACTIVE_HELP,
APP_LAUNCH_LAST_KNOWN_ACTIVE_TAB_STATE,
APP_LAUNCH_SEARCH_ENGINE_HAD_LOGO,
@ -1381,8 +1391,8 @@ Completely remove contacts picker permission from the file dialog
CHROME_SURVEY_PROMPT_DISPLAYED_TIMESTAMP.pattern(),
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -242,6 +242,24 @@ CHAR-LIMIT guidelines:
<message name="IDS_NOTIFICATION_CATEGORY_SITES" desc="Label for notifications from websites, within a list of notification categories. [CHAR-LIMIT=32]">
@@ -242,6 +242,24 @@ CHAR_LIMIT guidelines:
<message name="IDS_NOTIFICATION_CATEGORY_SITES" desc="Label for notifications from websites, within a list of notification categories. [CHAR_LIMIT=32]">
Sites
</message>
+ <message name="IDS_IMPORT_BOOKMARKS" desc="The label for the import bookmarks button.">
@ -1403,12 +1413,12 @@ Completely remove contacts picker permission from the file dialog
+ <message name="IDS_EXPORT_BOOKMARKS_ALERT_MESSAGE_NO" desc="Label for no button.">
+ Choose another file
+ </message>
<message name="IDS_NOTIFICATION_CATEGORY_VR" desc="Label for notifications in VR, within a list of notification categories. [CHAR-LIMIT=32]">
<message name="IDS_NOTIFICATION_CATEGORY_VR" desc="Label for notifications in VR, within a list of notification categories. [CHAR_LIMIT=32]">
Virtual Reality
</message>
--- a/chrome/common/BUILD.gn
+++ b/chrome/common/BUILD.gn
@@ -405,6 +405,9 @@ static_library("common") {
@@ -409,6 +409,9 @@ static_library("common") {
sources += [
"media/chrome_media_drm_bridge_client.cc",
"media/chrome_media_drm_bridge_client.h",
@ -1429,7 +1439,7 @@ Completely remove contacts picker permission from the file dialog
"importer/bookmarks_file_importer.cc",
"importer/bookmarks_file_importer.h",
"importer/external_process_importer_bridge.cc",
@@ -179,6 +177,11 @@ static_library("utility") {
@@ -186,6 +184,11 @@ static_library("utility") {
}
}
@ -1604,7 +1614,7 @@ Completely remove contacts picker permission from the file dialog
return mimeTypes;
}
@@ -792,6 +800,10 @@ public class SelectFileDialog implements
@@ -812,6 +820,10 @@ public class SelectFileDialog implements
return countAcceptTypesFor(superType) == mFileTypes.size();
}
@ -1618,7 +1628,7 @@ Completely remove contacts picker permission from the file dialog
--- a/ui/android/java/strings/android_ui_strings.grd
+++ b/ui/android/java/strings/android_ui_strings.grd
@@ -174,6 +174,9 @@
<message name="IDS_OPENING_FILE_ERROR" desc="Toast when the browser is unable to open a file for upload. [CHAR-LIMIT=32]">
<message name="IDS_OPENING_FILE_ERROR" desc="Toast when the browser is unable to open a file for upload. [CHAR_LIMIT=32]">
Failed to open selected file
</message>
+ <message name="IDS_SAVING_FILE_ERROR" desc="Toast when the browser is unable to save a file. [CHAR-LIMIT=32]">
@ -1626,10 +1636,10 @@ Completely remove contacts picker permission from the file dialog
+ </message>
<!-- Clipboard -->
<message name="IDS_COPY_TO_CLIPBOARD_FAILURE_MESSAGE" desc="Notification for when copying to the clipboard fails. [CHAR-LIMIT=64]">
<message name="IDS_COPY_TO_CLIPBOARD_FAILURE_MESSAGE" desc="Notification for when copying to the clipboard fails. [CHAR_LIMIT=64]">
--- a/ui/shell_dialogs/select_file_dialog.h
+++ b/ui/shell_dialogs/select_file_dialog.h
@@ -203,6 +203,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDia
@@ -202,6 +202,8 @@ class SHELL_DIALOGS_EXPORT SelectFileDia
void* params);
bool HasMultipleFileTypeChoices();
@ -1664,13 +1674,3 @@ Completely remove contacts picker permission from the file dialog
protected:
~SelectFileDialogImpl() override;
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -78,6 +78,7 @@ source_set("browser") {
"//components/payments/mojom",
"//components/power_scheduler",
"//components/services/filesystem:lib",
+ "//components/services/quarantine:quarantine",
"//components/services/storage",
"//components/services/storage:filesystem_proxy_factory",
"//components/services/storage/dom_storage:local_storage_proto",

+ 10
- 10
patches/Bromite/Add-exit-menu-item.patch View File

@ -13,7 +13,7 @@ Corrected Exit functionality
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -115,6 +115,9 @@
@@ -118,6 +118,9 @@
android:icon="@drawable/gm_filled_cardboard_24" />
<item android:id="@+id/managed_by_menu_id"
android:title="@string/managed" />
@ -23,7 +23,7 @@ Corrected Exit functionality
</group>
<!-- Items shown only in the tab switcher -->
@@ -141,6 +144,9 @@
@@ -144,6 +147,9 @@
<item android:id="@id/preferences_id"
android:title="@string/menu_settings"
android:icon="@drawable/settings_cog" />
@ -35,7 +35,7 @@ Corrected Exit functionality
<!-- Items shown only in the tab switcher when start surface is enabled -->
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -197,6 +197,8 @@ import java.lang.annotation.RetentionPol
@@ -201,6 +201,8 @@ import java.lang.annotation.RetentionPol
import java.util.List;
import java.util.Locale;
@ -44,7 +44,7 @@ Corrected Exit functionality
/**
* 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.
@@ -1906,6 +1908,8 @@ public class ChromeTabbedActivity extend
@@ -1953,6 +1955,8 @@ public class ChromeTabbedActivity extend
} else if (id == R.id.close_tab) {
getCurrentTabModel().closeTab(currentTab, true, false, true);
RecordUserAction.record("MobileTabClosed");
@ -55,15 +55,15 @@ Corrected Exit functionality
getTabModelSelector().closeAllTabs();
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -58,6 +58,7 @@ import org.chromium.base.supplier.Unowne
import org.chromium.chrome.R;
@@ -59,6 +59,7 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.ActivityUtils;
import org.chromium.chrome.browser.AppHooks;
+import org.chromium.chrome.browser.ApplicationLifetime;
import org.chromium.chrome.browser.ChromeActivitySessionTracker;
import org.chromium.chrome.browser.ChromeApplicationImpl;
import org.chromium.chrome.browser.ChromeKeyboardVisibilityDelegate;
@@ -2234,6 +2235,11 @@ public abstract class ChromeActivity<C e
@@ -2268,6 +2269,11 @@ public abstract class ChromeActivity<C e
return true;
}
@ -92,13 +92,13 @@ Corrected Exit functionality
@Override
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -3070,6 +3070,9 @@ Data from your Incognito session will on
<message name="IDS_MENU_SETTINGS" desc="Menu item for opening browser settings. [CHAR-LIMIT=27]">
@@ -3139,6 +3139,9 @@ To change this setting, <ph name="BEGIN_
<message name="IDS_MENU_SETTINGS" desc="Menu item for opening browser settings. [CHAR_LIMIT=27]">
Settings
</message>
+ <message name="IDS_MENU_EXIT" desc="Menu item for exit browser. [CHAR-LIMIT=27]">
+ Exit
+ </message>
<message name="IDS_MENU_CLOSE_ALL_TABS" desc="Menu item for closing all open tabs. [CHAR-LIMIT=27]">
<message name="IDS_MENU_CLOSE_ALL_TABS" desc="Menu item for closing all open tabs. [CHAR_LIMIT=27]">
Close all tabs
</message>

+ 6
- 6
patches/Bromite/Add-flag-to-disable-WebGL.patch View File

@ -10,19 +10,19 @@ Subject: Add flag to disable WebGL
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2606,6 +2606,9 @@ const FeatureEntry kFeatureEntries[] = {
@@ -2668,6 +2668,9 @@ const FeatureEntry kFeatureEntries[] = {
flag_descriptions::kAccelerated2dCanvasName,
flag_descriptions::kAccelerated2dCanvasDescription, kOsAll,
SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAccelerated2dCanvas)},
+ {switches::kDisableWebGL, flag_descriptions::kDisableWebGLName,
+ flag_descriptions::kDisableWebGLDescription, kOsAll,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebGL)},
{"composited-layer-borders", flag_descriptions::kCompositedLayerBordersName,
flag_descriptions::kCompositedLayerBordersDescription, kOsAll,
SINGLE_VALUE_TYPE(cc::switches::kShowCompositedLayerBorders)},
{"overlay-strategies", flag_descriptions::kOverlayStrategiesName,
flag_descriptions::kOverlayStrategiesDescription, kOsAll,
MULTI_VALUE_TYPE(kOverlayStrategiesChoices)},
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -584,6 +584,10 @@ const char kEnableAudioFocusEnforcementN
@@ -583,6 +583,10 @@ const char kEnableAudioFocusEnforcementN
const char kEnableAudioFocusEnforcementDescription[] =
"Enables enforcement of a single media session having audio focus at "
"any one time. Requires #enable-media-session-service to be enabled too.";
@ -35,7 +35,7 @@ Subject: Add flag to disable WebGL
"Enable the account data storage for autofill";
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -357,6 +357,9 @@ extern const char kDocumentTransitionDes
@@ -356,6 +356,9 @@ extern const char kDocumentTransitionDes
extern const char kEnableAccessibilityObjectModelName[];
extern const char kEnableAccessibilityObjectModelDescription[];


+ 0
- 172
patches/Bromite/Add-flags-to-disable-device-motion-orientation-APIs.patch View File

@ -1,172 +0,0 @@
From: csagan5 <[email protected]>
Date: Mon, 22 Oct 2018 21:29:53 +0200
Subject: Add flags to disable device motion/orientation APIs
Both flags will be disabled by default and prevent usage of gyroscope and
legacy acceleration events.
---
chrome/browser/about_flags.cc | 6 ++++++
chrome/browser/flag_descriptions.cc | 8 ++++++++
chrome/browser/flag_descriptions.h | 6 ++++++
content/child/runtime_features.cc | 3 +++
content/public/common/content_features.cc | 10 ++++++++++
content/public/common/content_features.h | 2 ++
third_party/blink/public/platform/web_runtime_features.h | 2 ++
third_party/blink/renderer/modules/modules_initializer.cc | 10 +++++++---
third_party/blink/renderer/platform/exported/web_runtime_features.cc | 8 ++++++++
third_party/blink/renderer/platform/runtime_enabled_features.json5 | 8 ++++++++
10 files changed, 60 insertions(+), 3 deletions(-)
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2838,6 +2838,12 @@ const FeatureEntry kFeatureEntries[] = {
{"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName,
flag_descriptions::kGpuRasterizationDescription, kOsAll,
MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)},
+ {"enable-device-motion", flag_descriptions::kEnableDeviceMotionName,
+ flag_descriptions::kEnableDeviceMotionDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kDeviceMotion)},
+ {"enable-device-orientation", flag_descriptions::kEnableDeviceOrientationName,
+ flag_descriptions::kEnableDeviceOrientationDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kDeviceOrientation)},
{"enable-oop-rasterization", flag_descriptions::kOopRasterizationName,
flag_descriptions::kOopRasterizationDescription, kOsAll,
MULTI_VALUE_TYPE(kEnableOopRasterizationChoices)},
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -844,6 +844,14 @@ const char kWinrtGeolocationImplementati
"Enables usage of the Windows.Devices.Geolocation WinRT APIs on Windows "
"for geolocation";
+const char kEnableDeviceMotionName[] = "Enable device motion";
+const char kEnableDeviceMotionDescription[] =
+ "Enable device motion API which is used to detect changes in acceleration";
+
+const char kEnableDeviceOrientationName[] = "Enable device orientation";
+const char kEnableDeviceOrientationDescription[] =
+ "Enable device orientation API which is used to detect changes in orientation";
+
const char kEnableGenericSensorExtraClassesName[] =
"Generic Sensor Extra Classes";
const char kEnableGenericSensorExtraClassesDescription[] =
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -505,6 +505,12 @@ extern const char kNotificationsViaHelpe
extern const char kWinrtGeolocationImplementationName[];
extern const char kWinrtGeolocationImplementationDescription[];
+extern const char kEnableDeviceMotionName[];
+extern const char kEnableDeviceMotionDescription[];
+
+extern const char kEnableDeviceOrientationName[];
+extern const char kEnableDeviceOrientationDescription[];
+
extern const char kEnableGenericSensorExtraClassesName[];
extern const char kEnableGenericSensorExtraClassesDescription[];
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -88,6 +88,9 @@ void SetRuntimeFeatureDefaultsForPlatfor
command_line.HasSwitch(
blink::switches::kEnableGpuMemoryBufferCompositorResources) &&
!command_line.HasSwitch(switches::kDisableWebGLImageChromium) &&
+ WebRuntimeFeatures::EnableDeviceMotion(base::FeatureList::IsEnabled(features::kDeviceMotion));
+ WebRuntimeFeatures::EnableDeviceOrientation(base::FeatureList::IsEnabled(features::kDeviceOrientation));
+
!command_line.HasSwitch(switches::kDisableGpu) &&
base::FeatureList::IsEnabled(features::kWebGLImageChromium);
#else
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -890,6 +890,16 @@ const base::Feature kWebOtpBackendAuto{"
// The JavaScript API for payments on the web.
const base::Feature kWebPayments{"WebPayments",
base::FEATURE_ENABLED_BY_DEFAULT};
+// Enables the device motion API used to track device acceleration;
+// no user authorization or notifications happens when in use.
+const base::Feature kDeviceMotion{"DeviceMotion",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+// Enables the device orientation API used to track device orientation;
+// no user authorization or notifications happens when in use.
+const base::Feature kDeviceOrientation{"DeviceOrientation",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
// Minimal user interface experience for payments on the web.
const base::Feature kWebPaymentsMinimalUI{"WebPaymentsMinimalUI",
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -212,6 +212,8 @@ CONTENT_EXPORT extern const base::Featur
CONTENT_EXPORT extern const base::Feature kWebXrHitTest;
CONTENT_EXPORT extern const base::Feature kWebXrIncubations;
+CONTENT_EXPORT extern const base::Feature kDeviceMotion, kDeviceOrientation;
+
#if defined(OS_ANDROID)
CONTENT_EXPORT extern const base::Feature kAndroidAutofillAccessibility;
CONTENT_EXPORT extern const base::Feature
--- a/third_party/blink/public/platform/web_runtime_features.h
+++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -97,6 +97,8 @@ class WebRuntimeFeatures {
BLINK_PLATFORM_EXPORT static void EnableCookiesWithoutSameSiteMustBeSecure(
bool);
BLINK_PLATFORM_EXPORT static void EnableCanvas2dImageChromium(bool);
+ BLINK_PLATFORM_EXPORT static void EnableDeviceMotion(bool);
+ BLINK_PLATFORM_EXPORT static void EnableDeviceOrientation(bool);
BLINK_PLATFORM_EXPORT static void EnableCooperativeScheduling(bool);
BLINK_PLATFORM_EXPORT static void EnableCSSHexAlphaColor(bool);
BLINK_PLATFORM_EXPORT static void EnableSameSiteByDefaultCookies(bool);
--- a/third_party/blink/renderer/modules/modules_initializer.cc
+++ b/third_party/blink/renderer/modules/modules_initializer.cc
@@ -231,9 +231,13 @@ void ModulesInitializer::OnClearWindowOb
Document& document,
const Settings& settings) const {
LocalDOMWindow& window = *document.domWindow();
- DeviceMotionController::From(window);
- DeviceOrientationController::From(window);
- DeviceOrientationAbsoluteController::From(window);
+ if (RuntimeEnabledFeatures::DeviceMotionEnabled())
+ DeviceMotionController::From(window);
+ if (RuntimeEnabledFeatures::DeviceOrientationEnabled()) {
+ DeviceOrientationController::From(window);
+ DeviceOrientationAbsoluteController::From(window);
+ }
+
NavigatorGamepad::From(*window.navigator());
// TODO(nhiroki): Figure out why ServiceWorkerContainer needs to be eagerly
--- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc
+++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -187,6 +187,14 @@ void WebRuntimeFeatures::EnableKeyboardA
RuntimeEnabledFeatures::SetKeyboardAccessibleTooltipEnabled(enable);
}
+void WebRuntimeFeatures::EnableDeviceMotion(bool enable) {
+ RuntimeEnabledFeatures::SetDeviceMotionEnabled(enable);
+}
+
+void WebRuntimeFeatures::EnableDeviceOrientation(bool enable) {
+ RuntimeEnabledFeatures::SetDeviceOrientationEnabled(enable);
+}
+
void WebRuntimeFeatures::EnableKeyboardFocusableScrollers(bool enable) {
RuntimeEnabledFeatures::SetKeyboardFocusableScrollersEnabled(enable);
}
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1424,6 +1424,14 @@
status: "experimental",
},
{
+ name: "DeviceMotion",
+ status: "stable",
+ },
+ {
+ name: "DeviceOrientation",
+ status: "stable",
+ },
+ {
name: "OnDeviceChange",
// Android does not yet support SystemMonitor.
status: {"Android": "", "default": "stable"},

+ 14
- 14
patches/Bromite/Add-option-to-not-persist-tabs-across-sessions.patch View File

@ -11,21 +11,21 @@ Subject: Add option to not persist tabs across sessions
--- a/chrome/android/java/res/xml/privacy_preferences.xml
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -24,6 +24,11 @@
android:key="usage_stats_reporting"
android:title="@string/usage_stats_setting_title"
android:persistent="false"/>
@@ -28,6 +28,11 @@
android:key="secure_dns"
android:title="@string/settings_secure_dns_title"
android:fragment="org.chromium.chrome.browser.privacy.secure_dns.SecureDnsSettings"/>
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="close_tabs_on_exit"
+ android:title="@string/close_tabs_on_exit_title"
+ android:summary="@string/close_tabs_on_exit_summary"
+ android:defaultValue="false"/>
<org.chromium.components.browser_ui.settings.ChromeBasePreference
android:key="secure_dns"
android:title="@string/settings_secure_dns_title"
+ android:defaultValue="false" />
<Preference
android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings"
android:key="do_not_track"
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -1149,8 +1149,10 @@ public class ChromeTabbedActivity extend
@@ -1179,8 +1179,10 @@ public class ChromeTabbedActivity extend
boolean hadCipherData =
CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState());
@ -55,8 +55,8 @@ Subject: Add option to not persist tabs across sessions
+import org.chromium.base.BuildInfo;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -52,6 +55,7 @@ public class PrivacySettings
import org.chromium.chrome.browser.preferences.Pref;
@@ -50,6 +53,7 @@ public class PrivacySettings
private static final String PREF_USAGE_STATS = "usage_stats_reporting";
private static final String PREF_DO_NOT_TRACK = "do_not_track";
private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
@ -64,7 +64,7 @@ Subject: Add option to not persist tabs across sessions
private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
private ManagedPreferenceDelegate mManagedPreferenceDelegate;
@@ -139,7 +143,11 @@ public class PrivacySettings
@@ -126,7 +130,11 @@ public class PrivacySettings
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
@ -77,7 +77,7 @@ Subject: Add option to not persist tabs across sessions
UserPrefs.get(Profile.getLastUsedRegularProfile())
.setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
} else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
@@ -205,6 +213,11 @@ public class PrivacySettings
@@ -192,6 +200,11 @@ public class PrivacySettings
privacySandboxPreference.setSummary(
PrivacySandboxSettingsFragment.getStatusString(getContext()));
}
@ -91,7 +91,7 @@ Subject: Add option to not persist tabs across sessions
private ChromeManagedPreferenceDelegate createManagedPreferenceDelegate() {
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -3923,6 +3923,12 @@ Data from your Incognito session will on
@@ -4002,6 +4002,12 @@ To change this setting, <ph name="BEGIN_
<message name="IDS_CONTEXTMENU_IMAGE_TITLE" desc="The title of a context menu tab when the item pressed contains more than one type. This indicates that all the actions are related to the image.">
IMAGE
</message>


+ 1
- 1
patches/Bromite/Change-default-webRTC-policy-to-not-use-any-address.patch View File

@ -11,7 +11,7 @@ See also: https://github.com/bromite/bromite/issues/553
--- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -466,12 +466,13 @@ PeerConnectionDependencyFactory::CreateP
@@ -594,12 +594,13 @@ PeerConnectionDependencyFactory::CreateP
port_config.enable_nonproxied_udp = false;
break;
case DEFAULT:


+ 1
- 1
patches/Bromite/Disable-DRM-media-origin-IDs-preprovisioning.patch View File

@ -8,7 +8,7 @@ Subject: Disable DRM media origin IDs preprovisioning
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -622,7 +622,7 @@ const base::Feature kMediaDrmPersistentL
@@ -623,7 +623,7 @@ const base::Feature kMediaDrmPersistentL
// MediaDrmBridge. If disabled, MediaDrmBridge will get unprovisioned origin IDs
// which will trigger provisioning process after MediaDrmBridge is created.
const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",


+ 1
- 1
patches/Bromite/DoH-secure-mode-by-default.patch View File

@ -18,7 +18,7 @@ Subject: DoH secure mode by default
} else if (entries.count("[email protected]")) {
// The user has "Disabled" selected.
local_state_->SetString(prefs::kDnsOverHttpsMode,
@@ -328,22 +328,7 @@ SecureDnsConfig StubResolverConfigReader
@@ -331,22 +331,7 @@ SecureDnsConfig StubResolverConfigReader
check_parental_controls = false;
}


+ 13
- 12
patches/Bromite/Inject-scripts-for-AMP-tracking-ads-and-video.patch View File

@ -8,13 +8,13 @@ Set proper injection script nonce
Send a random key press to circumvent idle status detection
---
third_party/blink/renderer/core/dom/build.gni | 2
third_party/blink/renderer/core/dom/document.cc | 61 ++++++++++
third_party/blink/renderer/core/dom/document.cc | 62 ++++++++++
third_party/blink/renderer/core/dom/document.h | 3
third_party/blink/renderer/core/dom/extensions/anti_amp_cure.h | 6
third_party/blink/renderer/core/dom/extensions/video_bg_play.h | 6
third_party/blink/renderer/core/html/html_script_element.cc | 5
third_party/blink/renderer/core/html/html_script_element.h | 1
7 files changed, 84 insertions(+)
7 files changed, 85 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
@ -48,7 +48,7 @@ Send a random key press to circumvent idle status detection
#ifndef NDEBUG
using WeakDocumentSet = blink::HeapHashSet<blink::WeakMember<blink::Document>>;
static WeakDocumentSet& liveDocumentSet();
@@ -6877,6 +6880,61 @@ void Document::setAllowDeclarativeShadow
@@ -6627,6 +6630,61 @@ void Document::setAllowDeclarativeShadow
val ? AllowState::kAllow : AllowState::kDeny;
}
@ -110,19 +110,20 @@ Send a random key press to circumvent idle status detection
void Document::FinishedParsing() {
DCHECK(!GetScriptableDocumentParser() || !parser_->IsParsing());
DCHECK(!GetScriptableDocumentParser() || ready_state_ != kLoading);
@@ -6929,6 +6987,9 @@ void Document::FinishedParsing() {
@@ -6679,6 +6737,10 @@ void Document::FinishedParsing() {
frame->Loader().FinishedParsing();
+ if (!IsPrefetchOnly()) {
+ injectScripts();
+ injectScripts();
+ }
+
DEVTOOLS_TIMELINE_TRACE_EVENT_INSTANT(
"MarkDOMContent", inspector_mark_load_event::Data, frame);
probe::DomContentLoadedEventFired(frame);
--- a/third_party/blink/renderer/core/dom/document.h
+++ b/third_party/blink/renderer/core/dom/document.h
@@ -1730,6 +1730,9 @@ class CORE_EXPORT Document : public Cont
@@ -1741,6 +1741,9 @@ class CORE_EXPORT Document : public Cont
void AddAXContext(AXContext*);
void RemoveAXContext(AXContext*);
@ -152,8 +153,8 @@ Send a random key press to circumvent idle status detection
+#endif // video_bg_play_h
--- a/third_party/blink/renderer/core/html/html_script_element.cc
+++ b/third_party/blink/renderer/core/html/html_script_element.cc
@@ -168,6 +168,11 @@ void HTMLScriptElement::setTextContent(
}
@@ -206,6 +206,11 @@ void HTMLScriptElement::setTextContent(c
script_text_internal_slot_ = ParkableString(string.Impl());
}
+void HTMLScriptElement::setTextDirect(
@ -162,13 +163,13 @@ Send a random key press to circumvent idle status detection
+}
+
void HTMLScriptElement::setAsync(bool async) {
// https://html.spec.whatwg.org/multipage/scripting.html#dom-script-async
SetBooleanAttribute(html_names::kAsyncAttr, async);
loader_->HandleAsyncAttribute();
--- a/third_party/blink/renderer/core/html/html_script_element.h