diff --git a/bromite b/bromite index 35e91703127cc39bf917bc5b51bc947be4729561..692764d0733a5a3d62e383cd4b8d378d611cdf24 160000 --- a/bromite +++ b/bromite @@ -1 +1 @@ -Subproject commit 35e91703127cc39bf917bc5b51bc947be4729561 +Subproject commit 692764d0733a5a3d62e383cd4b8d378d611cdf24 diff --git a/build.sh b/build.sh index 554aa4d15268a56b728ee064bddc7a2aca080a55..59a3d0fc0b43cc82a68f5f2fdf5d3358f2e94087 100755 --- a/build.sh +++ b/build.sh @@ -58,7 +58,9 @@ function patch() { PATCHES_LIST=$(cat "${ROOT_DIR}/bromite/build/bromite_patches_list.txt" "${ROOT_DIR}/build/e_patches_list.txt") for file in $PATCHES_LIST; do echo " -> Apply $file" - git apply "${ROOT_DIR}/bromite/build/patches/$file" + git config --global user.name "John Doe" + git config --global user.email "johndoe@example.com" + git am < "${ROOT_DIR}/bromite/build/patches/$file" echo " " done gclient runhooks @@ -67,7 +69,7 @@ function patch() { function build() { local out="out/${BUILDID}_${ARCH}" echo ">> [$(date)] Build for ${ARCH}" - gn gen --args="$(cat "${ROOT_DIR}"/bromite/build/bromite.gn_args) target_cpu=\"${ARCH}\" " "$out" + gn gen --args="$(cat "${ROOT_DIR}"/build/browser.gn_args) target_cpu=\"${ARCH}\" " "$out" autoninja -C "$out" chrome_public_apk system_webview_apk cp "$out/apks/ChromePublic.apk" "${ROOT_DIR}/apks/ChromePublic_$ARCH.apk" cp "$out/apks/SystemWebView.apk" "${ROOT_DIR}/apks/SystemWebView_$ARCH.apk" diff --git a/build/browser.gn_args b/build/browser.gn_args new file mode 100644 index 0000000000000000000000000000000000000000..1c10790ad1c58c9e9f51b221b716a34595f29223 --- /dev/null +++ b/build/browser.gn_args @@ -0,0 +1,47 @@ +android_channel="stable" +blink_symbol_level=1 +build_contextual_search=false +build_with_tflite_lib=false +chrome_pgo_phase=0 +dcheck_always_on=false +debuggable_apks=false +dfmify_dev_ui=false +disable_android_lint=true +disable_autofill_assistant_dfm=true +disable_fieldtrial_testing_config=true +disable_tab_ui_dfm=true +enable_av1_decoder=true +enable_dav1d_decoder=true +enable_gvr_services=false +enable_hangout_services_extension=false +enable_iterator_debugging=false +enable_mdns=false +enable_mse_mpeg2ts_stream_parser=true +enable_nacl=false +enable_platform_dolby_vision=true +enable_platform_hevc=true +enable_remoting=false +enable_reporting=false +enable_supervised_users=false +enable_vr=false +exclude_unwind_tables=false +ffmpeg_branding="Chrome" +icu_use_data_file=true +is_cfi=true +is_component_build=false +is_debug=false +is_official_build=true +proprietary_codecs=true +rtc_build_examples=false +safe_browsing_mode=0 +symbol_level=1 +system_webview_package_name="com.android.webview" +target_os="android" +use_cfi_cast=true +use_debug_fission=true +use_errorprone_java_compiler=false +use_gnome_keyring=false +use_official_google_api_keys=false +use_rtti=false +use_sysroot=false +webview_includes_weblayer=false diff --git a/build/e_patches_list.txt b/build/e_patches_list.txt index 42066cfc5a042615b74886dce23d236552d98e69..607fdddc1a5cd23aeb55c56daaca7360e1afe175 100644 --- a/build/e_patches_list.txt +++ b/build/e_patches_list.txt @@ -4,12 +4,10 @@ 0004-Browser-Point-to-our-default-popular-sites.patch 0005-Browser-Enable-do-not-track-by-default.patch 0006-Browser-Add-provider-to-share-default-search-engine.patch -0007-Browser-Disable-async-DNS-by-default-on-Android.patch -0008-Browser-Enable-custom-tabs-by-default.patch -0009-Browser-Enable-search-suggestion-by-default.patch -0010-Browser-Hide-and-disable-touch-to-search-option.patch -0011-Browser-Modify-default-search-engines.patch -0012-Browser-Redirect-users-to-e-foundation-docs.patch -0013-Revert-Bromite-auto-updater.patch -0014-Revert-Block-gateway-attacks-via-websockets.patch -0015-Revert-Disable-unified-autoplay-feature.patch +0007-Browser-Enable-custom-tabs-by-default.patch +0008-Browser-Enable-search-suggestion-by-default.patch +0009-Browser-Modify-default-search-engines.patch +0010-Browser-Redirect-users-to-e-foundation-docs.patch +0011-Revert-Bromite-auto-updater.patch +0012-Revert-Block-gateway-attacks-via-websockets.patch +0013-Revert-Disable-unified-autoplay-feature.patch diff --git a/build/patches/0001-Browser-Change-app-and-package-name-to-browser.patch b/build/patches/0001-Browser-Change-app-and-package-name-to-browser.patch index 3fbae276364aaca0c6c45c77cab288e768a58d10..08df93838c51e33e7ffef10a8b089c30d99b2abd 100644 --- a/build/patches/0001-Browser-Change-app-and-package-name-to-browser.patch +++ b/build/patches/0001-Browser-Change-app-and-package-name-to-browser.patch @@ -1,7 +1,7 @@ -From 66fb1b82194577018afe73475fd5dac22e4d5b6a Mon Sep 17 00:00:00 2001 +From 8aefc955dec1242bc7671d961f3fca2661bdacd7 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 05:39:25 +0000 -Subject: [PATCH 01/15] Browser: Change app and package name to browser +Subject: [PATCH 01/13] Browser: Change app and package name to browser Signed-off-by: Aayush Gupta --- @@ -10,10 +10,10 @@ Signed-off-by: Aayush Gupta 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn -index 465896c955bf0..da21f309f2e78 100644 +index db951d4f1470a..0697a16792cf2 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn -@@ -43,16 +43,7 @@ if (android_64bit_target_cpu && skip_secondary_abi_for_cq) { +@@ -44,16 +44,7 @@ if (android_64bit_target_cpu && skip_secondary_abi_for_cq) { assert(current_toolchain != android_secondary_abi_toolchain) } @@ -31,7 +31,7 @@ index 465896c955bf0..da21f309f2e78 100644 declare_args() { # Android package name to use when compiling the public chrome targets -@@ -64,7 +55,7 @@ declare_args() { +@@ -65,7 +56,7 @@ declare_args() { # for details. chrome_public_manifest_package = _default_package } diff --git a/build/patches/0002-Browser-Use-our-custom-icon-instead-of-chromium.patch b/build/patches/0002-Browser-Use-our-custom-icon-instead-of-chromium.patch index 5a16d5af590239751632f687e3f1ae2695727cf9..1bfbf3f2fe2b5e6d4e42e64dbff5c88178ebd32a 100644 --- a/build/patches/0002-Browser-Use-our-custom-icon-instead-of-chromium.patch +++ b/build/patches/0002-Browser-Use-our-custom-icon-instead-of-chromium.patch @@ -1,15 +1,15 @@ -From 1e4f671db28cd21f9a97b51c569a1662a0f84956 Mon Sep 17 00:00:00 2001 +From 605b494b866c718897f813f49979c12d4ada80f8 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 06:04:08 +0000 -Subject: [PATCH 02/15] Browser: Use our custom icon instead of chromium +Subject: [PATCH 02/13] Browser: Use our custom icon instead of chromium Signed-off-by: Aayush Gupta --- - .../mipmap-hdpi/app_icon.png | Bin 4212 -> 6844 bytes - .../mipmap-mdpi/app_icon.png | Bin 2522 -> 4011 bytes - .../mipmap-xhdpi/app_icon.png | Bin 6161 -> 10032 bytes - .../mipmap-xxhdpi/app_icon.png | Bin 10214 -> 17202 bytes - .../mipmap-xxxhdpi/app_icon.png | Bin 14761 -> 22337 bytes + .../mipmap-hdpi/app_icon.png | Bin 2435 -> 6844 bytes + .../mipmap-mdpi/app_icon.png | Bin 1715 -> 4011 bytes + .../mipmap-xhdpi/app_icon.png | Bin 3895 -> 10032 bytes + .../mipmap-xxhdpi/app_icon.png | Bin 6138 -> 17202 bytes + .../mipmap-xxxhdpi/app_icon.png | Bin 9667 -> 22337 bytes .../java/res/drawable-hdpi/ic_chrome.png | Bin 548 -> 1450 bytes .../java/res/drawable-mdpi/ic_chrome.png | Bin 354 -> 736 bytes .../java/res/drawable-xhdpi/ic_chrome.png | Bin 709 -> 2070 bytes @@ -18,7 +18,7 @@ Signed-off-by: Aayush Gupta 10 files changed, 0 insertions(+), 0 deletions(-) diff --git a/chrome/android/java/res_chromium_base/mipmap-hdpi/app_icon.png b/chrome/android/java/res_chromium_base/mipmap-hdpi/app_icon.png -index 7c125813be77f0933635aaf680660996ddef1271..c057b0771cef8c1074cc9a1d5bba2dfd2a49b652 100644 +index 29078f04171497c630e17e1a075e2eed46ddad1a..c057b0771cef8c1074cc9a1d5bba2dfd2a49b652 100644 GIT binary patch literal 6844 zcmV;t8bjrYP)a4YO7?>?KmEN_4&Q| q(f()hkA3|4;@j^|1gVAQ{Qm$Ro5P$k!YNNklhh@!%{ooLThl@;tw1cyOLG^Zoq4?^mXb -z`Tw66gRw*Le_4bYqK=G5G?57u6DcN8Xi)c2N7VjF#Zf{i8H@D(s{J3%Ck<9OUv^&M -zlNW2|RdChJyGUTRy;N-GbN_dO>9(>iQ}057sYgMknP*nCnbQR)Q@dk^3zluvAwnr> -zYA?1dIwcbftRr++x@Ud4-1~0ThubQ_(6by2JSg0UMqdW$eNB8SVYydfg{gD;UV~3U -zbjh{pbiG(&#=m8-dgf}6bT`v&cOM#i(Lxxw4_6Wm*R323Ju1M|`_4lXr}OR$Og`43 -zQ}vvSdHvtl&R*q}6KLX9@w*`k7{ovhiVKou>1XAS&77_Ty~Wuu=Xn%078$3bvvBGf -z&&)4A^r;*mLKv_wh$+gWeBeW;^E<|j(V0q~6EgOBNR7to&2f6meTwUiJS%`OT7n21 -z*K%0qbGuG&ZQx>R7E~KeIg?g-=k8yI&69{xUJ!edP!K}(DCg9DC}8qvNE)|D&rEy8 -zXSZ`GDGWiQlp>TP%Tl-NISUpn(;+4IztwNl^;WshHSsF0rKK<#eL*zFt_6Y*j5q%a -zwImp;QaMKEJLfO)EN(OQssQAL5JWI`E^2wp(DrpzN*cF#rR&_K9!2fOxX?55Du1B_ -z>ABuRNrf%%nL5lUT4BhSs-gv`!7MqgPkjW;V -z1$l;UWhek2#Qh%1Ap+P=kLm>xjJM|Hpnxfe8XJ9Q!ZO$Ng9a!E1>pdQAR>U0gh?8m -z@={(9!NC3pvINi^X+Kiud=jE>*y^78y7fp`aqrcPT+JBuR(|qtq0TGx~xEhE8_`W5!IMu1u+oMKo=K3wLZy -z=mj&+e9(9PFEDT^1btVMqEbew8Q|@UB?xiBBw3%@PPQb9mYUiJORQgZi0gj5C7~be -zBU^xLmk9<=MABU_#F8VDNP;NHfXJ<)a!^1SN-qQx&pTkg<1YMVS0SwMxeZI)Z&BQa -zrBAWM?FrmzjNRm8M?@*?h$NK37t!}%C$gJg -z0lQ<%;mf!R@FgTv!q*A+VP9eu>_@&y7J%Qk0`Nak2VX@OgpkQ-xG7T8<$nB<6TkZp -zsUS*HY$q(XNdb;S7I3lDxI_@5k8%tM?o3HcIrqTAw-i$H8ljDdkV88Sv~_et?ww}v -zOR9wJkrl8bsuD$1qKGOKaUb^Zt6)!DH6nnoj?{wh(OTGx>`SVJ{mFGGqaOTD3c>%B -z5CXnygrM&mA^7_y2>ziN4xMd*@N>-ry1Lw#hMOXdO@23BC^57kWZi*M;MiUQu0sx{ -z=q?H>k)}u@Nv6~oa*RDnA?jQmw03kcWZW0_Kvr=NT(~6#ea2_ -zg#Se7gu@8$Vkh|WuDg)252w7Q+VMpXXgM@aN5o)ke-SvFF9XLhUz#GfGHHt3Wl|&~ -zXT|3wkW<*gkP@BN12!>YSQXeS!%7Nk{I{6&9;j-N6;*U!1P7DrQHl`0Nkk#Zjo^2@ -z5du%QLhzY32>lTyoa=zYDad)Lgb0a@E{M3$g+d735Q#)x>W1jcJ-|EHUPs3MKb6@y -zQ`?YtXemsrLLY$M=2YxQ8Nl88Gw4$(qDzfNB4>Lk+%6aWLrjwhpA-)IqhLx1Lk<)3 -zkY0(XrgmCVMO`NZW4Q$X&<C8uyF~|B@W~^=S_ZvdmQ8YfiPr>aN0L@%fwPk1CD(raJSr)_96nNi9qD&yGzOn -zlhZ1bnym?RV&n^Af(e#MQ)w*`(Lu?e6Csg-#K;Pfkr7A8=!N*d^+5u~fn&FJGFR8k -z@~R|qn9!0Oqgo`rNY6e)(zH2Se?c*&z$Jp*2~tT>DfKdPtfQ5cg9J#iijtL-Rn&n( -zhzv@?AeauhLNfay;c7n|$?AurSAT`0S-(O;YFmlCGE-aluGuRxQsjs--+2pr(G@JU -ztJsfnvD^xtNDpsn#Z?Qh8-D{Pc=4JBO%uG38j -zI$k}P9x|0HC5I`9NlZGOqU_=xNivd&lqZD{0oR@&Prjg#)8(Pm8z{y;El6wQ;fI+H -zC;%C@B%6o^Oc6@5&%uU`W#)Jj(r(h_h3g!Z$XS8d#Pt3{P+46!5ke%$LB1RU?|j1* -zs!=lp&9IJaucibsV923FZi(*$Q}3Tak2GtCeBhuU!9&qtd9g2t7KG4c*3j0C3F=c& -z4pUHUMn^finEtdNHAKfQQYVfo7}p2kXKDupk;R-+VwiH6@acsjEC(Sw -z`Uv7;C_$4~d7p760!E7Wu}<8mN(GUfw|NNra@LToMgzUo`0hq8D}p``PH`eGh7zR7 -zU3cH&cjV3lqi`s_?OPN!=Y?)0n-mlZjL?T1o*i352@t`pxd+N4i}u!Uz*Ka|wb{eqMmIRY^c9=;fC -z$fV~`WhJGsvK?QgXk?+ZX!K1ta%7J>n5ZK!Z#pcjV_6cNB#J7bw0Yaa$Y1C1hj`g1 -zzoZSe#Z|(|eD>ta_13EgdE*S3X^WzYmk3PQ=MhjqH)VAaOk_MY! -z-UGEwOer;uxH>NFg!r@;aODeOLr^WO4-mjc|9g;--N%|7!uGH$!6-o9d#Rb{(=+D& -zo31q@MXHfSUPf|D>?6`7xE<}4Y+02VCJ!o}RLtjQs`??1kCnCW3o -z`C~LSUtb?CtW&KRCY$+~9-as`9%=;3AWTp|Eqr>Q5<*j&S(Ou&A{1z9YR+e*M}ZX0 -zSZHjw$}YB7l~S03qID{c!A$SFz^&{&ZCElONY}m;BPxjx< -zWmyUnzBE17kzJDVvIrK!TK`(`Jt2hSEXoNyQF4`x37Mpv9A>Fa)0jNt?e!rw0>vdL -zo*t`+cGw^(uX?Zwx(`RQds&kccK%`YlqoZG$(Y#uID$H&t^KEWxR#;KZIl4k<&bTM -zbyN?QS1Zn34Y2ND4fy}q%$l6Yi!IG_<}TDD$IFO1+aHA*kIb4qf3cB8NPP>dau8dI -z98AyQE@^rK>%o~PfNygjjaUqUccHoY^@WR#sN;ani?WN -zQEa27joFIV4VK{|$<+SM>E;p12|rg~!!cR+5qWNi7CRrqRDKCC37IoSLqpftAz{B2 -zuk{gAg#7eaM|MlobEp~YL+i=^zEWcNmqm}Z?1}f)z~@4q6Ebo1J~z)SxoOC}iCS|w -z%U!?cZ3t_5ELRZ!iS$I^!Z1vPJ9Z%ipKDWCOhQKcfLFlT2rcb79P%8HX>>_FUtfVU -zfvWe{#!u4LGqB?AS{qPZznL!{Iz3UC9wH~a6D&hoz>SY9=KSIJn6R^T4>s?J-mRsj -ztw$b{dh7}8riOh{m6n^f)rL>2btQ4c%csR8;#X7Ut~?Pd{e2gTHIp -zYO8fxS~I!i8q~FBQP0000< -KMNUMnLSTYuDcsEf +delta 2425 +zcmV-<35NE(HG>n7BYz1>Nkl)Xt+#(io{3cJRNjb>`WCFcS +zKuldd&(%|U-|&!o-(Dg2xqVRX6B()SiF~H;jbh3RKf~{c4u8nKZ>~^yTpQ~;?OeUz +zfB&5Y_vS$PuhKod9|>}$281Nx8s0Z|xOiUeJAV9l)7K9cYZ=AlJ&p?R>whVIqB4Yn +zr3LGC$}E}Fl#}%_X#`NI^18XxmE1PNFvbZrGM8oPt47ra1@gdI?~S?dXjtISZPOUp&_!#>7ekr{oLr`u)i75k(tI0g)g~pWTwmX6CL#i2`TD0et$!Q!=V5P +zcQo~yqXZno+lq?as*eq7L=%#U^N5WuZv-4xWDgkSGJkr9Gp+7sCilF$8W(<(gqW~T +zltc!bLFXBld~v}yQ7*I2O_E|YnSyxLsI5hzXgdvAE!Wj*W-Y#q-L3CQcKGowMCZsNWnmvQ?rhB}n7 +ziyt!^&VQsZs?=iURU@xZ%{)&jV~$4_Ga=XXqdzyCZCX*QnR%>B-Q%-4pXoO{foisd +z-p^%p9r^;b_fpm##4Nh45C86LQ^3)v;TQKM!-0ipjl1z>)FF9&yTVoM?%!OKJsOQ& +znx-ol0yjo5Yr-BCF~9E5X8JEqWt3kfafF|JzJE9C#ouTf2^nhU&`o-PcAQO~FD8pj +zh-|$!=BUa8f|`B(P$xLiarq2?9FH#4KoO;mf2T11S6{wPW*$9A!B>ki9UUF*Ue(b| +zC;oMN7#|KaZB15%3-+;FS)72f3e=4ImJ9@~laNty>7|@&rev$BWznj@=wYw2nT5yN +zlz+Y2071R}{6{pLMTe3(fv8Ae9sW+y2@F4*_>dx1bZXMhvnlKA)vIUmZ}zhD+K?3| +z1W07tN4KI6hX*MuU(K~Gh3*!3r9cG+LN+rU@UdS@fDo3rw(lR7&Y3){fxu|WeQSnZ +ztoGxw11+@L46DhBvm<8+fZ-QxvDt&-ihqFgA{6`bqAHZGddtSN-p}7(h_#?;mRgq)IK~taA{E9);WB +zY)hoCsxyy)1-}mA8+)$}88M;&3ABCKOW(DJCoD9%#X3rw&HO`iVyjiFX3qyCBY&zY +z+`+`P{aI_CaV9HbF-YBJ;SZ$&3XI5)t3n2t@Bvj91%}u5>wI#z+ZPKKPIr-$~wJ|%J +z2B6P(7Lc~j2E;pMtVlMY6QbDj2d=&OJRLZ!y=oAFf#5)DIZm7txds8!f^_Ryso(>L +z$S9!)4zbV_df@P0Vi{^3f}>=we}aYW#j{zR4kOwjIGQ?09^j)j{C^{gUtDw3xgu(S +zCV%ipPuPpU{t@bCis?(9?xzh2_ju@o5}m>g+xUSK9NIO~`jg~&!k5 +zzQ6V2Kbk6Putep9zc}!jF#%e6f?D=q-}MuT(YaTzUOGM7)x^cc1&)dkCX9GRgr6(8&4%#|3I3uTjHjq7-H>2`W1UzSkbTwtiakD3RZ^+K6Y&ainrIS5@ +z;d$A^CVx7_#>PgD;~m6C^QD*Ys$1tVv#01E68*LgIMY9#J;l<}(v8GnMGFpp0ck^2 +zvq^975gu#P5`SNp!t8fBI{|Pocf=r2cc?;gYu4|Bp{Pm5-qv?tNWVXH(g#DWtgLFV +zF3|t04%ybIR5tD1b;9i1{`!LRy`QAQtX>ry>({FDfG*e-xVpMpiP=iftVtH=Zsz9Z +zjfZ`G^iNpMSlT-3&G!p~z9DmLOyq;oTyof!V7*i +z*<_FP5>mTqAK&3q7d<$vi}jWqD-;C}BpZaj~ +z(WjSI21Wb-vhv8^gU9-eBG+k6Y}ANt+fM8;sd71m_HD5GWLhq(s4W=AUmqbV|x2u1fjqG~L73&UH9ex1@}mL-l-SZGxNjw~6RG(u+JXYB9n +r*uS-4&!|k_w)ZuY@nmXDZ}j$mxJwUb<_4i^00000NkvXXu0mjf4u7hB diff --git a/chrome/android/java/res_chromium_base/mipmap-mdpi/app_icon.png b/chrome/android/java/res_chromium_base/mipmap-mdpi/app_icon.png -index 005468fa2ece06bd3685f4792fc7d3270088f15f..263371c5cdb015bcbf244846007b25de8b652058 100644 +index 22dbe10b62c2973af8e124357b45e7026660f07d..263371c5cdb015bcbf244846007b25de8b652058 100644 GIT binary patch literal 4011 zcmV;c4^;4pP)kKKJo_PL)uTT!@EqaMxsqhDq5xX)U1g>U6` zSNQ8^om4Qby7GO|=&jwCifQy_(DE31Z}w382f59UtSxT(`C2vcIr{51{|l@}!0pt2 R{$KzA002ovPDHLkV1lVF&+q^M -delta 2513 -zcmV;?2`=`lAKDX;BYz2@NklV -z2sOqUwZVm99gt;MOexXYXpL17WL<_C7L^eUiEE-pQ8p39AR>YSA}ADOWY~ro22gwA -z?Y%Sa2)qOOW-v5=lyg1@&M-6Y^S!@&hu?dT*Z%)CfDtkdF@Hu(7)%*V7>t?c82yN( -zN$Q>P_HOCsOE+bEE)rc%u@{w=*aua%Eex)FLfGQZ_M+?8?Yu81FY-7mw0BE3f9;XJH#qp|RbR8*RN-Jeye^qcIa-=9Tg8 -zV*i_0YyxY*I)6Ziz5y)#2_}qhY0-iW(szI8AVz;&82B^$fZ`*zL3bJP(FI^*>s5Hf -z(!pZ}&B?2lH-6veOP-B?xzZ-^E+DTw0MAbc-{+Qco>L;9j`^zOO&tAm-R**O;y-i% -zf{%f$Tuyk>u}3Yx%s)TWE~o~j$0`7We>K>8p58K=5P!xFeiwu`0r*CNV;{i6uUZ?z -z#^tD|A?-BI&ie~%8&MU?;hT^oh8XJrge8Vpur}6OpTRboYqNej->_z~GjX$z>jl)`lFP -z=at$AYkxnl0?SP|FhnJVU;>a_H3xYN>|X&6A(gN^v;yn{%E3;A1Pov+8j6koV6H#2 -z@GJY?%CGc4^L?*B<@uEK&l8qttk*T06R-Q>oI@)~HyjA -zNuB|mBOU&xiyE%oRcWbfp~rNz;&YDY -z$$w#+wl%oYgGdIaG|TOsOr8$_LGgP4=;5c_op#C+Wa -zo}XpR9%&U!1pDj42M6#@?S&=2Ik*yeVCh?d?Q}=i9ta;>iR2e;u7>QAR;{?aLk)*6 -z^?<8H1CIL!cpst14i)skqjt46NNIHkR)4n{b{&>OSe63zA8Uu`6I~E{3i(C}am49v -zh(FT}31?K0_^k@W$llD_h~Z~p)~ufhrD_d{55_IA4S25SfhQ~gD-40Hgj8V=nu#iu -zS7_zS>eS#O?m=OeJPT)hPFcM!M0s5o#GfX*5tUB#tQtj;b81LJB-uS6xzGd27k@O6 -zlG6*)i`^Quoy68Ra`Z`^EllYHHeSe|J}m*Bdk*kCui!jXY6I{^RoFI7&*eXg(hM)p -zCQJjXqBPG#T)d%#BovmA?D-y$W+Nz@d{HNyO62uHT7DlK$nS@P1^wW;HRUaK8yP$O -z^E+1(9yUaBH}G7}VSqy5d0zv*Z+|5?{;h_3p4x_~Jcj^b0|=5d_~XAVUscehOi-(v9pLtEnL3UJ}WU#K*g9aTRj0m5RX9 -z`#KFRRUZ$)NuC{mKr!7a6x>$9!F-f0AW)d3FQYKZ9v+66WA*XmJUGBamw(8X5)vJe -zR1H{p7id?(!s|P@TA`qW<8T@#Pta>Az`bTQ$WU47?)m2AC(5nJ22F@s6f$)0Sfy^lxGJ>&Q;6Fd2oO!f&}H0mjw`} -z^uprc5?CrKruL!Fc$PQ^d4E=bYqh#I$|&sRQhfqjO!Wkve>x<9OM>z-NxlqsaVG}2 -zG7!LUd3FF!)hE*ORej_;a@ -z^apYtdc|$Z6f;4rN`K>lVqBqtE~-{P4zPkr~XAHNc -zp1ktYJTZysgU^9JD6GejJ;2t4yx8Xh%))ez -zjXR&D^hKE3hvFJ&VfOk2eLT`DMJX9^e(TLB(155Q^fJxIz?>n$IVbvGX!r@!dDc%r$z -zmxG72mxK()6QPqK(ZOCVLTn#Fj2zZSG=Wpteb|}VqPKiH&Weqr+hTN_@WKmP$j?`8 -zFaByY0o -zaFg_cb6h7lMLdL$_uhx_;|jgylP+|1n3>HoCpWG)F{aE};=9^is?l4TjcbwyoTFPY -zKr{G?AK>8XCr>9gw#!{VBqx1tei&0LEp!owxJ!CT#D5^D`ho-%tc#SxU&0z7{;X0j -zdFp$?=D1*TG32I)Df0Rf-^|^Hgm6RXT-iCc3)Y1c?aI?3cstqY6&qL{fHJhn2&Ik5FJ1$-kb30VD@P7uaD)Lze#aTwNZ;)1Mc)66XBSlru&JL8!1&^O;$uzJ<%o#j`D3qq|! -z)!!JWgmn?E5OJ#WrQ&-sZxzm4xaQ9&@LM_t_kV#kyrrfi=D(P`Y=uMcHz`h$@*bQK -zU4TRl2(Wdi`oZxH&tyfz4`|}qc1=jc8OhrV96msS*~oOmTE_6zn1D<}-azKhoV)Zx -z%k?o^978TeYB;L{?gn;z>1p4z}OZ$*(7Ir}!EbV-I;(xxRA%ASFY&HCDD=O|f6U$4O +zg&C~%+069r-CNm=3b%3y34(}{AR=Zy!gnOrE=?n4Ob1-}$I?FVI-fue+6CRP8Fck; +z)Jus9$H`dOKA4DH<`czF3kO;+BOgpEsc2vU6-!&+MOgfE5_@8AMGdH0j=Z-73w{xf +zU?${?gvu8c&wprpe{r*B&A20>j6D3(;u$SQ+?xzdV#O;N_dHaNuV72Ru#LO#D?e}E +zJlWle5Q1D&x3mkqiGTd6Xy<uUPLdG6S2^Tda27e@D<9pDJ?$VXmEcU%&MW0@&wsVC+`?C#j3kMvIYbN|f6SH3 +zz=1odw`^=|G@(`Mh|qu4v;OuzX#{LI_nj#5b!I%Kr=3X{64NDQ|ARC#=U5UMzBQio +zbd4kU`dnxRVPH{_CmODYLpw^1!ry=YtvKw);-t$H(DK|5USWS$O +z%DRi9$$zTzDGHfD6sTN{V(HV&c7qKQ&)96i2bl(#c$_*;8Y0CIf18*l$un^>K)iuN +z_cIa)k6HF>(T=3tf7!!95M7jij(#jvJaV3)ka!Lg439W#V$E*fu0_WTwV|6nc}O!L +zt)P)Q3`hwGl7~n+AS;J(MPcWaXb-g1f(Ep0J%8eEL$EX!ZL4Fqy(bKH7DdZ#pxms; +zyi^K)mm}K1-Wv&Lp_z3fe9*V`j1T)S1A|->3mLfmG=%`@ED)jy_xq+1;A6Z*w1I>7 +z(%wTeyKle;V|(wEL}}uswbl1R@uEE{XaH-lV&*Djs@brh0TUVGi?&r6#mi4zD;RhR +z8GoAD^*~8SN5_;2mBm(zKNT{7%@sA!(=}Eu15~qFo&jB5T@zccq$DvW%8q~fwWJUX +zsN@+K>5=e3i~+ROvq6ajz{sGefpekh1c*u!Z(!f;q({h_ya-Sl4c++ZA_R)zy0dWv +zKnpB4D@tzh7%dq5Uh}lkxO>nH?Rjl<;D6eeTg4i1-kL&EGbIG@x}GYxfz{`e3B$SI +zY|#dM&b`~3*G2(LOG~W|6Hl;7R1{AHWGOgG#L7KNEb+eXU}|cr1MLhNe>Lb^$<8Y| +zNvwf!JJU%_l7yuaOmK@9SmWLm|!CY+9OUH*9v@%j>S%$ +ziC=Iu1ERRN(Bra`p`jtm|3W}WejVW!{e+3*tqCzezsKJq1$W=(OP&39Qa);EX#6H< +zEe2(@rdCcnhci*~L}TmqO!6c=mw!YjO9%tL4tSeG_T9~daQrQqecp_|Az2l@-Y_up1t~kY)`-kqO +zC-oRUtrfHh8f8L_(yG_I`^!s1{Ma37+^Mr_m+uN_s!*YVn%GC`+LV9vUVr58QPKuB +zp65IL^#_7HpoLP4=YT4 +zus}&gf~RoT?Dg|jQ&TG^+gSYPf(3YpY|g(tL$p1@{kndU{5foe&Z0vQ3+}c7NGDweOOU{X^Hk +z52RD=bJPoKn-IJ2R${o%nb$Wr9tu6+G{e=UQmtmq@V}UC=q;@=#$#NhKI>ZzgrQ1b +zTU#6B?QiH} -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 -zNb?!d4^QyXlydTu2 -z6bs90+po@&x{to7bQnTr7}fRRBm51_Nj3SM7ca5z0j(wjfu~G(5eii~|5Fg|gCWBPVr!-CaC!X*1?kjh^)W-cAZC(XYRr)MQgy8W<2+@y*H~Y-!(I{VK!8xw{vAjW -zEND1n=0lQA&v#FdNC--uOPx1d#*JHQn^W64YO34cxd3&0Dt01;2y5xsu)Pg249o^j -zAKYG*NiF$fhZ2gipb*{e5)wvI8(t@NY+BW^01BdN^ZQjuAp~)(sdB|#yXrd3#S)sJ^B-e?fP#*|ZK -zWa~(3d!pS63T -zH?v?kQjDxL;O6tJxB(FnB3no1uVJuc&$3?EqMkq5u{H5vgNc7vv?4Em04P=DD>NOd -z+IZU~L#6%diQunf6bu}No -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 +literal 3895 +zcmV-756JL|P)nvT^j!nAojN<{}JFnS^%uZ)daed;ILSJ(E&v2a}D5LWBrIDzis7rfyf +zogr-m2izhCPYK&LGvJv&+EDm%!g-O^+}Tbs-P!+%nSKZ@41`Sp#G0lJ&&be)CWXN( +zZomC@=Njb^m`!rv#m{#0y~02EUm}cih2775x)@i)U*W(DAcE%!dyMgpxCq^A8}EgB +z5dfC>Jn_`xwoqgCB|$BBkd%x?#8uvHTH0!pI`NeE}|d$q=ZPo{l6{AtUUEj924TOxsLdJWta +zCtIVo+gqxy=wPM60VrBPWZeI_=@Hiyy*>2g6duXsfD;=lv+gadg5cGbt}D`gq$*0 +z6ggHEe7@TCcxlw3x5K9tNU&~S9I+ViyRr%;wMKqXnUsF?AB&SPd)>Jo%}U6;vBJ#P +z5TBdL33xdwTe{_~-NJzH{nftm882!eM6JlMtQRm0>s8eYz|;-1pWE%jP6`44y9K9j +zD%4~bmPxx$l}Zaz3$ELWT}4vj;o|b&RW?f4Au=+rS&W3(Wk=tsYU%oavp@E7f}DVm +zxIC%(yZclH|ChhdnFI~s{<1Pp>OJCu6!7s`lXlOji_&+0*qAmkivkdI?<%;NL2yki8pn*?l +z)cJV?xS~OpiUJ>@1hW_*s$qDq?1D0@kuYP;nV%T0-oUo9FyurPy#~g~SIMd?OA+&x +zMkbrF6lzqpKI}b}y+M3VSd>zj2~2@41dhq@tik@ng-u|S^EC;ETxz)17A1^iaBA^esQbjd0Vm*fi3MTQVc^* +zq*wh6lXJ6818=@8&AeDF$plA1%R=!USOAa*+xcRbl`HpN!K1kd$@wUI0ZTs+2utMdm19U*Gyj +z#1+;9v_f-d)+i+E{0abSjt%%evr6HIV!u`GmzB8|3q!LuTv+Js?cI>Xj-z4%)<<7T +zQUbTSvNUeZ1xY?ox3M+>I0xB4Q%48^b2nd2LL#P(Tu$=przbP5Auc-$V47=pN1Rq9 +zKwf5s3?vY&ZgNR_>WY{=uqe48%hS_SOISO}LlCmFE-XGbhrl%3+I)DR(#02IudNWU +zOSU@BFA_%pFmBwqu~!8GNP>DZ3s3}A1z9RDJ)nkfD+DY^E08B*VM+)X1M3Q1GTLSrs0gYGvQ$3MNU==eP1;R +zkk^S2f^3z56}t+>hahDF9JmVNA*hKONmxmiW?d|nm!55f00;t$)Pxo%7v_KfX1)~& +zfCumpq>sINQcW*_ETuAp-N?}Mg31vKlk!i>2%tf2Nc=K1>RgJN1W-a&T!^6rU8@#i +z8!x3G3CnW;hBJ9Uz^h|3e^Z+P$kHd-W-Hl189)IPtCyvP?WUW(?)++COjtWtAfQpB +zM&9`4OQR1@SC;?^MI$nih;42$mUT(q9TQiKi}~Z=cr3&!mZYf{Oh42<@m<2_A_#yi +zO+8#-W98^e5)I*H2v|h?+BX@-{_;`;h7%gbUS3{)eIFlkI{*`5U(UaxwD-rBX1~zQ +zyzhJy_b9^{T`_lgSIm(rbd8v`FvRD`rKoDMbo;R)Nj|=}d|4XDRM^BTPX9xKYBZV_ +z3}0T3c9L&L)Sy|wUT+PVbT(C#7mWN%9)=)EZKElleoWjBYEnSAG6TjMrHe)b9+}ranGC<@-a?kTMy<@{ +zn{Z8n|NhJZ;o#3&e<6)w*&3K)+0&-9yK;nn3dk3;lMX((UQ5vvk^O@2_TEvw2j5m#hfx# +zf&XP`k?}EvCtlcy_zm9zL#i-%5Vn;LFm$~|8QAHre%uQzZBeU>rEMqvG56kJMc`o( +ze->Hb=Dgg~48M-F`10k8uc|zv0L3}130gk&ed5nJackKJvkJ?}Si>YEK+U{V27oJo +zeId6DWZ`cBI{ruTy^weVDftL +zp=ZLv9kJNyW7PYl*l)(5tnI<9A+&5jhdT!7V=kYzL+~LxEfspYU=2me$LuF($-TfE +zyLypSI^6mCBfL;&KPEo$qT%x3b8kP)Fv6-=%XPom;L8%S8xk_@X=(rHrz?lp6Zk(Z +z5ubQ}nwj_ug`S{#Y^e4eQOe%Va3|c|fl4X+y3^CcQseC<@h(gjJNw5j*dE6)>C6n+ +zG?a&)Y7;=A$OUeN#yxtQE-o%zU-ZEQMRo#wTr*vJ0D0jNXu-Nb(8PV7{4Q~-z01xCi+3&T-0P0Jpz}#;>iEn@*nvW{g-=p)A`*N^ +z3pb@!T+cRxUVYk9-tfhI^%C#&)u*?Ie>L%Kf6H}e&RwpkiL^Ywc +z0*X_8ANcT(2oPcGvJ9x$ +zXXkzoe(+}`h_E%;3E-h{+I1ap4<*|6bnaTjd)hS!@Wsb`6;{m7^k^<`HX2caZb@CD +zp3DZ^|H1E(uZ_*xu1?}LfA%BPV8*j^>PO+GBW)uOq;vPCYjH+NM&8-7St3XsaBuLX +zT^3D9u6Ck}?b~MHE6=?6^ZsSk@QNz$ZkxX)`^?X?lBZFO?@Kej15J`9I9Ie1>D*m# +zEuxaG_^?FYfL&p5Wfb$+>n(J#?WvH}i&_6(k9`yJ@Mo(gyf!XtyCE(+S1s9z@Pe5h +z8NY7)bB1q1XtwvH{M3$Fb4W`%w|dk@)QJB;XUl)`o`x>29=Ue_)CGA(2O_gysZrh(dv$2GH=xdyJ6AU}S!(X!iJE4a3vG$_q%wDX +z+DV|}giu0kO{BCZPw7Ymb;c|ET}K%Gu08v@EzR&2L~0PJnZ|SsA5t|qwu{|`8UZEl +zax%DQ&;yNp39Lr&5Z06SCt?B!P`L%t?{xH3DnDp<4mdPCfvz!h4Uy}N_qH{_{|h3pu0jst{Gb2;002ovPDHLk +FV1ifwcya&$ diff --git a/chrome/android/java/res_chromium_base/mipmap-xxhdpi/app_icon.png b/chrome/android/java/res_chromium_base/mipmap-xxhdpi/app_icon.png -index bb216c1a0a5262530fad2dd95bd6e06d24e35a17..fc99ea6825826cef16732ae16c1e260497b62e7e 100644 +index ca1934691391d243f709a8b078389e2157dbabc2..fc99ea6825826cef16732ae16c1e260497b62e7e 100644 GIT binary patch literal 17202 zcmV)2K+M01P)Hk^ER!Wzk zRazT*L|3cNbhag*oZPwP@re&zv>m`q&@=`-AM;)P{{sTv{=AN4LDB#K002ovPDHLk FV1h*fI643T -literal 10214 -zcmV1Un?$H -zzd)sn>_Qk5KTeu+`hXb+zk5uoYSegBHfUnHta4HmG1hqgIF;1!K+OPymW!k+BNK@q -zY9Ug|DYnrgzfnxEfk@XxLDPybY(jBFHpSHn7A}GHB-`uopI@`boG>zRR*0I -zX{t6`uw)BLWEGNV*LTdG5h~I`dD`H6!5Ycc|E011^}8Oq^^%vUe>0zu$;L}xzd${g -zHYP63yUw`sATxOKIiXh0%?9eX7(L!fOpJUKc6ye+=1uhbjN@@2&9TjPC -z6&vl=7tXuq*B^ZV2$Lf93sk&Z`Ny7l<-{SA-}k%vZ2I6#-lD3sPhT%%#ecrC+%U+` -zKD%w@U1!g~_1i0fu$0Q0UqY$l|GQir`}rHcnz2K^v98_%mj84zIZKAJ18XLq_VS5e -zKJ15gU;W`9y0R7mwznH>Qwrh$>Gz*=-HdmgclV;rnVN4jv{>SZ$bbBTMqN`xT{!0J -zCw~3$myS5?idjG!@M8<9LNDO;qC6f>o>MM<>Pz{GnK#!pQ)9IRd?-<@g_gWmJz&_Z -z&(1pV#Qf5yZ+Nb^OPJ}+&!p*8bEyS;qP)gvzFdibE$K_k))XJN=5;uB3TA -zEs;l0kmz^jUi6Q-wsNog8=6fe{p=Chf~godblN%7_kQ=Q%b&k#+1s&%#n*Pyr+j0< -z1x;FeLvzLm{d7@DGm@*AeZvV~yzk;z5}BSzBGZ$}^O0{Xyk={5$fdc0rJt@Pleg6C -z#BYA!!ui(%W%0hKuL=}f-eY!=|X7fKKlEjExDm*zyB)>{ts%(dqN`9 -z6Y?DW`CEQppQ$({jOb?i2_t1&Zt#acaKQtA>IsQVcbBcBK6C4DwzO1y(Cr391yH5? -z=qIwuru={py#M@rf79LN%yeVJochqk&;MjwzWgIj9s~syROqJ%79F<*gFkZO1@o=} -zQr*>9n{HYpOwGM$-i2E;m1jrsEm3iatkV7TC(+izu(OXp|A7mERCg>kn(kO6{J@v* -zn_CwQ`)(L1h$~$&i&T5El=b&SO?LcukN(t+C&!XV+$gC8GJt>7$A2{|D`WpyC|ES^ -zmx7|G_H-%hCm$%bYM(zHdg>2m$NHhtNT7JrJoA9LgUd#}^MOp>7XYlH7AKCNHc`sx -zcnWEMTI~^;(3rB(C*3=4ufuA(vZ*#*Sh~^^-u2zvnp(UesDcOp3ZN7%WvFypDO37M -z(o!(PW*vXcEkIdUl`_*+eb0$snfJw}oOdXy#3d2cVx=rGE9+06o}xaedgr^(yW_v( -z{ZQ{EkSkrsoO<DiZ5MJuXn{ -zq_5q5ZBtGsiYlTJq83C^B=(Q5J4=~pJEd&TTM -z8t2*r&-zU!5NfARCCYCEjZiG=dLXeDi<1Zt)ee<1wYFzVi_+&&l+KbXSVl}eaxWd{S`l`&!B2yCzwG(>FV-cW?7lcJk%HjgBlOBLn1*% -z5CB}WEyQyQM4eyK%>pUd0JVA4hLok0nt?tQWkPw%`_~A`1tHmj($Ex;4`@X|c5&}c -z>BwY25~oFbAc-B+ol5)fUE(JiyDV5+(4Zh85``K{LA8(@S)KXb->*64_dp(q0PRYF -z#EsOLG1CWr=(2^&bCIbgfp08JpLvXyT!cs^lvRVYN-g-P7>se#d=(HO{{G^wD1zXG -z>tcBn3t@%|KhLa*RqQ)$FjL1?GIn^1VS~JO_8*6A+LmYimMm|q&hXZTERl6WVNd~M -z;=f!23StyNaQ}7BO6(wr0g3%01oxa60QbDa+;Bs|2q<90J!`pI#ZXyS!`K8{El@v1QCA*c~V -z42p+wFCN9E5IZH3#Q$@Jcna;gJhniJW)7WQ&9Mg#WB(}?7_(;;&st^0+ANEgHL~>0 -z7DDwwz$DW}*eQ_2{thEoDjvhze9!W|@2B2u?U;2o-7RmIk^ID9^px#8XQe$rTJ}>=!8F -z2B7RP%y~h~j~)NG>aJr1!3m>)lioOq#9bqva3UB4W299c5pdVtsgqR^5mbaSv0J|V -zsTq4UHa50&G=-!yz0W7U`{;40+Jpa2JNTOC`NtjtuMEM1RE6t_1jR>OETanSekoJh -zK_e=>X3jir6ek=yn3N|yGW&`m<+;~dn76o*$of0qlS>lRC4s}3c&`Iu0Nq*E6v0&? -zOd`bu*2IB$7>?~!(e>Ty-#h){+5^Z_o`49czg7-ey(OyV8I&B9kKX-lI6Cq`L -z(+(oguwgkXUtIy7=aQ%r(t}%V$H$-@DrIe@kg{vkW;kk2Ip=<041))l-k82`?*$)z -zu94+yLNHz|aas*fG}bQ}1W;GTcBE1)r9~7`X-y=-C5%D*))qmEh?O`XBE^&5^+-0# -zzj(oiMjr)afDo{IB9J(N%1$`I(LyO9U^5S7R`H@$QlF#;(=F*NmsiRioMBB -zmNMP7IaGSheDRcV96qOtjknNQFP??4i)i9=7nKBZFRw*6j -zwN*JDe71?mregh%lfuv{g-ZcMcRc5=y0W7f0pt02o?tw)Lo!VWQ%n{}3gZM#bmT^0 -z!JWU{=g-%DeFczr0_mOzHi)S~2Q;I)xkt3%J`rsvtRz;p)Mknx%vh?{UXlg1T;-TV$@i1OF;#Z@t(LeJw{$S3GamP4?|iHn5@2;JMmG -z>^%!$JP*$Zo@elUgUGJSk;bpJBaD!^CPgF=!6VFFcS -zV8L?X#-|M1TDqtA89G2Y^AP3WDQzcGWR<%YG_hu@akDam@0;yq$xnGmC(DsVc9||o -zVT1%CMWtH){QbvW^^H>&wAV~a2b$-K&-`@t&$VpmnId!=&%lOdi&?jB6G#f7RUn|X -zvG%Gl(sn6RH_dEwR;J4A@d1~8dP1A>Y-tgG{h08|8tIYddGA`~vqvjKDz#0C?plzc -zF7K1_Qn7l|`EsP4NSEX^oTM -zr0p=i1T1{wA)tK6#~X-;2&k#Tqy`{}lgRZsXrh!!v4(nk&vV6j6Wc6Xi&hE0eALjK -z>)B8D2b9Bk$6EFqrxc?Q!oAOAXb#FSZrz6tl_QA>)qXhw+7>2$P2v(kNDy2!w{~oE -zb92+K%9ylQzCQG&KO9gq`;^Ct(@Bv;AhY=`mM&R_7$5KuF{p78d6gKiiq;1tN|^v! -zRH7+mW_~U$o_VB0f@dd=QkF>mdmQswSta8^gS;VVARRB6xj)Vkl -z36qeeO<{^J7`^nwUk|(Xl20w(RT-0ZW?z*bzw*@!(}N~_tD~Z{-B4RzUhp`DJm9(N -zD25&D{!)QS#U+ZDvSjZAO2EaZ4d?K^t0>0b78-7SR&eyZKrv1|NcrG9EX8~*P1=!qH -zUU_B_7!Soqi~-|2NqoelkW^K?lp#>GlpQ(S@YT~tx0yVDm~VPto*19nMG`&nN`ZBC -zDU2~4E=L*@rUU5`GbG`TCM9x5gs6~N{+ag}v6F#(wV`ark+ETd8yn -zz9=hRdYbzB3?ja3s13Nr8ueNwN>}Z&lvSk)T=$iU@fGHH&%>4X8I;{eyTLpGzIvkF -zzIK!(TTt$LI*0g`MT9AyF52;OloY0zEJdYI5w85ou@hc-e*TuW78U(n^+3~({P;Ab -z>j+htG -z$_9=&k}k$7jGQo)HE*s#)PPt}18QAEt)PO{0Ex1QDc>oPD07dfF1p^cV7Xi8De=9| -zFRm7zULhPZMMEDj3UlBo*65r4R+E7(~(lq)o{C4;f67(6W7nnG)-J+Tza( -zg#VhT_#VWWI@<8cssi|_Hq*r&5EDx%CDC9D@ls}N5m`D&Syk0hu|GZ}iL@b4`LsF5 -zjy&>YKZhaeb<*<=Lq+))Gr7!kJt%?;@Sc^tF%fA6qZ3F}x7R55(gC!>bs?(2;}L -zy1AKF;tjRNegl^Bw6g!ya*{0D2pj7AmOKiqtAiDrWcyZ-IKu~l*Z?Etv2xUYv)i52 -zPM$diSOy4=b`z*<;JAt1{blBng>lp7pf&&tSeK4!!77Nlz!YXpD90Ef$^50JPstN! -z-s?gVBQR{RX+4qHUTBv>@pS1a29F#w9xxpdNZc^#%E9A_q1_~tnldI%n}Ej4myP{# -zp%Jjkep3cgj2GARt-mGI_-kJ)6k}wy4>n4cqh9+q>Z$?5C&UDj4keJ6sv1ihXmae~ -zw0_8#$rwLEQB-xu#xb$2LxCx^6(rfzEN&-Z56h!;0j;HXTeFa)rc$s`NU2a!SuwiP -z31t1Uv2+66gArPfz2?kDu>ejUivp;k0%M1#NwRVieM%k$lC0PaNh-@BvQdw}PNg`$ -zS5ey$fh2Y`sq(UsJsIoe)x#K2l}6P9kt<;qi&B;rhFAL}S>GUiTAsGvLuFd=P)Y?a -zT|O#N!leBY7WsqeK|*VoGG}kxwBCsXpbV)p6k}rp?V=?hPdjC-DCxA8%xjgjKe*E+ -zEJP~kVNAM;kzpl2JO6Ha|YVCl|HqnxjsGJ@q -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 -znMdwdJ!U5acJ5Je$T6c82y -zvbm;~x-A=C*t}-x3rn7Te9;R}-@B%zaa*4FS{KAqCrC&Wx?#IWoPL2El90)Zjkq{* -zk^Hzwu_QD9k}5rP;sHYjj+s7u(2$9>m4n9ArczbIrL1D8Z_S8z9aKBW_~J>*lzV}v -zA%(0}a#2voWHODLqg>18mZs*d4ck_)UB7n4>J2NGZGCh3!n($7oAa^7QJWAajEj>P -zksIAqs`>?rBgs@s$mFDP=LwPAFm6cl7#r>FEJ&VPHzGH}q&$gZyhPca6Q^IG;;EF7 -z$qhewj7yXlk~k-J)WooEv@K7uW82aYJJK&uX~>k6%EaYqXCzZd0g}QLA8|>Nva~Nv -zzd)rY6A3Aj=WUfRY3IY>w!}!D(-CR<1uFgbC%X_#l8-yGgQ&=3lE=O+O}{|Jkan)M -gD^NRPDE~qHe;PAH+jCH182|tP07*qoM6N<$f*geH#sB~S +literal 6138 +zcmV-EKLg+bU~rWx{|!^oD*T%f{nv?5`3ezA2PqGemY#G_hYlTllF+8zzoN?H`d;lP`@EQe} +z0x4QrL?)M9TJ;1kL8+iJ+876Iy%&CjM;g`1^wlc-3`lc`pgbxGo=Ll$kZ6ei8*O^d +zYG};ZJzXwnoKJINinB~_BzBAun#nX)rYm%JtpK3ORFn&U +zBvx!ZtwD7uUE$IpB=e}Fe`4ET9ZOeQG>RUaKf-7<1|eb#qY}@Dh)=;G?sZUI8BDvg +zstJH5)1IuzyC%iZ+)eOCp5ICKM)wts!0=v6lbrK9S~M~|xS|!!+x&P+gFF@zY`GAZBndp*w;HW09>qLUws^rGPMyPQmwh>k%x~X0FPn# +zzHc-D+#|!VuMgmN4v2)tqq<6Udf|b}z@rJja{(eBHB@I_V%m}t9t|R$TB@yph=_Z?@@C^+BIb;~RJ3A^WDpc%R%eIb(ui^0r +zJcjgwnHm6c$&gksllO^u$65w>psEftnuO7VHb1TbAg2sNJ{^fEfH?M$VmyIuHJA=Z +z-~DU^!beqHeI{Wa`&7MB2dH|9q9yX6&QDR=a +z?X3BeuglB_O0JlT&;4$;ye?g>FkiS-VLtV1h57g|H_SVa|6$&=|9A7+FV(L%H~l;b +zhMH`N&NUFxIXviO_8ghpHe<=f;z#C{suG$!-6f%=t(DP%S|3 +z@40rNU&iF7m?VgX+Evk~-jLTzW)EL>*$gE;cU%?F+&cE4dG7i%_MveeCRIkJm0M5G +z#=WJfeJvYm@;)$IsUudl12|lRvdW}SQL78jo85e=4y5;XUoGqV)U;+aEAs_FwOY0l +zne~UfRy+sbh`N1hv6K;K@z!$=0-%8;Mj>$(qthK{%jlD_xU9qyp!CJRnH!HhC=ER6 +z*(aPxRjx^GML%3uMHG5?_~csr#vd^l$^gVsCHod +zj#Y2#_evgxww#_F9v+S; +z2awp3Qe}PWOUD3DwV?qFEhqgOaMV};YW1GW9tF|t6@`7!>vML{3V?iQ*cOq#@bqd9 +zibPQe@WAgl49?umzj0`4Rh=`>Rtu!x*-PGbNY38T>Vk^}m^9GBGam$#njQe<#}s;J +z#*z+>z(Zv{47Iz`mZR|C=2`(q0gxnz2xj`8L1W`-4YeN@4%Wy#qjay&t^qR+j0PNz +zD&@tWrSUw)=dUBpxBwQrsSV~^wdri>h7*&~w!z%9CQ-1z^E2rfXN?e%;6{m=S`jGaBJyHDMO9PxxEWFi~vv*M40eP +z1<<08j*NzdscvT)hhOsQD=KZl$#-iA5XySD`yPTvMj}1_uZ0`RJmiN}lv%Z2^R#s6EdE0Av|SF& +zOtk`ryA3s>kKJmEy2w(i<>WK=sxzsovJsQAlTnR1x^CKwAI*YBQva9tk8u_tD(hVx +zeVi%Pl_>G;P4J}wXu+C;W0A(l(%1%wa-0v9ZVl2Fo+kg}d=$d+R~JPeH0}U^nq;Th +zD32Ff@vl=$;f0w(U~TOBAKrat(wlP5A94~N(NMc8`dCR_@~5)0%hrdn-=4f7%UI(O +zSm5P67_nKt^WkYwP*6i_Fu1v_N9E-~(MK%pFWRceq%qQ90Zi~Cgsr774p3mddiBEZ +zdwR{?wGGgK1;5s00lWgyM~WyU%|iW*aj$m)6BujQI$0aH0=e)Js#EmoZ_ +zPj1_2%09Q#3IJ{^>lbf5YmFbQOZF6i@UuwmgYtG<*ojIEM>kt9{vtT#^Q$Mq(*%Edt?#5dg?}K%AeGl~}L90Dvb+>PigF#K6G7MwpM<+Ajuxf(W2k +zD*(8)thaU*mtOZYfNV|Zr6}dW1lXXVs*fc=UP=K(Wxf0WX#h2$HPSSdw-{p(K*0o1 +zV|M~XhFWrfG=TVyRcjH*hvf0J4?BAa68@cpqqJ*4f=k07T1QB^qUDqm10`rMp=lC>9Y2 +zjKJ<#Ta6gNBhZlfCGRT%5bbK^n+WU5FjeZ!hO0h3vjqSN=Sfo|(E=cGl=1l7?^Y-U +z5HIVKCmyl6oTKIBe|rKzwwH74S012cn~Il%39x|(1XipLQ)ytm-Qtc +zzo4wtMg=BE3BTaI1DP16@&h<;dfW^Cr?{M>_k=A^DG3nmYK0H-tGu<+5$;EPoAwpSi>l89@^X&sx}s)Z0j>+$9MoBgSH;H;z5Til&a=%g}JMCjYkD$*#ok7 +zGFfFQ-=X)!J7odr`COZaGhsrHRHlm5RZ@Cg{^&#c+vLT)QI(5N^09lk0`33NGd0gx +zQeG}i6gv2a2OTgafAm>h_}fXwK)i6cf*($Bv3okJXru?vJMn=m0FC+Q74xNQ6*eJS +zvi*{@@Vv75qMg%P<%&MbHL78WxgvF2HK$mrufRlhbQMx006QmYm41ub8(|o +z2M<*Aqg+q)ne$fR1k6QgF@2y-11aer8|CU1<$I_ +z&+YN|_pkClG-%h^2Z$PqwDK&HEhLKT_hQiu*`m;d)mQL~w+m5msZx(RC`Gm95IhV2 +zB^NxH&{U}uRuob4JJxAoGaR5}B&MZMfnsF8yd=D%uaTpw)wgAuQ +zw=PQ=eV(83P8#jP5Km{V-qU(`HO5ycGPOig(UTzJ!&v^vOTdtvX|QX{ExT!;HRb2BZomT$j?Xe8BRztI2{VPBDdP0Hxg +zH+_66b|&-ct0w77G}Bej&A>nn#!B`mB&M{2V@^e*T8}zhFRZ;HW%S8ecl@6;`x4Bv +zbI*>~aWhTxkR~y$Q@hyrLK;Yg$F6g)V<9<>Gt?(-Tur`b5)Y;p +z{ipBC<^ZS+B&0T%rmA&&e-|T;rKBv|p+)Z<$VR({FWnFxGUxQAvsmgH7xR}Mw{b6| +zM$O%Dwbo!dd$9s(3g6Qfz)~A$cppR`OdW8K`O;PUy&uPWLgGR*BS`I^Nl{4U8vl0r +zZ!oxkVDC@Y+32GJP}~$0d<>rhU|`fKML8l_%XZqf^Z68H7TUT~&&J9_=c5q28c?2W +zWy<;Wq+%F7bj=ebmnqK`x +zO59LuIay4MoQMPA&cqA7^5Z${5)S~fs +zEj*SxSm`JjS~GGBQkm(E^QSa$RF_+ +z7D=g3^^&*2s2S(?c3m#(_1M$BaIa{&Mg%v`OgcI*-1P#f{5&C?*udvxObNZmZJDY8 +zB&Bh#m@secGk$)430PSnq%J?fIJ*rX@fq`Q?z}2%%9PYE^Q)Y?4A1nBut^3-K_BOkBG?o}X9T})m|!2|II +zV-S^tF*Ma}o3`Lok!GBg)r!q0KlSzXZAg +z-J@%I*4d+4*{;<2&gYM|PVUi_MIPSoiL~%Na$I7Unkf`*aT;~BY}_XGj`XZE$Laz= +zOFz3N6+C~r?e1>42NtH;-`*Z~Mg0&h!VaaWJs`T(n9!{oAkxZqcfnJ7v~8E3-BA@Y +zHNm~Wkv-frJF(8k4W&J;U?i6x1&CPb*wUETy(>E^=5wuVcdb@#`=uyJfCrHWvrAgf +z}V$|Q5gF@Pn#HtEymMG@3}Cggz2<|_ +zdmerAA!-t$&l8KWl4a!Ky&knnCzkjWi5k-O*(5{DJ5u`3fG^UFb2a@=UYpK$-AUt# +zc;4s1Y?7DibeZ2y-JSCXrrZk?2 +zphm90?Z~74NW?qV^=U0p6Xb55(gw~sx;UJnArbl92u>Wkm^Q +z+1I1t;Q&E=083r#V5BsPMscXp@E6A3c6#914KD$tx@w%)?7Vbw#+&)`@Vh{SrV>4l +zB6kG*4qr`(KTHmeM~fO+UV<<3qwrgg%Fjk*uoE#wPE5&o=#go=m)51S9pJqBcF|I# +zE3`bw>xfaO9#2_-N1UqHDT&dDO8pQrg9hqnG^Z+~eL{-qVN`2MMx^n1SKI?myRJRZ +zaHW(UPrnO2Q@F)I)LX2y>Z-hi&b1%q^Ds>Gu~(ZJMVRasP){ccKQrx^2&jIA +zr9lLVC4T^qNYtt~P!Hr5S}>JFFm-I4kdk`;v+G|PIOoVlq&cN`mm<>StUI>x9}73U +zl+f;uR1OWj=9Vm~HiO3@a3VQ47)5Y!oJds~NR|-^r7K0G2r`y2bTmmkhY8gi6K+)J +zjt@;4a^ExSG6&8+y5Wh}5TRUGwgVQnnClpO&icDk7Oc;_w{J!t_BuK<@koJl0!664;?4rt5lQUb0ATc6Q85_#e8}&wF$aGgmCU(P+=30}#=)jcB +z!0H01Qb(*B-+TPF`2(hZvwF}gKjb6*vD5gEBWh(VF1sj{?F7f=i+Nv^orYFyIrTL= +zka8nHVaMXme{R-0f4`@XsjrWZ&u!#qI+7V~jn{y#u>egY!5G(P3Zv_KQgi}PxQPjrI$Bd2X-_Go69X$55etB^x0bq%KGqq45Qv@V +zYumH;+W;2&-U$LQag=KDTJ#(mEVL7%jh|qSbs9YGYeb4mXnk>_sNj`CnRuGx(aA`S +zxW;6}o6${ffg4U;-b6$UN;Rzj1gRB8GboWjY)POrr|;F2rzHWH253jrXBUq&92(jh +zEw1?EtopGVG#MK`T&d+VWCKR8&0YZ5h!8w +zy@Gj!LC=OFj4xgTUJp9P1dU2fu@;>mZy0eNsW?~^A^d5JHWY-nqUd8>0R*HU$rlp6 +zj4)!*qKu~rk>JLS8-D^zcdv}0PC80X<5g>$g5I<9}E*jwf2Z~Z_plOB!kpKVy +M07*qoM6N<$f_40zO#lD@ diff --git a/chrome/android/java/res_chromium_base/mipmap-xxxhdpi/app_icon.png b/chrome/android/java/res_chromium_base/mipmap-xxxhdpi/app_icon.png -index 13497911dc1373aebc6f88d8a42667cfbc22ad73..3ffe26f2cb1abaffb0edc62eca95d7ed8326cfe1 100644 +index 8139c0e139b35ed2408864819a201a281a8ca100..3ffe26f2cb1abaffb0edc62eca95d7ed8326cfe1 100644 GIT binary patch literal 22337 zcmV)kK%l>gP)^YEoq9HjWnPQ*&4bv+d2YE s+in~7?iVlf?!5D5(ZL#=$f$?-|3|lcqCxOjMgRZ+07*qoM6N<$f-R*A-~a#s -literal 14761 -zcmV;aIabDrP)yZv9CFAZha7SsWD;`!yE6I|Iq2vQZagM|eu&Gxbso9Opa7 -zxrYy#AaVl85kA3{;{BdL2$TfzIsR|4zb7wrxKA;MiY -z!lmbpAXok{Vr{tQb`2N0Rz?;IS*LuGx|fB>0~pMPPp}ABYz9bLK9zGc(mwoRMn2LZ5Sbc2%?L(a$MNFOIe_jQnV%BQa%S~+a`MBQ6D -z-R&)&Dabq16k4faGP=TIm=<6ixJrhUfRqe&pdJw*1VIp>AGm4+T?1Si!KHVH4s)NB -zp(Wv9=eyy+o)s1gdlMn^x1Q3lJ>BUE{Bd46~nR@b7{qwjo@_=+%5r+o8S^`2{Z6cINb6|Yt#C-S3L8( -znzpu`;V41KoERcOhcodLkY3EX4uFg&hU^wXP5=~fjV8Q`v#z|odQkN#m+EwI96r{PNfD*abkw5d;ic}ps_TPNAJy)&x=0`8)iX~33e0wIaX<`3`5HWWa7Uo6?(S_X -z{_)h>xBk@{Ee1QXUkG#<5ntE={i1LFXGY%O2|u)`;Nu5K-x09D+{bB;2ZR7(AP6YT -z(@;{Vfw<%4w%TQPzW&hHmI1IL#gP3%pu>px+Qf-xd8eHJvrF7XBX9DBF|^HR!7$l@ -zd>LH@94nbiCzKXwDD=p>&em-=ZCvoDXE(2!<5yzHdLhtZLHt=)7Ee3 -zc-s9|3^B4_0M5&=#rYaa3pr@{>wdp(?yV1OT=9B)whMu>jQqk5Xk(|HT`=Q@&BTwjIKdk{3c*k!F~_+TYH5`G&hYHohN-5JK9jK~4Y^6`CTye#s5< -zE_4-+y04|(EON;BIRPY95qO`!X~VUz-FxxN01PDnD|(iY6F_?Gj(*{F4^JoVn30_et$O31;*&a$p90K?xK2(WQgSvA0_{U31<{santI*hV!PqvbzZ-!LW?8v`77vz;g(MBz8B-K~z5T)ysae -z^uem}rxgOw?S2d*6GWh8h~*I~>$}eX)4ehQIeF2I7M-D`Zg%Gs7(0h2n;SXPF -z+_T*n=&n)>*om$p|LiZ`H}04V{R_ -z)ymsjjEdj2cAAKT4Cw=MXlXa$$GG2Ldc!-n0r05mE>w_;!%zURdwKNI($SuCzw`EE -zjU5G7cLpqE2Xg4}TWAbdUUS)x-hTur@!EX>DBU6u1BLv>BPQjY^_>@=uWNUm9|}j3 -zKRXh5Zg5r?D7@f;AJ2Op7?C$nL?8wN`G-w7KL6aWJ@sO9o9Fbf$@a`WtB^z3U^M&k -zPrLA^FTGee{@8+nAOew|e$pm?(eO!mr+nt0FVwfXPBASBFo6kKiX6fwqp`z#%IwSk -z{v0qoPw_xY*Al5n=W0($$tcgqzxvd(jcwY=ret*!+ah4j!eWqvVKSQbi{ShpKK~R@ -zlIO5Glsy$7YPHAx@oQgtthrr3&5#mtkj3oJiJ&!DIQ!xo{`(jJcf{&Y77oHlg{H#& -zsqZhmvnk;HOxU#VASHaVf3QEN03MJc%E6LAkiFxNpY_>68y7$PW;!0I5oy@i=KAzc -z7G2vCD7;EFywQlTLUI690Y-l!*BG~0l~LuMj#F``Spvw^TH?EjPhFp -zVW|e7b5zxlp_OUNMcs2n2P>Mht!p&{^8CTvl&hH)nM2Fu(1Y$)1 -z=GcZfW5IAh4()ymRB`%K$A9X^@peC8b0|YAfSvirOg*u%VB}e^b#|)0Loy@-ETIS= -z5ehLP$YTGW(@$%_(krKadQSDExD185=KVJBQmJZjM7Q-2~2pplSE%v)c-8}2^ -zTaI?<2L@;bP~;ywc4mRM_{3*ocXl#>L?Xypq1+BqLB(S(d1ln8;|n81(8mz{>iaLh -z`%kStF&I*1ZAd^e80tGz^n(>*<_zy(b7=0w;AxlMd6&a{V1QX5<@+zV?%7!_{`}8a -z3@}Iqz{K4m;E!4%?o%to%vr$QoPHz&ZPwt=ocY{1aAi=00g5JY&I-jMhhSJjA9>cpm7^yY_D2;E{b7AB{q94*tsFI~kcEX>iP|k>IrHPrDBCLI{W9AK%LRvNtMT5^p~6a!wQMMZhXId$UZh7y8QU4dFkC{aB6-23`^KqmS!`(N{irRN1@ -z{v;?!@?i84Vbi&znWB_P#oA=?r+XVnZKb##QhN6r4q -zL!a!+Dj@nQ`|scDlkXie&9tXDwLx!8dG7KgLDI3JhAVpqhD@4wNu6`VR -zrJubym==ReX8f^W^pt|WsshvpncoG#ecin^*9G0fZ(&425D;#!!@8BrK_U-A8wBWX -z5HzroU)N_6-D;%Bfgclr)K_Kr5iJJ>0mMotG=K%rZT%P$#IpMs6a@COXAa6xG0 -zfbIgZ01KhWtV93?gizU>A_TxPLK_YuNHh7_>|Oxi5MY@A43re=C@=P)xX=Z!TZhX< -z$afhqP3~ImYxkMh=QGgJX@VgD0w^k1QIz!6O>w~X-4V%!dq)B4odBqpY~q;P$eD@E -zU|4KgmI1>GnV?{i*VVb+acnL%=iarwL1i(ScR( -zz6EGr02;_W2qZjU0ssMm==ncg07?Ytf<%u9Y?e|20jNrHXa&GvD+IOz&=AD<5rvpE -zwglt$U&mB=FuX#COC$6Kh9%LoFO2%8Aa*wduw$A;03;^@qC-M{W&>JoT^AA@T+RMpghtcqKr9BK~7he;x#(oPy=A`}I%0a@-xN3K$2|3s5TAf7ImTi!Qj~ -z&Fulh<$*Jx37~DyW^CEG2@r0TR&;3YaV4R-JqS`l07sB9lGOZB(kb$S)n`NsM~H}HQkCygB#6CVP-F#S -zyKIA^$W9<=q#MKtJlHBg2Rrcv;JxOK<(J9g -zNq=KFAgUo={q`J$EFDA|hzTrQ(A;HU%^lGY$E^Z=WQ91nln*vrF>7iuzVL|=7*U}Q -zr~z_wyNP+r_hIv{Fi7YTc0;kLhd4yhmWe?mVA~_**#!WOtPI>kU?mcU%Gi-sM*UGh -z^cZ^RqMPU>1c(ra@UiS9h6365DdBW9et69Otx)n+z*z*zldQ|*k1UtC?(#91GRiZchhIDE -z!UC(Mw;!_qpUh9cH23^CN>d)?Wzz{NJ-etB(}4=Ei8giH-{1oY -zH%JJ(RgJJk++#-oidq%oh$fpya*7~_U81{WXvux59YffpCHz#n!&6T)6+Aw)N>Hj$M$m}0jIfCOyI -zq)4yn&^6oE*kS=FipkE|-3Hr&j1^Ku7XoOq{rPWRIPxmH3P7spGXana9f14zv%WHT -z#^>+dVwgB+=o+xQW)!u6TorfH2m<& -zY7}_|l7T6KwYvyQw-VOW5?cMKW&g5#V0txU#u&!5;S5bfQV50^FTdN0T}=d`nq-^& -z6gdM>Uzs?9WCR6`pa~6{Mi2*rC~kJ=WU@PAs|8UkO(~8Yb7_RTesa;M^()?NQO&T~ -zTN^|NvGnQv+MO%EfT9U^BSpA`fmLtLfhoKop@CRH9=L+Qnhwof3cw9k%c4lZ3Za*? -z0X8~u-pnF=UCXtlJ1c2a9eiM522Y2qd~hz;LT7;M5Suihz?@6|y?; -zg>x$K*)z(~TkP5gJhx0>$rb`1BJWQG%pA+ObcV#R67(8N*7>k>Ll8pufCNPoKsBv^ -zE;MMmfKUQJl6Hnu$nNSs=baK!O|@?MYrcNokdp!UlWB%2N&DlO{kdO`8GrVVR$CH% -z0+%lF!J@ecgan8*wMmXZ5Nf_p5biQ10#3>baWVrkvlCzaWCbocbr5=k_8{=o`-J%$ -zMA|lt5dj~Y%(#4pM1cpr!m>>PEcw6>;r2q2w~Oq$CZM?l1Sqv;6$Ex5e6rbH-I(Bh -zf*|0v$9_BY*++h}({6_QOaONC`}MolUL*65_$^W29ple|7OY;f1Q4F?K7i46wMUy8 -zsB4K-vm0W2r&f#z7_3A<&H_-L{|o1o;ftN -zWmFWh<2L*MF886y=Y|lvs-CGgtK0{6M!|vbu@Hjr)StdJ@xL!Vw5PW=h?22CSN?k8 -zW!@pjK8P5kE(ToyjkW7hyLnHy{SgGP)>8#Qtd>hP2v;$Pv>u)-^j-u?07D9Wxa+&) -z9G5z`HWL2unn1gMAd}xlNgnXy^Cd==GZGe;rI-mEqNiN(8Xb -zLCi`RE|9ATBt*Q1*wG4U=)`STkHUm%4-#QhJ#gEr8vNljkUs?_<-36&oi8zdFe4Ef -z+a=~K3&7tZ`*!2QmFobZD*+IoX@a=pf=3)x(cv`&z+fv&!1iCnE7vg -zSt#;nLiUdp!HpM4jILlL!pf}%*4Hw0-IG$Y%21%xvb!_kXAaJNkot|CBaNm-%lvLNpM -z-dN~@5_CcPA7DO480CrR=Ui@v}Q9!QLVT -zX5gKd?>*(=JHNlKH#mX=e*&)f{toaQEbv -zT!l&miHX9*AQ{57mkm!y{-6om@mgk+U!hCDx6dKmd@hHO$_^fl@n1`HS%Ks9=8Pma;N|f2VLan -z>$;YAhJix^!vaQ6IttBu-vsLdBn3bmnf92KFa($-$npcC&@RKVB7l%VeDM>boQ7O# -zoj;SZzcb$2K$u=lIAIJU9*#T0jhB}Bp}C4c{b^?ywirZ&$P#7umH~xlwjf*N1Q2O} -zs|XZlRcQ860^k44(1hC?Zg@&Vdmsaj3E+d97~k<3E8(_@MH|A{vrmVnyL#QMa&paT -z?1Y))5I&|_B(P>t?0)Qz-<~%2x%+FK`T)H*r#ucFH)~8fP7$vhb_90SY=glJVhNBc -zSS+FJj&eg}dwin<+$Dm@DnJO~($hyG5uSRVvXuOGKk)Q2fiImR5f4+U-KcF2LU*}A -z2ivS7HoMz>9AchZWQ?VG!b@drLF(;c@E9Gs^|8oh=a$ -zog5JR=fCWkY5F_`6dhtS4%KRcM;0WERo{!xA{+ -zsOea>Xc3^fK~kj}R-_lOKZ5{<5`hF{5G=eXbQ?HnYC*z>S(a>}EYJQn7S|9yJ%i#t -zR5PNS@ct&FoAi{tow2!{uvzU_xV$B&MUfxs%1Kp#A)_XENE5~B%8m>`cNbvDh{0&s -z(`s8DFzi#dH9*)T0dtQ?$O_`b$;Am@S~YjQ0B1eQE2g5AbL@*`dVnl@tmT5%1-xGqmf{A)Qi=H$~b_f;y -zmg$`}#0;Ep@_EHkRUml*6b(P7Qc+7qdSJnYv6ChNY=R{N3|j~+qs|{zRe%W^OiVwr -z5b>~f7oj6Kz{$^jPnPxoux<|_9x96fW)l$96GS$X6y*W3$*y9+VDz}7D*zl+1t6#> -z8a%2B5lD{^ED4lVRm0^LP_T*5sv)+&f+PU|jvVGezB|6omu{uQjQlp1Zb`H!3n(oR -z084;vN|5M7!gK%Th9OmBhXA0IDuC{(7>ZaR9aX_F2@|GG17sM?vPX){(iSDdemcwo -zCXOjcNQgDHl%?c%#_C#1NTAAM7nrRG!ePH`I{Il@)LU4N -zqCrJqNHC#W2n3Mio}-lr+@tMrBjfx3`Zl1|j}(wjTbR0*nmY+i?Syz3R78-LnXw0; -zCU@rp^K8_Zf#A4IM}bk6VDH%q;t(AT&>L6!|IH3LpSi -zAqF5U2^3Wfh1V@0A;C~0P>nDMC@Rn$c1O~{;U=etBpm@lB6wXI0M1B}OO1+BT?Qph -zg9if?hAA+9`cZ%kL$XvofdmT%nBjE^BtmBxj^J!1zd~n-9pB>3%$b$_6?DN~=RsIv -z5DYVKAg=g22ofY4Mn4UKIJ0Z-Om1 -z7y}q#6BspdB1i@x!2qjB;h1wCu;kBykpx1D01g(&Aw%eX40Mne)#Iu`Y}uWTv|yTW -zDDP<;YVp9(l&&!n!D0pxWu(}{F5z>o01jX?9K-;JDS@itW1+zS+cbthY#|W}+z!Og -zX7Vc(dYo+{QWZd&9F(wFCGQjjpfLxK0SHSC6Q@rDvDvdG)Zq&|oVdd3&cl%W3PpL0 -zLt&Y0+4KUWXhv{c_kId_v#?E9NN-uB=qDg`Z2i3A+ZWV#`y9WcnUB~VD$JS!Bz+i#Uq5BZ( -z`5Wo*BEQ1X)eJ&>GD -zaKxm^ShOa78>4B!sYh}evVMAbb^4JET_C~p(iVi~P8<0dsX?;D_RT9gVk-bRsS429 -zS|2uo{*FxDI3-*K*wN~OX~q}vIa3%!DG)!y$S6>J{mkiEwB8zHn!! -z#cnK6^=2%VxBh%w3P8pYY^{0LxU~qwB(i{MQ?AW_%eMSpF0!>Caw$}v{YzY89HktdG`03}=$EPxelpw*{KcT5JdH|Mr -zqTf}sdIJC}stVv>DuA_X!#lNLMkXU<5f(eV2J!M462gm@_M0AD>trj_`N{=-$L -z%Y^5Hbp!?WwlYX_W%LtmhS6bcU;B1zpH%>a!=~YHScnWq&?LOI$%RBXVJzdciJT=_ -z-^Q7fB#s}=NQ5o*77X%cuJuu9uCJdT4u{Qy?EyF{tOL=yXX6570oK=fP*Z0y65y+| -z7}e#RHRK;%!T9nlMj~w9<402m0Mawm`qY-Or3XM%1u#Ec -z_{a_!@-Z?H92L7;32$u>jyolPe7;1UJ98fn%Xb4mIbWi@kdX-QZR!N;MPL$XesyE& -z@P*psqBozcjj8}RNCDUtz~|c+>TKKdmLgFG5k3}@fdw_1{#i>6xt#IZ -zvVC}cSv{ss9u0q(`=0!1(v!4I%zgf^Z$;Z5Cm9nGg8*m%TmbR_6agst?Co1#$txN< -z0$B#H4$Pipbxlo^=_8(5F7R#*K{5^r1a)m`?%LHkqy)XjOG{cX=et~*ul#nNWd@Or2%ErrTLd0`SBEczUZb*zam7rDd%s|H%?@TyvYXLV -zUtMz6WQiZ2CvorRt**brewf7>?S2b?d8rYL)&&p>2QlNQVX#=ss#mrf;Q*fc+s$u6 -z@iQ3#5EPQNL6`n&=^e#Gr=E>0g(kYQ`$fl^7+uZ>o%Nd92{jGCj^^$I=^8q^k0t61 -zanIoty2dE<5Q_2`gNwRfS6E#Ej30t7vJ(ytHG9JN*Su!bwMj@zVptjDtdl09Gsq6) -z&#dgft!Bk5zq)GXPm{7g3OW>$tpb}D{p+8{T>6`{i3G9{mIU_f1OB?awyijWt2|!Wt|{ -zFq@b%wj6~;1+Zk6kYAy#rJ?T47apvMus};^`$hQm# -z?_l^10m%|zfS4i80FIqJ6wq`qX9@Wg{B13P|2*)sx1;Tk3WdHC0HXSUaG<@#-@N&q -z2XGicO28LnEZjD=ZUg*NgodSk+XjiJ1ZVurub2@PEoOUeV26Ti3q_nz~$^eML -zEKyn@Fs`~1AtSpE=woJluxj4DMj#Lb5RS4x==&Z(MN}0CEq>|;Pn)4u3x^pj3HU;c -zje8Fa!Zh6enhXDVU&oqV0{$@i7~P^uJOZEu -zASI*~z>H}_VMvhy=M^OV=4bPXKmYKBc=jjN3gFxft18gZSliLCY0(2<#^DGl(Uo0W -ze8BP@wBH(OxZ}TWJn)taudLSg|0cQ~zzG`YExPXA)k0Xd9e8nt#GhaF;djq<;K_wy -zEZZj0?4vG`Nok(~N-94w6BrVbB}NU&M^)t@m{xX?pP8{~_56EU8~1cNto}GcPmcVt -zHt0Ysdg}X6UUbB%SGx*IbR5R8Bw&SsAQ&A%V0*KGCa^yUf`EJ%P~c{GJ%C4J=vp^z -zO_LF_fM6K#g@AxTkdk0ZMmQ9J5$3M%%n}T!Gtj7q?2u68mjDwW8D#l!+|&v1hd6u4 -zuh8Ds68^^@zWFqOP_+F?wgM261F6sfxB=v=!C3L^Z#?$-QPVHJ9z=+b9EiFD3{Z4t -z`REzn>Vp;Rgp>xDp&X7Pza_z7fTj9F3@HK0CZrX{^s$AQa^!FX!r4WBmJ*BKeDbyj -ze*NXg0d%PF+cqdU0q9Ujp$dc!#M}S;zh^Ev;?%Dd6jv4_E^?4EnOZ9$VL>TI@tgpb -z_KhR}wz>tw46-D=!otLHLlDd^@~cg64Q-Fye%

J!rK3QGx#I0T9Oqh0H*QzxMqn -ze$CQEEOJo%>=jtiiq)!)`g6+Xt5QI0i$RG)f?>%pW=yUGpo2NP$Zwej7QXiIF9Q3y -z7G-~=3Wfd^0IP_p0*jye@!Rc9J2xX5Ir1mZDrQJFKt#$_5&!{J3zQ5bz!Fj_%Vb%o -zEGCQ@S&6WbeMcVe-Lqx=Gk^c(5-7eoc>iPtka`t35Nlrf<2!^wd{Gp%^&;I=vKex#ryY`<#1xTq1m>(6u<|WT;YuLKv -zNoIN2l3qp9U}ih}Ljthv4NCz?TU3OPS|1CNEsPscg7VT*m@>P_&yule&B8~Q&40c& -zLI955-x&g_L8?$y0Ko$>_rA~nCFrYf%Vqn6vOX%cm|#f&6NnL+{Xt-6u)3ERfEB>e -zM-D+C%-KVJg_h<$E%)Ad#e-1%im^Wmhgtxv!cx&w1jQ?g -z>F9qK-oVCDUbTqY)su0YVpF7iv3*u4I| -z7v}!wo(~kSqP;&uAzcDs6*8gFSr|Gfb;11{f+D{PGdlaH -zQ2@?Wpk~RFTXwIR^Ji%pInq03e>Koz2>}K{^#G9eJ_(jR7Ra*vm@#D-{9(>2@|$KD -z%NM?U*YX7~?o815vWk?Tp?^Rs#DUnh;<*p2r+;#4Uh&WoM3l*cs{YUZU`R6zu#yKD -zl38s7VxTllBG*AfdoaNJ!{gwAuc85vnK!8=&S5*Ky2QYPfRi9>mM*6XL?~eLEe*e6m -zf0R41P(~nul -z429Q|2g%t%{&2{T#dDwd{nPjVVnGl2ZTl0BwmxYVKc5<>%vSHk65I73{aY3Oc`5(qWpYVGV{rAnFe-zxMI=m*MIVssN|@8f9yG5nI-^^ -zKP6U`z%&D|{o$M&_U&D_D$7Nn$|2idBD25p`BH7|r0&n^cR<3ehcRv35cPJqrj}D}%|emO3}DUo!W1-kkS`SBTQX(*0 -zV9SrA$B%_S#2HKe&h}<3o%hV||9R)PUWu&w_N3S0SktVl00e;JRRRUtzVf9S)_C=x -zp%Xu*xeEmmWeDjN5;wkf_Gbp9p#&fymG_rc7{`t;LDk?=7*^&HpCzNYrB=TB?>oQ! -z%!9vtJ7V!8-g2ixRtmsb1hHtSS<=wDd(G=r<4>5adrI<2Xak$@y>EP#|5qYl31Zpv -zCs>;B>IP0dY8Zm1$ROg|1FrgAH4P8_=9(|R_r_D30YuxLP&E0|rDcKifD;bN>8`r#3XA>Vjhs@7eQ2|n~1hI{fWdvl+qJPdCG<|ufIWK#% -zk{MfIX@OY+lEG|Za1n6)3TO?LR>EOk1NKkEhHOr4nM2Dk3s*uHu3V=oLH -zJG0zVP;#WEdjX>4iIVQ@ulD<}WkOk>uFn%jx^TqEN`%aTPkfdVzV;SuUAOd=-+%WL -zH|*ZFzBw}M$8K*(u+E`##*AeLYvNNIb2W(iBJ{8+|;(;O>dLJZiY&6b9`_QiAmb<2y7+`26C -zmH0OCRTwHPr)D?T1EkOw#Du!1ZqwVlYZgBAOmSuPJ}N9dP8TjAG^8fED2@{!^#LpO{_v7i~)sEuoKMsQR%u1Fr!=%#RBU9Ja6 -z?U{nu-oP|N{&)WI&1YWw^{n%Et$zN2&c^L#zYftDj=MbpHTku;`wFO&+Jfv|7U-eK$P_X%bx8HQid_5IuF&u2O(^xe~=aMwV}1K -zHn?`#+`rs+^OZNf`}z~B3?tOz?^OisD?)M4=~dU90Qy%9GL8^rln|_)t6thz^Ugz0 -zy7Th4c=F073n2sK~e(D>gXd00Uu61ZUn-nNb9~GUwbPW>$W#8 -ze&eY>+6({?H)q1}LsqBvtZpYcj -zRbo(S5ey6c2Fna16!dq+zK-U)9qZnEa_)0~duLb8iZ**08J3;ZRmP9J8uooL#D{&& -z31FbvB8nD5oY3un1{FoaCKpXS>2pU{jG6JV{F31(yYh;J(DR_{-Y!8f+tw%cNw02x -zNR{!4C0Gf7%^*e&l9+YuNOT0b&kvF|!U2RrLHK=b+}2e0?&h^i{=0DAzt`4nS=$~n -zL$Sk%6E^V^Y*Ne#Ad`fkBEATe5bO}pb**~ZIYWm}I%is0)ufa1N-9p&y~QpPZjkPQ -zIB*poJ(-==u|`rYgIeGNAsJ@49T(0T2B9DPfp*LcX_+vL(EbR*GQtS?eP&DRo~3)X -zY*@7J{ntNO{r=oKGZZr84-Zwu65h;I;^ze5ECdlN2DoBBL;IgXfE}eHjxMe`a^~>C -zBafNjE~}pE$uFDk^%j(p<^do;LIaZy0Ro5s1}w|Ov}zZoj32B{b%`Z57?9G0l$Ht! -z%QCtMZ<%J-s!cc)=xlFoSkc_DbIpzqSAMvD<-5E0Zd=oCnr3vrW5prA5$CgQa~z1D -z6F_G72qKOcG>2*sBLrJqAYJ!pd4osimk&O&v~cjms=|tqLtWmIa=7!$^K^G5>2mOC -z)2j=hYZ_U?Bi!)9AZZFK$kGatDT4-wf<`#pX!rw-K3`jlucNi8t)aet?~XO~J8Cz# -zHSVhMnW2!3AgTS?N=SS=tT?2X4jw-zfNT&#LNVB($GHjzA&5AC7ex!wasN|nAT~S4 -z4gw<^+*qm6nhoU*+2F-2MZLv{o7dtv0>li -zY;71$$O#}Ph6J8oIDC)3*A~|Q20KL}QA7p$iS#)EvbR& +zi1*;6ZQBs&zJSNkxr}4%{?%#~G)>c;2Vot;^?^Co<@&a;TMq%l4C=a$WZPY0-5ys} +z6~mQ>j^#B%5Qtb50^Q~M{ICP<{3-=!J;W6dU+EVYk6Xfagk*=Xoj)GDDuGX$}_(>q(Ln+y^p| +zo(~db&O+JS+XF0=kuqE?7F|)8XSaWe;0Bk6-gZbkrD5O^CQePX3r|c3Pl}>QY`C*c +zdshJ-)zxiZ;1S|T0x?=#(%`g6UD0}r6P#b6?(TxL{G~+#E$-Ca6{`zQ4JfWbt26Je +zd3()wdOGvxPBKaEy>rg@?O)oGCYiPOS$l0c=Z$WiamlPRvIe|4vi6`4AI=)KVm>T; +z_@_&=|Mul(v7+q1f9(%t_(NNMCI{Hw2WtzCxrpn8Px%}>Np**s+VDb +zF>~O1w`31rIS+s(u*=-&D8oPd2o8ep0pClt_9N@lDa0{T;jH4ciKI+AU7|BkX)?~> +z{Y17Bj9gw4%y>yW6NFNvWMpKd0!*ML02iWq*3gxc0Cs@TiH7eDH%9G#FBjB0@6pzz +zQFI0+pGcrHP?1s{L2(8H9G4$eo{VFpSLjVVsf}=JQkt5Gs-PZ-wDv*hJcq~{x_lCT +z7NJd~Oex~%iBz2Q1e!Go10fenmTE%FXpavZoE{&(aOPBrlr_Pz5#>o|JY~o~hOV54 +zpAokj9350ieg{cRqIoN*^#>H-T$DJQh#!XAS5-kDP-zJIfgg+}=wrf0Sc&$~74xc} +zJGKq;22egVU!Wt<2|$rZiyZ6>M#g0ImE4}d7Y>|;XkYEbe>TYM|L(1p(n5L@vj(-P +zR=+n!@>URvl*}7JC{h*VOsXT8TcP5qPAHzQNBkrLACWGQ%nsJ0y)oVjnM0OM!L6V< +zLZVteH3w$0$RSx^Pym5UcUGuXx(KF +z29qprf@%Z_**Za5#MW)LYDXb2Fh}jZr@ABHPf`=y?BSm*HQ+4&{6M2cNlL#Fn(kOY +zqeXDc`3vO%*Ov-zij?%zGYj6m)zF;^rA7NQ2fcf%(q@q&pHaM?BpWBNf7BL+ptK3T +z$s{-9?9pvez;Or=j1B+fqiU8~Bvs{9$;+y$bps=r7IXAAWk!9qikq66nx5JJ^-&Iu +z`X)E%`}!#622wjnP^!q4^}&Aa7{0Gl9_sqw`tFc6jb#pAT8PgIln72BpJ8xH&5UUl +z)5ilPfo%*b<#Cb1V{F71n^-_&g3O*GQ$Y>`epYmqqE?_=vv%JX2O7%b#svAx1GRg< +zI1rzqT1BQx#Pu;T*;Gf+YtvZ)l}ET^b?|*OuDKfs#QHPt +zfIgw6N}TwGWe)zZ&;ZCYdBGG^kSUdNV4pXESX?Y6yzJm)vdgM&^=j?@*3cBTyk}X% +zK6x3REk0v>)*Q!V9}zGSOQVXFRhg5$JZWu*HL^c+Zp?)<%3q^ipgMtNA=;}wzL7y0 +zT1hZUPYfzVXFb?Xie`Ut0w%{^ukKRgk5TX&Ct&4RZh|CWf(0`#DnoJFxFQEvYE-kL +zL5zamIDy;*2!z^Az~LJ2$ek+qP2{H;CrE2EtP!vvTPYGLk!suOTtByqA1K((2~F4} +zyfl*-(+Mb%q8q^V!}sb^Dplu~f=I2bAuC@s05As28usxkDJdznrFDXdF`d9&J4=84KIG!ebdgp&^S%?|1e8a)jLYfyfI7{^w&s*Ti$m+djqQWqm{Ep4{|1<0jeyFK +zW7{S8Hm=J1k;p*tL3WQRA@ji+i^v9jR0y>Y0aWsVs;m?PXO7hR+1<&tB>}~!-^*8; +z53~ek%m?f!ZPZC>rPxU~K^zR=r{pPBy_(>1hWeD+Og_M=GG(HS!!(W=Y2^A6@_x%| +zTLq3~=7TJynK^=`7M3#gN^ymEj)L>6)Cb_lJ{Wmi3>8XFP7YEbV2(pHPqm4O-a)wHU_Y?V+{p~~fb +z3&d#;(Iv3jo0OE4ZB(DKG&4Vt+OmIBQH4@@3zTm{tc^Ab^{Ece?D_DPU-n}6y0!vuL$4x9sy@zti^W8NW_tUPw0^JRZ)ruPc5O`=SBKMfARHfJWj +zgCF0%=xnVR>L8Wtj`aX*0e-?q4u|)3ngQcXvVz{eJVFUt9oha~n*1^~Z5qF2J?x +z$}_D|Z~#Vsc$#G2Il~K!wiM$4u9HQf?nIO87ajBYS8e^xzwqOu{yUyK=)Y<~k^i!Z +z`~2sP+v9J4-|m3n|HFn%-yisAroMl~zwFyz@Moh}OR#>VuQvY?3w416!D=NI$D-Bo +z$)2CUm}9T|zq}gYwqpY(7P$iaPGRr8Dd +zTlSUihWd7gx13>KnLIdAD +zjsPd{STdZImX-#Fl2Ym>IgUFj$#1G88o5kd@IuXjY6HMI(mLL^8@EBMCdR&d +zCcW85p?|QM5HgdI~={!UWgxhVM1f^VtvXZ=aa{ +z`qpVohDn2v!;%J-Nd3W8!X;O@VoF1QR9O@WaRn8*BGvgJL)rkIt0@uc1Spodo(5Ss +ztplM(?GK9F0hG39c72wd{y3^nh!tMjd>=_B0OdxzdVW#F72_8__XG{9O&WwCE=pz` +ztR$@uDUw-d7mWY$$!IwMWl^W{et;jL&&ZJ +zr~~go^=H_WeX9Z9Xj!+1c9tvkiR9Ri{NB3>K3MmgtBYca8k8Eb1E|F>;s4c;S?8TK +zC_kFuR}*5VQ6I{jUa~u_JjUk1{IRQP&{-D@$_EXSErm(8=LERvS)`+?P=8qby7aD( +zhT8|WqhwJuxJ9D&cn#?cV>@*=D;p6Y%32?-uKm;-!d<_@wHxM34Y3=7@v%O +z^f%N;w_M9?woJHnz}|QF6R-7V9sn$>%d=o%_x-c|f%-q%ANoGD`fh-qh=KDYKR{EK8T$mi!NNY&qROww}9u8VI;x` +z-qIb)_UQQkrUb>QuROB-*|OtDOg(h4yc~ezlVz6tn&_|I0#JnPB*Si<4>%r)F#Cd( +z7w5w!z?HStCs_?T^=x4uyw2zo0{t=3-?k#;RT|_Qa?RM2kqE1A4Tql((02c@|G(Qc +zFZQ+%UMI++==a}hbbp(ccl%D8m0{PZLB4D5oz)#dT%QjJ=K#UA=Sl-y&Sm#}d|i10 +zKMGsrY^^dx0;qw(B*WfPgM8x`e|asHAYd9T5#f{|c!WLy1_da$-`EY~bznL@A?Cn~ +z{UH}agS?mr6u$J`qrkAH1hFC_b2XfD)D +zbxzdvk$>T5>{_`k7lY;=ikblJ4n{15gmrxYrf +zR#&COh3W$ROAWwUfw)Eoq?2XQSHCPOLC?Rjg`XTPeuvN=cR9e~6-PH)7_N(VEcCsh +zbbxSOpf%(V)#Vn5iZ%ON<)8qW1UPcT@5Ih~WNvbRMaz$DNk~Yjr>;*A^`c}POnvuP +z{$V&kz2Q?2>Q!JzC&XKduK;5WxdFXqS1mYTYioqt8~_-WT7d2VmBJRmlpCO)L%>g2 +zG(ri~C_whtuaug#zX6-z?PuTyhJPPy#iE6)<*=8y$da +zQc&Lt7Q@sWAjAWBHLV-Kc@AJ>eA2W)l>F@huQ~wcgY~V^x(f6s2ap^9UQ^#;4!}Mk +z;{dkIIDnM|*GEqq`+;x+pyh{kfUq|J{*dEt02{KXonwFFo5=w@a04_zFqa!3HPj6d +z$5BXlhq?+8-s3@Gk4;?_>Q)L~1H-OU}0J3N~7Q##+Y}Y|o)&c4(%W^{x$H!Sm +zp+JfZ>TCz#R=G%Lf$?Uq0e$3a6SwYnmjf*L=-_H#7>XuUAif&&rzBV&5K#Al1`AiRXl?2xvIDYdp +zD&U+hi((m8Q=e-x2!YO +z;4+dx-(Kx52YB+;%})Wt9E?|bfs{IcGJ@W-nsk+7dQZAQ8N@@M*M%53y0z#eDd9Y +z$V8a7Bscs}JSM`h6^;{ObI{ +zLgZSNw1)anj0)r2En%M{oO_d*oCVRR~#*}@Y@g%=Ha0XEPBuuXxjQG>3Uf530&Y})O<<+$_S-@5`;U~Y&GQ3a0sivw^uE~~-l +z2f|DxrBFB7fC-!ZJSG_~dGyD5?JM`KN1yS=wx?wtI2-N#Y=sW@N(}b`Q3?$%$Hf=v +zb>A2Fy9xZ1MQx}-I9Lp2qQ6JfAKHW^U*D^4giv3LR3%Vd3Jul*pafA0?Rw>s0RWZT +z?B1vCjrncf`@4z$Va}&NxbummTgE*z0N7;_%+5Puam)ksch@zNL +zgvN0fsP~dzny+J*UTyh625SJoHu~PeI=~-){1K-qLFw}Byz3HS+6&ezhd6c=p$;+f +zOe&67qd#o^hed0ES*VzlK>1d%bb=D|Vc!T~S7>lDtlzi|Gu`L_SIs`=Kk|z-dfDg_ +zMRCkfANNLo*tA!FoUTlQrK_Wman=dx033{AS18w`FcH4w_786YpxkIv-#O;Dd#1kc +z-L;8RKRDv`=nwPVGwIELNfTU_C_vgips^!LHSKaUiqB|^AUh9nb>hCH$3W4AiM*q49y^TgWwVOQIfJb7OH +z!nNQh|8FFi%@8#+G5iy$Ve)`__3H7hV9p0O==1RE32wdx-de>K;P#T@&K_8wf}bIh +z^BJj+yZL_uwE_$*hpqsJK5i>v9+O=Fi7==@(>g;MNMpG!>whmt2|P*iBb#yGdy%?s_TLOkPKSR+6l +zWA||7$&>H78vNEmgu_2s7;Oyxug(CdbHKK403-`~9)Pw|G{*HCLpjvFHvN6IQ`EjX +zlLy>FMPxkX19{esQy#6ylx+X1H61ba +zkgI7BZRv)H!9q&psM{b{WKQt?NDqX8Yv&#VfLu?1tmxlVs5<4(2TaY5KRbR0u1=$C%> +zMD!msYuU{xehK|a=ln1G{}IefdIRVWXK-n5-TEi?XwRB}mu$wnM-CshRVT1tQ3iM+ +zqrxeMPTvnu!>rq4SHMuM#s9y0!2$d;Sl)}yR7U!!oWqvRKmCJW@G~;{djb5^{+n?L +zuCfA=-Jig4iB24j-W(?hhUb!Dy;!!}s)~B$Y~JI;&!qm0u9rP&g)e?T6IhhuR|fb0 +z2>oI7FWEuXOf^X6DfxIt4m{4Qw}48C-0lX*ZO{Uu{#>^$c75VY^IbOd`g8aO0O(Js +z^`FNxvM21R*ET;Z$?tJY +zeiiytnc%l4f7)n`z^t%zh^9-oUHvvat~=Mm4xqMAINuS-_1`Dg*UUSzC(L*0kQ>j1 +zAOl9i$uF)y1ZMT=uaYJLq(SP=pz1PhAE*o$Jo3YH6$?<~2mn4Pn@)FVOnki-{ki!; +z?fhi&i^$LDAB{YKw?MEm%+-nNEf7nNuxYQ)5mX1?OBmpLG4X}@E*X5od3XR%9eii> +zx4>UnR-pe+w2u0UjQ);TUG!k|8@--gqA_LnJbMg`R +z$e*Hrw82jYfK>(!VtMw0Mck2p8y_T6JML4kJKi; +z<$mhJrMKk%Y<&QHN>^bQ?Bofc!4sPM4Hy&wGg3HgN^6Ni}i<}ZP0{rRTf +z10ddY$mc(B=-0ylwrcom_3sD?TY6jOCl03P0(?^pRH$|LYtAdLgxHw(Wlto&JuTUj`+n5u5AM(C +zU!D%Yo8W)77iBOv3|X|v<#&GkkO5&inD=E*-y`!re-P9M*iz +z4$LGevM8xg-jK&jH#B3+B))Ur-Lq0ne8DtiI4g-gKN9`R^{B1VyaiYsi1IS3t$evVvE*^MYXUzJ_LWbIcu@p7>D+*=#9aP$sgqX!K%A#2^pV{=1Ti(0X +zfYL<&5P>L{2>%g)YDQe;p2^S)(V8>oyXB#ut9Ta;8Nx5c>~O@YiLzV@llp`Y5G +z(X}Hdy`|JAC3Aj@vZPf8Wd`Nn7f2($ws+`$On4g_tiuLSd;jMFyDkF-%J$Av!VLJ +zqcY~mS01VRJLgFMbsTO1yX>r{t*&xjXWx +z9ixBA2cYFLDb8(iPN$)hc9-()VPlWH>h8pM-UkQPw(ivVWVSj8Mlz(;J~8r6Pv<1X +zsx+FcEY-@9j=rX?x?b7E$fGeUd#Z|0u-L`rR%+4<-tQU*U~NEMr=mImi)7*i&02Q3 +zqN{O&*podq@Yk0edk_r~~geP7ph?C%}KB-4 +z-!8|_(Hii6d4V$E1Ub#mKDl80rguCAS|fY!R9h0 +zrA>R+J=ABhHOPL|-7|(Gkg>CqBaJHO7Yx{#?D8HJs;o_uQ5~Wa)RoeBev8f{yFno` +zvZs5Lp7Z-%*$o3N@)_2p&X3PH9QY}B#=?oi7@IGRO)IiN&F_H;JiZ`tA8Q>Ckuv%J|XazOzk=VuTE4!FxdCXPylI7h%XYAJ!EVw^6I +zo*hSp2-oRFH@`qd(r$7zrK#8`Qa +zl5G=o0(OxyIS%9nq(p-!Z2Kfu65mBDesR3Sd4WZFkh95W#AG*9x;oR8_6E-KdO7Ob +zPmFQYiZN~j?i!*(q$S6Vq>$3$(%YAfskj8$$exJ$V`i@$ZG9Fk_DH=Z; +z+t|~ut39#p1k4GvE>b4P>>mP$%#v%hfz%6{<2L9&ZsQBc4UFtrzEQtN-z&O<^02st +zK^9UT`OH#8>ejb7(9F^E0&$2?$+1p}>Po~3+y)oi_(s|11}5?KLE(YCX#u|_6J5EP +zbGffyR+cAon56{ZH@AYG7vPCj6i(FJfC;i?O=X;}b?gD2xy{1UJzKhA`vB-Dv{gmy3g+9=W`5zB!hA^Abj5kQT4KeTGDB+EV{d;a+mivKM7a&n84 +z&N>|tUw&szgj&{>1!o8{>G)kU>Z5qcM3;+d%cr!(g~gqs!|s}MQ!-YIY1Mc^~yOZB}j)g1yK3J>Xy1feQgVXG{Q +zTL%25gDa5<=+rt*9Ozk>VsjWb9At+J9NtB#OLN5F^496>(hM)INO^Hw-( +z#IzBrGk8VzBbw!aXQgUcH<&Q%&MweIiexk6{2v$|S6?A8?jLwiL;8Aaf`n(}PnIzKE +zDFDV6LOoj2K>%7fiTrmv>%U=bVb=c-m;jsBniNK?h1^1+=m~s+-Xyo)I{HAqek%khk^q7?L#hBKoI~Uyk!CV213L}q7%)jRn}~zJ +z@}y1U1feMSZ(1IKEwqaO=hp$y8^E;aUWXB0zPDQPz2bYWj!L=YJ}Kn(nubrB1B*dP +z(>OzA%Bb97%9}xT1^`KQ2qcZt5>Q)Y!z_RhJ5NcU#EuuM3zM}ky4B-ndNP +zj(lB4_AEws&^CN81U$Y+pQ|m#hz?5^tHG))j1itmtO|Mpo_#t5zD(e0 +z6vrHsGiW!1T4du5AqiuGB+{^C7$UBKF-@$R+#EGDs|iCg3giEWBN5ziEdF^>ty0A( +zQzqfxuY#Rz$SSqbUR1PAam+E!pjss^_|Ox|3K?op}Inqv-!Idq4hQC$+NLgQRBc{hx}#VrC0^}khc)A%(>WwgXq9Xc`9 +z+44Uoe<1K+s&i-*q_S!nClCH_-ZI*sh4J5IB+4kB{{x%7bS}~Se9Qm<002ovPDHLk +FV1jW1&OrbG diff --git a/components/browser_ui/styles/android/java/res/drawable-hdpi/ic_chrome.png b/components/browser_ui/styles/android/java/res/drawable-hdpi/ic_chrome.png index ea8486ba6f7709b35c971bff86aa442a71ae890b..da99d50e93bc0a28a678ba64320eb689a1ea3c83 100644 diff --git a/build/patches/0003-Browser-Rename-strings-to-browser.patch b/build/patches/0003-Browser-Rename-strings-to-browser.patch index 1aee616adbbe595d51cc697bf6263dd474cddcdf..154c14aef36b335c51532b9e3df77f3e7adf31aa 100644 --- a/build/patches/0003-Browser-Rename-strings-to-browser.patch +++ b/build/patches/0003-Browser-Rename-strings-to-browser.patch @@ -1,7 +1,7 @@ -From 2b2222b83bc5d7a1dee12620214d3c79bb7bc25f Mon Sep 17 00:00:00 2001 +From 3bfd9c07913dbc4e9129f53449c0d856dd3f28d1 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 07:12:30 +0000 -Subject: [PATCH 03/15] Browser: Rename strings to browser +Subject: [PATCH 03/13] Browser: Rename strings to browser Signed-off-by: Aayush Gupta --- @@ -81,7 +81,7 @@ index 68f0aab29c05d..1808959db4eb9 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 9ffac62f8eba4..96b71187ea2f0 100644 +index 82e16ba250327..d404521b5cba3 100644 --- a/chrome/android/java/res/xml/main_preferences.xml +++ b/chrome/android/java/res/xml/main_preferences.xml @@ -110,6 +110,6 @@ @@ -93,7 +93,7 @@ index 9ffac62f8eba4..96b71187ea2f0 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java -index 182e2078b87c8..1fad9b8cd920c 100644 +index c874a07351712..6fd881230db7f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java @@ -36,7 +36,7 @@ public class AboutChromeSettings @@ -128,7 +128,7 @@ index 182e2078b87c8..1fad9b8cd920c 100644 ChromeSwitchPreference allowInlineUpdate = (ChromeSwitchPreference) findPreference(PREF_ALLOW_INLINE_UPDATE); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java -index 69f2ba955ca4e..308181c06128e 100644 +index a78a720298bb4..69863b791ccc2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/site_settings/ManageSpaceActivity.java @@ -86,7 +86,7 @@ public class ManageSpaceActivity extends AppCompatActivity implements View.OnCli @@ -159,20 +159,20 @@ index 69f2ba955ca4e..308181c06128e 100644 } } diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java -index bdad48714fd0a..d37700a9cf527 100644 +index e92bc2b2739c2..af6d85d9da4cd 100644 --- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java +++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/WebContentsDarkModeMessageController.java -@@ -106,7 +106,7 @@ public class WebContentsDarkModeMessageController { - Resources resources = activity.getResources(); - boolean optOut = ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( - ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING, OPT_OUT_PARAM, true); -- String messageTitle = optOut ? resources.getString(R.string.auto_dark_message_title) -+ String messageTitle = optOut ? resources.getString(R.string.auto_dark_message_title_e) - : resources.getString(R.string.auto_dark_message_opt_in_title); - PropertyModel message = - new PropertyModel.Builder(MessageBannerProperties.ALL_KEYS) +@@ -129,7 +129,7 @@ public class WebContentsDarkModeMessageController { + .with(MessageBannerProperties.ICON_TINT_COLOR, + MessageBannerProperties.TINT_NONE) + .with(MessageBannerProperties.TITLE, +- resources.getString(R.string.auto_dark_message_title)) ++ resources.getString(R.string.auto_dark_message_title_e)) + .with(MessageBannerProperties.DESCRIPTION, description) + .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 465e988c4b538..2bb1965e7faad 100644 +index 09dbbf7ac668d..af8fdbc61351a 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd @@ -198,6 +198,8 @@ CHAR_LIMIT guidelines: diff --git a/build/patches/0004-Browser-Point-to-our-default-popular-sites.patch b/build/patches/0004-Browser-Point-to-our-default-popular-sites.patch index 319d490d6896d1b93acb150eb1e0b7fd683fd5ee..98bb402e16bf9eb6bf2f5064d9747963873fe3f8 100644 --- a/build/patches/0004-Browser-Point-to-our-default-popular-sites.patch +++ b/build/patches/0004-Browser-Point-to-our-default-popular-sites.patch @@ -1,7 +1,7 @@ -From 652fee781e167e3f31866b4aa5461da890f7c06c Mon Sep 17 00:00:00 2001 +From 2fa7ca2f795dc034501c6d6231668a58b1a71330 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 07:29:59 +0000 -Subject: [PATCH 04/15] Browser: Point to our default popular sites +Subject: [PATCH 04/13] Browser: Point to our default popular sites Signed-off-by: Aayush Gupta --- diff --git a/build/patches/0005-Browser-Enable-do-not-track-by-default.patch b/build/patches/0005-Browser-Enable-do-not-track-by-default.patch index 2e6f38e74ff06f6706ed525fb56d96189bf139f5..ba8de8c46c73eea62659d24bc79a44d232740f53 100644 --- a/build/patches/0005-Browser-Enable-do-not-track-by-default.patch +++ b/build/patches/0005-Browser-Enable-do-not-track-by-default.patch @@ -1,7 +1,7 @@ -From d3807831da08fd4b8b57b42ad15137e67507c4c4 Mon Sep 17 00:00:00 2001 +From 1c2531bb6e1354cce238ae1b20d13cf0041c7a82 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 07:34:57 +0000 -Subject: [PATCH 05/15] Browser: Enable do not track by default +Subject: [PATCH 05/13] Browser: Enable do not track by default Signed-off-by: Aayush Gupta --- @@ -9,7 +9,7 @@ Signed-off-by: Aayush Gupta 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/browser/ui/browser_ui_prefs.cc b/chrome/browser/ui/browser_ui_prefs.cc -index 5a0ab16f3bd41..e182299bbc871 100644 +index 81c32af81d6a5..868d0d3e9b603 100644 --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc @@ -88,7 +88,7 @@ void RegisterBrowserUserPrefs(user_prefs::PrefRegistrySyncable* registry) { @@ -19,7 +19,7 @@ index 5a0ab16f3bd41..e182299bbc871 100644 - prefs::kEnableDoNotTrack, false, + prefs::kEnableDoNotTrack, true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - #if !BUILDFLAG(IS_CHROMEOS_ASH) && !defined(OS_ANDROID) + #if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) registry->RegisterBooleanPref(prefs::kPrintPreviewUseSystemDefaultPrinter, -- 2.25.1 diff --git a/build/patches/0006-Browser-Add-provider-to-share-default-search-engine.patch b/build/patches/0006-Browser-Add-provider-to-share-default-search-engine.patch index 4a883636d70fcf57d9a7bd95c817f532ab968e55..31e9c73ea3cf13d1b33306cb80acf12112f8269d 100644 --- a/build/patches/0006-Browser-Add-provider-to-share-default-search-engine.patch +++ b/build/patches/0006-Browser-Add-provider-to-share-default-search-engine.patch @@ -1,7 +1,7 @@ -From 4d2a1341f13ec9d599673a4b76521e49d3adf5b8 Mon Sep 17 00:00:00 2001 +From 0ce1b87a84dda67444c50e735d09fdb01ba8b2f0 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 26 Nov 2021 08:03:13 +0000 -Subject: [PATCH 06/15] Browser: Add provider to share default search engine +Subject: [PATCH 06/13] Browser: Add provider to share default search engine Signed-off-by: Aayush Gupta --- @@ -12,10 +12,10 @@ Signed-off-by: Aayush Gupta create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/provider/SearchEngineProvider.java diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml -index 0f7d00b646f24..3345822fc5528 100644 +index c5e9e64823521..16c2479ac3019 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml -@@ -1264,6 +1264,12 @@ by a child template that "extends" this file. +@@ -1259,6 +1259,12 @@ by a child template that "extends" this file. android:readPermission="android.permission.GLOBAL_SEARCH" /> diff --git a/build/patches/0007-Browser-Disable-async-DNS-by-default-on-Android.patch b/build/patches/0007-Browser-Disable-async-DNS-by-default-on-Android.patch deleted file mode 100644 index 36abf10216f5f3c070a8e2379b8b421e5ba9ac15..0000000000000000000000000000000000000000 --- a/build/patches/0007-Browser-Disable-async-DNS-by-default-on-Android.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 5354ab198a304d8808ade53e594b54aa8571b902 Mon Sep 17 00:00:00 2001 -From: Aayush Gupta -Date: Fri, 26 Nov 2021 08:26:03 +0000 -Subject: [PATCH 07/15] Browser: Disable async DNS by default on Android - -Signed-off-by: Aayush Gupta ---- - chrome/common/chrome_features.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc -index 2e4055d0a2ac3..68c2fd6b25348 100644 ---- a/chrome/common/chrome_features.cc -+++ b/chrome/common/chrome_features.cc -@@ -102,7 +102,7 @@ const base::Feature kArcPiGhostWindow{"ArcPiGhostWindow", - // Enables the built-in DNS resolver. - const base::Feature kAsyncDns { - "AsyncDns", --#if defined(OS_CHROMEOS) || defined(OS_MAC) || defined(OS_ANDROID) -+#if defined(OS_CHROMEOS) || defined(OS_MAC) - base::FEATURE_ENABLED_BY_DEFAULT - #else - base::FEATURE_DISABLED_BY_DEFAULT --- -2.25.1 - diff --git a/build/patches/0008-Browser-Enable-custom-tabs-by-default.patch b/build/patches/0007-Browser-Enable-custom-tabs-by-default.patch similarity index 83% rename from build/patches/0008-Browser-Enable-custom-tabs-by-default.patch rename to build/patches/0007-Browser-Enable-custom-tabs-by-default.patch index 62bd737b14c92af7476adbbbd295879c379ce9f2..1ab9e5e40a3bf63fdf3bf2d4434a769577e848d2 100644 --- a/build/patches/0008-Browser-Enable-custom-tabs-by-default.patch +++ b/build/patches/0007-Browser-Enable-custom-tabs-by-default.patch @@ -1,7 +1,7 @@ -From 640e5044eddae6bac3b3b4c39be8d04af9b8017d Mon Sep 17 00:00:00 2001 +From bbeef442401a2b4ea85c0d1698fd56fbe4cdbef9 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 29 Nov 2021 03:37:37 +0000 -Subject: [PATCH 08/15] Browser: Enable custom tabs by default +Subject: [PATCH 07/13] Browser: Enable custom tabs by default Signed-off-by: Aayush Gupta --- @@ -9,10 +9,10 @@ Signed-off-by: Aayush Gupta 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml -index 7ecd27f213a60..1dbf8ac3662f5 100644 +index 4f5751b297aba..92c13bd579f6b 100644 --- a/chrome/android/java/res/xml/privacy_preferences.xml +++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -69,7 +69,7 @@ +@@ -70,7 +70,7 @@ android:key="allow_custom_tab_intents" android:title="@string/allow_custom_tab_intents_title" android:summary="@string/allow_custom_tab_intents_summary" diff --git a/build/patches/0009-Browser-Enable-search-suggestion-by-default.patch b/build/patches/0008-Browser-Enable-search-suggestion-by-default.patch similarity index 72% rename from build/patches/0009-Browser-Enable-search-suggestion-by-default.patch rename to build/patches/0008-Browser-Enable-search-suggestion-by-default.patch index 9e462ffca1fe29bd41634ce35b8884cf2e5a066c..3db761a5bb99dbe5973f0e18b29e39bae120b2ed 100644 --- a/build/patches/0009-Browser-Enable-search-suggestion-by-default.patch +++ b/build/patches/0008-Browser-Enable-search-suggestion-by-default.patch @@ -1,7 +1,7 @@ -From 7d046c35475890e9571b91f2b80bf4ca606b30db Mon Sep 17 00:00:00 2001 +From 8da94cb4b036764ee70399523f33cf1f8946023f Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 29 Nov 2021 03:39:21 +0000 -Subject: [PATCH 09/15] Browser: Enable search suggestion by default +Subject: [PATCH 08/13] Browser: Enable search suggestion by default Signed-off-by: Aayush Gupta --- @@ -9,17 +9,17 @@ Signed-off-by: Aayush Gupta 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chrome/browser/profiles/profile.cc b/chrome/browser/profiles/profile.cc -index 43ae6997d3616..0dc159f23aff9 100644 +index ac4c9d25ccd8b..c196f5d2fe85a 100644 --- a/chrome/browser/profiles/profile.cc +++ b/chrome/browser/profiles/profile.cc -@@ -277,7 +277,7 @@ const char Profile::kProfileKey[] = "__PROFILE__"; +@@ -275,7 +275,7 @@ const char Profile::kProfileKey[] = "__PROFILE__"; void Profile::RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( prefs::kSearchSuggestEnabled, - false, + true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); - #if defined(OS_ANDROID) + #if BUILDFLAG(IS_ANDROID) registry->RegisterStringPref( -- 2.25.1 diff --git a/build/patches/0011-Browser-Modify-default-search-engines.patch b/build/patches/0009-Browser-Modify-default-search-engines.patch similarity index 99% rename from build/patches/0011-Browser-Modify-default-search-engines.patch rename to build/patches/0009-Browser-Modify-default-search-engines.patch index 50b270168161d70b66eb59dd71da608f163730bc..70ba2b81e2c407c9e7eadf13be31a3a0d4e4d17f 100644 --- a/build/patches/0011-Browser-Modify-default-search-engines.patch +++ b/build/patches/0009-Browser-Modify-default-search-engines.patch @@ -1,7 +1,7 @@ -From 4b1579888cc0e39a06645bbc03020531e1cb5b2e Mon Sep 17 00:00:00 2001 +From b8b9c69eadda5428b758be90cde4be89ad88a1fb Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 18 Mar 2021 13:42:44 +0100 -Subject: [PATCH 11/15] Browser: Modify default search engines +Subject: [PATCH 09/13] Browser: Modify default search engines Signed-off-by: Aayush Gupta --- @@ -94,10 +94,10 @@ index f0ee14d25c73a..9aa4ca1056519 100644 LocaleTemplateUrlLoader(const LocaleTemplateUrlLoader&) = delete; LocaleTemplateUrlLoader& operator=(const LocaleTemplateUrlLoader&) = delete; diff --git a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java -index 8afdf8a188da6..91e38d859ded6 100644 +index b9d3925f030c9..416a8a7834852 100644 --- a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java +++ b/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/LocaleManagerDelegate.java -@@ -155,7 +155,6 @@ public class LocaleManagerDelegate { +@@ -154,7 +154,6 @@ public class LocaleManagerDelegate { */ private void revertDefaultSearchEngineOverride() { if (!isSearchEngineAutoSwitchEnabled() || isSpecialLocaleEnabled()) return; @@ -188,7 +188,7 @@ index ecbd15614ef0a..20b6bc09e1029 100644 // First check the main search URL. if (SameDomain( diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc -index cec97482174c0..cd4139699416f 100644 +index 44784f4915414..78bd426a5fbb8 100644 --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc @@ -29,9 +29,7 @@ namespace { diff --git a/build/patches/0010-Browser-Hide-and-disable-touch-to-search-option.patch b/build/patches/0010-Browser-Hide-and-disable-touch-to-search-option.patch deleted file mode 100644 index cb065eac64f61204d71639ac81de107d8026bb96..0000000000000000000000000000000000000000 --- a/build/patches/0010-Browser-Hide-and-disable-touch-to-search-option.patch +++ /dev/null @@ -1,43 +0,0 @@ -From d6d54702aa37d9527984ba4c1dc5973230dc1be0 Mon Sep 17 00:00:00 2001 -From: Aayush Gupta -Date: Mon, 29 Nov 2021 03:54:44 +0000 -Subject: [PATCH 10/15] Browser: Hide and disable touch to search option - -Signed-off-by: Aayush Gupta ---- - chrome/android/java/res/xml/privacy_preferences.xml | 3 ++- - .../contextualsearch/ContextualSearchPreferenceFragment.java | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml -index 1dbf8ac3662f5..e1d80fcf744f0 100644 ---- a/chrome/android/java/res/xml/privacy_preferences.xml -+++ b/chrome/android/java/res/xml/privacy_preferences.xml -@@ -92,7 +92,8 @@ - -+ android:fragment="org.chromium.chrome.browser.contextualsearch.ContextualSearchPreferenceFragment" -+ app:isPreferenceVisible="false" /> - - - -diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java -index 27f7461a76ad7..58c41debb8450 100644 ---- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java -+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java -@@ -44,8 +44,9 @@ public class ContextualSearchPreferenceFragment extends PreferenceFragmentCompat - ChromeSwitchPreference seeBetterResultsSwitch = - (ChromeSwitchPreference) findPreference(PREF_WAS_FULLY_ENABLED_SWITCH); - -- boolean isContextualSearchEnabled = !ContextualSearchPolicy.isContextualSearchDisabled(); -+ boolean isContextualSearchEnabled = false; - contextualSearchSwitch.setChecked(isContextualSearchEnabled); -+ contextualSearchSwitch.setEnabled(isContextualSearchEnabled); - - contextualSearchSwitch.setOnPreferenceChangeListener((preference, newValue) -> { - ContextualSearchPolicy.setContextualSearchState((boolean) newValue); --- -2.25.1 - diff --git a/build/patches/0012-Browser-Redirect-users-to-e-foundation-docs.patch b/build/patches/0010-Browser-Redirect-users-to-e-foundation-docs.patch similarity index 89% rename from build/patches/0012-Browser-Redirect-users-to-e-foundation-docs.patch rename to build/patches/0010-Browser-Redirect-users-to-e-foundation-docs.patch index 40902ac7ac72e5363f05bed23f51126379f6e686..587956ed33d3f1fff2c9443a33e4c61d64063466 100644 --- a/build/patches/0012-Browser-Redirect-users-to-e-foundation-docs.patch +++ b/build/patches/0010-Browser-Redirect-users-to-e-foundation-docs.patch @@ -1,7 +1,7 @@ -From 6243f3b57e789be15e3cb28e55108645752880e5 Mon Sep 17 00:00:00 2001 +From 657c1971c631d686671672be542beb8fdd5341ba Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 11 May 2021 14:22:00 +0200 -Subject: [PATCH 12/15] Browser: Redirect users to e foundation docs +Subject: [PATCH 10/13] Browser: Redirect users to e foundation docs Signed-off-by: Aayush Gupta --- diff --git a/build/patches/0013-Revert-Bromite-auto-updater.patch b/build/patches/0011-Revert-Bromite-auto-updater.patch similarity index 70% rename from build/patches/0013-Revert-Bromite-auto-updater.patch rename to build/patches/0011-Revert-Bromite-auto-updater.patch index 722267fd28aca0674dfe7328c58cff42ac3c5db9..7fb41d2192af5b8c0d18b5ac3d907c5fdc8906ad 100644 --- a/build/patches/0013-Revert-Bromite-auto-updater.patch +++ b/build/patches/0011-Revert-Bromite-auto-updater.patch @@ -1,33 +1,33 @@ -From d3eeddd1b6bbb39b71fa02e4ea0e280dc96a2308 Mon Sep 17 00:00:00 2001 +From 423353cc76ffd606fd838746c989221f0d8ad014 Mon Sep 17 00:00:00 2001 From: Aayush Gupta -Date: Tue, 22 Feb 2022 06:14:39 +0000 -Subject: [PATCH 13/15] Revert "Bromite auto updater" +Date: Fri, 1 Apr 2022 11:47:29 +0000 +Subject: [PATCH 11/13] Revert "Bromite auto updater" -This reverts commit 4acfd40f7cdd80dc7d659a38e11e73757090fa05. +This reverts commit ee027318d68d6aed17a8f130b1b323cc05bd8ef0. --- .../java/templates/BuildConfig.template | 2 - build/config/android/rules.gni | 3 - chrome/android/chrome_java_sources.gni | 3 - .../java/res/xml/about_chrome_preferences.xml | 5 - - .../about_settings/AboutChromeSettings.java | 27 +-- - .../chrome/browser/omaha/OmahaBase.java | 47 +--- + .../about_settings/AboutChromeSettings.java | 27 +- + .../chrome/browser/omaha/OmahaBase.java | 57 +--- .../chrome/browser/omaha/UpdateConfigs.java | 30 +-- - .../browser/omaha/UpdateMenuItemHelper.java | 69 +----- - .../browser/omaha/UpdateStatusProvider.java | 169 +++------------ + .../browser/omaha/UpdateMenuItemHelper.java | 82 +----- + .../browser/omaha/UpdateStatusProvider.java | 161 +++--------- .../browser/omaha/VersionNumberGetter.java | 3 +- - .../inline/BromiteInlineUpdateController.java | 204 ------------------ - .../omaha/inline/InlineUpdateController.java | 45 ---- + .../inline/BromiteInlineUpdateController.java | 243 ------------------ + .../omaha/inline/InlineUpdateController.java | 51 ---- .../inline/InlineUpdateControllerFactory.java | 21 -- chrome/browser/endpoint_fetcher/BUILD.gn | 2 - - .../endpoint_fetcher/endpoint_fetcher.cc | 129 ----------- - .../endpoint_fetcher/endpoint_fetcher.h | 23 +- - .../endpoint_fetcher/EndpointFetcher.java | 11 - + .../endpoint_fetcher/endpoint_fetcher.cc | 158 +----------- + .../endpoint_fetcher/endpoint_fetcher.h | 22 +- + .../endpoint_fetcher/EndpointFetcher.java | 22 +- .../EndpointHeaderResponse.java | 31 --- - .../flags/android/chrome_feature_list.cc | 6 +- + .../flags/android/chrome_feature_list.cc | 4 - .../flags/android/chrome_feature_list.h | 1 - .../browser/flags/ChromeFeatureList.java | 1 - - .../strings/android_chrome_strings.grd | 20 +- - 22 files changed, 42 insertions(+), 810 deletions(-) + .../strings/android_chrome_strings.grd | 23 +- + 22 files changed, 55 insertions(+), 897 deletions(-) delete mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java delete mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateController.java delete mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateControllerFactory.java @@ -45,10 +45,10 @@ index 68b023ab9e010..8953ad5ca1775 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 fa41814da86da..013904898b83a 100644 +index ea439c21ff826..c992574f9f2e1 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni -@@ -1975,9 +1975,6 @@ if (enable_java_templates) { +@@ -1981,9 +1981,6 @@ if (enable_java_templates) { ] } } @@ -59,10 +59,10 @@ index fa41814da86da..013904898b83a 100644 } diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni -index 8ed3cf1f23fdb..29b477af1703e 100644 +index a6d0563fc27cd..a060e3f2456e7 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni -@@ -882,9 +882,6 @@ chrome_java_sources = [ +@@ -804,9 +804,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", @@ -89,7 +89,7 @@ index 1808959db4eb9..778da26fa3f48 100644 android:key="os_version" android:title="@string/os_version_title" /> diff --git a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java -index 1fad9b8cd920c..6fe30464a80bc 100644 +index 6fd881230db7f..ca2b8f6eca3e5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/about_settings/AboutChromeSettings.java @@ -21,20 +21,14 @@ import org.chromium.ui.widget.Toast; @@ -146,10 +146,10 @@ index 1fad9b8cd920c..6fe30464a80bc 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 091f7c0b1409b..9f616f24b0f02 100644 +index 689c72cc68f1e..211c0d67b7109 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 -@@ -31,8 +31,6 @@ import java.net.HttpURLConnection; +@@ -33,8 +33,6 @@ import java.net.HttpURLConnection; import java.net.URL; import java.util.Date; @@ -158,18 +158,19 @@ index 091f7c0b1409b..9f616f24b0f02 100644 /** * Keeps tabs on the current state of Chrome, tracking if and when a request should be sent to the * Omaha Server. -@@ -99,9 +97,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"; - public static final String PREF_TIMESTAMP_OF_REQUEST = "timestampOfRequest"; - public static final String PREF_LATEST_MODIFIED_VERSION = "latestModifiedVersion"; +- public static final String PREF_LATEST_UPSTREAM_VERSION = "latestUpstreamVersion"; - public static final String PREF_ALLOW_INLINE_UPDATE = "allowInlineUpdate"; + static final String PREF_TIMESTAMP_OF_REQUEST = "timestampOfRequest"; static final int MIN_API_JOB_SCHEDULER = Build.VERSION_CODES.M; -@@ -162,8 +158,7 @@ public class OmahaBase { +@@ -165,8 +160,7 @@ public class OmahaBase { /** See {@link #sIsDisabled}. */ static boolean isDisabled() { @@ -179,24 +180,29 @@ index 091f7c0b1409b..9f616f24b0f02 100644 } /** -@@ -635,42 +630,4 @@ public class OmahaBase { +@@ -590,10 +584,6 @@ public class OmahaBase { + /** Sends the request to the server and returns the response. */ + static String sendRequestToServer(HttpURLConnection urlConnection, String request) + throws RequestFailureException { +- if ((true)) { +- throw new RequestFailureException("Requests to Omaha server are forbidden.", +- RequestFailureException.ERROR_CONNECTIVITY); +- } + try { + OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream()); + OutputStreamWriter writer = new OutputStreamWriter(out); +@@ -664,47 +654,4 @@ public class OmahaBase { // updateStatus is only used for the on-demand check. null); } - -- public static boolean isNewVersionAvailableByVersion(String latestVersionString) { -- VersionNumber mCurrentProductVersion = VersionNumber.fromString(ChromeVersionInfo.getProductVersion()); +- public static boolean isNewVersionAvailableByVersion(VersionNumber latestVersion) { +- VersionNumber mCurrentProductVersion = VersionNumber.fromString(VersionInfo.getProductVersion()); - if (mCurrentProductVersion == null) { - Log.e(TAG, "BromiteUpdater: current product version is null"); - return false; - } - -- VersionNumber latestVersion = VersionNumber.fromString(latestVersionString); -- if (latestVersion == null) { -- Log.e(TAG, "BromiteUpdater: invalid latest version '%s'", latestVersionString); -- return false; -- } -- - Log.i(TAG, "BromiteUpdater: currentProductVersion=%s, latestVersion=%s", - mCurrentProductVersion.toString(), latestVersion.toString()); - @@ -210,20 +216,31 @@ index 091f7c0b1409b..9f616f24b0f02 100644 - editor.apply(); - } - -- public static void setLastModifiedVersion(String version) { +- public static void setLatestModifiedVersion(String version) { - SharedPreferences preferences = OmahaBase.getSharedPreferences(); - SharedPreferences.Editor editor = preferences.edit(); - editor.putString(OmahaBase.PREF_LATEST_MODIFIED_VERSION, version); - editor.apply(); - } - +- public static void setLatestUpstreamVersion(String version) { +- SharedPreferences preferences = OmahaBase.getSharedPreferences(); +- SharedPreferences.Editor editor = preferences.edit(); +- editor.putString(OmahaBase.PREF_LATEST_UPSTREAM_VERSION, version); +- editor.apply(); +- } +- - public static void resetUpdatePrefs() { -- OmahaBase.setLastModifiedVersion(""); -- OmahaBase.updateLastPushedTimeStamp(0); +- SharedPreferences preferences = OmahaBase.getSharedPreferences(); +- SharedPreferences.Editor editor = preferences.edit(); +- editor.putLong(OmahaBase.PREF_TIMESTAMP_OF_REQUEST, 0); +- editor.putString(OmahaBase.PREF_LATEST_MODIFIED_VERSION, ""); +- editor.putString(OmahaBase.PREF_LATEST_UPSTREAM_VERSION, ""); +- editor.apply(); - } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateConfigs.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateConfigs.java -index e0a8a5e27b509..e992298f27051 100644 +index 700aa4c218c8c..e992298f27051 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateConfigs.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateConfigs.java @@ -11,7 +11,6 @@ import androidx.annotation.IntDef; @@ -254,8 +271,8 @@ index e0a8a5e27b509..e992298f27051 100644 int INTENT_ONLY = 2; - - /** -- * Requires both Omaha and Play Store to say an update is available. Only ever uses the -- * inline update flow. +- * Inline updates that contact Bromite official GitHub repository to say whether an update is available. +- * Only ever uses the inline update flow. - */ - int INLINE_ONLY = 3; } @@ -293,41 +310,31 @@ index e0a8a5e27b509..e992298f27051 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 77c58cb32176e..3f4fb8a680cac 100644 +index 34166737bd7c5..0a3da975789f2 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 -@@ -22,7 +22,6 @@ import org.chromium.base.metrics.RecordHistogram; - import org.chromium.base.task.PostTask; - import org.chromium.base.task.TaskTraits; - import org.chromium.chrome.R; --import org.chromium.chrome.browser.omaha.UpdateStatusProvider.UpdateInteractionSource; - import org.chromium.chrome.browser.omaha.UpdateStatusProvider.UpdateState; - import org.chromium.chrome.browser.omaha.UpdateStatusProvider.UpdateStatus; - import org.chromium.chrome.browser.preferences.Pref; -@@ -158,7 +157,7 @@ public class UpdateMenuItemHelper { - - try { - UpdateStatusProvider.getInstance().startIntentUpdate( -- activity, UpdateInteractionSource.FROM_MENU, false /* newTask */); -+ activity, false /* newTask */); - recordItemClickedHistogram(ITEM_CLICKED_INTENT_LAUNCHED); - getPrefService().setBoolean(Pref.CLICKED_UPDATE_MENU_ITEM, true); - } catch (ActivityNotFoundException e) { -@@ -166,22 +165,8 @@ public class UpdateMenuItemHelper { +@@ -11,7 +11,6 @@ import android.text.TextUtils; + + import androidx.annotation.NonNull; + import androidx.annotation.Nullable; +-import androidx.annotation.StringRes; + import androidx.annotation.VisibleForTesting; + + import org.chromium.base.BuildInfo; +@@ -166,21 +165,8 @@ public class UpdateMenuItemHelper { recordItemClickedHistogram(ITEM_CLICKED_INTENT_FAILED); } break; +- case UpdateState.VULNERABLE_VERSION: +- // Intentional fall through. - case UpdateState.INLINE_UPDATE_AVAILABLE: -- UpdateStatusProvider.getInstance().startInlineUpdate( -- UpdateInteractionSource.FROM_MENU, activity); +- UpdateStatusProvider.getInstance().startInlineUpdate(activity); - break; - case UpdateState.INLINE_UPDATE_READY: -- UpdateStatusProvider.getInstance().finishInlineUpdate( -- UpdateInteractionSource.FROM_MENU); +- UpdateStatusProvider.getInstance().finishInlineUpdate(); - break; - case UpdateState.INLINE_UPDATE_FAILED: -- UpdateStatusProvider.getInstance().retryInlineUpdate( -- UpdateInteractionSource.FROM_MENU, activity); +- UpdateStatusProvider.getInstance().retryInlineUpdate(activity); - break; case UpdateState.UNSUPPORTED_OS_VERSION: // Intentional fall through. @@ -336,33 +343,56 @@ index 77c58cb32176e..3f4fb8a680cac 100644 default: return; } -@@ -283,58 +268,6 @@ public class UpdateMenuItemHelper { +@@ -229,7 +215,7 @@ public class UpdateMenuItemHelper { + + mMenuUiState = new MenuUiState(); + switch (mStatus.updateState) { +- case UpdateState.UPDATE_AVAILABLE: // this is not used in Bromite ++ case UpdateState.UPDATE_AVAILABLE: + // 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( +@@ -284,72 +270,6 @@ public class UpdateMenuItemHelper { mMenuUiState.itemState.icon = R.drawable.ic_error_24dp_filled; mMenuUiState.itemState.enabled = false; break; +- case UpdateState.VULNERABLE_VERSION: +- // Intentional fall through. - case UpdateState.INLINE_UPDATE_AVAILABLE: - // 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( +- @StringRes int defaultUpdateSummary = R.string.menu_update_summary_default; +- if (mStatus.updateState == UpdateState.VULNERABLE_VERSION) { +- // always show badge in case of vulnerable version +- showBadge = true; +- mMenuUiState.buttonState = new MenuButtonState(); +- mMenuUiState.buttonState.menuContentDescription = R.string.accessibility_toolbar_btn_menu_update; +- mMenuUiState.buttonState.darkBadgeIcon = +- R.drawable.ic_error_grey800_24dp_filled; +- mMenuUiState.buttonState.lightBadgeIcon = R.drawable.ic_error_white_24dp_filled; +- mMenuUiState.buttonState.adaptiveBadgeIcon = R.drawable.ic_error_24dp_filled; +- defaultUpdateSummary = R.string.menu_update_summary_vulnerable; +- } else { +- showBadge |= !TextUtils.equals( - getPrefService().getString( - Pref.LATEST_VERSION_WHEN_CLICKED_UPDATE_MENU_ITEM), - mStatus.latestUnsupportedVersion); -- -- if (showBadge) { -- mMenuUiState.buttonState = new MenuButtonState(); -- mMenuUiState.buttonState.menuContentDescription = -- R.string.accessibility_toolbar_btn_menu_update; -- mMenuUiState.buttonState.darkBadgeIcon = R.drawable.badge_update_dark; -- mMenuUiState.buttonState.lightBadgeIcon = R.drawable.badge_update_light; +- if (showBadge) { +- mMenuUiState.buttonState = new MenuButtonState(); +- mMenuUiState.buttonState.menuContentDescription = R.string.accessibility_toolbar_btn_menu_update; +- mMenuUiState.buttonState.darkBadgeIcon = R.drawable.badge_update_dark; +- mMenuUiState.buttonState.lightBadgeIcon = R.drawable.badge_update_light; +- mMenuUiState.buttonState.adaptiveBadgeIcon = R.drawable.badge_update; +- } - } - - mMenuUiState.itemState = new MenuItemState(); - mMenuUiState.itemState.title = R.string.menu_update; -- mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue; +- mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue_dark; - mMenuUiState.itemState.summary = UpdateConfigs.getCustomSummary(); - if (TextUtils.isEmpty(mMenuUiState.itemState.summary)) { - mMenuUiState.itemState.summary = -- resources.getString(R.string.menu_update_summary_default); +- resources.getString(defaultUpdateSummary); - } - mMenuUiState.itemState.icon = R.drawable.ic_history_googblue_24dp; - mMenuUiState.itemState.iconTintId = R.color.default_icon_color_blue_light; @@ -371,12 +401,12 @@ index 77c58cb32176e..3f4fb8a680cac 100644 - case UpdateState.INLINE_UPDATE_DOWNLOADING: - mMenuUiState.itemState = new MenuItemState(); - mMenuUiState.itemState.title = R.string.menu_inline_update_downloading; -- mMenuUiState.itemState.titleColorId = R.color.default_text_color_secondary; +- mMenuUiState.itemState.titleColorId = R.color.default_text_color_secondary_dark; - break; - case UpdateState.INLINE_UPDATE_READY: - mMenuUiState.itemState = new MenuItemState(); - mMenuUiState.itemState.title = R.string.menu_inline_update_ready; -- mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue; +- mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue_dark; - mMenuUiState.itemState.summary = - resources.getString(R.string.menu_inline_update_ready_summary); - mMenuUiState.itemState.icon = R.drawable.infobar_chrome; @@ -386,7 +416,7 @@ index 77c58cb32176e..3f4fb8a680cac 100644 - case UpdateState.INLINE_UPDATE_FAILED: - mMenuUiState.itemState = new MenuItemState(); - mMenuUiState.itemState.title = R.string.menu_inline_update_failed; -- mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue; +- mMenuUiState.itemState.titleColorId = R.color.default_text_color_blue_dark; - mMenuUiState.itemState.summary = resources.getString(R.string.try_again); - mMenuUiState.itemState.icon = R.drawable.ic_history_googblue_24dp; - mMenuUiState.itemState.iconTintId = R.color.default_icon_color_blue_light; @@ -396,7 +426,7 @@ index 77c58cb32176e..3f4fb8a680cac 100644 // Intentional fall through. default: diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java -index 4d88d1d63b1ee..43d2ec12bc7bc 100644 +index 98a26599c7faf..43d2ec12bc7bc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omaha/UpdateStatusProvider.java @@ -4,7 +4,6 @@ @@ -419,17 +449,18 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 import org.chromium.base.BuildInfo; import org.chromium.base.Callback; import org.chromium.base.ContextUtils; -@@ -31,9 +26,6 @@ import org.chromium.base.metrics.RecordHistogram; +@@ -31,10 +26,6 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.task.AsyncTask; import org.chromium.base.task.AsyncTask.Status; import org.chromium.base.task.PostTask; -import org.chromium.chrome.browser.app.ChromeActivity; +-import org.chromium.chrome.browser.omaha.inline.BromiteInlineUpdateController; -import org.chromium.chrome.browser.omaha.inline.InlineUpdateController; -import org.chromium.chrome.browser.omaha.inline.InlineUpdateControllerFactory; import org.chromium.chrome.browser.omaha.metrics.UpdateSuccessMetrics; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; -@@ -44,50 +36,28 @@ import java.io.File; +@@ -45,37 +36,30 @@ import java.io.File; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -437,7 +468,6 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 -import android.content.SharedPreferences; -import android.os.Build; -import org.chromium.build.BuildConfig; --import org.chromium.chrome.browser.version.ChromeVersionInfo; - /** * Provides the current update state for Chrome. This update state is asynchronously determined and @@ -446,21 +476,6 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 * For manually testing this functionality, see {@link UpdateConfigs}. */ -public class UpdateStatusProvider implements ActivityStateListener { -- /** -- * Possible sources of user interaction regarding updates. -- * Treat this as append only as it is used by UMA. -- */ -- @IntDef({UpdateInteractionSource.FROM_MENU, UpdateInteractionSource.FROM_INFOBAR, -- UpdateInteractionSource.FROM_NOTIFICATION}) -- @Retention(RetentionPolicy.SOURCE) -- public @interface UpdateInteractionSource { -- int FROM_MENU = 0; -- int FROM_INFOBAR = 1; -- int FROM_NOTIFICATION = 2; -- -- int NUM_ENTRIES = 3; -- } -- +public class UpdateStatusProvider { /** * Possible update states. @@ -468,7 +483,7 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 */ - @IntDef({UpdateState.NONE, UpdateState.UPDATE_AVAILABLE, UpdateState.UNSUPPORTED_OS_VERSION, - UpdateState.INLINE_UPDATE_AVAILABLE, UpdateState.INLINE_UPDATE_DOWNLOADING, -- UpdateState.INLINE_UPDATE_READY, UpdateState.INLINE_UPDATE_FAILED}) +- UpdateState.INLINE_UPDATE_READY, UpdateState.INLINE_UPDATE_FAILED, UpdateState.VULNERABLE_VERSION}) + @IntDef({UpdateState.NONE, UpdateState.UPDATE_AVAILABLE, UpdateState.UNSUPPORTED_OS_VERSION}) @Retention(RetentionPolicy.SOURCE) public @interface UpdateState { @@ -479,15 +494,19 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 - int INLINE_UPDATE_DOWNLOADING = 4; - int INLINE_UPDATE_READY = 5; - int INLINE_UPDATE_FAILED = 6; +- int VULNERABLE_VERSION = 7; + // Inline updates are deprecated. + // int INLINE_UPDATE_AVAILABLE = 3; + // int INLINE_UPDATE_DOWNLOADING = 4; + // int INLINE_UPDATE_READY = 5; + // int INLINE_UPDATE_FAILED = 6; - int NUM_ENTRIES = 7; +- int NUM_ENTRIES = 8; ++ int NUM_ENTRIES = 7; } -@@ -123,12 +93,6 @@ public class UpdateStatusProvider implements ActivityStateListener { + + /** A set of properties that represent the current update state for Chrome. */ +@@ -109,12 +93,6 @@ public class UpdateStatusProvider implements ActivityStateListener { */ private boolean mIsSimulated; @@ -500,7 +519,7 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 public UpdateStatus() {} UpdateStatus(UpdateStatus other) { -@@ -137,13 +101,11 @@ public class UpdateStatusProvider implements ActivityStateListener { +@@ -123,13 +101,11 @@ public class UpdateStatusProvider implements ActivityStateListener { latestVersion = other.latestVersion; latestUnsupportedVersion = other.latestUnsupportedVersion; mIsSimulated = other.mIsSimulated; @@ -514,17 +533,16 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 private final UpdateQuery mOmahaQuery; private final UpdateSuccessMetrics mMetrics; private @Nullable UpdateStatus mStatus; -@@ -211,44 +173,19 @@ public class UpdateStatusProvider implements ActivityStateListener { +@@ -197,30 +173,6 @@ public class UpdateStatusProvider implements ActivityStateListener { pingObservers(); } - /** - * Starts the inline update process, if possible. -- * @source The source of the action (the UI that caused it). - * @param activity An {@link Activity} that will be used to interact with Play. - */ -- public void startInlineUpdate(@UpdateInteractionSource int source, Activity activity) { -- if (mStatus == null || mStatus.updateState != UpdateState.INLINE_UPDATE_AVAILABLE) return; +- public void startInlineUpdate(Activity activity) { +- if (mStatus == null || (mStatus.updateState != UpdateState.INLINE_UPDATE_AVAILABLE && mStatus.updateState != UpdateState.VULNERABLE_VERSION)) return; - mInlineController.startUpdate(activity); - } - @@ -532,13 +550,13 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 - * Retries the inline update process, if possible. - * @param activity An {@link Activity} that will be used to interact with Play. - */ -- public void retryInlineUpdate(@UpdateInteractionSource int source, Activity activity) { -- if (mStatus == null || mStatus.updateState != UpdateState.INLINE_UPDATE_AVAILABLE) return; +- public void retryInlineUpdate(Activity activity) { +- if (mStatus == null || (mStatus.updateState != UpdateState.INLINE_UPDATE_AVAILABLE && mStatus.updateState != UpdateState.VULNERABLE_VERSION)) return; - mInlineController.startUpdate(activity); - } - - /** Finishes the inline update process, which may involve restarting the app. */ -- public void finishInlineUpdate(@UpdateInteractionSource int source) { +- public void finishInlineUpdate() { - if (mStatus == null || mStatus.updateState != UpdateState.INLINE_UPDATE_READY) return; - mInlineController.completeUpdate(); - } @@ -546,13 +564,11 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 /** * Starts the intent update process, if possible * @param context An {@link Context} that will be used to fire off the update intent. -- * @param source The source of the action (the UI that caused it). - * @param newTask Whether or not to make the intent a new task. +@@ -228,11 +180,12 @@ public class UpdateStatusProvider implements ActivityStateListener { * @return Whether or not the update intent was sent and had a valid handler. */ -- public boolean startIntentUpdate( -- Context context, @UpdateInteractionSource int source, boolean newTask) { -+ public boolean startIntentUpdate(Context context, boolean newTask) { + public boolean startIntentUpdate(Context context, boolean newTask) { +- // currently not used in Bromite if (mStatus == null || mStatus.updateState != UpdateState.UPDATE_AVAILABLE) return false; if (TextUtils.isEmpty(mStatus.updateUrl)) return false; @@ -562,7 +578,7 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(mStatus.updateUrl)); if (newTask) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); -@@ -259,29 +196,9 @@ public class UpdateStatusProvider implements ActivityStateListener { +@@ -243,29 +196,9 @@ public class UpdateStatusProvider implements ActivityStateListener { return true; } @@ -592,7 +608,7 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 } private void pingObservers() { -@@ -289,59 +206,27 @@ public class UpdateStatusProvider implements ActivityStateListener { +@@ -273,38 +206,21 @@ public class UpdateStatusProvider implements ActivityStateListener { } private void resolveStatus() { @@ -604,24 +620,26 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 // We pull the Omaha result once as it will never change. if (mStatus == null) mStatus = new UpdateStatus(mOmahaQuery.getResult()); -- if (mStatus.mIsSimulated) { +- if (mStatus.mIsSimulated) { // used only during tests - if (mStatus.mIsInlineSimulated) { - @UpdateState - int inlineState = mInlineController.getStatus(); +- String updateUrl = mInlineController.getUpdateUrl(); - - if (inlineState == UpdateState.NONE) { - mStatus.updateState = mOmahaQuery.getResult().updateState; - } else { - mStatus.updateState = inlineState; +- mStatus.updateUrl = updateUrl; - } - } - } else { -- @UpdateState -- int omahaState = mOmahaQuery.getResult().updateState; +- // used by Bromite to resolve update status +- // ignores Omaha status - @UpdateState - int inlineState = mInlineController.getStatus(); -- mStatus.updateState = resolveOmahaAndInlineStatus( -- UpdateConfigs.getConfiguration(), omahaState, inlineState); +- mStatus.updateState = inlineState; +- mStatus.updateUrl = mInlineController.getUpdateUrl(); + if (!mStatus.mIsSimulated) { + mStatus.updateState = mOmahaQuery.getResult().updateState; } @@ -633,30 +651,24 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 mRecordedInitialStatus = true; } - pingObservers(); +@@ -316,7 +232,6 @@ public class UpdateStatusProvider implements ActivityStateListener { } -- @VisibleForTesting -- static @UpdateState int resolveOmahaAndInlineStatus( -- @UpdateConfigs.UpdateFlowConfiguration int configuration, @UpdateState int omahaState, -- @UpdateState int inlineState) { -- switch (configuration) { -- case UpdateConfigs.UpdateFlowConfiguration.NEVER_SHOW: -- return UpdateState.NONE; -- case UpdateConfigs.UpdateFlowConfiguration.INLINE_ONLY: -- if (inlineState == UpdateState.NONE) return omahaState; -- return inlineState; -- case UpdateConfigs.UpdateFlowConfiguration.INTENT_ONLY: // Intentional fall through. -- default: -- // Fall back to use Omaha only and use the old flow. -- return omahaState; -- } -- } -- - private static final class LazyHolder { - private static final UpdateStatusProvider INSTANCE = new UpdateStatusProvider(); - } -@@ -383,8 +268,6 @@ public class UpdateStatusProvider implements ActivityStateListener { + private static final class UpdateQuery extends AsyncTask { +- static final String TAG = "UpdateStatusProvider"; + private final Context mContext = ContextUtils.getApplicationContext(); + private final Runnable mCallback; + +@@ -334,7 +249,7 @@ public class UpdateStatusProvider implements ActivityStateListener { + protected UpdateStatus doInBackground() { + UpdateStatus testStatus = getTestStatus(); + if (testStatus != null) return testStatus; +- return getActualStatus(mContext); ++ return getRealStatus(mContext); + } + + @Override +@@ -353,8 +268,6 @@ public class UpdateStatusProvider implements ActivityStateListener { status.mIsSimulated = true; status.updateState = forcedUpdateState; @@ -665,16 +677,38 @@ index 4d88d1d63b1ee..43d2ec12bc7bc 100644 // Push custom configurations for certain update states. switch (forcedUpdateState) { case UpdateState.UPDATE_AVAILABLE: -@@ -404,12 +287,24 @@ public class UpdateStatusProvider implements ActivityStateListener { - private UpdateStatus getRealStatus(Context context) { +@@ -371,33 +284,27 @@ public class UpdateStatusProvider implements ActivityStateListener { + return status; + } + +- private UpdateStatus getActualStatus(Context context) { ++ private UpdateStatus getRealStatus(Context context) { UpdateStatus status = new UpdateStatus(); - SharedPreferences preferences = OmahaBase.getSharedPreferences(); - status.latestVersion = preferences.getString(OmahaBase.PREF_LATEST_MODIFIED_VERSION, ""); - - status.updateState = UpdateState.NONE; -- if (status.latestVersion != null && status.latestVersion.length() != 0 && OmahaBase.isNewVersionAvailableByVersion(status.latestVersion)) { -- status.updateState = UpdateState.INLINE_UPDATE_AVAILABLE; +- if (status.latestVersion != null && status.latestVersion.length() != 0) { +- VersionNumber latestVersion = VersionNumber.fromString(status.latestVersion); +- if (latestVersion == null) { +- Log.e(TAG, "BromiteUpdater: stored latest version '%s' is invalid", status.latestVersion); +- } else if (OmahaBase.isNewVersionAvailableByVersion(latestVersion)) { +- status.updateState = UpdateState.INLINE_UPDATE_AVAILABLE; +- status.updateUrl = BromiteInlineUpdateController.getDownloadUrl(); +- return status; +- } +- String latestUpstreamVersion = preferences.getString(OmahaBase.PREF_LATEST_UPSTREAM_VERSION, ""); +- if (latestUpstreamVersion != null && latestUpstreamVersion.length() != 0) { +- VersionNumber upstreamVersion = VersionNumber.fromString(latestUpstreamVersion); +- if (upstreamVersion == null) { +- Log.e(TAG, "BromiteUpdater: stored latest upstream version '%s' is invalid", latestUpstreamVersion); +- } else if (OmahaBase.isNewVersionAvailableByVersion(upstreamVersion)) { +- status.updateUrl = BromiteInlineUpdateController.VULNERABLE_VERSION_DOC_URL; +- status.updateState = UpdateState.VULNERABLE_VERSION; +- return status; +- } +- } + if (VersionNumberGetter.isNewerVersionAvailable(context)) { + status.updateUrl = MarketURLGetter.getMarketUrl(); + status.latestVersion = @@ -712,10 +746,10 @@ index 425b7fe17a863..6d21fb304fdd7 100644 diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java deleted file mode 100644 -index 64eb73089c4c9..0000000000000 +index 155e533724a6c..0000000000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java +++ /dev/null -@@ -1,204 +0,0 @@ +@@ -1,243 +0,0 @@ -// Copyright 2021 The Ungoogled Chromium Authors. All rights reserved. -// -// This file is part of Ungoogled Chromium Android. @@ -757,7 +791,6 @@ index 64eb73089c4c9..0000000000000 -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.chrome.browser.tab.TabLaunchType; -import org.chromium.chrome.browser.tabmodel.TabCreator; --import org.chromium.chrome.browser.version.ChromeVersionInfo; -import org.chromium.content_public.browser.LoadUrlParams; -import org.chromium.content_public.browser.UiThreadTaskTraits; -import org.chromium.ui.base.PageTransition; @@ -775,13 +808,15 @@ index 64eb73089c4c9..0000000000000 -import org.chromium.chrome.browser.endpoint_fetcher.EndpointResponse; -import org.chromium.chrome.browser.omaha.VersionNumber; - --class BromiteInlineUpdateController implements InlineUpdateController { +-public class BromiteInlineUpdateController implements InlineUpdateController { - - private static final String TAG = "BromiteInlineUpdateController"; - private final String REDIRECT_URL_PREFIX = "https://github.com/bromite/bromite/releases/download/"; -- private final String UPDATE_VERSION_URL = "https://github.com/bromite/bromite/releases/latest/download/"; +- private static final String UPDATE_VERSION_URL = "https://github.com/bromite/bromite/releases/latest/download/"; +- private final String UPSTREAM_VERSION_URL = "https://www.bromite.org/upstream.txt"; +- public static final String VULNERABLE_VERSION_DOC_URL = "https://www.bromite.org/vulnerable-version"; - -- private String getDownloadUrl() { +- public static String getDownloadUrl() { - return UPDATE_VERSION_URL + BuildConfig.BUILD_TARGET_CPU + "_ChromePublic.apk"; - } - @@ -789,6 +824,7 @@ index 64eb73089c4c9..0000000000000 - private Runnable mCallback; - private @Nullable @UpdateStatusProvider.UpdateState Integer mUpdateState = - UpdateStatusProvider.UpdateState.NONE; +- private String mUpdateUrl = ""; - - BromiteInlineUpdateController(Runnable callback) { - mCallback = callback; @@ -799,6 +835,7 @@ index 64eb73089c4c9..0000000000000 - if (mEnabled == enabled) return; - - mEnabled = enabled; +- // check for an update when state changes - if (mEnabled) pullCurrentState(); - } - @@ -809,13 +846,18 @@ index 64eb73089c4c9..0000000000000 - } - - @Override +- public String getUpdateUrl() { +- // relies on a prior call to getStatus() to have state and URL correctly pulled +- return mUpdateUrl; +- } +- +- @Override - public void startUpdate(Activity activity) { - assert ChromeActivity.class.isInstance(activity); - ChromeActivity thisActivity = (ChromeActivity) activity; -- String downloadUrl = getDownloadUrl(); - // Always open in new incognito tab - TabCreator tabCreator = thisActivity.getTabCreator(true); -- tabCreator.createNewTab(new LoadUrlParams(downloadUrl, PageTransition.AUTO_BOOKMARK), +- tabCreator.createNewTab(new LoadUrlParams(mUpdateUrl, PageTransition.AUTO_BOOKMARK), - TabLaunchType.FROM_LINK, thisActivity.getActivityTab()); - } - @@ -830,6 +872,7 @@ index 64eb73089c4c9..0000000000000 - return; - } - +- // do not pull state if there is already a state set - if (mUpdateState != UpdateStatusProvider.UpdateState.NONE) - return; - @@ -840,18 +883,19 @@ index 64eb73089c4c9..0000000000000 - case UpdateStatusProvider.UpdateState.INLINE_UPDATE_AVAILABLE: - break; - case UpdateStatusProvider.UpdateState.NONE: -- checkLatestVersion((ok) -> { -- if (ok == false) return; -- -- SharedPreferences preferences = OmahaBase.getSharedPreferences(); -- String latestVersion = preferences.getString(OmahaBase.PREF_LATEST_MODIFIED_VERSION, ""); +- OmahaBase.resetUpdatePrefs(); +- checkLatestVersion((latestVersion) -> { +- if (latestVersion == null) return; - - if (OmahaBase.isNewVersionAvailableByVersion(latestVersion)) { -- postStatus(UpdateStatusProvider.UpdateState.INLINE_UPDATE_AVAILABLE); +- postStatus(UpdateStatusProvider.UpdateState.INLINE_UPDATE_AVAILABLE, getDownloadUrl()); - } else { -- if (mUpdateState != UpdateStatusProvider.UpdateState.NONE) { -- postStatus(UpdateStatusProvider.UpdateState.NONE); -- } +- checkLatestUpstreamVersion((latestUpstreamVersion) -> { +- if (latestUpstreamVersion == null) return; +- if (OmahaBase.isNewVersionAvailableByVersion(latestUpstreamVersion)) { +- postStatus(UpdateStatusProvider.UpdateState.VULNERABLE_VERSION, VULNERABLE_VERSION_DOC_URL); +- } +- }); - } - }); - break; @@ -863,6 +907,8 @@ index 64eb73089c4c9..0000000000000 - // Intentional fall through. - case UpdateStatusProvider.UpdateState.UNSUPPORTED_OS_VERSION: - // Intentional fall through. +- case UpdateStatusProvider.UpdateState.VULNERABLE_VERSION: +- // Intentional fall through. - default: - return; - } @@ -875,17 +921,15 @@ index 64eb73089c4c9..0000000000000 - return currentTime - lastPushedTimeStamp >= getUpdateNotificationInterval(); - } - -- private void checkLatestVersion(final Callback callback) { +- private void checkLatestVersion(final Callback callback) { - assert UPDATE_VERSION_URL != null; - -- OmahaBase.resetUpdatePrefs(); -- - String urlToCheck = getDownloadUrl(); - Log.i(TAG, "BromiteUpdater: fetching with HEAD '%s'", urlToCheck); - - EndpointFetcher.nativeHeadWithNoAuth( - (endpointResponse) -> { -- OmahaBase.updateLastPushedTimeStamp(System.currentTimeMillis()); +- boolean versionFound = false; - String redirectURL = endpointResponse.getRedirectUrl(); - if (redirectURL != null) { - Log.i(TAG, "BromiteUpdater: obtained response '%s' and redirect URL '%s'", endpointResponse.getResponseString(), redirectURL); @@ -895,37 +939,66 @@ index 64eb73089c4c9..0000000000000 - if (parts.length > 0) { - VersionNumber version = VersionNumber.fromString(parts[0]); - if (version != null) { -- OmahaBase.setLastModifiedVersion(parts[0]); -- callback.onResult(true); +- versionFound = true; +- OmahaBase.setLatestModifiedVersion(parts[0]); +- callback.onResult(version); - return; - } - } - } -- } else { +- } +- if (!versionFound) { - // retry after 1 hour - OmahaBase.updateLastPushedTimeStamp( - System.currentTimeMillis() - getUpdateNotificationInterval() - - DateUtils.HOUR_IN_MILLIS); -- Log.i(TAG, "BromiteUpdater: failed, will retry in 1 hour"); +- Log.e(TAG, "BromiteUpdater: failed, will retry in 1 hour"); - } - -- callback.onResult(false); +- callback.onResult(null); - }, - Profile.getLastUsedRegularProfile(), -- urlToCheck, /*timeout*/5000, /*follow_redirect*/false); +- urlToCheck, /*timeout*/5000, /*follow_redirect*/true); - } - -- private void postStatus(@UpdateStatusProvider.UpdateState int status) { +- private void checkLatestUpstreamVersion(final Callback callback) { +- Log.i(TAG, "BromiteUpdater: fetching with GET '%s'", UPSTREAM_VERSION_URL); +- +- EndpointFetcher.nativeFetchWithNoAuth( +- (endpointResponse) -> { +- String response = endpointResponse.getResponseString().trim(); +- Log.i(TAG, "BromiteUpdater: obtained upstream version update response '%s'", response); +- VersionNumber version = VersionNumber.fromString(response); +- if (version != null) { +- OmahaBase.updateLastPushedTimeStamp(System.currentTimeMillis()); +- OmahaBase.setLatestUpstreamVersion(response); +- callback.onResult(version); +- return; +- } +- // retry after 1 hour +- OmahaBase.updateLastPushedTimeStamp( +- System.currentTimeMillis() - getUpdateNotificationInterval() - +- DateUtils.HOUR_IN_MILLIS); +- Log.e(TAG, "BromiteUpdater: failed to fetch upstream version, will retry in 1 hour"); +- +- callback.onResult(null); +- }, +- Profile.getLastUsedRegularProfile(), +- UPSTREAM_VERSION_URL, /*timeout*/5000, /*follow_redirect*/false); +- } +- +- private void postStatus(@UpdateStatusProvider.UpdateState int status, String updateUrl) { - mUpdateState = status; +- mUpdateUrl = updateUrl; - PostTask.postTask(UiThreadTaskTraits.DEFAULT, mCallback); - } -} diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateController.java b/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateController.java deleted file mode 100644 -index 4107f88161b57..0000000000000 +index 260e5f1225f6f..0000000000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateController.java +++ /dev/null -@@ -1,45 +0,0 @@ +@@ -1,51 +0,0 @@ -// Copyright 2019 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. @@ -946,7 +1019,7 @@ index 4107f88161b57..0000000000000 - */ -public interface InlineUpdateController { - /** -- * Enables or disables the controller. +- * Enables or disables the controller. It will trigger an update check when previously disabled. - * @param enabled true iff the controller should be enabled. - */ - void setEnabled(boolean enabled); @@ -960,6 +1033,12 @@ index 4107f88161b57..0000000000000 - Integer getStatus(); - - /** +- * @return The current update URL for the inline update process. May be an empty string if the state +- * hasn't been determined yet or if state does not specify one. +- */ +- String getUpdateUrl(); +- +- /** - * Starts the update, if possible. This will send an {@link Intent} out to play, which may - * cause Chrome to move to the background. - * @param activity The {@link Activity} to use to interact with Play. @@ -1018,7 +1097,7 @@ index e7cd627fedc49..2cb20bb91397c 100644 ] } diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc b/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc -index b06c216b7a4a2..cd300edce8e39 100644 +index 777ea67ce0c4d..dfdf4d48e7602 100644 --- a/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc +++ b/chrome/browser/endpoint_fetcher/endpoint_fetcher.cc @@ -26,15 +26,10 @@ @@ -1028,7 +1107,7 @@ index b06c216b7a4a2..cd300edce8e39 100644 -#include "chrome/browser/endpoint_fetcher/jni_headers/EndpointHeaderResponse_jni.h" #include "chrome/browser/profiles/profile_android.h" - #endif // defined(OS_ANDROID) + #endif // BUILDFLAG(IS_ANDROID) -#include "net/base/load_flags.h" -#include "net/http/http_status_code.h" @@ -1037,17 +1116,59 @@ index b06c216b7a4a2..cd300edce8e39 100644 namespace { const char kContentTypeKey[] = "Content-Type"; const char kDeveloperKey[] = "X-Developer-Key"; -@@ -160,19 +155,6 @@ EndpointFetcher::EndpointFetcher( +@@ -78,7 +73,6 @@ EndpointFetcher::EndpointFetcher( + http_method_(http_method), + content_type_(content_type), + timeout_ms_(timeout_ms), +- intercept_redirect_(false), + post_data_(post_data), + headers_(headers), + annotation_tag_(annotation_tag), +@@ -96,7 +90,6 @@ EndpointFetcher::EndpointFetcher( + http_method_("GET"), + content_type_(std::string()), + timeout_ms_(0), +- intercept_redirect_(false), + post_data_(std::string()), + annotation_tag_(annotation_tag), + url_loader_factory_(profile->GetDefaultStoragePartition() +@@ -121,7 +114,6 @@ EndpointFetcher::EndpointFetcher( + http_method_(http_method), + content_type_(content_type), + timeout_ms_(timeout_ms), +- intercept_redirect_(false), + post_data_(post_data), + annotation_tag_(annotation_tag), + url_loader_factory_(url_loader_factory), +@@ -148,7 +140,6 @@ EndpointFetcher::EndpointFetcher( + http_method_(http_method), + content_type_(content_type), + timeout_ms_(timeout_ms), +- intercept_redirect_(false), + post_data_(post_data), + headers_(headers), + cors_exempt_headers_(cors_exempt_headers), +@@ -160,29 +151,10 @@ EndpointFetcher::EndpointFetcher( + EndpointFetcher::EndpointFetcher( + const net::NetworkTrafficAnnotationTag& annotation_tag) + : timeout_ms_(kDefaultTimeOutMs), +- intercept_redirect_(false), + annotation_tag_(annotation_tag), identity_manager_(nullptr), sanitize_response_(true) {} +-// constructor used by Bromite -EndpointFetcher::EndpointFetcher( - Profile* const profile, - const GURL& url, +- const std::string& http_method, - int64_t timeout_ms, +- const bool intercept_redirect, - const net::NetworkTrafficAnnotationTag& annotation_tag) - : url_(url), +- http_method_(http_method), - timeout_ms_(timeout_ms), +- intercept_redirect_(intercept_redirect), - annotation_tag_(annotation_tag), - url_loader_factory_(profile->GetDefaultStoragePartition() - ->GetURLLoaderFactoryForBrowserProcess()), @@ -1057,47 +1178,97 @@ index b06c216b7a4a2..cd300edce8e39 100644 EndpointFetcher::~EndpointFetcher() = default; void EndpointFetcher::Fetch(EndpointFetcherCallback endpoint_fetcher_callback) { -@@ -322,77 +304,6 @@ std::string EndpointFetcher::GetUrlForTesting() { - return url_.spec(); - } - --void EndpointFetcher::PerformHeadRequest( -- EndpointFetcherCallback endpoint_fetcher_callback, -- const char* key, -- bool allow_redirect) { -- -- endpoint_fetcher_callback_ = std::move(endpoint_fetcher_callback); -- -- auto resource_request = std::make_unique(); -- resource_request->method = "HEAD"; -- resource_request->url = url_; -- resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; +@@ -235,8 +207,6 @@ void EndpointFetcher::PerformRequest( + resource_request->method = http_method_; + resource_request->url = url_; + resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; - resource_request->load_flags = net::LOAD_BYPASS_CACHE | net::LOAD_DISABLE_CACHE - | net::LOAD_DO_NOT_SAVE_COOKIES; -- if (allow_redirect == false) { -- resource_request->redirect_mode = network::mojom::RedirectMode::kManual; + if (base::EqualsCaseInsensitiveASCII(http_method_, "POST")) { + resource_request->headers.SetHeader(kContentTypeKey, content_type_); + } +@@ -269,59 +239,31 @@ void EndpointFetcher::PerformRequest( + default: + break; + } +- +- if (intercept_redirect_ == true) { +- // will need manual mode to capture the landing page URL +- resource_request->redirect_mode = network::mojom::RedirectMode::kManual; // default is kFollow - } - -- simple_url_loader_ = network::SimpleURLLoader::Create( -- std::move(resource_request), annotation_tag_); -- simple_url_loader_->SetTimeoutDuration( -- base::Milliseconds(timeout_ms_)); + // TODO(crbug.com/997018) Make simple_url_loader_ local variable passed to + // callback + simple_url_loader_ = network::SimpleURLLoader::Create( + std::move(resource_request), annotation_tag_); +- simple_url_loader_->SetTimeoutDuration(base::Milliseconds(timeout_ms_)); - simple_url_loader_->SetAllowHttpErrorResults(true); - -- if (!response_) +- if (!response_) { +- //RFC: what is this for? - response_ = std::make_unique(); -- -- if (allow_redirect == false) { +- } +- if (intercept_redirect_ == true) { +- // use a callback to capture landing page URL - simple_url_loader_->SetOnRedirectCallback(base::BindRepeating( - &EndpointFetcher::OnSimpleLoaderRedirect, base::Unretained(this))); - } + + if (base::EqualsCaseInsensitiveASCII(http_method_, "POST")) { + simple_url_loader_->AttachStringForUpload(post_data_, content_type_); + } + simple_url_loader_->SetRetryOptions(kNumRetries, + network::SimpleURLLoader::RETRY_ON_5XX); - -- simple_url_loader_->DownloadHeadersOnly( -- url_loader_factory_.get(), -- base::BindOnce(&EndpointFetcher::OnURLLoadComplete, -- base::Unretained(this))); --} +- LOG(INFO) << "performing " << http_method_ << " request to " << url_; +- if (base::EqualsCaseInsensitiveASCII(http_method_, "HEAD")) { +- endpoint_fetcher_callback_ = std::move(endpoint_fetcher_callback); - +- simple_url_loader_->DownloadHeadersOnly( +- url_loader_factory_.get(), +- base::BindOnce(&EndpointFetcher::OnURLLoadComplete, +- base::Unretained(this))); +- } else { +- network::SimpleURLLoader::BodyAsStringCallback body_as_string_callback = +- base::BindOnce(&EndpointFetcher::OnResponseFetched, ++ simple_url_loader_->SetTimeoutDuration(base::Milliseconds(timeout_ms_)); ++ simple_url_loader_->SetAllowHttpErrorResults(true); ++ network::SimpleURLLoader::BodyAsStringCallback body_as_string_callback = ++ base::BindOnce(&EndpointFetcher::OnResponseFetched, + weak_ptr_factory_.GetWeakPtr(), + std::move(endpoint_fetcher_callback)); +- simple_url_loader_->DownloadToString( +- url_loader_factory_.get(), std::move(body_as_string_callback), +- network::SimpleURLLoader::kMaxBoundedStringDownloadSize); +- } ++ simple_url_loader_->DownloadToString( ++ url_loader_factory_.get(), std::move(body_as_string_callback), ++ network::SimpleURLLoader::kMaxBoundedStringDownloadSize); + } + + void EndpointFetcher::OnResponseFetched( + EndpointFetcherCallback endpoint_fetcher_callback, + std::unique_ptr response_body) { + if (response_body) { +- simple_url_loader_.reset(); + if (sanitize_response_) { + data_decoder::JsonSanitizer::Sanitize( + std::move(*response_body), +@@ -339,9 +281,9 @@ void EndpointFetcher::OnResponseFetched( + std::string net_error = net::ErrorToString(simple_url_loader_->NetError()); + LOG(ERROR) << __func__ << " with response error: " << net_error; + response->response = "There was a response error"; +- simple_url_loader_.reset(); + std::move(endpoint_fetcher_callback).Run(std::move(response)); + } ++ simple_url_loader_.reset(); + } + + void EndpointFetcher::OnSanitizationResult( +@@ -362,40 +304,6 @@ std::string EndpointFetcher::GetUrlForTesting() { + return url_.spec(); + } + -void EndpointFetcher::OnSimpleLoaderRedirect( - const net::RedirectInfo& redirect_info, - const network::mojom::URLResponseHead& response_head, @@ -1132,10 +1303,10 @@ index b06c216b7a4a2..cd300edce8e39 100644 - std::move(endpoint_fetcher_callback_).Run(std::move(response_)); -} - - #if defined(OS_ANDROID) + #if BUILDFLAG(IS_ANDROID) namespace { static void OnEndpointFetcherComplete( -@@ -409,25 +320,6 @@ static void OnEndpointFetcherComplete( +@@ -412,25 +320,6 @@ static void OnEndpointFetcherComplete( base::android::AttachCurrentThread(), std::move(endpoint_response->response)))); } @@ -1161,7 +1332,26 @@ index b06c216b7a4a2..cd300edce8e39 100644 } // namespace // TODO(crbug.com/1077537) Create a KeyProvider so -@@ -517,25 +409,4 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( +@@ -503,15 +392,13 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( + JNIEnv* env, + const base::android::JavaParamRef& jprofile, + const base::android::JavaParamRef& jurl, +- jlong jtimeout, jboolean intercept_redirect, ++ jint jannotation_hash_code, + const base::android::JavaParamRef& jcallback) { + auto endpoint_fetcher = std::make_unique( + ProfileAndroid::FromProfileAndroid(jprofile), + GURL(base::android::ConvertJavaStringToUTF8(env, jurl)), +- "GET", +- jtimeout, +- intercept_redirect, +- NO_TRAFFIC_ANNOTATION_YET); ++ net::NetworkTrafficAnnotationTag::FromJavaAnnotation( ++ jannotation_hash_code)); + auto* const endpoint_fetcher_ptr = endpoint_fetcher.get(); + endpoint_fetcher_ptr->PerformRequest( + base::BindOnce(&OnEndpointFetcherComplete, +@@ -522,27 +409,4 @@ static void JNI_EndpointFetcher_NativeFetchWithNoAuth( nullptr); } @@ -1169,26 +1359,28 @@ index b06c216b7a4a2..cd300edce8e39 100644 - JNIEnv* env, - const base::android::JavaParamRef& jprofile, - const base::android::JavaParamRef& jurl, -- jlong jtimeout, jboolean allow_redirect, +- jlong jtimeout, jboolean intercept_redirect, - const base::android::JavaParamRef& jcallback) { - auto endpoint_fetcher = std::make_unique( - ProfileAndroid::FromProfileAndroid(jprofile), - GURL(base::android::ConvertJavaStringToUTF8(env, jurl)), +- "HEAD", - jtimeout, +- intercept_redirect, - NO_TRAFFIC_ANNOTATION_YET); - auto* const endpoint_fetcher_ptr = endpoint_fetcher.get(); -- endpoint_fetcher_ptr->PerformHeadRequest( +- endpoint_fetcher_ptr->PerformRequest( - base::BindOnce(&OnEndpointFetcherHeadComplete, - base::android::ScopedJavaGlobalRef(jcallback), - // unique_ptr endpoint_fetcher is passed until the callback - // to ensure its lifetime across the request. - std::move(endpoint_fetcher)), -- nullptr, allow_redirect); +- nullptr); -} - - #endif // defined(OS_ANDROID) + #endif // BUILDFLAG(IS_ANDROID) diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher.h b/chrome/browser/endpoint_fetcher/endpoint_fetcher.h -index 1396a5cd9e709..114e60faa4d1a 100644 +index 90c8d1ede51f4..114e60faa4d1a 100644 --- a/chrome/browser/endpoint_fetcher/endpoint_fetcher.h +++ b/chrome/browser/endpoint_fetcher/endpoint_fetcher.h @@ -15,8 +15,6 @@ @@ -1209,31 +1401,22 @@ index 1396a5cd9e709..114e60faa4d1a 100644 // TODO(crbug.com/993393) Add more detailed error messaging }; -@@ -82,12 +78,6 @@ class EndpointFetcher { +@@ -82,14 +78,6 @@ class EndpointFetcher { const GURL& url, const net::NetworkTrafficAnnotationTag& annotation_tag); - // Constructor if no authentication is needed, with timeout - EndpointFetcher(Profile* const profile, - const GURL& url, +- const std::string& http_method, - int64_t timeout_ms, +- const bool intercept_redirect, - const net::NetworkTrafficAnnotationTag& annotation_tag); - // Used for tests. Can be used if caller constructs their own // url_loader_factory and identity_manager. EndpointFetcher( -@@ -128,10 +118,6 @@ class EndpointFetcher { - - std::string GetUrlForTesting(); - -- virtual void PerformHeadRequest(EndpointFetcherCallback endpoint_fetcher_callback, -- const char* key, -- bool allow_redirect); -- - protected: - // Used for Mock only. see MockEndpointFetcher class. - explicit EndpointFetcher( -@@ -145,10 +131,6 @@ class EndpointFetcher { +@@ -143,10 +131,6 @@ class EndpointFetcher { std::unique_ptr response_body); void OnSanitizationResult(EndpointFetcherCallback endpoint_fetcher_callback, data_decoder::JsonSanitizer::Result result); @@ -1244,7 +1427,7 @@ index 1396a5cd9e709..114e60faa4d1a 100644 enum AuthType { CHROME_API_KEY, OAUTH, NO_AUTH }; AuthType auth_type_; -@@ -156,7 +138,7 @@ class EndpointFetcher { +@@ -154,11 +138,10 @@ class EndpointFetcher { // Members set in constructor to be passed to network::ResourceRequest or // network::SimpleURLLoader. const std::string oauth_consumer_name_; @@ -1253,7 +1436,11 @@ index 1396a5cd9e709..114e60faa4d1a 100644 const std::string http_method_; const std::string content_type_; int64_t timeout_ms_; -@@ -176,9 +158,6 @@ class EndpointFetcher { +- const bool intercept_redirect_; + const std::string post_data_; + const std::vector headers_; + const std::vector cors_exempt_headers_; +@@ -175,9 +158,6 @@ class EndpointFetcher { access_token_fetcher_; std::unique_ptr simple_url_loader_; @@ -1264,10 +1451,10 @@ index 1396a5cd9e709..114e60faa4d1a 100644 }; diff --git a/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java b/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java -index 48bd1e70c4b9e..120a06cf8e799 100644 +index 44cb65d6535f3..120a06cf8e799 100644 --- a/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java +++ b/chrome/browser/endpoint_fetcher/java/src/org/chromium/chrome/browser/endpoint_fetcher/EndpointFetcher.java -@@ -70,14 +70,6 @@ public final class EndpointFetcher { +@@ -70,22 +70,6 @@ public final class EndpointFetcher { postData, timeout, headers, annotation.getHashCode(), callback); } @@ -1278,13 +1465,25 @@ index 48bd1e70c4b9e..120a06cf8e799 100644 - EndpointFetcherJni.get().nativeHeadWithNoAuth( - profile, url, timeout, allow_redirect, callback); - } +- +- @MainThread +- public static void nativeFetchWithNoAuth( +- Callback callback, Profile profile, +- String url, long timeout, boolean allow_redirect) { +- EndpointFetcherJni.get().nativeFetchWithNoAuth( +- profile, url, timeout, allow_redirect, callback); +- } - @NativeMethods public interface Natives { void nativeFetchOAuth(Profile profile, String oathConsumerName, String url, -@@ -88,8 +80,5 @@ public final class EndpointFetcher { +@@ -94,11 +78,7 @@ public final class EndpointFetcher { + void nativeFetchChromeAPIKey(Profile profile, String url, String httpsMethod, + String contentType, String postData, long timeout, String[] headers, int annotationHashCode, Callback callback); - void nativeFetchWithNoAuth(Profile profile, String url, int annotationHashCode, +- void nativeFetchWithNoAuth( +- Profile profile, String url, long timeout, boolean allow_redirect, ++ void nativeFetchWithNoAuth(Profile profile, String url, int annotationHashCode, Callback callback); - void nativeHeadWithNoAuth( - Profile profile, String url, long timeout, boolean allow_redirect, @@ -1329,46 +1528,44 @@ index a7bd35381ccd1..0000000000000 - } -} diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc -index 2eb5d72519734..b37301a8a3398 100644 +index a5ad56a862dd0..798695f190d55 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc -@@ -246,7 +246,6 @@ const base::Feature* const kFeaturesExposedToJava[] = { +@@ -252,7 +252,6 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kNewWindowAppMenu, &kOfflineIndicatorV2, - &kOfflineMeasurementsBackgroundTask, -- &kInlineUpdateFlow, &kPageAnnotationsService, +- &kInlineUpdateFlow, &kBookmarksImprovedSaveFlow, &kBookmarksRefresh, -@@ -655,10 +654,7 @@ const base::Feature kIncognitoReauthenticationForAndroid{ - "IncognitoReauthenticationForAndroid", base::FEATURE_DISABLED_BY_DEFAULT}; - + &kProbabilisticCryptidRenderer, +@@ -686,9 +685,6 @@ const base::Feature kIncognitoReauthenticationForAndroid{ const base::Feature kIncognitoScreenshot{"IncognitoScreenshot", -- base::FEATURE_ENABLED_BY_DEFAULT}; -- + base::FEATURE_DISABLED_BY_DEFAULT}; + -const base::Feature kInlineUpdateFlow{"InlineUpdateFlow", - base::FEATURE_ENABLED_BY_DEFAULT}; -+ base::FEATURE_DISABLED_BY_DEFAULT}; - +- const base::Feature kInstantStart{"InstantStart", 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 486fffb82ce19..a99e8bdba8fba 100644 +index 3062304db9059..2c3c2dafc0ad0 100644 --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h -@@ -106,7 +106,6 @@ extern const base::Feature kImmersiveUiMode; +@@ -109,7 +109,6 @@ extern const base::Feature kImmersiveUiMode; extern const base::Feature kIncognitoReauthenticationForAndroid; extern const base::Feature kIncognitoScreenshot; extern const base::Feature kImprovedA2HS; -extern const base::Feature kInlineUpdateFlow; + extern const base::Feature kImproveReaderModePrompt; extern const base::Feature kInstanceSwitcher; extern const base::Feature kInstantStart; - extern const base::Feature kKitKatSupported; 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 acff73c679c8a..9ced8d8c9c1f0 100644 +index 454e18116fad0..2c9e4d8ad6c0e 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 -@@ -361,7 +361,6 @@ public abstract class ChromeFeatureList { +@@ -366,7 +366,6 @@ public abstract class ChromeFeatureList { public static final String INCOGNITO_REAUTHENTICATION_FOR_ANDROID = "IncognitoReauthenticationForAndroid"; public static final String INCOGNITO_SCREENSHOT = "IncognitoScreenshot"; @@ -1377,10 +1574,10 @@ index acff73c679c8a..9ced8d8c9c1f0 100644 public static final String INSTANCE_SWITCHER = "InstanceSwitcher"; public static final String INSTANT_START = "InstantStart"; diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd -index 2bb1965e7faad..2245bb72fcfcf 100644 +index af8fdbc61351a..20cb660547262 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd -@@ -1838,12 +1838,6 @@ Your Google account may have other forms of browsing history like searches and a +@@ -1839,12 +1839,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 @@ -1393,16 +1590,19 @@ index 2bb1965e7faad..2245bb72fcfcf 100644 -@@ -3364,7 +3358,7 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

- Update Bromite +- +- +- Update not available. Read more + Update Chrome Newer version is available -@@ -3375,18 +3369,6 @@ To change this setting, <resetlink>reset sync

<resetlink>reset sync

Android version is unsupported diff --git a/build/patches/0014-Revert-Block-gateway-attacks-via-websockets.patch b/build/patches/0012-Revert-Block-gateway-attacks-via-websockets.patch similarity index 88% rename from build/patches/0014-Revert-Block-gateway-attacks-via-websockets.patch rename to build/patches/0012-Revert-Block-gateway-attacks-via-websockets.patch index 1f19141d6dd16ccd976ad4321ad50b3fae709961..bf9cee9906c4ef064a0ef0163bc00d31bd3cf5e5 100644 --- a/build/patches/0014-Revert-Block-gateway-attacks-via-websockets.patch +++ b/build/patches/0012-Revert-Block-gateway-attacks-via-websockets.patch @@ -1,23 +1,23 @@ -From e741136669c4e8dd30556797cfd12b9392d94926 Mon Sep 17 00:00:00 2001 +From 8e120aa0470ed9c9967787dd630aca7e0e02bfa3 Mon Sep 17 00:00:00 2001 From: Aayush Gupta -Date: Tue, 22 Feb 2022 06:15:22 +0000 -Subject: [PATCH 14/15] Revert "Block gateway attacks via websockets" +Date: Tue, 22 Mar 2022 08:34:04 +0000 +Subject: [PATCH 12/13] Revert "Block gateway attacks via websockets" -This reverts commit 76950e51abb18a33a26f7b92dcd48466b54ca086. +This reverts commit eed9daba155d6440f85a55d4ebbf4da3914eedde. --- .../renderer/core/loader/base_fetch_context.h | 1 - - .../core/loader/frame_fetch_context.cc | 20 -------------- + .../core/loader/frame_fetch_context.cc | 20 ------------- .../core/loader/frame_fetch_context.h | 1 - - .../core/loader/worker_fetch_context.cc | 21 --------------- + .../core/loader/worker_fetch_context.cc | 21 -------------- .../core/loader/worker_fetch_context.h | 1 - - .../background_fetch_manager.cc | 2 ++ + .../background_fetch_manager.cc | 4 +-- .../websockets/websocket_channel_impl.cc | 5 ---- - .../modules/websockets/websocket_common.cc | 27 ------------------- + .../modules/websockets/websocket_common.cc | 29 ------------------- .../modules/websockets/websocket_common.h | 4 --- - 9 files changed, 2 insertions(+), 80 deletions(-) + 9 files changed, 2 insertions(+), 84 deletions(-) diff --git a/third_party/blink/renderer/core/loader/base_fetch_context.h b/third_party/blink/renderer/core/loader/base_fetch_context.h -index 1b99b3e337b7d..d17fba746796f 100644 +index 5a560cf29b2c6..36997bb271d63 100644 --- a/third_party/blink/renderer/core/loader/base_fetch_context.h +++ b/third_party/blink/renderer/core/loader/base_fetch_context.h @@ -83,7 +83,6 @@ class CORE_EXPORT BaseFetchContext : public FetchContext { @@ -29,10 +29,10 @@ index 1b99b3e337b7d..d17fba746796f 100644 CreateWebSocketHandshakeThrottle() = 0; diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc -index 03548807c147c..05f9979d0220f 100644 +index dae7e3d0cea4b..c0b819535f1ef 100644 --- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc +++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc -@@ -563,26 +563,6 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const { +@@ -558,26 +558,6 @@ bool FrameFetchContext::ShouldBlockRequestByInspector(const KURL& url) const { return should_block_request; } @@ -60,10 +60,10 @@ index 03548807c147c..05f9979d0220f 100644 const ResourceRequest& resource_request, const ResourceLoaderOptions& options, diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.h b/third_party/blink/renderer/core/loader/frame_fetch_context.h -index be8c5f9d53d04..29d45f66f409f 100644 +index 4c1e572df5ab2..06e0907b666d0 100644 --- a/third_party/blink/renderer/core/loader/frame_fetch_context.h +++ b/third_party/blink/renderer/core/loader/frame_fetch_context.h -@@ -179,7 +179,6 @@ class CORE_EXPORT FrameFetchContext final : public BaseFetchContext, +@@ -178,7 +178,6 @@ class CORE_EXPORT FrameFetchContext final : public BaseFetchContext, bool ShouldBlockWebSocketByMixedContentCheck(const KURL&) const override; std::unique_ptr CreateWebSocketHandshakeThrottle() override; @@ -123,18 +123,22 @@ index 04eaa276e28e9..52afb756db1db 100644 mojom::blink::RequestContextType request_context, const absl::optional& redirect_info, diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc -index 25273eada64b3..f4f354e335042 100644 +index bd653a0ea510e..f4f354e335042 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_manager.cc -@@ -104,6 +104,7 @@ bool ShouldBlockDanglingMarkup(const KURL& request_url) { +@@ -104,10 +104,9 @@ bool ShouldBlockDanglingMarkup(const KURL& request_url) { bool ShouldBlockGateWayAttacks(ExecutionContext* execution_context, const KURL& request_url) { + if (RuntimeEnabledFeatures::CorsRFC1918Enabled()) { network::mojom::IPAddressSpace requestor_space = execution_context->AddressSpace(); +- if (requestor_space == network::mojom::IPAddressSpace::kUnknown) +- requestor_space = network::mojom::IPAddressSpace::kPublic; -@@ -120,6 +121,7 @@ bool ShouldBlockGateWayAttacks(ExecutionContext* execution_context, + // TODO(mkwst): This only checks explicit IP addresses. We'll have to move + // all this up to //net and //content in order to have any real impact on +@@ -122,6 +121,7 @@ bool ShouldBlockGateWayAttacks(ExecutionContext* execution_context, bool is_external_request = requestor_space > target_space; if (is_external_request) return true; @@ -143,7 +147,7 @@ index 25273eada64b3..f4f354e335042 100644 return false; } diff --git a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc -index 049807b8ee5a1..7c239642442c6 100644 +index f71e9501dfa36..8bb6ff33644d7 100644 --- a/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc +++ b/third_party/blink/renderer/modules/websockets/websocket_channel_impl.cc @@ -274,11 +274,6 @@ bool WebSocketChannelImpl::Connect(const KURL& url, const String& protocol) { @@ -159,10 +163,10 @@ index 049807b8ee5a1..7c239642442c6 100644 feature_handle_for_scheduler_ = scheduler->RegisterFeature( SchedulingPolicy::Feature::kWebSocket, diff --git a/third_party/blink/renderer/modules/websockets/websocket_common.cc b/third_party/blink/renderer/modules/websockets/websocket_common.cc -index 95c141bbe6c1b..2ea9b38c93a72 100644 +index 1f53747c74409..2ea9b38c93a72 100644 --- a/third_party/blink/renderer/modules/websockets/websocket_common.cc +++ b/third_party/blink/renderer/modules/websockets/websocket_common.cc -@@ -124,36 +124,9 @@ WebSocketCommon::ConnectResult WebSocketCommon::Connect( +@@ -124,38 +124,9 @@ WebSocketCommon::ConnectResult WebSocketCommon::Connect( return ConnectResult::kException; } @@ -182,6 +186,8 @@ index 95c141bbe6c1b..2ea9b38c93a72 100644 - // TODO(mkwst): This only checks explicit IP addresses. We'll have to move - // all this up to //net and //content in order to have any real impact on - // gateway attacks. That turns out to be a TON of work (crbug.com/378566). +- if (requestor_space == network::mojom::IPAddressSpace::kUnknown) +- requestor_space = network::mojom::IPAddressSpace::kPublic; - network::mojom::IPAddressSpace target_space = - network::mojom::IPAddressSpace::kPublic; - if (network_utils::IsReservedIPAddress(request_url.Host())) diff --git a/build/patches/0015-Revert-Disable-unified-autoplay-feature.patch b/build/patches/0013-Revert-Disable-unified-autoplay-feature.patch similarity index 65% rename from build/patches/0015-Revert-Disable-unified-autoplay-feature.patch rename to build/patches/0013-Revert-Disable-unified-autoplay-feature.patch index 8f4902456d9b97eb0edc917165b129b2164501b0..718b027a1d0b79eb36caf3d6494cd72a447ff4e4 100644 --- a/build/patches/0015-Revert-Disable-unified-autoplay-feature.patch +++ b/build/patches/0013-Revert-Disable-unified-autoplay-feature.patch @@ -1,25 +1,25 @@ -From 4d3fa0e80e7bd910dcbb326b20e3155f76e4449a Mon Sep 17 00:00:00 2001 +From 56a2259f1167e8defc5ab0e0048ca07a37f3694e Mon Sep 17 00:00:00 2001 From: Aayush Gupta -Date: Tue, 22 Feb 2022 06:16:17 +0000 -Subject: [PATCH 15/15] Revert "Disable unified autoplay feature" +Date: Tue, 22 Mar 2022 08:34:28 +0000 +Subject: [PATCH 13/13] Revert "Disable unified autoplay feature" -This reverts commit 528913dad9e9b92436c44de87fa95dcdaf560d19. +This reverts commit a2e273b85e59dc44fb312047ca0cc07692114d3b. --- media/base/media_switches.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc -index c81dc5642b702..de0a5fbb23ee2 100644 +index 656f1aa83e03f..e210d524f4658 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc -@@ -464,7 +464,7 @@ const base::Feature kUseR16Texture{"use-r16-texture", +@@ -469,7 +469,7 @@ const base::Feature kUseR16Texture{"use-r16-texture", // Enables the Unified Autoplay policy by overriding the platform's default // autoplay policy. const base::Feature kUnifiedAutoplay{"UnifiedAutoplay", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; - #if defined(OS_LINUX) + #if BUILDFLAG(IS_LINUX) // Enable vaapi video decoding on linux. This is already enabled by default on -- 2.25.1