diff --git a/DEPS b/DEPS index 0d2df779..48594338 100644 --- a/DEPS +++ b/DEPS
@@ -280,15 +280,15 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '09f8ab0c9b712ccbae5817b7eac61ba22a70e7b5', + 'skia_revision': '65d7bff9d16aaec9c731c16cccfbca8303e60992', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '3d61ee54508da90257a11fca00f5542d84c5ba96', + 'v8_revision': '8d90bc07afaf3d2a0b8fabb44ebc6dcec67e02ad', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '5e515f779d6674c7dfc32c5088895aebd4d2cdd0', + 'angle_revision': 'b225419fd2270f75a096a8c638857fb8ddcc1f29', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -328,7 +328,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': '38272bf85341348eb0a5162ba4e1c95d370f9bce', + 'freetype_revision': '10b3b14da2a60151dd9242364ad7a375d0d7590a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. @@ -372,7 +372,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '6865bf119d83444dbbc2a6a426612e20ea1e5ec6', + 'devtools_frontend_revision': '586fb9db396c599ab5549f869429f886c724a827', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -396,7 +396,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'e5701af2e856bc89ab766bad8539fca0f0e15322', + 'dawn_revision': 'a15bad593af06a881fbbbfcebf2e58c18e1cf6f1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -496,11 +496,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. - 'llvm_libc_revision': '5562ea781ed152fec2f5c6b86dc1b8e446e21f6a', + 'llvm_libc_revision': 'b0de9011b9f34818da12b1448f40e212f611afa3', # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '9ba1d4922ab23234f7a2af4c8cd7699756959950', + 'libcxx_revision': 'b4511937e4e55617e26ba3912e0dc169443e0c00', # GN CIPD package version. 'gn_version': 'git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd', @@ -799,143 +799,143 @@ 'objects': [ { # The Android libclang_rt.builtins libraries are currently only included in the Linux clang package. - 'object_name': 'Linux_x64/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': 'e2cc96aef6e4c90525bb47401e3310ab2012063e7090df609b6e7ee4e0cedcf5', - 'size_bytes': 54419828, - 'generation': 1733131121091279, + 'object_name': 'Linux_x64/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '312f81ba0a77fb66f077f4af105fed1ae3f7068c63127b79c560336befd7e957', + 'size_bytes': 54162056, + 'generation': 1734710928554494, 'condition': '(host_os == "linux" or checkout_android) and non_git_source', }, { - 'object_name': 'Linux_x64/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '6772829b59e79aae1e6f5d68c2be1d7d9610cbd879a0c02d132eda8bab224f5c', - 'size_bytes': 13097604, - 'generation': 1733131121366758, + 'object_name': 'Linux_x64/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '53b1db6cc843ffca33075ced2ebb02f288dfe96377b53d1ca7c873b7c15cbb91', + 'size_bytes': 13132028, + 'generation': 1734710928725653, 'condition': 'host_os == "linux" and checkout_clang_tidy and non_git_source', }, { - 'object_name': 'Linux_x64/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '63475ffe32d4ae2432d1dd1eeb48bb69794ddc4f78ff15a913f77019d5e5b365', - 'size_bytes': 27679064, - 'generation': 1733131121482543, + 'object_name': 'Linux_x64/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '8a104f0285327201712496fe039425f859002dc9ecdec52b00f86122097adce0', + 'size_bytes': 27649620, + 'generation': 1734710928800469, 'condition': 'host_os == "linux" and checkout_clangd and non_git_source', }, { - 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': 'b7128ce662619356de464d1c37a70342707d23ca8549c34e8e487e2d5638deb4', - 'size_bytes': 2393880, - 'generation': 1733131121884494, + 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': 'b461b1ef2783b55403eb5002cb2a5e4a833b668cf6983457cb9e8b341b9b0cba', + 'size_bytes': 2291412, + 'generation': 1734710929037009, 'condition': 'host_os == "linux" and checkout_clang_coverage_tools and non_git_source', }, { - 'object_name': 'Linux_x64/llvmobjdump-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '1e13a5c0085db969256e237ea93e57b373589e3342a21f353444c7978ffe5392', - 'size_bytes': 5541520, - 'generation': 1733131121622535, + 'object_name': 'Linux_x64/llvmobjdump-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': 'fd415f35825401b91c02bb4883bab3ee0bb2981fa3c83268242dbb83da494a17', + 'size_bytes': 5374952, + 'generation': 1734710928876309, 'condition': '(checkout_linux or checkout_mac or checkout_android and host_os != "mac") and non_git_source', }, { - 'object_name': 'Mac/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '319ece3dde9edc65dea6fd7ef12feb26c78c6c775749f0c66ef8da0c73bf02ea', - 'size_bytes': 48880736, - 'generation': 1733131123302515, + 'object_name': 'Mac/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': 'a87e78f91148b227e2791606f1d6491e65a3343e488a5d9afb28739e89b892b9', + 'size_bytes': 49075240, + 'generation': 1734710930234741, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '3a564112c5d7174c036145052e88fba6b2bcd29f5818fba8a91ce0fce4688be7', - 'size_bytes': 977584, - 'generation': 1733131140922386, + 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '6126aa8fb58ac245aa3fcc3da7500aa218943a062a66b10facf9034dff50b837', + 'size_bytes': 973872, + 'generation': 1734710937791397, 'condition': 'checkout_mac and not host_os == "mac"', }, { - 'object_name': 'Mac/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '6a53994ba0a1681097218acc01530a021be8332aa7f6779be3fa7fe04f873a62', - 'size_bytes': 12673340, - 'generation': 1733131123665839, + 'object_name': 'Mac/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '4c64b2240cb7b914f688e63359af9f12c05ade20c2fc535a77269e4ab791c1c3', + 'size_bytes': 12745672, + 'generation': 1734710930422203, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_tidy', }, { - 'object_name': 'Mac/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '4e24ba1dcef6b0b59176167d8ef56d338fa86c97726ab4b9ab52db0950b99653', - 'size_bytes': 26074940, - 'generation': 1733131123670297, + 'object_name': 'Mac/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '108cb2d05898954bbecb6ea7f0892f89f2ec4956d91e360fbf62dc200cc28582', + 'size_bytes': 26510732, + 'generation': 1734710930517598, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clangd', }, { - 'object_name': 'Mac/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': 'e228350dad97e33bcb9b5490d2b247284374d993bc383606a0dc01e77bf58457', - 'size_bytes': 2255152, - 'generation': 1733131124117880, + 'object_name': 'Mac/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '227998c40ca12ed2e35c45f306baeee7b8e0e44ee149ddc85aece82ff6964aad', + 'size_bytes': 2249192, + 'generation': 1734710930772724, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Mac_arm64/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': 'de28b9321ac84ebcb122e9c2dd4d743efbb3812d19a45b465c3e86de448b2e26', - 'size_bytes': 42969444, - 'generation': 1733131142308815, + 'object_name': 'Mac_arm64/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '7783806795f320f06abf77f8066e64448a101a1a40695ba6252b9c6315b7fdf2', + 'size_bytes': 43083188, + 'generation': 1734710939037981, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Mac_arm64/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '8c6fad4b674772df164223546af7e37d64958a5d4ccf4c6a85310b82a2f8ad3b', - 'size_bytes': 11274400, - 'generation': 1733131142586873, + 'object_name': 'Mac_arm64/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '6d90f4b059a505baf0090ccbc8bf3a55a4d17715569645e575d47cff60d4ddd4', + 'size_bytes': 11350532, + 'generation': 1734710939102253, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_tidy', }, { - 'object_name': 'Mac_arm64/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': 'fa2bd872d38a92c5b5fb93d5fd2a6820d067096856abf3b0a0c129f81cc0f51b', - 'size_bytes': 22709972, - 'generation': 1733131142721437, + 'object_name': 'Mac_arm64/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '73de9e6907e145a21fc23125baeedfbca512121a0ed4417d6b180376cc14eb9d', + 'size_bytes': 22968152, + 'generation': 1734710939199537, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clangd', }, { - 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': 'a74fc47a3475e24898048155638a28db4c001cf88d1b3c072616b8aa13873ad5', - 'size_bytes': 1980832, - 'generation': 1733131143158718, + 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': 'bd7b522a4b5f1a8741d41fe7bab3a36ff1dccba093ec3eed9cb32dce48c86b6a', + 'size_bytes': 1975468, + 'generation': 1734710939499752, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Win/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '1a651c9c3e64ad8c1e2417c527226ef93ebf15a096b9daba2c92208137a9ef21', - 'size_bytes': 46202484, - 'generation': 1733131163286134, + 'object_name': 'Win/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '1b197f968fdc7e5a9a4ce3c76f8490d5b35877fca755771510a9e9292275128f', + 'size_bytes': 46308816, + 'generation': 1734710948582253, 'condition': 'host_os == "win"', }, { - 'object_name': 'Win/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '780c66e1c39c2cce937887944d32176483fd08b2f4990d20816293be5d95d37b', - 'size_bytes': 12901244, - 'generation': 1733131163613393, + 'object_name': 'Win/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '3a2fb754132ced5c22ef6dec34e411b07947c0e03ff7c05db60c8923c23814b6', + 'size_bytes': 12944020, + 'generation': 1734710948743476, 'condition': 'host_os == "win" and checkout_clang_tidy', }, { - 'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '57dab4c3dc4f70b0249643979d40249f76cfe85c56c5773bbf65efd170f5e6b3', - 'size_bytes': 2477936, - 'generation': 1733131182887719, + 'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': 'b0db5463446fdc218f4ae998c6f78d275c274fe023dd2f9d78941c01827dcd46', + 'size_bytes': 2457348, + 'generation': 1734710956415612, 'condition': 'checkout_win and not host_os == "win"', }, { - 'object_name': 'Win/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '462df1784a09e1d7fd7c7ff62856c8bc9ab68c4ecb59de375c1cfcaaf88cc80f', - 'size_bytes': 25482156, - 'generation': 1733131163767856, + 'object_name': 'Win/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': 'f6a920b6f0325133affac130eab0ab27dc2cc602a0ab604660b526ed2e0d4914', + 'size_bytes': 25572060, + 'generation': 1734710948820492, 'condition': 'host_os == "win" and checkout_clangd', }, { - 'object_name': 'Win/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '10b8ec087f9bc4bd882134a33b71cbd315b5b65e615d1ec05abcf6ddda78f687', - 'size_bytes': 2402404, - 'generation': 1733131164203293, + 'object_name': 'Win/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '29b1eb6e91a1a084632f2621911c1f835eef9411275b6741d961e2eac4efe0d3', + 'size_bytes': 2360676, + 'generation': 1734710949094107, 'condition': 'host_os == "win" and checkout_clang_coverage_tools', }, { - 'object_name': 'Win/llvmobjdump-llvmorg-20-init-13894-g8cb44859-1.tar.xz', - 'sha256sum': '6249c10ff32bdb66d02fe44b08d50ae7e83baaea9981f158c7f3e2cccb112ab0', - 'size_bytes': 5543640, - 'generation': 1733131163939384, + 'object_name': 'Win/llvmobjdump-llvmorg-20-init-16062-g091448e3-1.tar.xz', + 'sha256sum': '958f0271bac109b5b6952ed3a84b7e334d0392f847d2038334dbb61688574ed0', + 'size_bytes': 5455196, + 'generation': 1734710948890307, 'condition': 'checkout_linux or checkout_mac or checkout_android and host_os == "win"', }, ] @@ -946,31 +946,31 @@ 'bucket': 'chromium-browser-clang', 'objects': [ { - 'object_name': 'Linux_x64/rust-toolchain-a522d78598415cdd614ccc6d961160f192f64b5c-1-llvmorg-20-init-13894-g8cb44859.tar.xz', - 'sha256sum': 'dce38497f0f07e48fe15f0a7565baf7bd77f824ced74b888182acfa920253307', - 'size_bytes': 124315836, - 'generation': 1733131115209007, + 'object_name': 'Linux_x64/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', + 'sha256sum': 'd95be7651ce879e92b18949e1228775e01352960600ed4ff389815ce8848676d', + 'size_bytes': 124379804, + 'generation': 1734710923416010, 'condition': 'host_os == "linux" and non_git_source', }, { - 'object_name': 'Mac/rust-toolchain-a522d78598415cdd614ccc6d961160f192f64b5c-1-llvmorg-20-init-13894-g8cb44859.tar.xz', - 'sha256sum': 'eadff4d1eef4ce971c2ba13c292ed03862e65e5d58be23a91a135b17bede41dc', - 'size_bytes': 116695668, - 'generation': 1733131116590926, + 'object_name': 'Mac/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', + 'sha256sum': '01b25314a55fe0818b1f0b5ea8a8c6a469408618bb20f74f1e744c3d64b6c3eb', + 'size_bytes': 117354480, + 'generation': 1734710924611322, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac_arm64/rust-toolchain-a522d78598415cdd614ccc6d961160f192f64b5c-1-llvmorg-20-init-13894-g8cb44859.tar.xz', - 'sha256sum': '1fe555df5c0772721334e508cae0d1d7e59409c264a11bb4be2db5ab6ec75296', - 'size_bytes': 101961216, - 'generation': 1733131117910605, + 'object_name': 'Mac_arm64/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', + 'sha256sum': '0bb931bdb9e68573a8ad8298d6ecd50a3cc9d37ba9af492aa386aedab25517e6', + 'size_bytes': 102273988, + 'generation': 1734710925809018, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Win/rust-toolchain-a522d78598415cdd614ccc6d961160f192f64b5c-1-llvmorg-20-init-13894-g8cb44859.tar.xz', - 'sha256sum': '70364b270bcc75bb30a572ca40a85f67c354409171c7018caee4a446b4abd3db', - 'size_bytes': 176646316, - 'generation': 1733131119397229, + 'object_name': 'Win/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', + 'sha256sum': 'd709f967e0dcfa8aaba98b98111145e6f1e0b41aa0816c6e46144176b0c7d645', + 'size_bytes': 176629828, + 'generation': 1734710927011110, 'condition': 'host_os == "win"', }, ], @@ -1304,12 +1304,12 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'd90d7402d89b583f564f4505a6d97802afea5cae', + '4d4cf09821c697212343fc07e330cf0438982470', 'condition': 'checkout_android and checkout_src_internal', }, 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '1229734e08d74bf1d5ce69051ed70d2b392d356c', + 'url': Var('chromium_git') + '/website.git' + '@' + '35124dbd52018ec09acadfbf61b18d5ca4d4b067', }, 'src/ios/third_party/earl_grey2/src': { @@ -1463,7 +1463,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'XOFE2ivPYQt3K7Rf2BwPZILAwtXdqXBpG8nvCw9KOsQC', + 'version': '7Ly5SKSpj-BSWl8ZfieWHKNKzAQFLh71VbvmMELC-8IC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2301,7 +2301,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '79e2dcdef714a3d7f6e09a115cd9fba0c04c7689', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'fe572aaa214487007138ea9a546692771bd6e25b', 'src/base/tracing/test/data': { 'bucket': 'perfetto', @@ -2669,7 +2669,7 @@ Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'bee2c5d019c6af2657a6a4c07e98ed505ce380ea', + Var('webrtc_git') + '/src.git' + '@' + '14e46ed65c828d39d438d925a21b080a5a0a6190', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -2806,7 +2806,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'HUO9uU7KuYaRqjHLxZJQtBfBCCczzLQmpx2Xk7Q_hFkC', + 'version': '_xp5u4wpujd4KEWhbjNbEh6bh-WlrcPnqvCsXJ4fX_AC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2817,7 +2817,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'vQxK3IF9zFKY1D5galFo4Vc5QenqXGMbLThfqVy2RGEC', + 'version': 'MnpNDCJwA0xJ7HGJ-RC6vOkf6l0gBLd2igNuidY0r_4C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2850,7 +2850,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'qmQ5v0RrpTAX0wWa5RHg-klG52esw3D5TZskhAZnWmUC', + 'version': 'Qa9jMtybPjQOXgsBXbaSJtnn4xf3bayzPuJu70kpwp0C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -4497,7 +4497,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - 'f821f395d9f28b7b73559bc6556630ecc1f3af06', + '61022675d8772a34fc6bcc1c3b60908fc0ee6623', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java index f0b743a..d2aac25 100644 --- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java +++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -302,6 +302,9 @@ AutofillFeatures.AUTOFILL_USE_PL_ADDRESS_MODEL, "When enabled, Autofill uses a custom address model for Poland."), Flag.baseFeature( + AutofillFeatures.AUTOFILL_SUPPORT_LAST_NAME_PREFIX, + "When enabled, Autofill uses a custom name hierarchy for parsing last names."), + Flag.baseFeature( AutofillFeatures.AUTOFILL_USE_SUBMITTED_FORM_IN_HTML_SUBMISSION, "When enabled, Autofill will start falling back to the saved form when HTML" + " submission happens and form extraction fails."), @@ -325,6 +328,9 @@ + " match different types. Applied only for parsing of address forms in" + " Turkish."), Flag.baseFeature( + AutofillFeatures.AUTOFILL_SUPPORT_PHONETIC_NAME_FOR_JP, + "When enabled, Autofill will support phonetic name for Japan."), + Flag.baseFeature( AutofillFeatures.AUTOFILL_UKM_EXPERIMENTAL_FIELDS, "Enables UKM collection for experimental fields"), Flag.baseFeature( @@ -1016,8 +1022,8 @@ "SelectParserRelaxation", "Enables new HTML parser behavior for the <select> element."), Flag.baseFeature( - "CSSReadingFlow", - "Enables new CSS reading-flow property for focus navigation in visual order."), + "CSSReadingFlow", + "Enables new CSS reading-flow property for focus navigation in visual order."), // Add new commandline switches and features above. The final entry should have a // trailing comma for cleaner diffs. };
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 7bd3ae4..c253b9f 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -1478,12 +1478,6 @@ "SplitKeyboardRefactor", base::FEATURE_DISABLED_BY_DEFAULT); -// Controls whether to start AssistantAudioDecoder service on demand (at query -// response time). -BASE_FEATURE(kStartAssistantAudioDecoderOnDemand, - "StartAssistantAudioDecoderOnDemand", - base::FEATURE_ENABLED_BY_DEFAULT); - // If enabled, used to configure the heuristic rules for some advanced IME // features (e.g. auto-correct). BASE_FEATURE(kImeRuleConfig, "ImeRuleConfig", base::FEATURE_ENABLED_BY_DEFAULT); @@ -3835,10 +3829,6 @@ switches::HasHps(); } -bool IsStartAssistantAudioDecoderOnDemandEnabled() { - return base::FeatureList::IsEnabled(kStartAssistantAudioDecoderOnDemand); -} - bool IsInternalServerSideSpeechRecognitionEnabled() { #if BUILDFLAG(GOOGLE_CHROME_BRANDING) // TODO(b/245614967): Once ready, enable this feature under
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h index 5a0c821..165fe84 100644 --- a/ash/constants/ash_features.h +++ b/ash/constants/ash_features.h
@@ -883,8 +883,6 @@ COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSmartLockSignInRemoved); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSnoopingProtection); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSplitKeyboardRefactor); -COMPONENT_EXPORT(ASH_CONSTANTS) -BASE_DECLARE_FEATURE(kStartAssistantAudioDecoderOnDemand); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSunfishFeature); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSuspendStateMachine); COMPONENT_EXPORT(ASH_CONSTANTS) @@ -1346,8 +1344,6 @@ bool IsShowSharingUserInLauncherContinueSectionEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsSmartReaderEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsSnoopingProtectionEnabled(); -COMPONENT_EXPORT(ASH_CONSTANTS) -bool IsStartAssistantAudioDecoderOnDemandEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsStoreOwnerKeyInPrivateSlotEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsSunfishFeatureEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsSuspendStateMachineEnabled();
diff --git a/ash/quick_insert/quick_insert_asset_fetcher_impl.cc b/ash/quick_insert/quick_insert_asset_fetcher_impl.cc index 81c86ad..f4e27368 100644 --- a/ash/quick_insert/quick_insert_asset_fetcher_impl.cc +++ b/ash/quick_insert/quick_insert_asset_fetcher_impl.cc
@@ -13,6 +13,8 @@ #include "ash/quick_insert/quick_insert_asset_fetcher_impl_delegate.h" #include "base/functional/bind.h" #include "base/functional/callback.h" +#include "base/rand_util.h" +#include "base/task/sequenced_task_runner.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/data_decoder/public/mojom/image_decoder.mojom-shared.h" @@ -109,6 +111,10 @@ network::SimpleURLLoader::kMaxBoundedStringDownloadSize); } +base::TimeDelta GetRetryJitter() { + return base::RandTimeDelta(base::Milliseconds(100), base::Seconds(1)); +} + } // namespace QuickInsertAssetFetcherImpl::QuickInsertAssetFetcherImpl( @@ -120,18 +126,48 @@ void QuickInsertAssetFetcherImpl::FetchGifFromUrl( const GURL& url, QuickInsertGifFetchedCallback callback) { + if (pending_network_requests_ >= kMaxPendingNetworkRequests) { + base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&QuickInsertAssetFetcherImpl::FetchGifFromUrl, + weak_ptr_factory_.GetWeakPtr(), url, + std::move(callback)), + GetRetryJitter()); + return; + } + + ++pending_network_requests_; DownloadGifMediaToString( url, delegate_->GetSharedURLLoaderFactory(), - base::BindOnce(&image_util::DecodeAnimationData, std::move(callback))); + base::BindOnce( + &image_util::DecodeAnimationData, + std::move(callback).Then(base::BindOnce( + &QuickInsertAssetFetcherImpl::OnNetworkRequestCompleted, + weak_ptr_factory_.GetWeakPtr())))); } void QuickInsertAssetFetcherImpl::FetchGifPreviewImageFromUrl( const GURL& url, QuickInsertImageFetchedCallback callback) { + if (pending_network_requests_ >= kMaxPendingNetworkRequests) { + base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, + base::BindOnce( + &QuickInsertAssetFetcherImpl::FetchGifPreviewImageFromUrl, + weak_ptr_factory_.GetWeakPtr(), url, std::move(callback)), + GetRetryJitter()); + return; + } + + ++pending_network_requests_; DownloadGifMediaToString( url, delegate_->GetSharedURLLoaderFactory(), - base::BindOnce(&image_util::DecodeImageData, std::move(callback), - data_decoder::mojom::ImageCodec::kDefault)); + base::BindOnce( + &image_util::DecodeImageData, + std::move(callback).Then(base::BindOnce( + &QuickInsertAssetFetcherImpl::OnNetworkRequestCompleted, + weak_ptr_factory_.GetWeakPtr())), + data_decoder::mojom::ImageCodec::kDefault)); } void QuickInsertAssetFetcherImpl::FetchFileThumbnail( @@ -141,4 +177,8 @@ delegate_->FetchFileThumbnail(path, size, std::move(callback)); } +void QuickInsertAssetFetcherImpl::OnNetworkRequestCompleted() { + --pending_network_requests_; +} + } // namespace ash
diff --git a/ash/quick_insert/quick_insert_asset_fetcher_impl.h b/ash/quick_insert/quick_insert_asset_fetcher_impl.h index f649763..edd986d 100644 --- a/ash/quick_insert/quick_insert_asset_fetcher_impl.h +++ b/ash/quick_insert/quick_insert_asset_fetcher_impl.h
@@ -8,6 +8,7 @@ #include "ash/ash_export.h" #include "ash/quick_insert/quick_insert_asset_fetcher.h" #include "base/memory/raw_ptr.h" +#include "base/memory/weak_ptr.h" class GURL; @@ -26,6 +27,8 @@ delete; ~QuickInsertAssetFetcherImpl() override; + static constexpr size_t kMaxPendingNetworkRequests = 5; + // QuickInsertAssetFetcher: void FetchGifFromUrl(const GURL& url, QuickInsertGifFetchedCallback callback) override; @@ -37,7 +40,11 @@ FetchFileThumbnailCallback callback) override; private: + void OnNetworkRequestCompleted(); + raw_ptr<QuickInsertAssetFetcherImplDelegate> delegate_; + size_t pending_network_requests_ = 0; + base::WeakPtrFactory<QuickInsertAssetFetcherImpl> weak_ptr_factory_{this}; }; } // namespace ash
diff --git a/ash/quick_insert/quick_insert_asset_fetcher_impl_unittest.cc b/ash/quick_insert/quick_insert_asset_fetcher_impl_unittest.cc index b547dfb..2786cba 100644 --- a/ash/quick_insert/quick_insert_asset_fetcher_impl_unittest.cc +++ b/ash/quick_insert/quick_insert_asset_fetcher_impl_unittest.cc
@@ -76,6 +76,10 @@ test_url_loader_factory_.AddResponse(url.spec(), content, status); } + size_t GetTotalRequests() const { + return test_url_loader_factory_.total_requests(); + } + protected: ~MockQuickInsertAssetUrlLoaderFactory() override = default; @@ -199,5 +203,38 @@ EXPECT_THAT(callback_future.Take(), FieldsAre(kBitmap, kError)); } +TEST_F(QuickInsertAssetFetcherImplTest, ThrottlesTooManySimultaneousRequests) { + scoped_refptr<MockQuickInsertAssetUrlLoaderFactory> url_loader_factory = + base::MakeRefCounted<MockQuickInsertAssetUrlLoaderFactory>(); + const GURL kGifPreviewImageUrl( + "https://media.tenor.com/gif-image-preview.png"); + constexpr gfx::Size kGifPreviewImageDimensions(10, 20); + url_loader_factory->AddResponse( + kGifPreviewImageUrl, + CreateEncodedImageForTesting(kGifPreviewImageDimensions), net::HTTP_OK); + MockQuickInsertAssetFetcherDelegate mock_delegate; + EXPECT_CALL(mock_delegate, GetSharedURLLoaderFactory) + .WillRepeatedly(Return(url_loader_factory)); + QuickInsertAssetFetcherImpl asset_fetcher(&mock_delegate); + + // Issue the maximum number of network requests. + for (size_t i = 0u; + i < QuickInsertAssetFetcherImpl::kMaxPendingNetworkRequests; ++i) { + asset_fetcher.FetchGifPreviewImageFromUrl(kGifPreviewImageUrl, + base::DoNothing()); + } + // Issue one more request, which should be throttled. + base::test::TestFuture<const gfx::ImageSkia&> throttled_future; + asset_fetcher.FetchGifPreviewImageFromUrl(kGifPreviewImageUrl, + throttled_future.GetCallback()); + + EXPECT_EQ(url_loader_factory->GetTotalRequests(), + QuickInsertAssetFetcherImpl::kMaxPendingNetworkRequests); + // The throttled request should be processed eventually. + EXPECT_TRUE(throttled_future.Wait()); + EXPECT_EQ(url_loader_factory->GetTotalRequests(), + QuickInsertAssetFetcherImpl::kMaxPendingNetworkRequests + 1); +} + } // namespace } // namespace ash
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb index a676d90..207489e 100644 --- a/ash/strings/ash_strings_fr-CA.xtb +++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -396,6 +396,7 @@ <translation id="2402411679569069051">Pour déverrouiller votre Chromebook, utilisez votre empreinte digitale ou déverrouillez votre téléphone</translation> <translation id="240545663114741956">Appuyez deux fois sur <ph name="ACCELERATOR" /> pour vous déconnecter.</translation> <translation id="2405664212338326887">Fonctionnalité non connectée</translation> +<translation id="2406710117564540804">Activer/Désactiver le mode Ne pas déranger</translation> <translation id="2408955596600435184">Entrez votre NIP</translation> <translation id="2412593942846481727">Mise à jour disponible</translation> <translation id="2416438829169535743">Quitter l'affichage?</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb index 3ce0c5e3..1948546f 100644 --- a/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb +++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb
@@ -11,7 +11,7 @@ <translation id="1467231725790366244">Kamera <ph name="CAMERA" /> nije priključena.</translation> <translation id="1473110567575736769">Odbrojavanje od 3 sekunde</translation> <translation id="148783771699678004">Kreće se prema gore udesno</translation> -<translation id="1545749641540134597">Skenirajte QR kod</translation> +<translation id="1545749641540134597">Skenirajte QR kôd</translation> <translation id="1560052704389894104">GIF</translation> <translation id="1588438908519853928">Uobičajeno</translation> <translation id="1620510694547887537">Fotoaparat</translation>
diff --git a/ash/webui/common/resources/keyboard_diagram.d.ts b/ash/webui/common/resources/keyboard_diagram.d.ts index 5c158f1..cb8bfea6 100644 --- a/ash/webui/common/resources/keyboard_diagram.d.ts +++ b/ash/webui/common/resources/keyboard_diagram.d.ts
@@ -14,7 +14,6 @@ CHROME_OS = 'chrome-os', CHROME_OS_DELL_ENTERPRISE_WILCO = 'dell-enterprise-wilco', CHROME_OS_DELL_ENTERPRISE_DRALLION = 'dell-enterprise-drallion', - SPLIT_MODIFIER = 'split-modifier', } export enum TopRightKey { @@ -23,23 +22,6 @@ CONTROL_PANEL = 'control-panel', } -export enum BottomLeftLayout { - THREE_KEYS = '3keys', - FOUR_KEYS = '4keys', -} - -export enum BottomRightLayout { - TWO_KEYS = '2keys', - THREE_KEYS = '3keys', - FOUR_KEYS = '4keys', -} - -export enum NumberPadLayout { - THREE_COLUMN = '3column', - FOUR_COLUMN = '4column', -} - - interface TopRowKeyInterface { [index: string]: {icon?: string, ariaNameI18n?: string, text?: string}; }
diff --git a/ash/webui/common/resources/keyboard_diagram.html b/ash/webui/common/resources/keyboard_diagram.html index 8b2a06a..251f931 100644 --- a/ash/webui/common/resources/keyboard_diagram.html +++ b/ash/webui/common/resources/keyboard_diagram.html
@@ -85,25 +85,6 @@ grid-column: span 10; } - /* Split modifier keyboard adjustments */ - - [data-physical-layout='split-modifier'] #launcherKey { - display: none; - } - - [data-physical-layout='split-modifier'] #assistantKey { - grid-column: span 4; - } - - [data-bottom-left-layout='4keys'] #leftAltKey { - grid-column: span 2; - } - - [data-bottom-left-layout='4keys'] #leftCtrlKey { - grid-column: span 3; - } - - /* * On ISO and JIS, the Enter key is L-shaped (with the backslash key moved * down one row). To achieve this with elements that fit in the grid, two @@ -223,10 +204,6 @@ width: 77%; } - [data-show-number-pad][data-number-pad-layout='3columns'] .main-cluster { - width: 82%; - } - [data-show-number-pad] #numberPad { box-sizing: border-box; display: inline-grid; @@ -243,23 +220,6 @@ width: 23%; } - [data-show-number-pad][data-number-pad-layout='3columns'] #numberPad { - box-sizing: border-box; - display: inline-grid; - grid-gap: var(--grid-gap); - grid-template-columns: repeat(3, 1fr); - grid-template-rows: var(--rows); - height: 100%; - /* - * The number pad will always be on the right, even in RTL locales, so - * disable the lint warning. - */ - padding-left: /* csschecker-disable-line left-right */ - calc(var(--grid-gap) * 3); - width: 18%; - - } - #numberPad keyboard-key { grid-column: span 1; } @@ -280,15 +240,11 @@ --> </div> <div id="keyboard" - data-show-number-pad$="[[showNumberPad]]" - data-number-pad-layout$="[[numberPadLayout]]"> + data-show-number-pad$="[[showNumberPad]]"> <div class="main-cluster" data-mech-layout$="[[mechanicalLayout]]" - data-physical-layout$="[[physicalLayout]]" data-show-assistant-key$="[[showAssistantKey]]" - data-show-fn-and-globe-keys$="[[showFnAndGlobeKeys_]]" - data-bottom-left-layout$="[[bottomLeftLayout]]" - data-bottom-right-layout$="[[bottomRightLayout]]"> + data-show-fn-and-globe-keys$="[[showFnAndGlobeKeys_]]"> <!-- Most keys aren't labelled here, as their glyphs are set from the appropriate layout in keyboard_layouts.js. The exceptions are keys that @@ -354,23 +310,14 @@ <keyboard-key data-code="26"></keyboard-key> <keyboard-key data-code="27"></keyboard-key> <keyboard-key id="backslashKey" data-code="43"></keyboard-key> + <keyboard-key id="launcherKey" class="left" icon="keyboard:launcher" data-code="125" - aria-name="[[i18n('keyboardDiagramAriaNameLauncher')]]"> + aria-name="[[i18n('keyboardDiagramAriaNameLauncher')]]"> </keyboard-key> - <template is="dom-if" if="[[isEqual_(physicalLayout, 'split-modifier')]]"> - <keyboard-key - id="assistantKey" - class="left" - icon="keyboard:assistant" - data-code="583" - aria-name="[[i18n('keyboardDiagramAriaNameAssistant')]]" - bottom-right-glyph="caps"> - </keyboard-key> - </template> <keyboard-key data-code="30"></keyboard-key> <keyboard-key data-code="31"></keyboard-key> <keyboard-key data-code="32"></keyboard-key> @@ -440,18 +387,7 @@ aria-name="[[i18n('keyboardDiagramAriaNameAssistant')]]"> </keyboard-key> </template> - <template is="dom-if" if="[[isEqual_(physicalLayout, 'split-modifier')]]"> - <keyboard-key id="fnKey" class="disabled" main-glyph="fn"></keyboard-key> - </template> - <template is="dom-if" if="[[isEqual_(bottomLeftLayout, '4keys')]]"> - <keyboard-key - icon="keyboard:g-logo" - data-code="125" - aria-name="[[i18n('keyboardDiagramAriaNameLayoutSwitch')]]"> - </keyboard-key> - </template> - - <keyboard-key id="leftAltKey" main-glyph="alt" data-code="56"></keyboard-key> + <keyboard-key id="leftAltKey" class="left" main-glyph="alt" data-code="56"></keyboard-key> <keyboard-key id="jisAlphanumericKey" class="jis-only" @@ -466,19 +402,6 @@ data-code="92"> </keyboard-key> <keyboard-key id="rightAltKey" main-glyph="alt" data-code="100"></keyboard-key> - <template is="dom-if" if="[[isEqual_(bottomRightLayout, '3keys')]]"> - <keyboard-key id="fnKey" class="disabled" main-glyph="fn"></keyboard-key> - </template> - <template is="dom-if" if="[[isEqual_(bottomRightLayout, '4keys')]]"> - <keyboard-key - id="layoutSwitchKey" - icon="keyboard:layout-switch" - data-code="584" - aria-name="[[i18n('keyboardDiagramAriaNameLayoutSwitch')]]"> - </keyboard-key> - <keyboard-key id="fnKey" class="disabled" main-glyph="fn"></keyboard-key> - </template> - <keyboard-key id="rightCtrlKey" main-glyph="ctrl" data-code="97"></keyboard-key> <div id="arrowKeyCluster"> @@ -513,62 +436,32 @@ </keyboard-key> </div> </div> - <template is="dom-if" if="[[!isEqual_(numberPadLayout, '3columns')]]"> - <div id="numberPad"> - <keyboard-key main-glyph="page up" data-code="104"></keyboard-key> - <keyboard-key main-glyph="page dn" data-code="109"></keyboard-key> - <keyboard-key main-glyph="home" data-code="102"></keyboard-key> - <keyboard-key main-glyph="end" data-code="107"></keyboard-key> + <div id="numberPad"> + <keyboard-key main-glyph="page up" data-code="104"></keyboard-key> + <keyboard-key main-glyph="page dn" data-code="109"></keyboard-key> + <keyboard-key main-glyph="home" data-code="102"></keyboard-key> + <keyboard-key main-glyph="end" data-code="107"></keyboard-key> - <keyboard-key main-glyph="delete" data-code="111"></keyboard-key> - <keyboard-key main-glyph="/" data-code="98"></keyboard-key> - <keyboard-key main-glyph="*" data-code="55"></keyboard-key> - <keyboard-key main-glyph="-" data-code="74"></keyboard-key> + <keyboard-key main-glyph="delete" data-code="111"></keyboard-key> + <keyboard-key main-glyph="/" data-code="98"></keyboard-key> + <keyboard-key main-glyph="*" data-code="55"></keyboard-key> + <keyboard-key main-glyph="-" data-code="74"></keyboard-key> - <keyboard-key main-glyph="7" data-code="71"></keyboard-key> - <keyboard-key main-glyph="8" data-code="72"></keyboard-key> - <keyboard-key main-glyph="9" data-code="73"></keyboard-key> - <keyboard-key class="double-height" main-glyph="+" data-code="78"></keyboard-key> + <keyboard-key main-glyph="7" data-code="71"></keyboard-key> + <keyboard-key main-glyph="8" data-code="72"></keyboard-key> + <keyboard-key main-glyph="9" data-code="73"></keyboard-key> + <keyboard-key class="double-height" main-glyph="+" data-code="78"></keyboard-key> - <keyboard-key main-glyph="4" data-code="75"></keyboard-key> - <keyboard-key main-glyph="5" data-code="76"></keyboard-key> - <keyboard-key main-glyph="6" data-code="77"></keyboard-key> + <keyboard-key main-glyph="4" data-code="75"></keyboard-key> + <keyboard-key main-glyph="5" data-code="76"></keyboard-key> + <keyboard-key main-glyph="6" data-code="77"></keyboard-key> - <keyboard-key main-glyph="1" data-code="79"></keyboard-key> - <keyboard-key main-glyph="2" data-code="80"></keyboard-key> - <keyboard-key main-glyph="3" data-code="81"></keyboard-key> - <keyboard-key class="double-height" main-glyph="enter" data-code="96"></keyboard-key> + <keyboard-key main-glyph="1" data-code="79"></keyboard-key> + <keyboard-key main-glyph="2" data-code="80"></keyboard-key> + <keyboard-key main-glyph="3" data-code="81"></keyboard-key> + <keyboard-key class="double-height" main-glyph="enter" data-code="96"></keyboard-key> - <keyboard-key class="double-width" main-glyph="0" data-code="82"></keyboard-key> - <keyboard-key main-glyph="." data-code="83"></keyboard-key> - </div> - </template> - <template is="dom-if" if="[[isEqual_(numberPadLayout, '3columns')]]"> - <div id="numberPad"> - <keyboard-key main-glyph="/" data-code="98"></keyboard-key> - <keyboard-key main-glyph="*" data-code="55"></keyboard-key> - <keyboard-key class="disabled"></keyboard-key> - - <keyboard-key main-glyph="-" data-code="74"></keyboard-key> - <keyboard-key main-glyph="+" data-code="78"></keyboard-key> - <keyboard-key main-glyph="numlock" data-code="144"></keyboard-key> - - <keyboard-key main-glyph="7" data-code="71"></keyboard-key> - <keyboard-key main-glyph="8" data-code="72"></keyboard-key> - <keyboard-key main-glyph="9" data-code="73"></keyboard-key> - - <keyboard-key main-glyph="4" data-code="75"></keyboard-key> - <keyboard-key main-glyph="5" data-code="76"></keyboard-key> - <keyboard-key main-glyph="6" data-code="77"></keyboard-key> - - <keyboard-key main-glyph="1" data-code="79"></keyboard-key> - <keyboard-key main-glyph="2" data-code="80"></keyboard-key> - <keyboard-key main-glyph="3" data-code="81"></keyboard-key> - - <keyboard-key main-glyph="0" data-code="82"></keyboard-key> - <keyboard-key main-glyph="." data-code="83"></keyboard-key> - <keyboard-key main-glyph="enter" data-code="96"></keyboard-key> - </div> - </template> - + <keyboard-key class="double-width" main-glyph="0" data-code="82"></keyboard-key> + <keyboard-key main-glyph="." data-code="83"></keyboard-key> + </div> </div>
diff --git a/ash/webui/common/resources/keyboard_diagram.js b/ash/webui/common/resources/keyboard_diagram.js index f68a717..0bf6d18 100644 --- a/ash/webui/common/resources/keyboard_diagram.js +++ b/ash/webui/common/resources/keyboard_diagram.js
@@ -39,7 +39,6 @@ CHROME_OS: 'chrome-os', CHROME_OS_DELL_ENTERPRISE_WILCO: 'dell-enterprise-wilco', CHROME_OS_DELL_ENTERPRISE_DRALLION: 'dell-enterprise-drallion', - SPLIT_MODIFIER: 'split-modifier', }; /** @@ -53,34 +52,6 @@ }; /** - * Enum of bottom left functional keys layout. - * @enum {string} - */ -export const BottomLeftLayout = { - THREE_KEYS: '3keys', - FOUR_KEYS: '4keys', -}; - -/** - * Enum of bottom right functional keys layout. - * @enum {string} - */ -export const BottomRightLayout = { - TWO_KEYS: '2keys', - THREE_KEYS: '3keys', - FOUR_KEYS: '4keys', -}; - -/** - * Enum of number pad layout. - * @enum {string} - */ -export const NumberPadLayout = { - THREE_COLUMN: '3columns', - FOUR_COLUMN: '4columns', -}; - -/** * Enum of action keys to be shown on the top row. * @enum {!Object<string, * !{icon: ?string, text: ?string, ariaNameI18n: ?string}>} @@ -164,12 +135,6 @@ icon: 'keyboard:screen-mirror', ariaNameI18n: 'keyboardDiagramAriaNameScreenMirror', }, - kAccessibility: { - icon: 'keyboard:accessibility', - }, - kDictation: { - icon: 'keyboard:dictation', - }, // TODO(crbug.com/1207678): work out the localization scheme for keys like // delete and unknown. kDelete: {text: 'delete'},
diff --git a/ash/webui/common/resources/keyboard_icons.html b/ash/webui/common/resources/keyboard_icons.html index cf4a799..b6991be 100644 --- a/ash/webui/common/resources/keyboard_icons.html +++ b/ash/webui/common/resources/keyboard_icons.html
@@ -80,9 +80,6 @@ <g id="volume-down"><path d="M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"></g> <g id="volume-mute"><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"></g> <g id="volume-up"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"></g> - <g id="accessibility"><path d="M9.99986 5.08337C10.4626 5.07903 10.9052 4.89326 11.2325 4.566C11.5597 4.23875 11.7455 3.79615 11.7499 3.33337C11.7512 3.04499 11.6813 2.76075 11.5463 2.50593C11.4113 2.2511 11.2154 2.03359 10.976 1.87273C10.7367 1.71188 10.4613 1.61266 10.1743 1.58391C9.8874 1.55516 9.5978 1.59777 9.33129 1.70795C9.06479 1.81812 8.82964 1.99245 8.64677 2.21542C8.46389 2.4384 8.33895 2.70311 8.28306 2.98603C8.22717 3.26894 8.24206 3.56127 8.3264 3.83704C8.41075 4.11281 8.56194 4.36346 8.76653 4.5667C8.92529 4.73331 9.11684 4.86523 9.3291 4.95415C9.54137 5.04307 9.76975 5.08707 9.99986 5.08337ZM17.1666 5C16.0351 5.30177 14.8815 5.51355 13.7166 5.63333C12.4808 5.74135 11.24 5.7803 9.9999 5.75C8.79161 5.74893 7.58427 5.68217 6.38323 5.55C5.22057 5.45758 4.067 5.27368 2.93324 5H2.8499L2.3999 6.66667C3.25512 6.9134 4.12305 7.11369 4.9999 7.26667C5.83323 7.4 6.66657 7.5 7.46657 7.58333V18.4167H9.2999V13.4167H10.7999V18.4167H12.6332V7.58333C13.4499 7.5 14.2999 7.4 15.0999 7.26667C15.9304 7.13656 16.7537 6.96411 17.5666 6.75H17.6499L17.1666 5Z"></path></g> - <g id="dictation"><path xmlns="http://www.w3.org/2000/svg" d="M9.63018 2.0835V3.91683H17.1302V17.0835H7.29685V15.4168H5.46351V18.9168H18.9635V2.0835H9.63018ZM6.38019 8.83349C6.59953 8.83475 6.81697 8.79271 7.02003 8.70977C7.2231 8.62683 7.40779 8.50462 7.56352 8.35015C7.71799 8.19442 7.8402 8.00973 7.92314 7.80666C8.00608 7.6036 8.04812 7.38616 8.04685 7.16682V3.83349C8.04812 3.61414 8.00608 3.3967 7.92314 3.19364C7.8402 2.99058 7.71799 2.80589 7.56352 2.65015C7.40779 2.49568 7.2231 2.37347 7.02003 2.29053C6.81697 2.20759 6.59953 2.16555 6.38019 2.16682C6.16005 2.15968 5.94088 2.19903 5.73699 2.28231C5.53309 2.3656 5.34904 2.49094 5.19685 2.65015C5.04238 2.80589 4.92018 2.99058 4.83723 3.19364C4.75429 3.3967 4.71225 3.61414 4.71352 3.83349V7.16682C4.71225 7.38616 4.75429 7.6036 4.83723 7.80666C4.92018 8.00973 5.04238 8.19442 5.19685 8.35015C5.35259 8.50462 5.53728 8.62683 5.74034 8.70977C5.9434 8.79271 6.16084 8.83475 6.38019 8.83349M8.88019 13.8335H15.5469V15.5001H8.88019V13.8335ZM15.5469 11.3335H10.5469V13.0001H15.5469V11.3335ZM7.29685 11.7335V13.9168H5.46352L5.43019 11.7335C4.38412 11.5427 3.4394 10.9877 2.76352 10.1668C2.0882 9.31622 1.73941 8.25212 1.78019 7.16681H3.61352C3.60949 7.53778 3.67965 7.90581 3.8199 8.24927C3.96015 8.59273 4.16764 8.90469 4.43019 9.16681C4.69034 9.43313 5.00156 9.64421 5.34522 9.7874C5.68888 9.93059 6.0579 10.0029 6.43019 10.0001C6.80275 10.0049 7.17235 9.93341 7.51628 9.79011C7.86022 9.6468 8.17122 9.43469 8.43019 9.16681C8.69807 8.90784 8.91018 8.59684 9.05349 8.25291C9.19679 7.90897 9.26827 7.53937 9.26352 7.16681H11.0969C11.0957 8.27121 10.6929 9.33749 9.96352 10.1668C9.28209 10.9812 8.33992 11.5347 7.29685 11.7335Z"></path></g> - <g id="g-logo"><path d="M10.151 16.2131C9.3458 16.2141 8.54882 16.0517 7.80826 15.7357C6.3193 15.1283 5.12487 13.9657 4.47742 12.4937C4.16226 11.7373 4 10.926 4 10.1066C4 9.28717 4.16226 8.47586 4.47742 7.71948C5.12487 6.24748 6.3193 5.0849 7.80826 4.47746C9.26728 3.86889 10.9038 3.84109 12.3826 4.39975C13.0831 4.68229 13.7293 5.08425 14.2923 5.58774L12.5492 7.28647C12.2246 6.99057 11.8482 6.75719 11.4389 6.5981C10.7797 6.34923 10.0624 6.29755 9.37431 6.44935C8.68627 6.60116 8.05726 6.94989 7.564 7.45301C6.88124 8.16775 6.50024 9.11815 6.50024 10.1066C6.50024 11.095 6.88124 12.0454 7.564 12.7602C7.89644 13.1152 8.29907 13.3972 8.74633 13.5884C9.19358 13.7795 9.6757 13.8756 10.1621 13.8704C10.9623 13.886 11.7445 13.6318 12.3826 13.1487C12.9797 12.6986 13.378 12.0335 13.4929 11.2946H10.1621V8.9963H15.8689C15.8689 9.22946 15.9577 9.44042 15.991 9.62916C16.003 9.83254 16.003 10.0364 15.991 10.2398C16.0246 11.0281 15.9005 11.8152 15.6259 12.5549C15.3514 13.2947 14.932 13.9722 14.3922 14.5477C13.8392 15.1039 13.1766 15.5392 12.4465 15.8259C11.7164 16.1125 10.9347 16.2444 10.151 16.2131Z"></path></g> </defs> </svg> </iron-iconset-svg>
diff --git a/ash/webui/diagnostics_ui/backend/input/input_data_provider.cc b/ash/webui/diagnostics_ui/backend/input/input_data_provider.cc index 6839749..38f81e12 100644 --- a/ash/webui/diagnostics_ui/backend/input/input_data_provider.cc +++ b/ash/webui/diagnostics_ui/backend/input/input_data_provider.cc
@@ -587,14 +587,10 @@ keyboard_helper_.ConstructKeyboard(device_info, aux_data.get()); const bool is_internal_keyboard = keyboard->connection_type == mojom::ConnectionType::kInternal; - // Don't add keyboard if internal keyboard is a split modifier keyboard - // and the config for bottom left/right is unknown. + // Don't add keyboard if internal keyboard is a split modifier keyboard. if (is_internal_keyboard && IsSplitModifierKeyboard(device_info->input_device.id)) { - if (keyboard->bottom_left_layout == mojom::BottomLeftLayout::kUnknown || - keyboard->bottom_right_layout == mojom::BottomRightLayout::kUnknown) { - return; - } + return; } if (!features::IsExternalKeyboardInDiagnosticsAppEnabled() && !is_internal_keyboard) {
diff --git a/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard.cc b/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard.cc index eef3054..e93d16b 100644 --- a/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard.cc +++ b/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard.cc
@@ -8,6 +8,8 @@ #pragma allow_unsafe_buffers #endif +#include "ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard.h" + #include <fcntl.h> #include <linux/input.h> @@ -20,12 +22,10 @@ #include "ash/shell.h" #include "ash/system/diagnostics/mojom/input.mojom-shared.h" #include "ash/webui/diagnostics_ui/backend/input/input_data_provider.h" -#include "ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard.h" #include "ash/webui/diagnostics_ui/mojom/input_data_provider.mojom-shared.h" #include "base/check_op.h" #include "base/command_line.h" #include "base/containers/fixed_flat_map.h" -#include "base/files/file_util.h" #include "base/logging.h" #include "base/strings/string_util.h" #include "chromeos/ash/components/system/statistics_provider.h" @@ -248,12 +248,10 @@ return mojom::TopRowKey::kPlayPause; case ui::TopRowActionKey::kPrivacyScreenToggle: return mojom::TopRowKey::kPrivacyScreenToggle; - case ui::TopRowActionKey::kDictation: - return mojom::TopRowKey::kDictation; - case ui::TopRowActionKey::kAccessibility: - return mojom::TopRowKey::kAccessibility; case ui::TopRowActionKey::kAllApplications: case ui::TopRowActionKey::kEmojiPicker: + case ui::TopRowActionKey::kDictation: + case ui::TopRowActionKey::kAccessibility: case ui::TopRowActionKey::kDoNotDisturb: case ui::TopRowActionKey::kUnknown: return mojom::TopRowKey::kUnknown; @@ -470,10 +468,6 @@ result->has_assistant_key = device_info->event_device_info.HasKeyEvent(KEY_ASSISTANT); - result->bottom_left_layout = device_info->bottom_left_layout; - result->bottom_right_layout = device_info->bottom_right_layout; - result->numpad_layout = device_info->numpad_layout; - return result; }
diff --git a/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard_unittest.cc b/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard_unittest.cc index ffdf3e0..aa395e9 100644 --- a/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard_unittest.cc +++ b/ash/webui/diagnostics_ui/backend/input/input_data_provider_keyboard_unittest.cc
@@ -167,11 +167,6 @@ ui::KeyboardCapability::DeviceType::kDeviceInternalKeyboard; device_information.keyboard_top_row_layout = ui::KeyboardCapability::KeyboardTopRowLayout::kKbdTopRowLayoutCustom; - device_information.bottom_left_layout = - mojom::BottomLeftLayout::kBottomLeft4Keys; - device_information.bottom_right_layout = - mojom::BottomRightLayout::kBottomRight2Keys; - device_information.numpad_layout = mojom::NumpadLayout::kUnknown; } void TearDown() override { @@ -456,18 +451,6 @@ keyboard_info_->number_pad_present); } -class SplitModifierKeyboardTest : public VivaldiKeyboardTestBase {}; -TEST_F(SplitModifierKeyboardTest, CheckConfig) { - keyboard_info_ = input_data_provider_keyboard_->ConstructKeyboard( - &device_information, &aux_data_); - - EXPECT_EQ(mojom::BottomLeftLayout::kBottomLeft4Keys, - keyboard_info_->bottom_left_layout); - EXPECT_EQ(mojom::BottomRightLayout::kBottomRight2Keys, - keyboard_info_->bottom_right_layout); - EXPECT_EQ(mojom::NumpadLayout::kUnknown, keyboard_info_->numpad_layout); -} - class RevenBoardTest : public VivaldiKeyboardTestBase {}; TEST_F(RevenBoardTest, SwitchEnabled) { base::CommandLine::ForCurrentProcess()->AppendSwitch(
diff --git a/ash/webui/diagnostics_ui/backend/input/input_data_provider_unittest.cc b/ash/webui/diagnostics_ui/backend/input/input_data_provider_unittest.cc index 743bc74..c9121bf7 100644 --- a/ash/webui/diagnostics_ui/backend/input/input_data_provider_unittest.cc +++ b/ash/webui/diagnostics_ui/backend/input/input_data_provider_unittest.cc
@@ -904,7 +904,7 @@ ASSERT_TRUE(future.IsReady()); } -TEST_F(InputDataProviderTest, FilterOutSplitModifierKeyboardWithoutConfig) { +TEST_F(InputDataProviderTest, FilterOutSplitModifierKeyboard) { base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature(features::kModifierSplit);
diff --git a/ash/webui/diagnostics_ui/backend/input/input_device_information.cc b/ash/webui/diagnostics_ui/backend/input/input_device_information.cc index 5a814c84..b202a0a 100644 --- a/ash/webui/diagnostics_ui/backend/input/input_device_information.cc +++ b/ash/webui/diagnostics_ui/backend/input/input_device_information.cc
@@ -9,7 +9,6 @@ #include "ash/shell.h" #include "ash/webui/diagnostics_ui/backend/input/input_data_provider.h" -#include "base/files/file_util.h" #include "ui/events/ash/event_rewriter_ash.h" #include "ui/events/ash/keyboard_capability.h" #include "ui/events/devices/device_data_manager.h" @@ -23,42 +22,6 @@ InputDeviceInformation::InputDeviceInformation() = default; InputDeviceInformation::~InputDeviceInformation() = default; -const std::map<std::string, mojom::BottomLeftLayout> kBottomLeftLayoutMapping = - { - {"keyboard_bottom_left_3_keys", - mojom::BottomLeftLayout::kBottomLeft3Keys}, - {"keyboard_bottom_left_4_keys", - mojom::BottomLeftLayout::kBottomLeft4Keys}, -}; - -const std::map<std::string, mojom::BottomRightLayout> - kBottomRightLayoutMapping = { - {"keyboard_bottom_right_2_keys", - mojom::BottomRightLayout::kBottomRight2Keys}, - {"keyboard_bottom_right_3_keys", - mojom::BottomRightLayout::kBottomRight3Keys}, - {"keyboard_bottom_right_4_keys", - mojom::BottomRightLayout::kBottomRight4Keys}, -}; - -const std::map<std::string, mojom::NumpadLayout> kNumpadLayoutMapping = { - {"numeric_pad_3_column", mojom::NumpadLayout::kNumpad3Column}, - {"numeric_pad_4_column", mojom::NumpadLayout::kNumpad4Column}, -}; - -template <typename T> -T GetLayoutFromFile(const base::FilePath& file_path, - const std::map<std::string, T>& layout_mapping) { - std::string layout_string; - if (base::ReadFileToString(file_path, &layout_string)) { - auto it = layout_mapping.find(layout_string); - if (it != layout_mapping.end()) { - return it->second; - } - } - return T::kUnknown; // Default to kUnknown if file read or mapping fails -} - // All blockings calls for identifying hardware need to go here: both // EventDeviceInfo::Initialize and ui::GetInputPathInSys can block in // base::MakeAbsoluteFilePath. @@ -114,24 +77,6 @@ keyboard_capability->GetTopRowScanCodes(keyboard); info->keyboard_scan_codes = keyboard_scan_codes ? *keyboard_scan_codes : std::vector<uint32_t>(); - - // Determine bottom left layout. - constexpr char kBottomLeftLayoutFileName[] = - "/run/chromeos-config/v1/keyboard/bottom-left-layout"; - info->bottom_left_layout = GetLayoutFromFile( - base::FilePath(kBottomLeftLayoutFileName), kBottomLeftLayoutMapping); - - // Determine bottom right layout. - constexpr char kBottomRightLayoutFileName[] = - "/run/chromeos-config/v1/keyboard/bottom-right-layout"; - info->bottom_right_layout = GetLayoutFromFile( - base::FilePath(kBottomRightLayoutFileName), kBottomRightLayoutMapping); - - // Determine numpad layout. - constexpr char kNumpadLayoutFileName[] = - "/run/chromeos-config/v1/keyboard/numpad-layout"; - info->numpad_layout = GetLayoutFromFile( - base::FilePath(kNumpadLayoutFileName), kNumpadLayoutMapping); } return info;
diff --git a/ash/webui/diagnostics_ui/backend/input/input_device_information.h b/ash/webui/diagnostics_ui/backend/input/input_device_information.h index acb3f928..b00639a 100644 --- a/ash/webui/diagnostics_ui/backend/input/input_device_information.h +++ b/ash/webui/diagnostics_ui/backend/input/input_device_information.h
@@ -14,10 +14,6 @@ namespace ash::diagnostics { -template <typename T> -T GetLayoutFromFile(const base::FilePath& file_path, - const std::map<std::string, T>& layout_mapping); - // Wrapper for tracking several pieces of information about an evdev-backed // device. class InputDeviceInformation { @@ -37,9 +33,6 @@ // Keyboard-only fields: ui::KeyboardCapability::DeviceType keyboard_type; ui::KeyboardCapability::KeyboardTopRowLayout keyboard_top_row_layout; - mojom::BottomLeftLayout bottom_left_layout; - mojom::BottomRightLayout bottom_right_layout; - mojom::NumpadLayout numpad_layout; std::vector<uint32_t> keyboard_scan_codes; };
diff --git a/ash/webui/diagnostics_ui/resources/keyboard_tester.html b/ash/webui/diagnostics_ui/resources/keyboard_tester.html index fa915e03..e66f52f 100644 --- a/ash/webui/diagnostics_ui/resources/keyboard_tester.html +++ b/ash/webui/diagnostics_ui/resources/keyboard_tester.html
@@ -147,13 +147,10 @@ mechanical-layout="[[diagramMechanicalLayout]]" physical-layout="[[diagramPhysicalLayout]]" region-code="[[keyboard.regionCode]]" - show-assistant-key="[[showAssistantKey]]" + show-assistant-key="[[keyboard.hasAssistantKey]]" show-number-pad="[[showNumberPad]]" top-row-keys="[[topRowKeys]]" - top-right-key="[[diagramTopRightKey]]" - bottom-left-layout="[[bottomLeftLayout]]" - bottom-right-layout="[[bottomRightLayout]]" - number-pad-layout="[[numberPadLayout]]"> + top-right-key="[[diagramTopRightKey]]"> </keyboard-diagram> </div> </template>
diff --git a/ash/webui/diagnostics_ui/resources/keyboard_tester.ts b/ash/webui/diagnostics_ui/resources/keyboard_tester.ts index 7d576e8..065de64 100644 --- a/ash/webui/diagnostics_ui/resources/keyboard_tester.ts +++ b/ash/webui/diagnostics_ui/resources/keyboard_tester.ts
@@ -12,7 +12,7 @@ import {CrDialogElement} from 'chrome://resources/ash/common/cr_elements/cr_dialog/cr_dialog.js'; import {CrToastElement} from 'chrome://resources/ash/common/cr_elements/cr_toast/cr_toast.js'; import {I18nMixin} from 'chrome://resources/ash/common/cr_elements/i18n_mixin.js'; -import {BottomLeftLayout as DiagramBottomLeftLayout, BottomRightLayout as DiagramBottomRightLayout, KeyboardDiagramElement, MechanicalLayout as DiagramMechanicalLayout, NumberPadLayout as DiagramNumberPadLayout, PhysicalLayout as DiagramPhysicalLayout, TopRightKey as DiagramTopRightKey, TopRowKey as DiagramTopRowKey} from 'chrome://resources/ash/common/keyboard_diagram.js'; +import {KeyboardDiagramElement, MechanicalLayout as DiagramMechanicalLayout, PhysicalLayout as DiagramPhysicalLayout, TopRightKey as DiagramTopRightKey, TopRowKey as DiagramTopRowKey} from 'chrome://resources/ash/common/keyboard_diagram.js'; import {KeyboardKeyState} from 'chrome://resources/ash/common/keyboard_key.js'; import {loadTimeData} from 'chrome://resources/ash/common/load_time_data.m.js'; import {assert} from 'chrome://resources/js/assert.js'; @@ -20,7 +20,7 @@ import {PolymerElementProperties} from 'chrome://resources/polymer/v3_0/polymer/interfaces.js'; import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {BottomLeftLayout, BottomRightLayout, KeyboardInfo, MechanicalLayout, NumberPadPresence, NumpadLayout, PhysicalLayout, TopRightKey, TopRowKey} from './input.mojom-webui.js'; +import {KeyboardInfo, MechanicalLayout, NumberPadPresence, PhysicalLayout, TopRightKey, TopRowKey} from './input.mojom-webui.js'; import {InputDataProviderInterface, KeyboardObserverReceiver, KeyEvent, KeyEventType} from './input_data_provider.mojom-webui.js'; import {getTemplate} from './keyboard_tester.html.js'; import {getInputDataProvider} from './mojo_interface_provider.js'; @@ -79,8 +79,6 @@ [TopRowKey.kPreviousTrack]: DiagramTopRowKey['kPreviousTrack'], [TopRowKey.kPlayPause]: DiagramTopRowKey['kPlayPause'], [TopRowKey.kScreenMirror]: DiagramTopRowKey['kScreenMirror'], - [TopRowKey.kAccessibility]: DiagramTopRowKey['kAccessibility'], - [TopRowKey.kDictation]: DiagramTopRowKey['kDictation'], [TopRowKey.kDelete]: DiagramTopRowKey['kDelete'], [TopRowKey.kUnknown]: DiagramTopRowKey['kUnknown'], }; @@ -171,31 +169,11 @@ computed: 'computeShowNumberPad(keyboard)', }, - showAssistantKey: { - type: Boolean, - computed: 'computeShowAssistantKey(keyboard)', - }, - topRowKeys: { type: Array, computed: 'computeTopRowKeys(keyboard)', }, - bottomLeftLayout: { - type: String, - computed: 'computeBottomLeftLayout(keyboard)', - }, - - bottomRightLayout: { - type: String, - computed: 'computeBottomRightLayout(keyboard)', - }, - - numberPadLayout: { - type: String, - computed: 'computeNumberPadLayout(keyboard)', - }, - isLoggedIn: { type: Boolean, value: loadTimeData.getBoolean('isLoggedIn'), @@ -267,10 +245,6 @@ if (!keyboardInfo) { return null; } - if (keyboardInfo.bottomLeftLayout !== BottomLeftLayout.kUnknown && - keyboardInfo.bottomRightLayout !== BottomRightLayout.kUnknown) { - return DiagramPhysicalLayout.SPLIT_MODIFIER; - } return { [PhysicalLayout.kUnmappedEnumField]: null, [PhysicalLayout.kUnknown]: null, @@ -298,15 +272,9 @@ private computeShowNumberPad(keyboard?: KeyboardInfo): boolean { return !!keyboard && - (keyboard.numberPadPresent === NumberPadPresence.kPresent || - !!keyboard.numpadLayout); + keyboard.numberPadPresent === NumberPadPresence.kPresent; } - private computeShowAssistantKey(keyboard?: KeyboardInfo): boolean { - return !!keyboard && keyboard.hasAssistantKey && - this.computeDiagramPhysicalLayout(keyboard) !== - DiagramPhysicalLayout.SPLIT_MODIFIER; - } private computeTopRowKeys(keyboard?: KeyboardInfo): KeyboardDiagramTopRowKey[] { @@ -316,44 +284,6 @@ return keyboard.topRowKeys.map((keyId: TopRowKey) => topRowKeyMap[keyId]); } - private computeBottomLeftLayout(keyboardInfo?: KeyboardInfo): - DiagramBottomLeftLayout|null { - if (!keyboardInfo) { - return null; - } - return { - [BottomLeftLayout.kUnknown]: null, - [BottomLeftLayout.kBottomLeft3Keys]: DiagramBottomLeftLayout.THREE_KEYS, - [BottomLeftLayout.kBottomLeft4Keys]: DiagramBottomLeftLayout.FOUR_KEYS, - }[keyboardInfo.bottomLeftLayout]; - } - - private computeBottomRightLayout(keyboardInfo?: KeyboardInfo): - DiagramBottomRightLayout|null { - if (!keyboardInfo) { - return null; - } - return { - [BottomRightLayout.kUnknown]: null, - [BottomRightLayout.kBottomRight2Keys]: DiagramBottomRightLayout.TWO_KEYS, - [BottomRightLayout.kBottomRight3Keys]: - DiagramBottomRightLayout.THREE_KEYS, - [BottomRightLayout.kBottomRight4Keys]: DiagramBottomRightLayout.FOUR_KEYS, - }[keyboardInfo.bottomRightLayout]; - } - - private computeNumberPadLayout(keyboardInfo?: KeyboardInfo): - DiagramNumberPadLayout|null { - if (!keyboardInfo) { - return null; - } - return { - [NumpadLayout.kUnknown]: null, - [NumpadLayout.kNumpad3Column]: DiagramNumberPadLayout.THREE_COLUMN, - [NumpadLayout.kNumpad4Column]: DiagramNumberPadLayout.FOUR_COLUMN, - }[keyboardInfo.numpadLayout]; - } - protected getDescriptionLabel(): string { return this.i18n('keyboardTesterInstruction'); }
diff --git a/base/BUILD.gn b/base/BUILD.gn index a3adebb..80817eb 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -2374,6 +2374,8 @@ "trace_event/memory_usage_estimator.cc", "trace_event/memory_usage_estimator.h", "trace_event/optional_trace_event.h", + "trace_event/perfetto_proto_appender.cc", + "trace_event/perfetto_proto_appender.h", "trace_event/process_memory_dump.cc", "trace_event/process_memory_dump.h", "trace_event/trace_arguments.cc",
diff --git a/base/message_loop/message_pump_win.cc b/base/message_loop/message_pump_win.cc index 6f5b730..5b9e417 100644 --- a/base/message_loop/message_pump_win.cc +++ b/base/message_loop/message_pump_win.cc
@@ -9,6 +9,7 @@ #include <algorithm> #include <atomic> #include <cstdint> +#include <memory> #include <type_traits> #include "base/auto_reset.h" @@ -719,7 +720,18 @@ // MessagePumpForIO public: MessagePumpForIO::IOContext::IOContext() { - memset(&overlapped, 0, sizeof(overlapped)); + std::construct_at(GetOverlapped()); + std::memset(GetOverlapped(), 0, sizeof(OVERLAPPED)); +} + +MessagePumpForIO::IOContext::~IOContext() { + std::destroy_at(GetOverlapped()); +} + +OVERLAPPED* MessagePumpForIO::IOContext::GetOverlapped() { + static_assert(sizeof(OVERLAPPED) == sizeof(Sizer)); + static_assert(alignof(OVERLAPPED) == alignof(Sizer)); + return reinterpret_cast<OVERLAPPED*>(storage_); } MessagePumpForIO::IOHandler::IOHandler(const Location& from_here)
diff --git a/base/message_loop/message_pump_win.h b/base/message_loop/message_pump_win.h index 55f758b..b0f14da 100644 --- a/base/message_loop/message_pump_win.h +++ b/base/message_loop/message_pump_win.h
@@ -5,8 +5,6 @@ #ifndef BASE_MESSAGE_LOOP_MESSAGE_PUMP_WIN_H_ #define BASE_MESSAGE_LOOP_MESSAGE_PUMP_WIN_H_ -#include <windows.h> - #include <atomic> #include <memory> #include <optional> @@ -22,6 +20,7 @@ #include "base/time/time.h" #include "base/win/message_window.h" #include "base/win/scoped_handle.h" +#include "base/win/windows_types.h" namespace base { @@ -219,9 +218,35 @@ // class BASE_EXPORT MessagePumpForIO : public MessagePumpWin { public: - struct BASE_EXPORT IOContext { + class BASE_EXPORT IOContext { + public: IOContext(); - OVERLAPPED overlapped; + ~IOContext(); + + OVERLAPPED* GetOverlapped(); + + private: + // Hack: This header needs to be pulled in by files that should not + // `#include <windows.h>`, yet wants to store an `OVERLAPPED` inline. + // We can't simply define `OVERLAPPED` ourselves, or the compiler will + // complain about type redefinitions in files that _do_ see the real + // definition. Instead, define an identical struct, but use it only to + // align/size storage that we will construct a real `OVERLAPPED` in in the + // constructor. + struct Sizer { + ULONG_PTR Internal; + ULONG_PTR InternalHigh; + union { + struct { + DWORD Offset; + DWORD OffsetHigh; + } DUMMYSTRUCTNAME; + PVOID Pointer; + } DUMMYUNIONNAME; + HANDLE hEvent; + }; + + alignas(Sizer) unsigned char storage_[sizeof(Sizer)]; }; // Clients interested in receiving OS notifications when asynchronous IO
diff --git a/base/task/single_thread_task_executor_unittest.cc b/base/task/single_thread_task_executor_unittest.cc index 801c066f..2c22a7c 100644 --- a/base/task/single_thread_task_executor_unittest.cc +++ b/base/task/single_thread_task_executor_unittest.cc
@@ -411,7 +411,7 @@ DWORD error) override; void Init(); - OVERLAPPED* context() { return &context_.overlapped; } + OVERLAPPED* context() { return context_.GetOverlapped(); } DWORD size() { return sizeof(buffer_); } private:
diff --git a/base/trace_event/perfetto_proto_appender.cc b/base/trace_event/perfetto_proto_appender.cc new file mode 100644 index 0000000..31b4b534 --- /dev/null +++ b/base/trace_event/perfetto_proto_appender.cc
@@ -0,0 +1,32 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/trace_event/perfetto_proto_appender.h" + +#include <stddef.h> +#include <stdint.h> + +#include <vector> + +#include "third_party/perfetto/include/perfetto/protozero/contiguous_memory_range.h" +#include "third_party/perfetto/protos/perfetto/trace/track_event/debug_annotation.pbzero.h" + +namespace base::trace_event { + +PerfettoProtoAppender::PerfettoProtoAppender( + perfetto::protos::pbzero::DebugAnnotation* proto) + : annotation_proto_(proto) {} + +PerfettoProtoAppender::~PerfettoProtoAppender() = default; + +void PerfettoProtoAppender::AddBuffer(uint8_t* begin, uint8_t* end) { + ranges_.push_back({.begin = begin, .end = end}); +} + +size_t PerfettoProtoAppender::Finalize(uint32_t field_id) { + return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(), + ranges_.size()); +} + +} // namespace base::trace_event
diff --git a/base/trace_event/perfetto_proto_appender.h b/base/trace_event/perfetto_proto_appender.h new file mode 100644 index 0000000..2436a4b --- /dev/null +++ b/base/trace_event/perfetto_proto_appender.h
@@ -0,0 +1,35 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_TRACE_EVENT_PERFETTO_PROTO_APPENDER_H_ +#define BASE_TRACE_EVENT_PERFETTO_PROTO_APPENDER_H_ + +#include <vector> + +#include "base/memory/raw_ptr.h" +#include "base/trace_event/trace_arguments.h" +#include "third_party/perfetto/include/perfetto/protozero/contiguous_memory_range.h" +#include "third_party/perfetto/protos/perfetto/trace/track_event/debug_annotation.pbzero.h" + +namespace base::trace_event { + +class BASE_EXPORT PerfettoProtoAppender + : public ConvertableToTraceFormat::ProtoAppender { + public: + explicit PerfettoProtoAppender( + perfetto::protos::pbzero::DebugAnnotation* proto); + ~PerfettoProtoAppender() override; + + // ConvertableToTraceFormat::ProtoAppender: + void AddBuffer(uint8_t* begin, uint8_t* end) override; + size_t Finalize(uint32_t field_id) override; + + private: + std::vector<protozero::ContiguousMemoryRange> ranges_; + raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_; +}; + +} // namespace base::trace_event + +#endif // BASE_TRACE_EVENT_PERFETTO_PROTO_APPENDER_H_
diff --git a/base/trace_event/trace_arguments.cc b/base/trace_event/trace_arguments.cc index 1f6f5718..63f336c 100644 --- a/base/trace_event/trace_arguments.cc +++ b/base/trace_event/trace_arguments.cc
@@ -26,6 +26,7 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/trace_event/perfetto_proto_appender.h" namespace base { namespace trace_event { @@ -120,29 +121,6 @@ *out += ")"; } -class PerfettoProtoAppender : public ConvertableToTraceFormat::ProtoAppender { - public: - explicit PerfettoProtoAppender( - perfetto::protos::pbzero::DebugAnnotation* proto) - : annotation_proto_(proto) {} - ~PerfettoProtoAppender() override = default; - - void AddBuffer(uint8_t* begin, uint8_t* end) override { - ranges_.emplace_back(); - ranges_.back().begin = begin; - ranges_.back().end = end; - } - - size_t Finalize(uint32_t field_id) override { - return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(), - ranges_.size()); - } - - private: - std::vector<protozero::ContiguousMemoryRange> ranges_; - raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_; -}; - } // namespace void StringStorage::Reset(size_t alloc_size) {
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc index 21fc123..43204b1f 100644 --- a/base/trace_event/trace_log.cc +++ b/base/trace_event/trace_log.cc
@@ -39,6 +39,7 @@ #include "base/task/single_thread_task_runner.h" #include "base/threading/platform_thread.h" #include "base/time/time.h" +#include "base/trace_event/perfetto_proto_appender.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "third_party/perfetto/include/perfetto/ext/trace_processor/export_json.h" // nogncheck @@ -94,31 +95,6 @@ &args, TRACE_EVENT_FLAG_NONE); } -class PerfettoProtoAppender - : public base::trace_event::ConvertableToTraceFormat::ProtoAppender { - public: - explicit PerfettoProtoAppender( - perfetto::protos::pbzero::DebugAnnotation* proto) - : annotation_proto_(proto) {} - ~PerfettoProtoAppender() override = default; - - // ProtoAppender implementation - void AddBuffer(uint8_t* begin, uint8_t* end) override { - ranges_.emplace_back(); - ranges_.back().begin = begin; - ranges_.back().end = end; - } - - size_t Finalize(uint32_t field_id) override { - return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(), - ranges_.size()); - } - - private: - std::vector<protozero::ContiguousMemoryRange> ranges_; - raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_; -}; - void AddConvertableToTraceFormat( base::trace_event::ConvertableToTraceFormat* value, perfetto::protos::pbzero::DebugAnnotation* annotation) {
diff --git a/base/win/windows_types.h b/base/win/windows_types.h index 426c9ae..60a014bf 100644 --- a/base/win/windows_types.h +++ b/base/win/windows_types.h
@@ -9,7 +9,6 @@ #define BASE_WIN_WINDOWS_TYPES_H_ // Needed for function prototypes. -#include <concurrencysal.h> #include <sal.h> #include <specstrings.h> @@ -104,6 +103,7 @@ typedef struct _GUID GUID; typedef GUID CLSID; typedef GUID IID; +typedef GUID UUID; typedef struct tagLOGFONTW LOGFONTW, *PLOGFONTW, *NPLOGFONTW, *LPLOGFONTW; typedef LOGFONTW LOGFONT; @@ -159,11 +159,7 @@ DWORD LowPart; LONG HighPart; - bool operator==(CHROME_LUID const& that) const { - return this->LowPart == that.LowPart && this->HighPart == that.HighPart; - } - - bool operator!=(CHROME_LUID const& that) const { return !(*this == that); } + bool operator==(const CHROME_LUID&) const = default; }; // _WIN32_FIND_DATAW is 592 bytes and the largest built-in type in it is a @@ -199,6 +195,12 @@ // clang-format off +#ifndef FALSE +#define FALSE 0 +#endif +#ifndef TRUE +#define TRUE 1 +#endif #ifndef INVALID_HANDLE_VALUE // Work around there being two slightly different definitions in the SDK. #define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1) @@ -288,6 +290,9 @@ #define WINAPI __stdcall #define APIENTRY WINAPI #define CALLBACK __stdcall +#define NTAPI __stdcall + +typedef INT_PTR(WINAPI* FARPROC)(); // Needed for LockImpl. WINBASEAPI _Releases_exclusive_lock_(*SRWLock) VOID WINAPI
diff --git a/build/android/gyp/java_cpp_enum.py b/build/android/gyp/java_cpp_enum.py index d93eec5f..5adbec51 100755 --- a/build/android/gyp/java_cpp_enum.py +++ b/build/android/gyp/java_cpp_enum.py
@@ -41,6 +41,24 @@ comments=None, fixed_type=None, is_flag=False): + """Represents a C++ enum that must be converted to java. + + Args: + original_enum_name: The name of the enum itself, without its package. + If every entry starts with this value, this prefix is removed. + class_name_override: the name for the enum in java. + If None, the original enum name is used. + enum_package: The java package in which this enum must be defined + entries: A list of pairs. Each pair contains an enum entry, followed by + either None or the value of this entry. The definition could be, for + example, an integer, an expression `2 << 5`, or another enun entry. + comments: A list of pairs. Each pair contains an entry and a comment + associated to this entry. + fixed_type: The type encoding this enum. Should belong to + `ENUM_FIXED_TYPE_ALLOWLIST`. + is_flag: Whether this value is used as a boolean flag whose entries can + be xored together. + """ self.original_enum_name = original_enum_name self.class_name_override = class_name_override self.enum_package = enum_package @@ -106,8 +124,13 @@ prefixes = [shout_case, self.original_enum_name, 'k' + self.original_enum_name] + # "kMaxValue" is a special enum entry representing the last value of an + # histogram enum. It is not expected to have prefix even when other values + # have a prefix. + standard_keys = [key for key in self.entries.keys() if key != "kMaxValue"] + for prefix in prefixes: - if all(w.startswith(prefix) for w in self.entries.keys()): + if all(w.startswith(prefix) for w in standard_keys): prefix_to_strip = prefix break else:
diff --git a/build/android/gyp/java_cpp_enum_tests.py b/build/android/gyp/java_cpp_enum_tests.py index 8163471..2bed4da 100755 --- a/build/android/gyp/java_cpp_enum_tests.py +++ b/build/android/gyp/java_cpp_enum_tests.py
@@ -645,6 +645,51 @@ self.assertEqual(collections.OrderedDict([('A', 0)]), definition.entries) + def testParseFixedTypeEnum(self): + test_data = """ + // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics + // GENERATED_JAVA_CLASS_NAME_OVERRIDE: SigninAccessPoint + enum class AccessPoint : int { + ACCESS_POINT_DRIVE_FILE_PICKER_IOS = 0, + ACCESS_POINT_COLLABORATION_TAB_GROUP = 1, + ACCESS_POINT_MAX, + }; + """.split('\n') + definitions = HeaderParser(test_data).ParseDefinitions() + self.assertEqual(1, len(definitions)) + definition = definitions[0] + self.assertEqual('SigninAccessPoint', definition.class_name) + self.assertEqual('org.chromium.components.signin.metrics', + definition.enum_package) + self.assertEqual('int', definition.fixed_type) + self.assertEqual( + collections.OrderedDict([('DRIVE_FILE_PICKER_IOS', 0), + ('COLLABORATION_TAB_GROUP', 1), ('MAX', 2)]), + definition.entries) + + def testParseFixedTypeEnumWithMaxValue(self): + test_data = """ + // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics + // GENERATED_JAVA_CLASS_NAME_OVERRIDE: SigninAccessPoint + enum class AccessPoint : int { + ACCESS_POINT_DRIVE_FILE_PICKER_IOS = 0, + ACCESS_POINT_COLLABORATION_TAB_GROUP = 1, + kMaxValue = ACCESS_POINT_COLLABORATION_TAB_GROUP, + }; + """.split('\n') + definitions = HeaderParser(test_data).ParseDefinitions() + self.assertEqual(1, len(definitions)) + definition = definitions[0] + self.assertEqual('SigninAccessPoint', definition.class_name) + self.assertEqual('org.chromium.components.signin.metrics', + definition.enum_package) + self.assertEqual('int', definition.fixed_type) + self.assertEqual( + collections.OrderedDict([('DRIVE_FILE_PICKER_IOS', '0'), + ('COLLABORATION_TAB_GROUP', '1'), + ('MAX_VALUE', 'COLLABORATION_TAB_GROUP')]), + definition.entries) + def testParseFixedTypeEnumClass(self): test_data = """ // GENERATED_JAVA_ENUM_PACKAGE: test.namespace
diff --git a/build/config/unsafe_buffers_paths.txt b/build/config/unsafe_buffers_paths.txt index 84c771e..aed5efd 100644 --- a/build/config/unsafe_buffers_paths.txt +++ b/build/config/unsafe_buffers_paths.txt
@@ -66,19 +66,6 @@ -chrome/updater/net/ -chromecast/ -clank/ --components/allocation_recorder/ --components/chromeos_camera/ --components/commerce/ --components/crash/ --components/cronet/ --components/crx_file/ --components/desks_storage/ --components/device_event_log/ --components/exo/ --components/grpc_support/ --components/gwp_asan/ --components/media_router/ --components/open_from_clipboard/ -components/optimization_guide/internal/ -ios/ -ios_internal/
diff --git a/build/rust/std/rules/BUILD.gn b/build/rust/std/rules/BUILD.gn index 42d2daa..6b59b089 100644 --- a/build/rust/std/rules/BUILD.gn +++ b/build/rust/std/rules/BUILD.gn
@@ -124,14 +124,12 @@ crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.rs" sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/alloc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/alloc/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/borrow.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed/convert.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed/iter.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/boxed/thin.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/binary_heap/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/append.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/borrow.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/btree/borrow/tests.rs", @@ -166,7 +164,6 @@ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/spec_from_iter.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/collections/vec_deque/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/c_str/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/ffi/mod.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/fmt.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/lib.miri.rs", @@ -180,13 +177,11 @@ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/str.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/string.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/sync.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/sync/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/task.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/crash_test.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/mod.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/ord_chaos.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/testing/rng.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/cow.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/drain.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/alloc/src/vec/extract_if.rs", @@ -762,6 +757,7 @@ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unicode/printable.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unicode/unicode_data.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/unsafe_binder.rs", ] inputs = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/../../portable-simd/crates/core_simd/examples/README.md", @@ -1266,185 +1262,185 @@ } cargo_crate("libc") { crate_type = "rlib" - crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/lib.rs" sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/fixed_width_ints.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/fuchsia/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/fuchsia/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/fuchsia/riscv64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/fuchsia/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/hermit.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/lib.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/macros.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/psp.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/sgx.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/solid/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/solid/arm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/solid/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/switch.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/teeos/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/trusty.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/aix/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/aix/powerpc64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/apple/b32/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/apple/b64/aarch64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/apple/b64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/apple/b64/x86_64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/apple/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/dragonfly/errno.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/dragonfly/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/arm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/freebsd15/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/powerpc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/riscv64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/x86.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/freebsdlike/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/arm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/mips.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/powerpc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/riscv64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/sparc64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/x86.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/netbsd/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/arm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/mips64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/powerpc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/riscv64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/sparc64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/x86.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/bsd/netbsdlike/openbsd/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/haiku/b32.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/haiku/b64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/haiku/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/haiku/native.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/haiku/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/hurd/b32.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/hurd/b64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/hurd/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/b32/arm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/b32/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/b32/x86/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/b64/aarch64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/b64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/b64/riscv64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/b64/x86_64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/android/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/emscripten/lfs64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/emscripten/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/arch/generic/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/arch/mips/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/arch/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/arch/powerpc/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/arch/sparc/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/arm/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/csky/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/mips/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/powerpc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b32/x86/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/s390x.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/gnu/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b32/arm/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b32/hexagon.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b32/mips/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b32/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b32/powerpc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b32/x86/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/mips64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/powerpc64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/s390x.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/lfs64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/musl/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/arm/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/mips/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/x86_64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/linux/uclibc/x86_64/other.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/linux_like/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/aarch64/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/arm/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/espidf/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/generic.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/horizon/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/powerpc/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/rtems/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/newlib/vita/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/nto/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/nto/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/nto/neutrino.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/nto/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/nuttx/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/redox/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/solarish/compat.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/solarish/illumos.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/solarish/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/solarish/solaris.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/solarish/x86.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/solarish/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/unix/solarish/x86_common.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/arm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/powerpc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/powerpc64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/riscv32.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/riscv64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/x86.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/vxworks/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/wasi/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/wasi/p2.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/windows/gnu/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/windows/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/windows/msvc/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/src/xous.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/fixed_width_ints.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/fuchsia/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/fuchsia/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/fuchsia/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/fuchsia/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/hermit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/psp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/sgx.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/solid/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/solid/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/solid/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/switch.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/teeos/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/trusty.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/aix/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/aix/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/apple/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/apple/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/apple/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/apple/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/apple/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/dragonfly/errno.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/dragonfly/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd11/b32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd11/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd12/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd13/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd14/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd15/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/freebsd15/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/freebsd/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/freebsdlike/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/mips.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/sparc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/netbsd/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/mips64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/sparc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/bsd/netbsdlike/openbsd/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/haiku/b32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/haiku/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/haiku/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/haiku/native.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/haiku/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/hurd/b32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/hurd/b64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/hurd/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/b32/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/b32/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/b64/riscv64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/android/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/emscripten/lfs64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/emscripten/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/arch/generic/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/arch/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/arch/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/arch/powerpc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/arch/sparc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/csky/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/m68k/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/riscv32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/sparc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b32/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/aarch64/ilp32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/aarch64/lp64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/loongarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/mips64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/powerpc64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/riscv64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/s390x.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/sparc64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/x86_64/not_x32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/b64/x86_64/x32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/gnu/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b32/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b32/hexagon.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b32/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b32/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b32/riscv32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b32/x86/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/loongarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/mips64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/riscv64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/s390x.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/b64/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/lfs64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/musl/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/mips/mips32/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/mips/mips64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/mips/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/x86_64/l4re.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/x86_64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/linux/uclibc/x86_64/other.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/linux_like/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/aarch64/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/arm/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/espidf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/generic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/horizon/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/powerpc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/rtems/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/newlib/vita/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/nto/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/nto/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/nto/neutrino.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/nto/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/nuttx/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/redox/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/solarish/compat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/solarish/illumos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/solarish/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/solarish/solaris.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/solarish/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/solarish/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/unix/solarish/x86_common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/powerpc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/powerpc64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/riscv32.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/riscv64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/vxworks/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/wasi/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/wasi/p2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/windows/gnu/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/windows/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/windows/msvc/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/src/xous.rs", ] inputs = [] no_std = true @@ -1452,7 +1448,7 @@ # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false edition = "2021" - cargo_pkg_version = "0.2.167" + cargo_pkg_version = "0.2.169" cargo_pkg_authors = "The Rust Project Developers" cargo_pkg_name = "libc" cargo_pkg_description = "Raw FFI bindings to platform libraries like libc." @@ -1476,8 +1472,8 @@ "rustc-dep-of-std", "rustc-std-workspace-core", ] - build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/build.rs" - build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.167/build.rs" ] + build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/build.rs" + build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/libc-0.2.169/build.rs" ] rustenv = [ "CFG_DISABLE_UNSTABLE_FEATURES=0", "STD_ENV_ARCH=$rust_target_arch",
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni index a82acd22..e8c41876 100644 --- a/buildtools/deps_revisions.gni +++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@ declare_args() { # Used to cause full rebuilds on libc++ rolls. This should be kept in sync # with the libcxx_revision var in //DEPS. - libcxx_revision = "9ba1d4922ab23234f7a2af4c8cd7699756959950" + libcxx_revision = "b4511937e4e55617e26ba3912e0dc169443e0c00" }
diff --git a/cc/test/pixel_test.cc b/cc/test/pixel_test.cc index e62f002..10d7a285 100644 --- a/cc/test/pixel_test.cc +++ b/cc/test/pixel_test.cc
@@ -256,38 +256,23 @@ std::move(quit_run_loop).Run(); } -void PixelTest::AllocateSharedBitmapMemory( - scoped_refptr<viz::RasterContextProvider> context_provider, - const gfx::Size& size, - scoped_refptr<gpu::ClientSharedImage>& shared_image, - base::WritableSharedMemoryMapping& mapping, - gpu::SyncToken& sync_token) { - DCHECK(context_provider); - auto* shared_image_interface = context_provider->SharedImageInterface(); - DCHECK(shared_image_interface); - auto shared_image_mapping = shared_image_interface->CreateSharedImage( - {viz::SinglePlaneFormat::kBGRA_8888, size, gfx::ColorSpace(), - gpu::SHARED_IMAGE_USAGE_CPU_WRITE_ONLY, "PixelTestSharedBitmap"}); - - shared_image = std::move(shared_image_mapping.shared_image); - mapping = std::move(shared_image_mapping.mapping); - sync_token = shared_image_interface->GenVerifiedSyncToken(); - CHECK(shared_image); -} - viz::ResourceId PixelTest::AllocateAndFillSoftwareResource( scoped_refptr<viz::RasterContextProvider> context_provider, const gfx::Size& size, const SkBitmap& source) { - scoped_refptr<gpu::ClientSharedImage> shared_image; - base::WritableSharedMemoryMapping mapping; - gpu::SyncToken sync_token; - AllocateSharedBitmapMemory(context_provider, size, shared_image, mapping, - sync_token); + auto* shared_image_interface = context_provider->SharedImageInterface(); + DCHECK(shared_image_interface); + + scoped_refptr<gpu::ClientSharedImage> shared_image = + shared_image_interface->CreateSharedImageForSoftwareCompositor( + {viz::SinglePlaneFormat::kBGRA_8888, size, gfx::ColorSpace(), + gpu::SHARED_IMAGE_USAGE_CPU_WRITE_ONLY, "PixelTestSharedBitmap"}); + auto mapping = shared_image->Map(); + gpu::SyncToken sync_token = shared_image_interface->GenVerifiedSyncToken(); SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); const size_t row_bytes = info.minRowBytes(); - base::span<uint8_t> mem(mapping); + base::span<uint8_t> mem = mapping->GetMemoryForPlane(0); CHECK_GE(mem.size(), info.computeByteSize(row_bytes)); source.readPixels(info, mem.data(), row_bytes, 0, 0);
diff --git a/cc/test/pixel_test.h b/cc/test/pixel_test.h index ad155509..b71ceae 100644 --- a/cc/test/pixel_test.h +++ b/cc/test/pixel_test.h
@@ -95,16 +95,8 @@ return gpu_service_holder_->task_executor(); } - // Allocates a SharedMemory bitmap. - void AllocateSharedBitmapMemory( - scoped_refptr<viz::RasterContextProvider> context_provider, - const gfx::Size& size, - scoped_refptr<gpu::ClientSharedImage>& shared_image, - base::WritableSharedMemoryMapping& mapping, - gpu::SyncToken& sync_token); - // Uses AllocateSharedBitmapMemory() then registers a ResourceId with the - // |child_resource_provider_|, and copies the contents of |source| into the - // software resource backing. + // Copies the contents of |source| into a software-backed TransferableResource + // and imports that resource into `context_provider`. viz::ResourceId AllocateAndFillSoftwareResource( scoped_refptr<viz::RasterContextProvider> context_provider, const gfx::Size& size,
diff --git a/chrome/VERSION b/chrome/VERSION index 9c2a2a554..80a921e9 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=133 MINOR=0 -BUILD=6930 +BUILD=6935 PATCH=0
diff --git a/chrome/android/expectations/monochrome_64_32_public_bundle.proguard_flags.expected b/chrome/android/expectations/monochrome_64_32_public_bundle.proguard_flags.expected index c361e11..be31ddc 100644 --- a/chrome/android/expectations/monochrome_64_32_public_bundle.proguard_flags.expected +++ b/chrome/android/expectations/monochrome_64_32_public_bundle.proguard_flags.expected
@@ -491,10 +491,25 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. --keep class ** implements androidx.appsearch.app.DocumentClassFactory { *; } --keep class ** implements androidx.appsearch.app.AppSearchDocumentClassMap { *; } +# Keep DocumentClassFactory classes only when DocumentClassFactoryRegistry is used. Since +# DocumentClassFactoryRegistry loads these classes by name, also do not obfuscate names. +-if class androidx.appsearch.app.DocumentClassFactoryRegistry {} +-keep,allowoptimization class ** implements androidx.appsearch.app.DocumentClassFactory {} --keep @androidx.appsearch.annotation.Document class * +-if class androidx.appsearch.app.DocumentClassFactoryRegistry {} +-keepnames,allowoptimization @androidx.appsearch.annotation.Document class ** {} + +# Keep AppSearchDocumentClassMap name for ServiceLoader +-keepnames,allowoptimization class androidx.appsearch.app.AppSearchDocumentClassMap {} + +# If AppSearchDocumentClassMap#getGlobalMap() is used, keep any implementing subclasses since +# AppSearchDocumentClassMap#getMap() is used to populate the global map. +-if class androidx.appsearch.app.AppSearchDocumentClassMap { + public static java.util.Map getGlobalMap(); +} +-keep,allowoptimization class ** implements androidx.appsearch.app.AppSearchDocumentClassMap { + public java.util.Map getMap(); +} # File: obj/third_party/androidx/androidx_biometric_biometric_java/proguard.txt # Copyright (C) 2020 The Android Open Source Project
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyController.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyController.java index 78a45e524..61bfb49 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyController.java
@@ -192,6 +192,38 @@ showSurvey(surveyType); } + // Schedules the launch of an Ads CCT control survey. + // Clients expected to see a control survey will not see any Ads CCT dialogs. + public void scheduleAdsCctControlSurveyLaunch(String appId, @PromptType int promptType) { + if (!shouldLaunchAdsCctSurvey(appId)) { + return; + } + PostTask.postDelayedTask( + TaskTraits.UI_DEFAULT, + () -> maybeLaunchAdsCctControlSurvey(promptType), + /*20 seconds*/ 20000); + } + + // Determines the appropriate survey to launch based on the prompt type. + private void maybeLaunchAdsCctControlSurvey(@PromptType int promptType) { + switch (promptType) { + case PromptType.M1_CONSENT: + // Case where we expected the client to see the EEA consent. + showSurvey(PrivacySandboxSurveyType.CCT_EEA_CONTROL); + break; + case PromptType.M1_NOTICE_ROW: + // Case where we expected the client to see the ROW notice. + showSurvey(PrivacySandboxSurveyType.CCT_ROW_CONTROL); + break; + case PromptType.NONE: + case PromptType.M1_NOTICE_EEA: + case PromptType.M1_NOTICE_RESTRICTED: + // TODO(crbug.com/379930582): Emit a histogram detailing that we expected to surface + // a survey but we did not encounter a expected case + return; + } + } + private SurveyClient constructSurveyClient(PrivacySandboxSurveyType survey) { SurveyConfig surveyConfig = SurveyConfig.get(mProfile, sSurveyTriggers.get(survey)); if (surveyConfig == null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java index e86b8c4..56f6c6a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
@@ -219,14 +219,7 @@ * to null in case the user is signed out. */ private void maybeUpdateLegacyPrimaryAccountEmail() { - @ConsentLevel - int consentLevel = - SigninFeatureMap.isEnabled( - SigninFeatures - .USE_CONSENT_LEVEL_SIGNIN_FOR_LEGACY_ACCOUNT_EMAIL_PREF) - ? ConsentLevel.SIGNIN - : ConsentLevel.SYNC; - CoreAccountInfo accountInfo = mIdentityManager.getPrimaryAccountInfo(consentLevel); + CoreAccountInfo accountInfo = mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN); if (Objects.equals( CoreAccountInfo.getEmailFrom(accountInfo), SigninPreferencesManager.getInstance().getLegacyPrimaryAccountEmail())) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/ViewportTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/ViewportTestUtils.java index e1c61bc4..c0192ea 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/ViewportTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/ViewportTestUtils.java
@@ -15,11 +15,11 @@ import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.fullscreen.FullscreenManagerTestUtils; import org.chromium.chrome.browser.tab.TabStateBrowserControlsVisibilityDelegate; +import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.test.util.Coordinates; import org.chromium.content_public.browser.test.util.JavaScriptUtils; -import org.chromium.content_public.browser.test.util.TouchCommon; import java.util.concurrent.TimeUnit; @@ -51,20 +51,12 @@ public void waitForBrowserControlsState(boolean shown) { int topControlsHeight = getTopControlsHeightPx(); - BrowserControlsStateProvider browserControlsStateProvider = - mActivityTestRule.getActivity().getBrowserControlsManager(); // The TopControlOffset is the offset of the controls top edge from the viewport top edge. // So fully shown the offset is 0, fully hidden it is -controls_height. int expectedOffset = shown ? 0 : -topControlsHeight; - CriteriaHelper.pollUiThread( - () -> { - Criteria.checkThat( - browserControlsStateProvider.getTopControlOffset(), - Matchers.is(expectedOffset)); - }, - TEST_TIMEOUT, - CriteriaHelper.DEFAULT_POLLING_INTERVAL); + FullscreenManagerTestUtils.waitForBrowserControlsPosition( + mActivityTestRule, expectedOffset); } public void hideBrowserControls() throws Throwable { @@ -78,32 +70,16 @@ FullscreenManagerTestUtils.waitForPageToBeScrollable( mActivityTestRule.getActivity().getActivityTab()); waitForFramePresented(); - int initialPageHeight = getPageInnerHeightPx(); - int topControlsHeight = getTopControlsHeightPx(); + int initialBottomInset = getBottomInsetHeightDp(); + FullscreenManagerTestUtils.waitForBrowserControlsToBeMoveable( + mActivityTestRule, + mActivityTestRule.getActivity().getActivityTab(), + /* showControls= */ false); - float dragX = 50f; - - // Drag slightly less than the full height of the controls. Releasing at this point will - // animate the controls to hidden but ensure we don't accidentally cause any scrolling of - // the page. - float dragStartY = topControlsHeight * 3; - float dragEndY = dragStartY - topControlsHeight * 0.85f; - - long duration_ms = 1000; - int steps = 60; - TouchCommon.performDragNoFling( - mActivityTestRule.getActivity(), - dragX, - dragX, - dragStartY, - dragEndY, - steps, - duration_ms); - - waitForBrowserControlsState(/* shown= */ false); // Also wait for the browser controls to resize Blink before returning. - waitForExpectedPageHeight(initialPageHeight + getTopControlsHeightDp()); + int finalHeight = initialPageHeight + getTopControlsHeightDp() + initialBottomInset; + waitForExpectedPageHeight(finalHeight); } public void waitForExpectedPageHeight(double expectedPageHeight) { @@ -181,6 +157,13 @@ return (int) Math.floor(getTopControlsHeightPx() / getDeviceScaleFactor()); } + public int getBottomInsetHeightDp() { + EdgeToEdgeController e2eController = + mActivityTestRule.getActivity().getEdgeToEdgeControllerSupplierForTesting().get(); + // Returns zero if the inset is not scrollable. + return e2eController != null ? e2eController.getBottomInset() : 0; + } + public int getPageInnerHeightPx() throws Throwable { return Integer.parseInt( JavaScriptUtils.executeJavaScriptAndWaitForResult(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java index 49e9eba..46d4b81 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/BookmarkTest.java
@@ -75,7 +75,7 @@ import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.DoNotBatch; -import org.chromium.base.test.util.Features.DisableFeatures; +import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.app.metrics.LaunchCauseMetrics; @@ -145,12 +145,8 @@ /** Tests for the bookmark manager. */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures({ +@EnableFeatures({ SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - // TODO(crbug.com/344981899): ReplaceSyncPromosWithSigninPromos is disabled because bookmarks - // account storage is disabled above, otherwise tests run into assertion failures. Long term, - // these tests probably need to be fixed for the bookmarks account storage case rather than - // force-disable the feature. ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP }) @@ -825,6 +821,7 @@ @Test @MediumTest + @DisabledTest(message = "https://crbug.com/344981899, this test needs to be fixed post-UNO") public void testSmallDrag_Up_BookmarksOnly() throws Exception { List<BookmarkId> initial = new ArrayList<>(); List<BookmarkId> expected = new ArrayList<>(); @@ -906,6 +903,7 @@ @Test @MediumTest + @DisabledTest(message = "https://crbug.com/344981899, this test needs to be fixed post-UNO") public void testSmallDrag_Down_FoldersOnly() throws Exception { List<BookmarkId> initial = new ArrayList<>(); List<BookmarkId> expected = new ArrayList<>(); @@ -1729,6 +1727,7 @@ @Test @MediumTest @Restriction({DeviceFormFactor.PHONE}) + @DisabledTest(message = "https://crbug.com/344981899, this test needs to be fixed post-UNO") public void testRecordsHistogramWhenBookmarkManagerOpened_InIncognito() throws Throwable { assertEquals( 0,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java index 67331db..3839d9c4 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/app/bookmarks/ReadingListTest.java
@@ -49,7 +49,6 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.DoNotBatch; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.bookmarks.BookmarkDelegate; @@ -62,7 +61,6 @@ import org.chromium.chrome.browser.bookmarks.BookmarkUiState.BookmarkUiMode; import org.chromium.chrome.browser.bookmarks.BookmarkUtils; import org.chromium.chrome.browser.bookmarks.TestingDelegate; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.ui.signin.SyncPromoController.SyncPromoState; @@ -77,7 +75,6 @@ import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils; import org.chromium.components.browser_ui.widget.selectable_list.SelectableListToolbar; import org.chromium.components.embedder_support.util.UrlConstants; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.content_public.browser.test.util.TouchCommon; import org.chromium.net.test.EmbeddedTestServer; import org.chromium.ui.accessibility.AccessibilityState; @@ -90,14 +87,6 @@ /** Tests for the reading list in the bookmark manager. */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures({ - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - // TODO(crbug.com/344981899): ReplaceSyncPromosWithSigninPromos is disabled because bookmarks - // account storage is disabled above, otherwise tests run into assertion failures. Long term, - // these tests probably need to be fixed for the bookmarks account storage case rather than - // force-disable the feature. - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS -}) @DoNotBatch(reason = "BookmarkTest has behaviours and thus can't be batched.") public class ReadingListTest { @Rule
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/AccountBookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/AccountBookmarkTest.java index 314c96b..55571de 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/AccountBookmarkTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/AccountBookmarkTest.java
@@ -31,9 +31,7 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.DoNotBatch; -import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.base.test.util.Restriction; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.profiles.ProfileManager; import org.chromium.chrome.browser.sync.SyncTestRule; @@ -43,13 +41,11 @@ import org.chromium.chrome.test.util.BookmarkTestRule; import org.chromium.chrome.test.util.BookmarkTestUtil; import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.url.GURL; @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@EnableFeatures({SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE}) // TODO(crbug.com/40743432): Once SyncTestRule supports batching, investigate batching this suite. @DoNotBatch(reason = "SyncTestRule doesn't support batching.") public class AccountBookmarkTest { @@ -125,17 +121,11 @@ // folder doesn't show up without a restart. This should be updated once that folder is // available. checkToolbarTitleMatches("Bookmarks"); - if (!ChromeFeatureList.isEnabled( - ChromeFeatureList.READING_LIST_ENABLE_SYNC_TRANSPORT_MODE_UPON_SIGNIN)) { - onView(withText("In your Google Account")).check(matches(isDisplayed())); - } - BookmarkTestUtil.getRecyclerRowViewInteraction("Mobile bookmarks", true) + BookmarkTestUtil.getRecyclerRowViewInteraction( + "Mobile bookmarks", /* isAccountBookmark= */ true) .check(matches(isDisplayed())); BookmarkTestUtil.getRecyclerRowViewInteraction( - "Reading list", - ChromeFeatureList.isEnabled( - ChromeFeatureList - .READING_LIST_ENABLE_SYNC_TRANSPORT_MODE_UPON_SIGNIN)) + "Reading list", /* isAccountBookmark= */ true) .check(matches(isDisplayed())); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerRenderTest.java index 5a02fa5..3d7e8f92 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerRenderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerRenderTest.java
@@ -42,7 +42,6 @@ import org.chromium.base.test.params.ParameterizedRunner; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.chrome.R; import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowDisplayPref; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; @@ -52,7 +51,6 @@ import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils; import org.chromium.components.commerce.core.ShoppingService; import org.chromium.components.feature_engagement.Tracker; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.ui.test.util.BlankUiTestActivity; import org.chromium.ui.test.util.NightModeTestUtils; import org.chromium.url.GURL; @@ -64,7 +62,6 @@ @RunWith(ParameterizedRunner.class) @ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) @Batch(Batch.PER_CLASS) -@DisableFeatures(SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE) public class BookmarkFolderPickerRenderTest { @ClassParameter private static List<ParameterSet> sClassParams =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java index 9111c768..45ac57d3 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkOpenerTest.java
@@ -25,7 +25,7 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DoNotBatch; -import org.chromium.base.test.util.Features.DisableFeatures; +import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.base.test.util.UserActionTester; import org.chromium.chrome.browser.app.bookmarks.BookmarkActivity; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -52,12 +52,8 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @DoNotBatch(reason = "Tabs can't be closed reliably between tests.") -@DisableFeatures({ +@EnableFeatures({ SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - // TODO(crbug.com/344981899): ReplaceSyncPromosWithSigninPromos is disabled because bookmarks - // account storage is disabled above, otherwise tests run into assertion failures. Long term, - // these tests probably need to be fixed for the bookmarks account storage case rather than - // force-disable the feature. ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS }) public class BookmarkOpenerTest {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java index 35315b3f..91db229 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java
@@ -5,15 +5,11 @@ package org.chromium.chrome.browser.bookmarks; import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static org.hamcrest.core.AllOf.allOf; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.chromium.components.browser_ui.widget.RecyclerViewTestUtils.activeInRecyclerView; @@ -38,9 +34,7 @@ import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisableIf; -import org.chromium.base.test.util.DisabledTest; -import org.chromium.base.test.util.Features; -import org.chromium.base.test.util.Features.DisableFeatures; +import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.base.test.util.HistogramWatcher; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -50,7 +44,6 @@ import org.chromium.chrome.browser.signin.SyncConsentActivityLauncherImpl; import org.chromium.chrome.browser.sync.SyncServiceFactory; import org.chromium.chrome.browser.ui.signin.SyncConsentActivityLauncher; -import org.chromium.chrome.browser.ui.signin.SyncPromoController.SyncPromoState; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.R; @@ -58,8 +51,6 @@ import org.chromium.chrome.test.util.BookmarkTestRule; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; import org.chromium.components.browser_ui.widget.RecyclerViewTestUtils; -import org.chromium.components.signin.base.CoreAccountInfo; -import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.sync.SyncFeatureMap; import org.chromium.components.sync.SyncService; import org.chromium.components.sync.UserSelectableType; @@ -72,12 +63,8 @@ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @Batch(Batch.PER_CLASS) -@DisableFeatures({ +@EnableFeatures({ SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - // TODO(crbug.com/344981899): ReplaceSyncPromosWithSigninPromos is disabled because bookmarks - // account storage is disabled above, otherwise tests run into assertion failures. Long term, - // these tests probably need to be fixed for the bookmarks account storage case rather than - // force-disable the feature. ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP }) @@ -124,86 +111,6 @@ @Test @MediumTest - @DisabledTest(message = "https://crbug.com/1406333") - public void testSigninButtonDefaultAccount() { - BookmarkPromoHeader.forcePromoStateForTesting(SyncPromoState.PROMO_FOR_SIGNED_OUT_STATE); - - var continuedHistogram = - HistogramWatcher.newSingleRecordWatcher(CONTINUED_HISTOGRAM_NAME, 1); - final CoreAccountInfo accountInfo = - mAccountManagerTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); - showBookmarkManagerAndCheckSigninPromoIsDisplayed(); - - onView(allOf(withId(R.id.sync_promo_signin_button), activeInRecyclerView())) - .perform(click()); - continuedHistogram.assertExpected(); - Assert.assertEquals( - mMockSyncConsentActivityLauncher, - SyncConsentActivityLauncherImpl.getForProfile(sActivityTestRule.getProfile(false))); - verify(mMockSyncConsentActivityLauncher) - .launchActivityForPromoDefaultFlow( - any(Activity.class), - eq(SigninAccessPoint.BOOKMARK_MANAGER), - eq(accountInfo.getEmail())); - } - - @Test - @MediumTest - // Signing in with a non-default account is disabled on automotive, which only supports one - // account per OS profile. - @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) - @DisableIf.Device(DeviceFormFactor.TABLET) // crbug.com/362215887 - public void testSigninButtonNotDefaultAccount() { - BookmarkPromoHeader.forcePromoStateForTesting(SyncPromoState.PROMO_FOR_SIGNED_OUT_STATE); - - var continuedHistogram = - HistogramWatcher.newSingleRecordWatcher(CONTINUED_HISTOGRAM_NAME, 1); - final CoreAccountInfo accountInfo = - mAccountManagerTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL); - showBookmarkManagerAndCheckSigninPromoIsDisplayed(); - - onView(allOf(withId(R.id.sync_promo_choose_account_button), activeInRecyclerView())) - .perform(click()); - continuedHistogram.assertExpected(); - Assert.assertEquals( - mMockSyncConsentActivityLauncher, - SyncConsentActivityLauncherImpl.getForProfile(sActivityTestRule.getProfile(false))); - verify(mMockSyncConsentActivityLauncher) - .launchActivityForPromoChooseAccountFlow( - any(Activity.class), - eq(SigninAccessPoint.BOOKMARK_MANAGER), - eq(accountInfo.getEmail())); - } - - @Test - @MediumTest - @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) - @DisableIf.Device(DeviceFormFactor.TABLET) // crbug.com/362215887 - public void testSigninButtonNewAccount() { - BookmarkPromoHeader.forcePromoStateForTesting(SyncPromoState.PROMO_FOR_SIGNED_OUT_STATE); - - var continuedHistogram = - HistogramWatcher.newSingleRecordWatcher(CONTINUED_HISTOGRAM_NAME, 1); - showBookmarkManagerAndCheckSigninPromoIsDisplayed(); - - onView(allOf(withId(R.id.sync_promo_signin_button), activeInRecyclerView())) - .perform(click()); - continuedHistogram.assertExpected(); - Assert.assertEquals( - mMockSyncConsentActivityLauncher, - SyncConsentActivityLauncherImpl.getForProfile(sActivityTestRule.getProfile(false))); - verify(mMockSyncConsentActivityLauncher) - .launchActivityForPromoAddAccountFlow( - any(Activity.class), eq(SigninAccessPoint.BOOKMARK_MANAGER)); - } - - @Test - @MediumTest - @Features.EnableFeatures({ - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, - ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP - }) // TODO(crbug.com/353949455): Re-enable these tests once UNO is enabled for cars. @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) @DisableIf.Device(DeviceFormFactor.TABLET) // crbug.com/372858049 @@ -216,11 +123,6 @@ @Test @MediumTest - @Features.EnableFeatures({ - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, - ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP - }) // TODO(crbug.com/353949455): Re-enable these tests once UNO is enabled for cars. @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) @DisableIf.Build(sdk_equals = Build.VERSION_CODES.S_V2, message = "crbug.com/362215887") @@ -233,11 +135,6 @@ @Test @MediumTest - @Features.EnableFeatures({ - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, - ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP - }) // TODO(crbug.com/353949455): Re-enable these tests once UNO is enabled for cars. @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) @DisableIf.Device(DeviceFormFactor.TABLET) // crbug.com/372858049 @@ -252,11 +149,6 @@ @Test @MediumTest - @Features.EnableFeatures({ - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, - ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP - }) // TODO(crbug.com/353949455): Re-enable these tests once UNO is enabled for cars. @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) @DisableIf.Build(sdk_equals = Build.VERSION_CODES.S_V2, message = "crbug.com/362215887") @@ -270,11 +162,6 @@ @Test @MediumTest - @Features.EnableFeatures({ - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, - ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP - }) // TODO(crbug.com/353949455): Re-enable these tests once UNO is enabled for cars. @Restriction(DeviceRestriction.RESTRICTION_TYPE_NON_AUTO) @DisableIf.Build(sdk_equals = Build.VERSION_CODES.S_V2, message = "crbug.com/362215887") @@ -296,10 +183,6 @@ } } - private void showBookmarkManagerAndCheckSigninPromoIsDisplayed() { - showBookmarkManagerAndCheckSigninPromoIsDisplayed(true); - } - // TODO(crbug.com/327387704): Once we implement the correct impression recording, always check // histograms. private void showBookmarkManagerAndCheckSigninPromoIsDisplayed(boolean checkHistogram) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowTest.java index 876a428..ae042ad 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkSaveFlowTest.java
@@ -37,12 +37,10 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DoNotBatch; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.commerce.PriceTrackingUtils; import org.chromium.chrome.browser.commerce.PriceTrackingUtilsJni; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileManager; @@ -70,7 +68,7 @@ /** Tests for the bookmark save flow. */ @RunWith(ChromeJUnit4ClassRunner.class) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) -@DisableFeatures({SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE}) +@EnableFeatures({SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE}) // TODO(crbug.com/40743432): Once SyncTestRule supports batching, investigate batching this suite. @DoNotBatch(reason = "SyncTestRule doesn't support batching.") public class BookmarkSaveFlowTest { @@ -80,7 +78,7 @@ public final ChromeRenderTestRule mRenderTestRule = ChromeRenderTestRule.Builder.withPublicCorpus() .setBugComponent(ChromeRenderTestRule.Component.UI_BROWSER_BOOKMARKS) - .setRevision(1) + .setRevision(2) .build(); @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @@ -165,10 +163,6 @@ @Test @MediumTest @Feature({"RenderTest"}) - @EnableFeatures({ - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE - }) public void testBookmarkSaveFlow_improvedBookmarks_accountBookmarksEnabled() throws IOException { CriteriaHelper.pollUiThread(() -> mBookmarkModel.getAccountMobileFolderId() != null);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkSaveFlowRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkSaveFlowRenderTest.java index 02e1ff5..9e8516d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkSaveFlowRenderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkSaveFlowRenderTest.java
@@ -30,7 +30,6 @@ import org.chromium.base.test.params.ParameterizedRunner; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.chrome.R; import org.chromium.chrome.browser.bookmarks.ImprovedBookmarkSaveFlowProperties.FolderText; @@ -50,7 +49,7 @@ @RunWith(ParameterizedRunner.class) @ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) @Batch(Batch.PER_CLASS) -@DisableFeatures(SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE) +@EnableFeatures(SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE) public class ImprovedBookmarkSaveFlowRenderTest { @ClassParameter private static List<ParameterSet> sClassParams = new NightModeParams().getParameters(); @@ -64,7 +63,7 @@ @Rule public ChromeRenderTestRule mRenderTestRule = ChromeRenderTestRule.Builder.withPublicCorpus() - .setRevision(4) + .setRevision(5) .setBugComponent(ChromeRenderTestRule.Component.UI_BROWSER_BOOKMARKS) .build(); @@ -213,7 +212,6 @@ @Test @MediumTest @Feature({"RenderTest"}) - @EnableFeatures({SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE}) public void testTitleAndSubtitle() throws IOException { ThreadUtils.runOnUiThreadBlocking( () -> {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/fullscreen/FullscreenManagerTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/fullscreen/FullscreenManagerTestUtils.java index 550802c9..3b0b7b2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/fullscreen/FullscreenManagerTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/fullscreen/FullscreenManagerTestUtils.java
@@ -106,6 +106,22 @@ */ public static void waitForBrowserControlsToBeMoveable( ChromeActivityTestRule testRule, final Tab tab) { + waitForBrowserControlsToBeMoveable(testRule, tab, /* showControls= */ true); + } + + /** + * Waits for the browser controls to be moveable by user gesture. + * + * <p>This function requires the browser controls to start fully visible. Then it ensures that + * at some point the controls can be moved by user gesture. If @param showControls is true, it + * will restore the controls to show fully. + * + * @param testRule The test rule for the currently running test. + * @param tab The current activity tab. + * @param showControls Whether to keep the controls shown at the end. + */ + public static void waitForBrowserControlsToBeMoveable( + ChromeActivityTestRule testRule, final Tab tab, boolean showControls) { waitForBrowserControlsPosition(testRule, 0); final CallbackHelper contentMovedCallback = new CallbackHelper(); @@ -148,9 +164,11 @@ testRule.getActivity(), dragX, dragX, dragStartY, dragEndY, 100, downTime); try { - contentMovedCallback.waitForCallback(0, 1, 500, TimeUnit.MILLISECONDS); + contentMovedCallback.waitForCallback(0, 1, 1, TimeUnit.SECONDS); scrollBrowserControls(testRule, false); - scrollBrowserControls(testRule, true); + if (showControls) { + scrollBrowserControls(testRule, true); + } return; } catch (TimeoutException e) { // Ignore and retry
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationTransitionsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationTransitionsTest.java index 31bbbe4..fa9490e 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationTransitionsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationTransitionsTest.java
@@ -462,7 +462,6 @@ */ @Test @MediumTest - @DisabledTest(message = "crbug.com/385189006") public void startBackNavWithTopControlHidden() throws Throwable { if (mTestNavigationMode == NAVIGATION_MODE_GESTURAL && VERSION.SDK_INT < VERSION_CODES.UPSIDE_DOWN_CAKE) return;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarContainerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarContainerTest.java index e199c23..432eb5f8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarContainerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/infobar/InfoBarContainerTest.java
@@ -252,6 +252,7 @@ @Test @MediumTest @Feature({"Browser"}) + @DisableIf.Device(DeviceFormFactor.TABLET) // crbug.com/387250786 public void testQuickAddOneAndDismiss() throws Exception { final TestListener infobarListener = addInfoBarToCurrentTab(false); Assert.assertEquals(1, sActivityTestRule.getInfoBars().size());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNameTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNameTest.java index 6ea4769..61e6a79 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNameTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestNameTest.java
@@ -212,6 +212,8 @@ @Test @MediumTest @Feature({"Payments"}) + @DisableIf.Build( + sdk_equals = Build.VERSION_CODES.UPSIDE_DOWN_CAKE) // https://crbug.com/383399707 public void testPaymentRequestEventsMetric() throws TimeoutException { int expectedSample = Event2.SHOWN
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/AutomaticEmbargoTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/AutomaticEmbargoTest.java index d67c119..d0672e6d 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/AutomaticEmbargoTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/AutomaticEmbargoTest.java
@@ -14,6 +14,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.flags.ChromeSwitches; @@ -24,6 +25,7 @@ import org.chromium.content_public.common.ContentSwitches; import org.chromium.device.geolocation.LocationProviderOverrider; import org.chromium.device.geolocation.MockLocationProvider; +import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; @@ -127,6 +129,7 @@ @LargeTest @Feature({"MediaPermissions"}) @CommandLineFlags.Add({ContentSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM}) + @DisableIf.Device(DeviceFormFactor.TABLET) // crbug.com/387226499 public void testCameraEmbargo() throws Exception { runTest(MEDIA_TEST_FILE, "initiate_getMicrophone()", "deny", /* withGesture= */ true); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sensitive_content/SensitiveContentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sensitive_content/SensitiveContentTest.java index 4a6b1097..abef2ca6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sensitive_content/SensitiveContentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sensitive_content/SensitiveContentTest.java
@@ -31,6 +31,7 @@ import androidx.test.filters.LargeTest; import androidx.test.filters.MediumTest; +import org.chromium.base.test.util.DisableIf; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -449,6 +450,7 @@ @Test @LargeTest @EnableFeatures(SensitiveContentFeatures.SENSITIVE_CONTENT_WHILE_SWITCHING_TABS) + @DisableIf.Device(DeviceFormFactor.PHONE) // crbug.com/378742136 public void testSwipingBetweenTabsIsSensitive() { // Set up. final View contentContainer =
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java index f2d72de..c67d51d8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/settings/MainSettingsFragmentTest.java
@@ -27,8 +27,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.chromium.ui.test.util.ViewUtils.onViewWaiting; - import android.app.Activity; import android.content.Intent; import android.os.Build; @@ -141,7 +139,6 @@ import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.signin.test.util.AccountCapabilitiesBuilder; import org.chromium.components.signin.test.util.TestAccounts; -import org.chromium.ui.test.util.RenderTestRule; import org.chromium.ui.test.util.ViewUtils; import java.io.IOException; @@ -225,31 +222,6 @@ @Test @LargeTest @Feature({"RenderTest"}) - @DisabledTest(message = "http://b/issues/41491395") - public void testRenderDifferentSignedInStates() throws IOException { - startSettings(); - waitForOptionsMenu(); - View view = - mSettingsActivityTestRule - .getActivity() - .findViewById(android.R.id.content) - .getRootView(); - mRenderTestRule.render(view, "main_settings_signed_out"); - - // Sign in and render changes. - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - SyncTestUtil.waitForSyncFeatureActive(); - waitForOptionsMenu(); - // Waiting for sync to become active might take some time, so the scrollbar on the settings - // view starts to fade, making the test flaky due to differences in the rendered image. - // Sanitize the view to hide scrollbars (see https://crbug.com/1204117 for details). - ThreadUtils.runOnUiThreadBlocking(() -> RenderTestRule.sanitize(view)); - mRenderTestRule.render(view, "main_settings_signed_in"); - } - - @Test - @LargeTest - @Feature({"RenderTest"}) @EnableFeatures(ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS) public void testRenderSignedOutAccountManagementRows_replaceSyncBySigninEnabled() throws IOException { @@ -557,28 +529,6 @@ onView(allOf(withId(R.id.alert_icon), isDisplayed())).check(doesNotExist()); } - // Tests that no alert icon is shown on the account row for syncing users, even if there exists - // an identity error. - @Test - @SmallTest - public void testSigninRowShowsNoAlertForIdentityErrorsForSyncingUsers() { - FakeSyncServiceImpl fakeSyncService = - ThreadUtils.runOnUiThreadBlocking( - () -> { - FakeSyncServiceImpl fakeSyncServiceImpl = new FakeSyncServiceImpl(); - SyncServiceFactory.setInstanceForTesting(fakeSyncServiceImpl); - return fakeSyncServiceImpl; - }); - // Fake an identity error. - fakeSyncService.setRequiresClientUpgrade(true); - // Sign-in and enable sync. Open settings. - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - startSettings(); - - assertSettingsExists(MainSettings.PREF_SIGN_IN, AccountManagementFragment.class); - onView(allOf(withId(R.id.alert_icon), isDisplayed())).check(doesNotExist()); - } - // Tests that an alert icon is shown on the account row in case of an identity error for a // signed-in non-syncing user. @Test @@ -649,20 +599,6 @@ @Test @SmallTest - public void testSyncRowSummaryWhenUpmBackendOutdated() { - when(mPasswordManagerUtilBridgeJniMock.isGmsCoreUpdateRequired(any(), any())) - .thenReturn(true); - - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - SyncTestUtil.waitForSyncFeatureActive(); - - startSettings(); - - onViewWaiting(withText(R.string.sync_error_outdated_gms)).check(matches(isDisplayed())); - } - - @Test - @SmallTest public void testSafeBrowsingSecuritySectionUiFlagOn() { startSettings(); assertSettingsExists(MainSettings.PREF_PRIVACY, PrivacySettings.class); @@ -703,39 +639,6 @@ } @Test - @SmallTest - @DisabledTest(message = "http://b/issues/41491395") - public void testAccountSignIn() throws InterruptedException { - startSettings(); - - Assert.assertTrue( - "Account section header should be shown together with the promo.", - mMainSettings - .findPreference(MainSettings.PREF_ACCOUNT_AND_GOOGLE_SERVICES_SECTION) - .isVisible()); - Assert.assertFalse( - "Sync preference should be hidden when promo is shown.", - mMainSettings.findPreference(MainSettings.PREF_MANAGE_SYNC).isVisible()); - - CoreAccountInfo account = mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - SyncTestUtil.waitForSyncFeatureActive(); - Assert.assertEquals( - "SignInPreference should be at the signed in state.", - account.getEmail(), - mMainSettings.findPreference(MainSettings.PREF_SIGN_IN).getSummary().toString()); - assertSettingsExists(MainSettings.PREF_SIGN_IN, AccountManagementFragment.class); - - Assert.assertTrue( - "Account section header should be shown when user signed in.", - mMainSettings - .findPreference(MainSettings.PREF_ACCOUNT_AND_GOOGLE_SERVICES_SECTION) - .isVisible()); - Assert.assertTrue( - "Sync preference should be shown when the user is signed in.", - mMainSettings.findPreference(MainSettings.PREF_MANAGE_SYNC).isVisible()); - } - - @Test @MediumTest public void testSignInPromoHidden() { startSettings(); @@ -763,26 +666,6 @@ @Test @SmallTest - @EnableFeatures(ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS) - @DisabledTest(message = "http://b/issues/41491395") - public void - testManageSyncRowIsShownWhenReplaceSyncPromosWithSignInPromosEnabledWithSyncConsent() - throws InterruptedException { - startSettings(); - - Assert.assertFalse( - "Sync preference should be hidden when the user is signed out.", - mMainSettings.findPreference(MainSettings.PREF_MANAGE_SYNC).isVisible()); - - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - SyncTestUtil.waitForSyncFeatureActive(); - Assert.assertTrue( - "Sync preference should be shown when the user is syncing.", - mMainSettings.findPreference(MainSettings.PREF_MANAGE_SYNC).isVisible()); - } - - @Test - @SmallTest public void testAccountManagementRowForChildAccountWithNonDisplayableAccountEmail() throws InterruptedException { startSettings();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java index be1cde3..9da26f2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/BottomSheetSigninAndHistorySyncIntegrationTest.java
@@ -372,7 +372,6 @@ @Test @MediumTest - @EnableFeatures(ChromeFeatureList.READING_LIST_ENABLE_SYNC_TRANSPORT_MODE_UPON_SIGNIN) public void testWithExistingAccount_signinIn_turnsOnBookmarksAndReadingList() { // Sign-in, toggle bookmarks and reading list off, then sign out. mSigninTestRule.addAccountThenSignin(TestAccounts.ACCOUNT1);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java index 504e54e..447d28a0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninManagerIntegrationTest.java
@@ -28,7 +28,6 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DoNotBatch; -import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.base.test.util.HistogramWatcher; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileManager; @@ -39,7 +38,6 @@ import org.chromium.chrome.test.util.browser.signin.SigninTestUtil; import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacadeProvider; -import org.chromium.components.signin.SigninFeatures; import org.chromium.components.signin.base.AccountInfo; import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.ConsentLevel; @@ -296,37 +294,7 @@ @Test @MediumTest - public void testPrimaryAccountRenaming_updatesLegacySyncAccountEmail() { - mSigninTestRule.addAccount(TestAccounts.ACCOUNT1); - SigninTestUtil.signin(TestAccounts.ACCOUNT1); - - ThreadUtils.runOnUiThreadBlocking( - () -> { - assertEquals( - SigninPreferencesManager.getInstance().getLegacyPrimaryAccountEmail(), - TestAccounts.ACCOUNT1.getEmail()); - }); - - AccountInfo renamedAccount = - new AccountInfo.Builder("renamed@gmail.com", TestAccounts.ACCOUNT1.getGaiaId()) - .build(); - mSigninTestRule.updateAccount(renamedAccount); - - ThreadUtils.runOnUiThreadBlocking( - () -> { - assertEquals( - mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN).getEmail(), - renamedAccount.getEmail()); - assertEquals( - SigninPreferencesManager.getInstance().getLegacyPrimaryAccountEmail(), - renamedAccount.getEmail()); - }); - } - - @Test - @MediumTest - @EnableFeatures({SigninFeatures.USE_CONSENT_LEVEL_SIGNIN_FOR_LEGACY_ACCOUNT_EMAIL_PREF}) - public void testSignInAndSignOut_updateLegacySyncAccountEmail() { + public void testSignInAndSignOut_updatesLegacyPrimaryAccountEmail() { mSigninTestRule.addAccountThenSignin(TestAccounts.ACCOUNT1); ThreadUtils.runOnUiThreadBlocking( @@ -347,8 +315,7 @@ @Test @MediumTest - @EnableFeatures({SigninFeatures.USE_CONSENT_LEVEL_SIGNIN_FOR_LEGACY_ACCOUNT_EMAIL_PREF}) - public void testPrimaryAccountRenaming_updatesLegacySyncAccountEmail_whenSignedIn() { + public void testPrimaryAccountRenaming_updatesLegacyPrimaryAccountEmail() { mSigninTestRule.addAccountThenSignin(TestAccounts.ACCOUNT1); ThreadUtils.runOnUiThreadBlocking( @@ -361,11 +328,7 @@ AccountInfo renamedAccount = new AccountInfo.Builder("renamed@gmail.com", TestAccounts.ACCOUNT1.getGaiaId()) .build(); - - try (var ignored = mSigninTestRule.blockGetCoreAccountInfosUpdate(true)) { - mSigninTestRule.removeAccount(TestAccounts.ACCOUNT1.getId()); - mSigninTestRule.addAccount(renamedAccount); - } + mSigninTestRule.updateAccount(renamedAccount); ThreadUtils.runOnUiThreadBlocking( () -> {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java index 0d72d04..0285cd6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsTest.java
@@ -7,8 +7,6 @@ import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.intent.Intents.intended; -import static androidx.test.espresso.intent.Intents.intending; import static androidx.test.espresso.matcher.RootMatchers.isDialog; import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant; import static androidx.test.espresso.matcher.ViewMatchers.hasSibling; @@ -18,7 +16,6 @@ import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.Matchers.not; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.atLeast; @@ -30,13 +27,9 @@ import static java.util.Map.entry; -import android.app.Activity; import android.app.Dialog; -import android.app.Instrumentation.ActivityResult; import android.os.Build; import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -45,14 +38,9 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.widget.PopupMenu; -import androidx.fragment.app.FragmentTransaction; -import androidx.preference.CheckBoxPreference; import androidx.preference.Preference; import androidx.recyclerview.widget.RecyclerView; import androidx.test.espresso.contrib.RecyclerViewActions; -import androidx.test.espresso.intent.Intents; -import androidx.test.espresso.intent.matcher.IntentMatchers; import androidx.test.filters.LargeTest; import androidx.test.filters.MediumTest; import androidx.test.filters.SmallTest; @@ -86,7 +74,6 @@ import org.chromium.chrome.browser.password_manager.PasswordManagerUtilBridge; import org.chromium.chrome.browser.password_manager.PasswordManagerUtilBridgeJni; import org.chromium.chrome.browser.password_manager.account_storage_toggle.AccountStorageToggleFragmentArgs; -import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.ProfileManager; import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; import org.chromium.chrome.browser.settings.SettingsActivity; @@ -98,7 +85,6 @@ import org.chromium.chrome.browser.sync.settings.SyncErrorCardPreference; import org.chromium.chrome.browser.sync.ui.PassphraseCreationDialogFragment; import org.chromium.chrome.browser.sync.ui.PassphraseDialogFragment; -import org.chromium.chrome.browser.sync.ui.PassphraseTypeDialogFragment; import org.chromium.chrome.browser.ui.signin.GoogleActivityController; import org.chromium.chrome.browser.ui.signin.history_sync.HistorySyncHelper; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; @@ -117,7 +103,6 @@ import org.chromium.components.signin.test.util.TestAccounts; import org.chromium.components.sync.DataType; import org.chromium.components.sync.LocalDataDescription; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.components.sync.SyncService; import org.chromium.components.sync.TransportState; import org.chromium.components.sync.UserSelectableType; @@ -255,25 +240,6 @@ } @Test - @SmallTest - @Feature({"Sync"}) - public void testSyncEverythingAndDataTypes() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - ManageSyncSettings fragment = startManageSyncPreferences(); - ChromeSwitchPreference syncEverything = getSyncEverything(fragment); - Collection<CheckBoxPreference> dataTypes = getDataTypes(fragment).values(); - - assertSyncOnState(fragment); - mSyncTestRule.togglePreference(syncEverything); - // When syncEverything is toggled off all data types are checked and enabled by default. - // User needs to manually uncheck to toggle sync off for data types. - for (CheckBoxPreference dataType : dataTypes) { - Assert.assertTrue(dataType.isChecked()); - Assert.assertTrue(dataType.isEnabled()); - } - } - - @Test @LargeTest @EnableFeatures({ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS}) @DisableFeatures({ChromeFeatureList.LINKED_SERVICES_SETTING}) @@ -284,14 +250,9 @@ Arrays.asList( ManageSyncSettings.PREF_ACCOUNT_SECTION_PAYMENTS_TOGGLE, ManageSyncSettings.PREF_ACCOUNT_SECTION_PASSWORDS_TOGGLE, - ManageSyncSettings.PREF_ACCOUNT_SECTION_SETTINGS_TOGGLE)); - if (SyncFeatureMap.isEnabled(SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE)) { - expectedEnabledTypes.add(ManageSyncSettings.PREF_ACCOUNT_SECTION_BOOKMARKS_TOGGLE); - } - if (ChromeFeatureList.isEnabled( - ChromeFeatureList.READING_LIST_ENABLE_SYNC_TRANSPORT_MODE_UPON_SIGNIN)) { - expectedEnabledTypes.add(ManageSyncSettings.PREF_ACCOUNT_SECTION_READING_LIST_TOGGLE); - } + ManageSyncSettings.PREF_ACCOUNT_SECTION_SETTINGS_TOGGLE, + ManageSyncSettings.PREF_ACCOUNT_SECTION_BOOKMARKS_TOGGLE, + ManageSyncSettings.PREF_ACCOUNT_SECTION_READING_LIST_TOGGLE)); if (ChromeFeatureList.isEnabled( ChromeFeatureList.SYNC_ENABLE_CONTACT_INFO_DATA_TYPE_IN_TRANSPORT_MODE)) { expectedEnabledTypes.add(ManageSyncSettings.PREF_ACCOUNT_SECTION_ADDRESSES_TOGGLE); @@ -346,66 +307,6 @@ @MediumTest @Feature({"Sync"}) @Policies.Add({ - @Policies.Item(key = "SyncTypesListDisabled", string = "[\"passwords\", \"autofill\"]") - }) - public void testSyncWithManagedDataTypes() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - ManageSyncSettings fragment = startManageSyncPreferences(); - ChromeSwitchPreference syncEverything = getSyncEverything(fragment); - Collection<CheckBoxPreference> dataTypes = getDataTypes(fragment).values(); - - // When a sync type is disabled by policy, the `Sync everything` toggle should be checked. - // and the user can still check it off and choose to sync everything that is not managed. - Assert.assertTrue(syncEverything.isEnabled()); - Assert.assertTrue(syncEverything.isChecked()); - - // When one or more sync types are managed, the respective preference should be disabled and - // not checked, while all other preferences should be user selectable. - for (CheckBoxPreference dataType : dataTypes) { - if (dataType.getKey().equals(ManageSyncSettings.PREF_SYNC_PASSWORDS) - || dataType.getKey().equals(ManageSyncSettings.PREF_SYNC_AUTOFILL) - || dataType.getKey() - .equals(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION)) { - Assert.assertFalse(dataType.isChecked()); - Assert.assertFalse(dataType.isEnabled()); - } else { - Assert.assertTrue(dataType.isChecked()); - Assert.assertFalse(dataType.isEnabled()); - } - } - - // Toggle the Sync everything button, and only non-managed types should be enabled. - mSyncTestRule.togglePreference(syncEverything); - - Assert.assertTrue(syncEverything.isEnabled()); - Assert.assertFalse(syncEverything.isChecked()); - - for (CheckBoxPreference dataType : dataTypes) { - if (dataType.getKey().equals(ManageSyncSettings.PREF_SYNC_PASSWORDS) - || dataType.getKey().equals(ManageSyncSettings.PREF_SYNC_AUTOFILL) - || dataType.getKey() - .equals(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION)) { - Assert.assertFalse(dataType.isChecked()); - Assert.assertFalse(dataType.isEnabled()); - } else { - Assert.assertTrue(dataType.isChecked()); - Assert.assertTrue(dataType.isEnabled()); - } - } - - // Check that the preference shows the managed text. - onView(withText("Passwords")) - .check(matches(hasSibling(withText(R.string.managed_by_your_organization)))); - onView(withText("Addresses and more")) - .check(matches(hasSibling(withText(R.string.managed_by_your_organization)))); - onView(withText("Payment methods, offers, and addresses using Google Pay")) - .check(matches(hasSibling(withText(R.string.managed_by_your_organization)))); - } - - @Test - @MediumTest - @Feature({"Sync"}) - @Policies.Add({ @Policies.Item(key = "SyncTypesListDisabled", string = "[\"bookmarks\", \"passwords\"]") }) public void testSignInWithManagedDataTypes() { @@ -441,73 +342,6 @@ } @Test - @SmallTest - @Feature({"Sync"}) - public void testSettingDataTypes() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - ManageSyncSettings fragment = startManageSyncPreferences(); - ChromeSwitchPreference syncEverything = getSyncEverything(fragment); - Map<Integer, CheckBoxPreference> dataTypes = getDataTypes(fragment); - - InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - assertSyncOnState(fragment); - mSyncTestRule.togglePreference(syncEverything); - - InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - Assert.assertFalse(syncEverything.isChecked()); - for (CheckBoxPreference dataType : dataTypes.values()) { - Assert.assertTrue(dataType.isChecked()); - Assert.assertTrue(dataType.isEnabled()); - } - - Set<Integer> expectedTypes = new HashSet<>(dataTypes.keySet()); - assertSelectedTypesAre(expectedTypes); - mSyncTestRule.togglePreference(dataTypes.get(UserSelectableType.AUTOFILL)); - mSyncTestRule.togglePreference(dataTypes.get(UserSelectableType.PASSWORDS)); - expectedTypes.remove(UserSelectableType.AUTOFILL); - expectedTypes.remove(UserSelectableType.PASSWORDS); - - closeFragment(fragment); - assertSelectedTypesAre(expectedTypes); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testUnsettingAllDataTypesDoesNotStopSync() { - // See crbug.com/1291946: The original MICE implementation stopped sync - // (by setting SyncRequested to false) when the user disabled all data - // types, for migration / backwards compatibility reasons. As of M104, - // that's no longer the case. - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - ManageSyncSettings fragment = startManageSyncPreferences(); - assertSyncOnState(fragment); - mSyncTestRule.togglePreference(getSyncEverything(fragment)); - - for (CheckBoxPreference dataType : getDataTypes(fragment).values()) { - mSyncTestRule.togglePreference(dataType); - } - // All data types have been unchecked, but Sync itself should still be - // enabled. - Assert.assertTrue(SyncTestUtil.isSyncFeatureEnabled()); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testTogglingSyncEverythingDoesNotStopSync() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - mSyncTestRule.setSelectedTypes(false, new HashSet<>()); - ManageSyncSettings fragment = startManageSyncPreferences(); - - // Sync is requested to start. Toggling SyncEverything will call setSelectedTypes with - // empty set in the backend. But sync stop request should not be called. - mSyncTestRule.togglePreference(getSyncEverything(fragment)); - Assert.assertTrue(SyncTestUtil.isSyncFeatureEnabled()); - } - - @Test @LargeTest @Feature({"Sync"}) public void testPressingSignOut() { @@ -678,210 +512,11 @@ } @Test - @LargeTest - @Feature({"Sync"}) - public void testPressingSignOutAndTurnOffSyncShowsSignOutDialog() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - ManageSyncSettings fragment = startManageSyncPreferences(); - - Preference turnOffSyncPreference = - fragment.findPreference(ManageSyncSettings.PREF_TURN_OFF_SYNC); - Assert.assertTrue( - "Sign out and turn off sync button should be shown", - turnOffSyncPreference.isVisible()); - ThreadUtils.runOnUiThreadBlocking( - fragment.findPreference(ManageSyncSettings.PREF_TURN_OFF_SYNC)::performClick); - InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - onView(withText(R.string.turn_off_sync_and_signout_title)) - .inRoot(isDialog()) - .check(matches(isDisplayed())); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testPaymentsIntegrationChecked() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - ManageSyncSettings fragment = startManageSyncPreferences(); - assertSyncOnState(fragment); - - CheckBoxPreference paymentsIntegration = - (CheckBoxPreference) - fragment.findPreference(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION); - - Assert.assertFalse(paymentsIntegration.isEnabled()); - Assert.assertTrue(paymentsIntegration.isChecked()); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testPaymentsIntegrationUnchecked() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - Set<Integer> allDataTypesExceptPayments = new HashSet<>(mUiDataTypes.keySet()); - allDataTypesExceptPayments.remove(UserSelectableType.PAYMENTS); - - mSyncTestRule.setSelectedTypes(false, allDataTypesExceptPayments); - ManageSyncSettings fragment = startManageSyncPreferences(); - - CheckBoxPreference paymentsIntegration = - (CheckBoxPreference) - fragment.findPreference(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION); - - Assert.assertTrue(paymentsIntegration.isEnabled()); - Assert.assertFalse(paymentsIntegration.isChecked()); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testPaymentsIntegrationCheckboxDisablesPaymentsIntegration() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - ManageSyncSettings fragment = startManageSyncPreferences(); - assertSyncOnState(fragment); - ChromeSwitchPreference syncEverything = getSyncEverything(fragment); - mSyncTestRule.togglePreference(syncEverything); - - CheckBoxPreference paymentsIntegration = - (CheckBoxPreference) - fragment.findPreference(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION); - mSyncTestRule.togglePreference(paymentsIntegration); - - closeFragment(fragment); - assertPaymentsIntegrationEnabled(false); - } - - @Test - @SmallTest - @DisabledTest(message = "crbug.com/988622") - @Feature({"Sync"}) - public void testPaymentsIntegrationCheckboxEnablesPaymentsIntegration() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - mSyncTestRule.disableDataType(UserSelectableType.PAYMENTS); - - mSyncTestRule.setSelectedTypes(false, mUiDataTypes.keySet()); - ManageSyncSettings fragment = startManageSyncPreferences(); - - CheckBoxPreference paymentsIntegration = - (CheckBoxPreference) - fragment.findPreference(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION); - mSyncTestRule.togglePreference(paymentsIntegration); - - closeFragment(fragment); - assertPaymentsIntegrationEnabled(true); - } - - @DisabledTest(message = "crbug.com/994726") - @Test - @SmallTest - @Feature({"Sync"}) - public void testPaymentsIntegrationCheckboxClearsServerAutofillCreditCards() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - Assert.assertFalse( - "There should be no server cards", mSyncTestRule.hasServerAutofillCreditCards()); - mSyncTestRule.addServerAutofillCreditCard(); - Assert.assertTrue( - "There should be server cards", mSyncTestRule.hasServerAutofillCreditCards()); - - ManageSyncSettings fragment = startManageSyncPreferences(); - assertSyncOnState(fragment); - ChromeSwitchPreference syncEverything = getSyncEverything(fragment); - mSyncTestRule.togglePreference(syncEverything); - - CheckBoxPreference paymentsIntegration = - (CheckBoxPreference) - fragment.findPreference(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION); - mSyncTestRule.togglePreference(paymentsIntegration); - - closeFragment(fragment); - assertPaymentsIntegrationEnabled(false); - - Assert.assertFalse( - "There should be no server cards remaining", - mSyncTestRule.hasServerAutofillCreditCards()); - } - - // Before crbug.com/40265120, the autofill and payments toggles used to be coupled. This test - // verifies they no longer are. - @Test - @SmallTest - @Feature({"Sync"}) - public void testPaymentsIntegrationNotDisabledByAutofillSyncCheckbox() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - // Get the UI elements. - ManageSyncSettings fragment = startManageSyncPreferences(); - ChromeSwitchPreference syncEverything = getSyncEverything(fragment); - CheckBoxPreference syncAutofill = - (CheckBoxPreference) fragment.findPreference(ManageSyncSettings.PREF_SYNC_AUTOFILL); - CheckBoxPreference paymentsIntegration = - (CheckBoxPreference) - fragment.findPreference(ManageSyncSettings.PREF_SYNC_PAYMENTS_INTEGRATION); - - assertSyncOnState(fragment); - Assert.assertFalse(paymentsIntegration.isEnabled()); - Assert.assertTrue(paymentsIntegration.isChecked()); - - mSyncTestRule.togglePreference(syncEverything); - - Assert.assertTrue(paymentsIntegration.isEnabled()); - Assert.assertTrue(paymentsIntegration.isChecked()); - - mSyncTestRule.togglePreference(syncAutofill); - - Assert.assertTrue(paymentsIntegration.isEnabled()); - Assert.assertTrue(paymentsIntegration.isChecked()); - - closeFragment(fragment); - assertPaymentsIntegrationEnabled(true); - } - - /** - * Test that choosing a passphrase type while sync is off doesn't crash. - * - * <p>This is a regression test for http://crbug.com/507557. - */ - @Test - @SmallTest - @Feature({"Sync"}) - public void testChoosePassphraseTypeWhenSyncIsOff() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - ManageSyncSettings fragment = startManageSyncPreferences(); - Preference encryption = getEncryption(fragment); - clickPreference(encryption); - - getPassphraseTypeDialogFragment(); - mSyncTestRule.signOut(); - - // Mimic the user clicking on the explicit passphrase checkbox immediately after signing - // out. - ThreadUtils.runOnUiThreadBlocking(fragment::onChooseCustomPassphraseRequested); - - // No crash means we passed. - } - - /** Test that entering a passphrase while sync is off doesn't crash. */ - @Test - @SmallTest - @Feature({"Sync"}) - public void testEnterPassphraseWhenSyncIsOff() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferences(); - mSyncTestRule.signOut(); - ThreadUtils.runOnUiThreadBlocking(() -> fragment.onPassphraseEntered("passphrase")); - // No crash means we passed. - } - - @Test @SmallTest @Feature({"Sync"}) @DisabledTest(message = "https://crbug.com/1188548") public void testPassphraseCreation() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); final ManageSyncSettings fragment = startManageSyncPreferences(); ThreadUtils.runOnUiThreadBlocking(fragment::onChooseCustomPassphraseRequested); InstrumentationRegistry.getInstrumentation().waitForIdleSync(); @@ -964,6 +599,7 @@ @Test @LargeTest @Feature({"Sync"}) + @DisabledTest(message = "crbug.com/386744084") public void testTrustedVaultKeyRetrieval() { final byte[] trustedVaultKey = new byte[] {1, 2, 3, 4}; @@ -974,7 +610,7 @@ SyncTestRule.FakeTrustedVaultClientBackend.get() .setKeys(Collections.singletonList(trustedVaultKey)); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); // Initially FakeTrustedVaultClientBackend doesn't provide any keys, so PSS should remain // in TrustedVaultKeyRequired state. @@ -998,6 +634,7 @@ @Test @LargeTest @Feature({"Sync"}) + @DisabledTest(message = "crbug.com/386744084") public void testTrustedVaultRecoverabilityFix() { final byte[] trustedVaultKey = new byte[] {1, 2, 3, 4}; @@ -1010,7 +647,7 @@ SyncTestRule.FakeTrustedVaultClientBackend.get().setRecoverabilityDegraded(true); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); // Initially recoverability should be reported as degraded. SyncTestUtil.waitForTrustedVaultRecoverabilityDegraded(true); @@ -1031,21 +668,6 @@ } @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowPreferencesAndBottomBarShown() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - Assert.assertTrue( - fragment.findPreference(ManageSyncSettings.PREF_SYNCING_CATEGORY).isVisible()); - Assert.assertTrue( - fragment.findPreference(ManageSyncSettings.PREF_SEARCH_AND_BROWSE_CATEGORY) - .isVisible()); - Assert.assertNotNull(fragment.getView().findViewById(R.id.bottom_bar_shadow)); - Assert.assertNotNull(fragment.getView().findViewById(R.id.bottom_bar_button_container)); - } - - @Test @LargeTest @EnableFeatures({ChromeFeatureList.ENABLE_BATCH_UPLOAD_FROM_SETTINGS}) public void testSigninSettingsBatchUploadCardVisibilityWhenSyncIsConfiguring() @@ -1506,122 +1128,9 @@ @Test @LargeTest - @Feature({"Sync", "RenderTest"}) - public void testAdvancedSyncFlowTopView() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferences(); - render(fragment, "advanced_sync_flow_top_view"); - } - - @Test - @LargeTest - @Feature({"Sync", "RenderTest"}) - public void testAdvancedSyncFlowBottomView() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferences(); - ThreadUtils.runOnUiThreadBlocking( - () -> { - RecyclerView recyclerView = fragment.getView().findViewById(R.id.recycler_view); - // Sometimes the rendered image may not contain the scrollbar and cause - // flakiness. - // Hide the scrollbar altogether to reduce flakiness. - recyclerView.setVerticalScrollBarEnabled(false); - recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount() - 1); - }); - render(fragment, "advanced_sync_flow_bottom_view"); - } - - @Test - @LargeTest - @Feature({"Sync", "RenderTest"}) - @EnableFeatures({ChromeFeatureList.WEB_APK_BACKUP_AND_RESTORE_BACKEND}) - public void testAdvancedSyncFlowBottomViewWithWebApks() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferences(); - ThreadUtils.runOnUiThreadBlocking( - () -> { - RecyclerView recyclerView = fragment.getView().findViewById(R.id.recycler_view); - // Sometimes the rendered image may not contain the scrollbar and cause - // flakiness. - // Hide the scrollbar altogether to reduce flakiness. - recyclerView.setVerticalScrollBarEnabled(false); - recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount() - 1); - }); - render(fragment, "advanced_sync_flow_bottom_view_with_webapks"); - } - - @Test - @LargeTest - @Feature({"Sync", "RenderTest"}) - public void testAdvancedSyncFlowFromSyncConsentTopView() throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - render(fragment, "advanced_sync_flow_top_view_from_sync_consent"); - } - - @Test - @LargeTest - @Feature({"Sync", "RenderTest"}) - public void testAdvancedSyncFlowFromSyncConsentBottomView() throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - ThreadUtils.runOnUiThreadBlocking( - () -> { - RecyclerView recyclerView = fragment.getView().findViewById(R.id.recycler_view); - // Sometimes the rendered image may not contain the scrollbar and cause - // flakiness. - // Hide the scrollbar altogether to reduce flakiness. - recyclerView.setVerticalScrollBarEnabled(false); - recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount() - 1); - }); - render(fragment, "advanced_sync_flow_bottom_view_from_sync_consent"); - } - - @Test - @LargeTest - @Feature({"Sync", "RenderTest"}) - @Policies.Add({ - @Policies.Item( - key = "SyncTypesListDisabled", - string = - "[\"bookmarks\", \"readingList\", \"preferences\", \"passwords\"," - + " \"autofill\", \"typedUrls\", \"tabs\"]") - }) - public void testSyncSettingsTopViewWithSyncTypesManagedByPolicy() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferences(); - render(fragment, "sync_settings_top_view_with_sync_types_disabled_by_policy"); - } - - @Test - @LargeTest - @Feature({"Sync", "RenderTest"}) - @Policies.Add({ - @Policies.Item( - key = "SyncTypesListDisabled", - string = - "[\"bookmarks\", \"readingList\", \"preferences\", \"passwords\"," - + " \"autofill\", \"typedUrls\", \"tabs\"]") - }) - @DisableIf.Build( - message = "Flaky on emulators. See crbug.com/332882352.", - supported_abis_includes = "x86") - public void testSyncSettingsBottomViewWithSyncTypesManagedByPolicy() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferences(); - ThreadUtils.runOnUiThreadBlocking( - () -> { - RecyclerView recyclerView = fragment.getView().findViewById(R.id.recycler_view); - recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount() - 1); - }); - render(fragment, "sync_settings_bottom_view_with_sync_types_disabled_by_policy"); - } - - @Test - @LargeTest @Feature({"PersonalizedGoogleServices", "RenderTest"}) public void testGoogleActivityControls() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); final ManageSyncSettings fragment = startManageSyncPreferences(); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -1636,7 +1145,7 @@ @Feature({"PersonalizedGoogleServices", "RenderTest"}) @EnableFeatures({ChromeFeatureList.LINKED_SERVICES_SETTING}) public void testLinkedServicesSetting() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); final ManageSyncSettings fragment = startManageSyncPreferences(); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -1652,7 +1161,7 @@ @EnableFeatures({ChromeFeatureList.LINKED_SERVICES_SETTING}) public void testLinkedServicesSettingEea() throws Exception { when(mTemplateUrlService.isEeaChoiceCountry()).thenReturn(true); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); final ManageSyncSettings fragment = startManageSyncPreferences(); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -1667,23 +1176,6 @@ @Feature({"PersonalizedGoogleServices"}) @DisableFeatures({ChromeFeatureList.LINKED_SERVICES_SETTING}) public void testClickGoogleActivityControls() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - final ManageSyncSettings fragment = startManageSyncPreferences(); - ThreadUtils.runOnUiThreadBlocking( - () -> { - RecyclerView recyclerView = fragment.getView().findViewById(R.id.recycler_view); - recyclerView.scrollToPosition(recyclerView.getAdapter().getItemCount() - 1); - }); - // Click the Google ActivityControls pref - onView(withText(R.string.sign_in_google_activity_controls_title)).perform(click()); - verify(mGoogleActivityController).openWebAndAppActivitySettings(any(), any()); - } - - @Test - @LargeTest - @Feature({"PersonalizedGoogleServices"}) - @DisableFeatures({ChromeFeatureList.LINKED_SERVICES_SETTING}) - public void testClickGoogleActivityControlsWhenSyncPromosShouldBeReplacedWithSigninPromos() { mSyncTestRule.setUpAccountAndSignInForTesting(); final ManageSyncSettings fragment = startManageSyncPreferences(); ThreadUtils.runOnUiThreadBlocking( @@ -1701,7 +1193,7 @@ @Feature({"PersonalizedGoogleServices"}) @EnableFeatures({ChromeFeatureList.LINKED_SERVICES_SETTING}) public void testClickPersonalizeGoogleServicesNonEEA() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); final ManageSyncSettings fragment = startManageSyncPreferences(); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -1719,7 +1211,7 @@ @EnableFeatures({ChromeFeatureList.LINKED_SERVICES_SETTING}) public void testClickPersonalizeGoogleServicesEEA() { when(mTemplateUrlService.isEeaChoiceCountry()).thenReturn(true); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); final ManageSyncSettings fragment = startManageSyncPreferences(); ThreadUtils.runOnUiThreadBlocking( () -> { @@ -1732,183 +1224,16 @@ .check(matches(isDisplayed())); } - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentDoesNotEnableUKM() throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - ChromeSwitchPreference urlKeyedAnonymizedData = getUrlKeyedAnonymizedData(fragment); - - Assert.assertTrue(urlKeyedAnonymizedData.isChecked()); - verifyUrlKeyedAnonymizedDataCollectionNotSet(); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentForSupervisedUserWithUKMEnabled() - throws Exception { - ThreadUtils.runOnUiThreadBlocking( - () -> { - Mockito.when( - mUnifiedConsentServiceBridgeMock - .isUrlKeyedAnonymizedDataCollectionManaged( - ProfileManager.getLastUsedRegularProfile())) - .thenReturn(true); - Mockito.when( - mUnifiedConsentServiceBridgeMock - .isUrlKeyedAnonymizedDataCollectionEnabled( - ProfileManager.getLastUsedRegularProfile())) - .thenReturn(true); - }); - - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - ChromeSwitchPreference urlKeyedAnonymizedData = getUrlKeyedAnonymizedData(fragment); - - Assert.assertTrue(urlKeyedAnonymizedData.isChecked()); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentForSupervisedUserWithUKMDisabled() - throws Exception { - ThreadUtils.runOnUiThreadBlocking( - () -> { - Mockito.when( - mUnifiedConsentServiceBridgeMock - .isUrlKeyedAnonymizedDataCollectionManaged( - ProfileManager.getLastUsedRegularProfile())) - .thenReturn(true); - Mockito.when( - mUnifiedConsentServiceBridgeMock - .isUrlKeyedAnonymizedDataCollectionEnabled( - ProfileManager.getLastUsedRegularProfile())) - .thenReturn(false); - }); - - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - ChromeSwitchPreference urlKeyedAnonymizedData = getUrlKeyedAnonymizedData(fragment); - - Assert.assertFalse(urlKeyedAnonymizedData.isChecked()); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentConfirmEnablesUKM() throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - Button confirmButton = fragment.getView().findViewById(R.id.confirm_button); - clickButton(confirmButton); - - verifyUrlKeyedAnonymizedDataCollectionSet(); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentMSBBToggledOffDoesNotEnableUKM() - throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - ChromeSwitchPreference urlKeyedAnonymizedData = getUrlKeyedAnonymizedData(fragment); - Button confirmButton = fragment.getView().findViewById(R.id.confirm_button); - - Assert.assertTrue(urlKeyedAnonymizedData.isChecked()); - mSyncTestRule.togglePreference(urlKeyedAnonymizedData); - Assert.assertFalse(urlKeyedAnonymizedData.isChecked()); - - clickButton(confirmButton); - - verifyUrlKeyedAnonymizedDataCollectionNotSet(); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentBackToHomeDoesNotEnableUKM() throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - - ThreadUtils.runOnUiThreadBlocking( - () -> { - PopupMenu p = new PopupMenu(mSettingsActivity, null); - Menu menu = p.getMenu(); - MenuItem menuItem = menu.add(0, android.R.id.home, 0, ""); - fragment.onOptionsItemSelected(menuItem); - }); - - verifyUrlKeyedAnonymizedDataCollectionNotSet(); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentCancelDoesNotEnableUKM() throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - Button cancelButton = fragment.getView().findViewById(R.id.cancel_button); - - clickButton(cancelButton); - - verifyUrlKeyedAnonymizedDataCollectionNotSet(); - } - - @Test - @SmallTest - @Feature({"Sync"}) - public void testAdvancedSyncFlowFromSyncConsentFragmentCloseDoesNotEnableUKM() - throws Exception { - mSyncTestRule.setUpTestAccountAndSignInWithSyncSetupAsIncomplete(); - final ManageSyncSettings fragment = startManageSyncPreferencesFromSyncConsentFlow(); - - closeFragment(fragment); - - verifyUrlKeyedAnonymizedDataCollectionNotSet(); - } - - // TODO(crbug.com/330438265): Extend this test for the identity error card. - @Test - @LargeTest - @Feature({"Sync"}) - public void testSyncErrorCardActionForUpmBackendOutdatedError() { - when(mPasswordManagerUtilBridgeJniMock.isGmsCoreUpdateRequired(any(), any())) - .thenReturn(true); - - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - ManageSyncSettings fragment = startManageSyncPreferences(); - onViewWaiting(allOf(is(fragment.getView()), isDisplayed())); - - // The error card exists. - onView(withId(R.id.signin_promo_view_wrapper)).check(matches(isDisplayed())); - - Intents.init(); - // Stub all external intents. - intending(not(IntentMatchers.isInternal())) - .respondWith(new ActivityResult(Activity.RESULT_OK, null)); - - onView(withId(R.id.sync_promo_signin_button)).perform(click()); - // Expect intent to open the play store. - // TODO(crbug.com/327623232): Have this as a constant in PasswordManagerHelper. - intended(IntentMatchers.hasPackage("com.android.vending")); - - Intents.release(); - } - // TODO(crbug.com/330438265): Extend this test for the identity error card. @Test @SmallTest @Feature({"Sync"}) + @DisabledTest(message = "crbug.com/386744084") public void testSyncErrorCardForUpmBackendOutdatedUpdatedDynamically() { when(mPasswordManagerUtilBridgeJniMock.isGmsCoreUpdateRequired(any(), any())) .thenReturn(true); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); ManageSyncSettings fragment = startManageSyncPreferences(); onViewWaiting(allOf(is(fragment.getView()), isDisplayed())); @@ -2047,41 +1372,6 @@ return mSettingsActivityTestRule.getFragment(); } - private ManageSyncSettings startManageSyncPreferencesFromSyncConsentFlow() { - mSettingsActivity = - mSettingsActivityTestRule.startSettingsActivity( - ManageSyncSettings.createArguments(true)); - return mSettingsActivityTestRule.getFragment(); - } - - private void closeFragment(ManageSyncSettings fragment) { - FragmentTransaction transaction = - mSettingsActivity.getSupportFragmentManager().beginTransaction(); - transaction.remove(fragment); - transaction.commit(); - InstrumentationRegistry.getInstrumentation().waitForIdleSync(); - } - - private ChromeSwitchPreference getSyncEverything(ManageSyncSettings fragment) { - return (ChromeSwitchPreference) - fragment.findPreference(ManageSyncSettings.PREF_SYNC_EVERYTHING); - } - - private ChromeSwitchPreference getUrlKeyedAnonymizedData(ManageSyncSettings fragment) { - return (ChromeSwitchPreference) - fragment.findPreference(ManageSyncSettings.PREF_URL_KEYED_ANONYMIZED_DATA); - } - - private Map<Integer, CheckBoxPreference> getDataTypes(ManageSyncSettings fragment) { - Map<Integer, CheckBoxPreference> dataTypes = new HashMap<>(); - for (Map.Entry<Integer, String> uiDataType : mUiDataTypes.entrySet()) { - Integer selectedType = uiDataType.getKey(); - String prefId = uiDataType.getValue(); - dataTypes.put(selectedType, (CheckBoxPreference) fragment.findPreference(prefId)); - } - return dataTypes; - } - private Map<Integer, ChromeSwitchPreference> getAccountDataTypes(ManageSyncSettings fragment) { Map<Integer, ChromeSwitchPreference> dataTypes = new HashMap<>(); for (Map.Entry<Integer, String> accountUiDataType : ACCOUNT_UI_DATATYPES.entrySet()) { @@ -2095,72 +1385,11 @@ return dataTypes; } - private Preference getGoogleActivityControls(ManageSyncSettings fragment) { - return fragment.findPreference(ManageSyncSettings.PREF_GOOGLE_ACTIVITY_CONTROLS); - } - - private Preference getEncryption(ManageSyncSettings fragment) { - return fragment.findPreference(ManageSyncSettings.PREF_ENCRYPTION); - } - - private Preference getReviewData(ManageSyncSettings fragment) { - return fragment.findPreference(ManageSyncSettings.PREF_SYNC_REVIEW_DATA); - } - - private PassphraseTypeDialogFragment getPassphraseTypeDialogFragment() { - return ActivityTestUtils.waitForFragment( - mSettingsActivity, ManageSyncSettings.FRAGMENT_PASSPHRASE_TYPE); - } - private PassphraseCreationDialogFragment getPassphraseCreationDialogFragment() { return ActivityTestUtils.waitForFragment( mSettingsActivity, ManageSyncSettings.FRAGMENT_CUSTOM_PASSPHRASE); } - private void assertSyncOnState(ManageSyncSettings fragment) { - assertSyncOnState(fragment, new HashSet<Integer>()); - } - - private void assertSyncOnState( - ManageSyncSettings fragment, Set<Integer> forcedUncheckedDataTypes) { - ChromeSwitchPreference syncEverything = getSyncEverything(fragment); - Assert.assertTrue("The sync everything switch should be on.", syncEverything.isChecked()); - Assert.assertTrue( - "The sync everything switch should be enabled.", syncEverything.isEnabled()); - for (Map.Entry<Integer, CheckBoxPreference> dataType : getDataTypes(fragment).entrySet()) { - CheckBoxPreference checkBox = dataType.getValue(); - String key = checkBox.getKey(); - Assert.assertFalse("Data type " + key + " should be disabled.", checkBox.isEnabled()); - if (forcedUncheckedDataTypes.contains(dataType.getKey())) { - Assert.assertFalse( - "Data type " + key + " should be unchecked.", checkBox.isChecked()); - } else { - Assert.assertTrue("Data type " + key + " should be checked.", checkBox.isChecked()); - } - } - Assert.assertTrue( - "The google activity controls button should always be enabled.", - getGoogleActivityControls(fragment).isEnabled()); - Assert.assertTrue( - "The encryption button should always be enabled.", - getEncryption(fragment).isEnabled()); - Assert.assertTrue( - "The review your synced data button should be always enabled.", - getReviewData(fragment).isEnabled()); - } - - private void assertSelectedTypesAre(final Set<Integer> enabledDataTypes) { - final Set<Integer> disabledDataTypes = new HashSet<>(mUiDataTypes.keySet()); - disabledDataTypes.removeAll(enabledDataTypes); - ThreadUtils.runOnUiThreadBlocking( - () -> { - Set<Integer> actualDataTypes = - mSyncTestRule.getSyncService().getSelectedTypes(); - Assert.assertTrue(actualDataTypes.containsAll(enabledDataTypes)); - Assert.assertTrue(Collections.disjoint(disabledDataTypes, actualDataTypes)); - }); - } - private void assertPaymentsIntegrationEnabled(final boolean enabled) { ThreadUtils.runOnUiThreadBlocking( () -> { @@ -2174,24 +1403,6 @@ }); } - private void verifyUrlKeyedAnonymizedDataCollectionSet() { - ThreadUtils.runOnUiThreadBlocking( - () -> { - Profile profile = ProfileManager.getLastUsedRegularProfile(); - verify(mUnifiedConsentServiceBridgeMock, Mockito.atLeastOnce()) - .setUrlKeyedAnonymizedDataCollectionEnabled(profile, true); - }); - } - - private void verifyUrlKeyedAnonymizedDataCollectionNotSet() { - ThreadUtils.runOnUiThreadBlocking( - () -> { - Profile profile = ProfileManager.getLastUsedRegularProfile(); - verify(mUnifiedConsentServiceBridgeMock, Mockito.never()) - .setUrlKeyedAnonymizedDataCollectionEnabled(profile, true); - }); - } - private void clickPreference(final Preference pref) { ThreadUtils.runOnUiThreadBlocking( () -> pref.getOnPreferenceClickListener().onPreferenceClick(pref));
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsWithFakeSyncServiceImplTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsWithFakeSyncServiceImplTest.java index 8ec0f51..dca2a1b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsWithFakeSyncServiceImplTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ManageSyncSettingsWithFakeSyncServiceImplTest.java
@@ -117,7 +117,7 @@ final FakeSyncServiceImpl fakeSyncServiceImpl = (FakeSyncServiceImpl) mSyncTestRule.getSyncService(); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); SyncTestUtil.waitForSyncFeatureActive(); // Trigger PassphraseDialogFragment to be shown when taping on Encryption. fakeSyncServiceImpl.setPassphraseRequiredForPreferredDataTypes(true); @@ -186,31 +186,6 @@ @Test @SmallTest @EnableFeatures({ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS}) - public void testIdentityErrorCardNotShownForSyncingUsers() { - // Fake an identity error. - final FakeSyncServiceImpl fakeSyncService = - (FakeSyncServiceImpl) mSyncTestRule.getSyncService(); - fakeSyncService.setRequiresClientUpgrade(true); - - // Expect no records. - HistogramWatcher watchIdentityErrorCardShownHistogram = - HistogramWatcher.newBuilder() - .expectNoRecords("Sync.IdentityErrorCard.ClientOutOfDate") - .build(); - - // Sign in, enable sync and open settings. - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - - ManageSyncSettings fragment = startManageSyncPreferences(); - onViewWaiting(allOf(is(fragment.getView()), isDisplayed())); - - onView(withId(R.id.signin_settings_card)).check(doesNotExist()); - watchIdentityErrorCardShownHistogram.assertExpected(); - } - - @Test - @SmallTest - @EnableFeatures({ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS}) public void testIdentityErrorCardDynamicallyShownOnError() { final FakeSyncServiceImpl fakeSyncService = (FakeSyncServiceImpl) mSyncTestRule.getSyncService();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillImageFetcherTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillImageFetcherTest.java index 985b547..ef2fe73 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillImageFetcherTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/autofill/AutofillImageFetcherTest.java
@@ -31,7 +31,6 @@ /** Unit tests for {@link AutofillImageFetcher}. */ @RunWith(BaseRobolectricTestRunner.class) @Features.EnableFeatures(ChromeFeatureList.AUTOFILL_ENABLE_NEW_CARD_ART_AND_NETWORK_IMAGES) -@Features.DisableFeatures(ChromeFeatureList.AUTOFILL_ENABLE_CARD_ART_SERVER_SIDE_STRETCHING) public class AutofillImageFetcherTest { private static final Bitmap TEST_CARD_ART_IMAGE = Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_8888);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerMediatorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerMediatorUnitTest.java index a785ab9..7329835 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerMediatorUnitTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderPickerMediatorUnitTest.java
@@ -38,7 +38,6 @@ import org.chromium.base.Callback; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.Batch; -import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.chrome.R; import org.chromium.chrome.browser.bookmarks.BookmarkListEntry.ViewType; import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowDisplayPref; @@ -52,7 +51,6 @@ import org.chromium.components.commerce.core.CommerceFeatureUtilsJni; import org.chromium.components.commerce.core.ShoppingService; import org.chromium.components.feature_engagement.Tracker; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.ui.base.TestActivity; import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.MVCListAdapter.ModelList; @@ -65,7 +63,6 @@ /** Unit tests for {@link BookmarkFolderPickerMediator}. */ @Batch(Batch.UNIT_TESTS) @RunWith(BaseRobolectricTestRunner.class) -@DisableFeatures(SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE) public class BookmarkFolderPickerMediatorUnitTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule().strictness(Strictness.LENIENT);
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkRowCoordinatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkRowCoordinatorTest.java index 8b13dfc..f2d95dc 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkRowCoordinatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/bookmarks/ImprovedBookmarkRowCoordinatorTest.java
@@ -40,8 +40,6 @@ import org.chromium.base.Callback; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.Batch; -import org.chromium.base.test.util.Features.DisableFeatures; -import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.chrome.browser.bookmarks.BookmarkUiPrefs.BookmarkRowDisplayPref; import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkItem; @@ -53,7 +51,6 @@ import org.chromium.components.payments.ui.CurrencyFormatterJni; import org.chromium.components.power_bookmarks.PowerBookmarkMeta; import org.chromium.components.power_bookmarks.ShoppingSpecifics; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.components.url_formatter.SchemeDisplay; import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.ui.base.TestActivity; @@ -65,7 +62,6 @@ @Batch(Batch.UNIT_TESTS) @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) -@DisableFeatures({SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE}) public class ImprovedBookmarkRowCoordinatorTest { @Rule public ActivityScenarioRule<TestActivity> mActivityScenarioRule = @@ -281,7 +277,6 @@ } @Test - @EnableFeatures({SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE}) public void testBookmark_accountAndLocal() throws Exception { doReturn(BookmarkRowDisplayPref.VISUAL).when(mBookmarkUiPrefs).getBookmarkRowDisplayPref(); FakeBookmarkModel bookmarkModel = FakeBookmarkModel.createModel();
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyControllerTest.java index 67b0670..63274f9 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyControllerTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxSurveyControllerTest.java
@@ -79,10 +79,14 @@ @Mock IdentityManager mIdentityManager; private static final String SENTIMENT_SURVEY_TRIGGER = "privacy-sandbox-sentiment-survey"; + private static final String CCT_ADS_NOTICE_EEA_CONTROL_TRIGGER = + "privacy-sandbox-cct-ads-notice-eea-control"; private static final String CCT_ADS_NOTICE_EEA_ACCEPTED_TRIGGER = "privacy-sandbox-cct-ads-notice-eea-accepted"; private static final String CCT_ADS_NOTICE_EEA_DECLINED_TRIGGER = "privacy-sandbox-cct-ads-notice-eea-declined"; + private static final String CCT_ADS_NOTICE_ROW_CONTROL_TRIGGER = + "privacy-sandbox-cct-ads-notice-row-control"; private static final String CCT_ADS_NOTICE_ROW_ACKNOWLEDGED_TRIGGER = "privacy-sandbox-cct-ads-notice-row-acknowledged"; @@ -445,6 +449,119 @@ } @Test + @Features.EnableFeatures({ + ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY + + ":app-id/com.google.android.googlequicksearchbox" + }) + public void surveyControllerLaunchsAdsCctSurveyForEeaControl() { + setTestSurveyConfigForTrigger( + CCT_ADS_NOTICE_EEA_CONTROL_TRIGGER, + /* psdBitFields= */ new String[0], + /* psdStringFields= */ new String[0]); + PrivacySandboxSurveyController controller = + PrivacySandboxSurveyController.initialize( + mTabModelSelector, + mActivityLifecycleDispatcher, + mActivity, + mMessageDispatcher, + mActivityTabProvider, + mProfile); + controller.scheduleAdsCctControlSurveyLaunch( + "com.google.android.googlequicksearchbox", PromptType.M1_CONSENT); + verify(mSurveyClient) + .showSurvey( + mActivity, + mActivityLifecycleDispatcher, + Collections.emptyMap(), + Collections.emptyMap()); + } + + @Test + @Features.EnableFeatures({ + ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY + + ":app-id/com.google.android.googlequicksearchbox" + }) + public void surveyControllerLaunchsAdsCctSurveyForRowControl() { + setTestSurveyConfigForTrigger( + CCT_ADS_NOTICE_ROW_CONTROL_TRIGGER, + /* psdBitFields= */ new String[0], + /* psdStringFields= */ new String[0]); + PrivacySandboxSurveyController controller = + PrivacySandboxSurveyController.initialize( + mTabModelSelector, + mActivityLifecycleDispatcher, + mActivity, + mMessageDispatcher, + mActivityTabProvider, + mProfile); + controller.scheduleAdsCctControlSurveyLaunch( + "com.google.android.googlequicksearchbox", PromptType.M1_NOTICE_ROW); + verify(mSurveyClient) + .showSurvey( + mActivity, + mActivityLifecycleDispatcher, + Collections.emptyMap(), + Collections.emptyMap()); + } + + @Test + @Features.EnableFeatures({ + ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY + + ":app-id/com.google.android.googlequicksearchbox" + }) + public void surveyControllerDoesNotLaunchsAdsCctSurveyForPromptTypeNone() { + PrivacySandboxSurveyController controller = + PrivacySandboxSurveyController.initialize( + mTabModelSelector, + mActivityLifecycleDispatcher, + mActivity, + mMessageDispatcher, + mActivityTabProvider, + mProfile); + controller.scheduleAdsCctControlSurveyLaunch( + "com.google.android.googlequicksearchbox", PromptType.NONE); + verify(mSurveyClient, times(0)).showSurvey(any(), any(), any(), any()); + } + + @Test + @Features.EnableFeatures({ + ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY + + ":app-id/com.google.android.googlequicksearchbox" + }) + public void surveyControllerDoesNotLaunchsAdsCctSurveyForPromptTypeNoticeRestricted() { + PrivacySandboxSurveyController controller = + PrivacySandboxSurveyController.initialize( + mTabModelSelector, + mActivityLifecycleDispatcher, + mActivity, + mMessageDispatcher, + mActivityTabProvider, + mProfile); + controller.scheduleAdsCctControlSurveyLaunch( + "com.google.android.googlequicksearchbox", PromptType.M1_NOTICE_RESTRICTED); + verify(mSurveyClient, times(0)).showSurvey(any(), any(), any(), any()); + } + + @Test + @Features.EnableFeatures({ + ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY + + ":app-id/com.google.android.googlequicksearchbox" + }) + public void surveyControllerDoesNotLaunchsAdsCctSurveyForPromptTypeNoticeEea() { + PrivacySandboxSurveyController controller = + PrivacySandboxSurveyController.initialize( + mTabModelSelector, + mActivityLifecycleDispatcher, + mActivity, + mMessageDispatcher, + mActivityTabProvider, + mProfile); + controller.scheduleAdsCctControlSurveyLaunch( + "com.google.android.googlequicksearchbox", PromptType.M1_NOTICE_EEA); + verify(mSurveyClient, times(0)).showSurvey(any(), any(), any(), any()); + } + + @Test @Features.EnableFeatures({ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY}) public void surveyControllerLaunchsAdsCctSurveyWithEmptyAppIdParameter() { // Arbitrary choose to launch the ROW acknowledged survey. @@ -497,7 +614,7 @@ ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY + ":app-id/com.google.android.googlequicksearchbox" }) - public void surveyControllerDoesNotLaunchAdsCctSurveyWithMismatchedAppId() { + public void surveyControllerDoesNotLaunchAdsCctTreatmentSurveyWithMismatchedAppId() { PrivacySandboxSurveyController controller = PrivacySandboxSurveyController.initialize( mTabModelSelector, @@ -514,7 +631,7 @@ @Test @Features.DisableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY) - public void surveyControllerDoesNotLaunchAdsCctSurveyWithDisabledFeature() { + public void surveyControllerDoesNotLaunchAdsCctTreatmentSurveyWithDisabledFeature() { PrivacySandboxSurveyController controller = PrivacySandboxSurveyController.initialize( mTabModelSelector, @@ -528,4 +645,42 @@ controller.scheduleAdsCctTreatmentSurveyLaunch("com.google.android.googlequicksearchbox"); verify(mSurveyClient, times(0)).showSurvey(any(), any(), any(), any()); } + + @Test + @Features.EnableFeatures({ + ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY + + ":app-id/com.google.android.googlequicksearchbox" + }) + public void surveyControllerDoesNotLaunchAdsCctControlSurveyWithMismatchedAppId() { + PrivacySandboxSurveyController controller = + PrivacySandboxSurveyController.initialize( + mTabModelSelector, + mActivityLifecycleDispatcher, + mActivity, + mMessageDispatcher, + mActivityTabProvider, + mProfile); + // TODO(crbug.com/379930582): Assert that the histogram detailing mismatching app-id is + // emitted. + controller.scheduleAdsCctControlSurveyLaunch("mismatched-appid", PromptType.M1_CONSENT); + verify(mSurveyClient, times(0)).showSurvey(any(), any(), any(), any()); + } + + @Test + @Features.DisableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY) + public void surveyControllerDoesNotLaunchAdsCctControlSurveyWithDisabledFeature() { + PrivacySandboxSurveyController controller = + PrivacySandboxSurveyController.initialize( + mTabModelSelector, + mActivityLifecycleDispatcher, + mActivity, + mMessageDispatcher, + mActivityTabProvider, + mProfile); + // TODO(crbug.com/379930582): Assert that the histogram detailing feature was disable was + // emitted. + controller.scheduleAdsCctControlSurveyLaunch( + "com.google.android.googlequicksearchbox", PromptType.M1_CONSENT); + verify(mSurveyClient, times(0)).showSurvey(any(), any(), any(), any()); + } }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java index fdb0c7e..be610591 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
@@ -84,10 +84,7 @@ /** Tests for {@link SigninManagerImpl}. */ @RunWith(BaseRobolectricTestRunner.class) @LooperMode(LooperMode.Mode.LEGACY) -@EnableFeatures({ - SigninFeatures.USE_CONSENT_LEVEL_SIGNIN_FOR_LEGACY_ACCOUNT_EMAIL_PREF, - SigninFeatures.SKIP_CHECK_FOR_ACCOUNT_MANAGEMENT_ON_SIGNIN -}) +@EnableFeatures({SigninFeatures.SKIP_CHECK_FOR_ACCOUNT_MANAGEMENT_ON_SIGNIN}) public class SigninManagerImplTest { private static final long NATIVE_SIGNIN_MANAGER = 10001L; private static final long NATIVE_IDENTITY_MANAGER = 10002L;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/bookmark_batch_upload_card/BookmarkBatchUploadCardMediatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/bookmark_batch_upload_card/BookmarkBatchUploadCardMediatorTest.java index 6095643f..d1b90eae 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/bookmark_batch_upload_card/BookmarkBatchUploadCardMediatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/sync/ui/bookmark_batch_upload_card/BookmarkBatchUploadCardMediatorTest.java
@@ -35,7 +35,6 @@ import org.chromium.components.signin.identitymanager.IdentityManager; import org.chromium.components.sync.DataType; import org.chromium.components.sync.LocalDataDescription; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.components.sync.SyncService; import org.chromium.ui.base.TestActivity; import org.chromium.ui.modaldialog.ModalDialogManager; @@ -46,11 +45,7 @@ /** Unit tests for {@link BookmarkBatchUploadCardMediator}. */ @RunWith(BaseRobolectricTestRunner.class) -@EnableFeatures({ - SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE, - ChromeFeatureList.REPLACE_SYNC_PROMOS_WITH_SIGN_IN_PROMOS, - ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP -}) +@EnableFeatures({ChromeFeatureList.UNO_PHASE_2_FOLLOW_UP}) public class BookmarkBatchUploadCardMediatorTest { @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
diff --git a/chrome/android/static_initializers.gni b/chrome/android/static_initializers.gni index f402d45..bc93a61 100644 --- a/chrome/android/static_initializers.gni +++ b/chrome/android/static_initializers.gni
@@ -25,11 +25,6 @@ # cpu_model.c: init_have_lse_atomics, init_cpu_features _chrome_64only_count += 2 - # 64bit only: - # Caused by AArch64 SME. - # sme-abi-init.c: init_aarch64_has_sme - _chrome_64only_count += 1 - # iostream.cpp: _GLOBAL__I_000101 _chrome_common_count += 1
diff --git a/chrome/app/resources/chromium_strings_fr-CA.xtb b/chrome/app/resources/chromium_strings_fr-CA.xtb index 4e4d2bad..72533f52 100644 --- a/chrome/app/resources/chromium_strings_fr-CA.xtb +++ b/chrome/app/resources/chromium_strings_fr-CA.xtb
@@ -123,6 +123,7 @@ <translation id="2583187216237139145">L'administrateur du profil professionnel peut retirer toutes les données Chromium générées durant l'utilisation de ce profil (comme la création de favoris, l'historique, les mots de passe et d'autres paramètres). <ph name="LEARN_MORE" /></translation> <translation id="2592940277904433508">Continuer à utiliser Chromium</translation> <translation id="259935314519650377">Échec de la mise en cache du programme d'installation téléchargé. Erreur : <ph name="UNPACK_CACHING_ERROR_CODE" />.</translation> +<translation id="2635452620547538388">Confirmez votre identité pour utiliser et enregistrer les données Chromium dans votre compte, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="264613044588233783">Chromium s'exécute plus rapidement, et les fonctionnalités qui utilisent JavaScript devraient fonctionner comme prévu (recommandé)</translation> <translation id="2648074677641340862">Une erreur de système d'exploitation s'est produite pendant l'installation. Veuillez télécharger de nouveau Chromium.</translation> <translation id="2661879430930417727">Si vous partagez un appareil avec vos proches, ceux-ci peuvent configurer Chromium comme bon leur semble et naviguer sur le Web de façon autonome.</translation> @@ -450,6 +451,7 @@ <translation id="6980074797973263542">Votre organisation peut consulter et gérer les données de navigation, comme vos favoris, votre historique et vos mots de passe. Elle ne peut pas consulter les données de navigation dans les profils Chromium personnels.</translation> <translation id="6985329841647292029">Conditions d'utilisation de Chromium OS</translation> <translation id="6990124437352146030">Chromium a besoin de votre autorisation pour accéder à votre micro pour ce site</translation> +<translation id="7003299027384820442">Entrez votre phrase de passe pour utiliser et enregistrer les données Chromium dans votre compte, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="7011190694940573312">L'installation a échoué, car cette version du système d'exploitation n'est pas prise en charge.</translation> <translation id="7024536598735240744">Erreur de décompression : <ph name="UNPACK_ERROR" />.</translation> <translation id="7025789849649390912">L'installation s'est arrêtée.</translation> @@ -545,6 +547,7 @@ <translation id="8330519371938183845">Se connecter pour synchroniser et personnaliser Chromium sur vos appareils</translation> <translation id="8340674089072921962"><ph name="USER_EMAIL_ADDRESS" /> utilisait précédemment Chromium</translation> <translation id="8357820681460164151">Pour accéder à vos données de navigation Chromium sur tous vos appareils, connectez-vous et activez la synchronisation</translation> +<translation id="8359544530202147897">Mettez à jour Chromium pour continuer à utiliser les données Chromium dans votre compte Google, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="8360718212975266891">Pour recevoir les futures mises à jour de Chromium, vous devrez disposer de Windows 10 ou d'une version ultérieure. Cet ordinateur fonctionne sous Windows 8.</translation> <translation id="8362914115861174987">Langue cible</translation> <translation id="8370517070665726704">© <ph name="YEAR" /> Google LLC. Tous droits réservés.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index d5b1da7..8179760 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">Instellings is gestoor. Sinkronisering het begin.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Aktiveer geverifieerde toegang</translation> -<translation id="4091307190120921067">Gekose apps sal ná opstelling geïnstalleer word. Kry later meer aanbevelings in die Verken-app.</translation> <translation id="4092709865241032354">Voeg jou gebruikernaam vir hierdie werf by om Google Wagwoordbestuurder te help om jou aanmeldinligting te stoor</translation> <translation id="4093865285251893588">Profielprent</translation> <translation id="4093955363990068916">Plaaslike lêer:</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 459a1c3..6d0a7cc 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -4446,7 +4446,6 @@ <translation id="4089235344645910861">ቅንብሮች ተቀምጠዋል። ስምረት ጀምሯል።</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">የተረጋገጠ መዳረሻ ያንቁ</translation> -<translation id="4091307190120921067">የተመረጡ መተግበሪያዎች ከተዋቀሩ በኋላ ይጫናሉ። ተጨማሪ ምክሮችን በኋላ በአስስ መተግበሪያ ውስጥ ያግኟቸው።</translation> <translation id="4092709865241032354">Google የይለፍ ቃል አስተዳዳሪ የእርስዎን በመለያ መግቢያ መረጃ እንዲያስቀምጥ ለማገዝ ለዚህ ጣቢያ የተጠቃሚ ስምዎን ያክሉ</translation> <translation id="4093865285251893588">የመገለጫ ምስል</translation> <translation id="4093955363990068916">አካባቢያዊ ፋይል፦</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 7fd1cf3..ee30b411 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -4442,7 +4442,6 @@ <translation id="4089235344645910861">تم حفظ الإعدادات، وبدأت عملية المزامنة.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">تفعيل الدخول الذي تم التحقق منه</translation> -<translation id="4091307190120921067">سيتم تثبيت التطبيقات المحدَّدة بعد انتهاء عملية الإعداد. يمكنك العثور على مزيد من الاقتراحات لاحقًا في تطبيق "استكشاف".</translation> <translation id="4092709865241032354">لمساعدة "مدير كلمات المرور في Google" على حفظ معلومات تسجيل الدخول، عليك إضافة اسم المستخدم لهذا الموقع الإلكتروني.</translation> <translation id="4093865285251893588">صورة الملف الشخصي</translation> <translation id="4093955363990068916">الملف المحلي:</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 7a386c3..f656b6c 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -4447,9 +4447,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">সোঁফালে দেখুৱাওক</translation> <translation id="4089235344645910861">ছেটিংসমূহ ছেভ কৰা হ’ল। ছিংক কৰা আৰম্ভ হ’ল।</translation> +<translation id="4089743381329341712">ছেট আপ কৰাৰ পাছত বাছনি কৰা এপ্সমূহ ইনষ্টল কৰা হ’ব। Apps & Game এপ্টোত পাছত অধিক চুপাৰিছ বিচাৰক।</translation> <translation id="4089817585533500276">শ্বিফ্ট + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">প্ৰমাণিত এক্সেছ সক্ষম কৰক</translation> -<translation id="4091307190120921067">ছেট আপ কৰাৰ পাছত বাছনি কৰা এপ্সমূহ ইনষ্টল কৰা হ’ব। Explore এপ্টোত পাছত অধিক চুপাৰিছ বিচাৰক।</translation> <translation id="4092709865241032354">Google Password Managerক আপোনাৰ ছাইন ইনৰ তথ্য ছেভ কৰাত সহায় কৰিবলৈ, এই ছাইটটোৰ বাবে আপোনাৰ ব্যৱহাৰকাৰী নামটো যোগ দিয়ক</translation> <translation id="4093865285251893588">প্ৰ’ফাইলৰ প্রতিচ্ছবি</translation> <translation id="4093955363990068916">স্থানীয় ফাইল:</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index e1b1eae..b2c11b2 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -4436,7 +4436,6 @@ <translation id="4089235344645910861">Ayar yadda saxlandı. Sinxronizasiya başladı.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Doğrulanmış Girişi Aktiv edin</translation> -<translation id="4091307190120921067">Seçilmiş tətbiqlər ayarlamadan sonra quraşdırılacaq. Araşdırın tətbiqində daha sonra digər tövsiyələrə baxın.</translation> <translation id="4092709865241032354">Google Parol Menecerinin giriş məlumatlarını yadda saxlaması üçün bu sayt üzrə istifadəçi adı əlavə edin</translation> <translation id="4093865285251893588">Profil şəkli</translation> <translation id="4093955363990068916">Yerli fayl:</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 4a55994..7435ed4 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -4438,7 +4438,6 @@ <translation id="4089235344645910861">Налады захаваныя. Сінхранізацыя пачалася.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Уключыць спраўджаны доступ</translation> -<translation id="4091307190120921067">Выбраныя праграмы будуць усталяваны пасла наладжвання. Дадатковыя рэкамендацыі можна будзе праглядзець пазней у праграме "Агляд".</translation> <translation id="4092709865241032354">Укажыце сваё імя карыстальніка для гэтага сайта, каб захаваць у Менеджары пароляў Google усе даныя для ўваходу</translation> <translation id="4093865285251893588">Відарыс профілю</translation> <translation id="4093955363990068916">Лакальны файл:</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index d4b662a..f827c46 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -4447,9 +4447,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Показване вдясно</translation> <translation id="4089235344645910861">Настройките бяха запазени. Синхронизирането започна.</translation> +<translation id="4089743381329341712">Избраните приложения ще бъдат инсталирани след настройването. Можете да намерите още препоръки по-късно в „Прил. и игри“.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Активиране на удостоверения достъп</translation> -<translation id="4091307190120921067">Избраните приложения ще бъдат инсталирани след настройването. Можете да намерите още препоръки по-късно в приложението Explore.</translation> <translation id="4092709865241032354">За да помогнете на Google Мениджър на пароли да запази данните ви за вход, добавете потребителското си име за този сайт</translation> <translation id="4093865285251893588">Изображение на потребителския профил</translation> <translation id="4093955363990068916">Локален файл:</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 9024478d..3a1fb53 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -4450,9 +4450,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">ডানদিকে দেখান</translation> <translation id="4089235344645910861">সেটিংস সেভ করা হয়েছে। সিঙ্ক শুরু করা হয়েছে।</translation> +<translation id="4089743381329341712">সেট-আপ করার পরে বেছে নেওয়া অ্যাপগুলি ইনস্টল করা হবে। অ্যাপ্স ও গেম্স অ্যাপ থেকে পরে আরও তথ্য দেখুন।</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">যাচাইকৃত অ্যাক্সেস সক্ষম করুন</translation> -<translation id="4091307190120921067">বেছে নেওয়া অ্যাপগুলি সেট-আপ করার পরে ইনস্টল করা হবে। পরে, Explore অ্যাপে আরও সাজেশন দেখুন।</translation> <translation id="4092709865241032354">এই সাইটের জন্য আপনার ব্যবহারকারীর নাম যোগ করুন, যাতে Google Password Manager আপনার সাইন-ইন সংক্রান্ত তথ্য সেভ করতে পারে</translation> <translation id="4093865285251893588">প্রোফাইল ছবি</translation> <translation id="4093955363990068916">স্থানীয় ফাইল:</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index f58e374..cdd08fb 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -4451,7 +4451,6 @@ <translation id="4089235344645910861">Postavke su sačuvane. Sinhronizacija je započela.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Omogućava potvrđeni pristup</translation> -<translation id="4091307190120921067">Odabrane aplikacije će se instalirati nakon postavljanja. Pronađite više preporuka kasnije u aplikaciji Istražite.</translation> <translation id="4092709865241032354">Da pomognete Google upravitelju lozinki da sačuva podatke za prijavu, dodajte korisničko ime za ovu web lokaciju</translation> <translation id="4093865285251893588">Slika profila</translation> <translation id="4093955363990068916">Lokalni fajl:</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index f36cff8..21f95623 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -4436,7 +4436,6 @@ <translation id="4089235344645910861">La configuració s'ha desat i ha començat la sincronització.</translation> <translation id="4089817585533500276">Maj+<ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Activa l'accés verificat</translation> -<translation id="4091307190120921067">Les aplicacions seleccionades s'instal·laran després de la configuració. Troba altres recomanacions més endavant a l'aplicació Explora.</translation> <translation id="4092709865241032354">Per ajudar el gestor de contrasenyes de Google a desar la teva informació d'inici de sessió, afegeix el teu nom d'usuari per a aquest lloc web</translation> <translation id="4093865285251893588">Imatge de perfil</translation> <translation id="4093955363990068916">Fitxer local:</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 5e516cc..cee8c40 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -4438,7 +4438,6 @@ <translation id="4089235344645910861">Nastavení byla uložena. Synchronizace byla zahájena.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Aktivuje ověřený přístup.</translation> -<translation id="4091307190120921067">Vybrané aplikace se nainstalují po nastavení. Další doporučení později najdete v aplikaci Explore.</translation> <translation id="4092709865241032354">Pomozte Správci hesel Google s uložením vašich přihlašovacích údajů tím, že zadáte své uživatelské jméno pro tento web</translation> <translation id="4093865285251893588">Profilová fotka</translation> <translation id="4093955363990068916">Místní soubor:</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb index 47a3d99..49b7aa0 100644 --- a/chrome/app/resources/generated_resources_cy.xtb +++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -4455,7 +4455,6 @@ <translation id="4089235344645910861">Mae'r gosodiadau wedi'u cadw. Wedi dechrau cysoni.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Galluogi Mynediad a Ddilyswyd</translation> -<translation id="4091307190120921067">Bydd apiau dethol yn cael eu gosod ar ôl gosod eich dyfais. Dewch o hyd i ragor o argymhellion yn ddiweddarach yn yr ap Explore.</translation> <translation id="4092709865241032354">I helpu Rheolwr Cyfrineiriau Google gadw eich gwybodaeth fewngofnodi, ychwanegwch eich enw defnyddiwr ar gyfer y wefan hon</translation> <translation id="4093865285251893588">Llun proffil</translation> <translation id="4093955363990068916">Ffeil leol:</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 01ed9793..01fc3f5 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -4453,7 +4453,6 @@ <translation id="4089235344645910861">Indstillingerne blev gemt, og synkroniseringen er nu startet.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Aktivér Verificeret adgang</translation> -<translation id="4091307190120921067">De valgte apps installeres efter konfigurationen. Du kan finde flere anbefalinger i appen Udforsk senere.</translation> <translation id="4092709865241032354">Tilføj dit brugernavn for dette website for at hjælpe Google Adgangskodeadministrator med at gemme dine loginoplysninger</translation> <translation id="4093865285251893588">Profilbillede</translation> <translation id="4093955363990068916">Lokal fil:</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 3c3b6ccb..b308f931 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -4432,9 +4432,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Rechts anzeigen</translation> <translation id="4089235344645910861">Einstellungen gespeichert. Synchronisation gestartet.</translation> +<translation id="4089743381329341712">Die ausgewählten Apps werden nach der Einrichtung installiert. Danach kannst du in der Google Play Apps & Spiele App weitere Empfehlungen sehen.</translation> <translation id="4089817585533500276">Umschalttaste + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Bestätigten Zugriff aktivieren</translation> -<translation id="4091307190120921067">Die ausgewählten Apps werden nach der Einrichtung installiert. Danach kannst du in der App „Entdecken“ weitere Empfehlungen sehen.</translation> <translation id="4092709865241032354">Nutzername für diese Website hinzufügen, damit der Google Passwortmanager deine Anmeldedaten speichern kann</translation> <translation id="4093865285251893588">Profilbild</translation> <translation id="4093955363990068916">Lokale Datei:</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 30e3619..b32c799 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -4450,9 +4450,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Εμφάνιση στα δεξιά</translation> <translation id="4089235344645910861">Οι ρυθμίσεις αποθηκεύτηκαν. Ο συγχρονισμός ξεκίνησε.</translation> +<translation id="4089743381329341712">Οι επιλεγμένες εφαρμογές θα εγκατασταθούν μετά τη ρύθμιση. Βρείτε περισσότερες προτάσεις αργότερα στην εφαρμογή Εφαρμογές και παιχνίδια.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Ενεργοποίηση επαληθευμένης πρόσβασης</translation> -<translation id="4091307190120921067">Οι επιλεγμένες εφαρμογές θα εγκατασταθούν μετά τη ρύθμιση. Βρείτε περισσότερες προτάσεις αργότερα στην εφαρμογή Εξερεύνηση.</translation> <translation id="4092709865241032354">Για να βοηθήσετε τη Διαχείριση κωδικών πρόσβασης να αποθηκεύσει τα στοιχεία σύνδεσης, προσθέστε το όνομα χρήστη για αυτόν τον ιστότοπο</translation> <translation id="4093865285251893588">Εικόνα προφίλ</translation> <translation id="4093955363990068916">Τοπικό αρχείο:</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 3583208..e81fa03 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -4450,9 +4450,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Show on right</translation> <translation id="4089235344645910861">Settings saved. Sync started.</translation> +<translation id="4089743381329341712">Selected apps will be installed after setup. Find more recommendations later in the Apps & Games app.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Enable Verified Access</translation> -<translation id="4091307190120921067">Selected apps will be installed after setup. Find more recommendations later in the Explore app.</translation> <translation id="4092709865241032354">To help Google Password Manager save your sign-in info, add your username for this site</translation> <translation id="4093865285251893588">Profile image</translation> <translation id="4093955363990068916">Local file:</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index be8b412..b4afc209 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -4436,7 +4436,6 @@ <translation id="4089235344645910861">Se guardó la configuración y comenzó la sincronización.</translation> <translation id="4089817585533500276">Mayúsculas + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Habilitar el acceso verificado</translation> -<translation id="4091307190120921067">Las apps seleccionadas se instalarán después de la configuración. Encuentra otras recomendaciones más tarde en la app de Explorar.</translation> <translation id="4092709865241032354">Para ayudar al Administrador de contraseñas de Google a guardar tu información de acceso, agrega tu nombre de usuario en este sitio</translation> <translation id="4093865285251893588">Imagen de perfil</translation> <translation id="4093955363990068916">Archivo local:</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 252bca6..a27521b 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -4439,7 +4439,6 @@ <translation id="4089235344645910861">Se ha guardado la configuración y se ha iniciado la sincronización.</translation> <translation id="4089817585533500276">Mayús + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Habilitar acceso verificado</translation> -<translation id="4091307190120921067">Las aplicaciones seleccionadas se instalarán después de la configuración. Más adelante, podrás encontrar más recomendaciones en la aplicación Explorar.</translation> <translation id="4092709865241032354">Para ayudar al Gestor de contraseñas de Google a guardar tu información de inicio de sesión, añade tu nombre de usuario para este sitio</translation> <translation id="4093865285251893588">Imagen de perfil</translation> <translation id="4093955363990068916">Archivo local:</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 6e45e3e..01df77cc 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -4443,7 +4443,6 @@ <translation id="4089235344645910861">Seaded on salvestatud. Sünkroonimine algas.</translation> <translation id="4089817585533500276">tõstuklahv + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Luba kinnitatud juurdepääs</translation> -<translation id="4091307190120921067">Valitud rakendused installitakse pärast seadistamist. Hiljem leiate rohkem soovitusi rakendusest Avastamine.</translation> <translation id="4092709865241032354">Selleks et aidata Google'i paroolihalduril teie sisselogimisteavet salvestada, lisage sellele saidile oma kasutajanimi</translation> <translation id="4093865285251893588">Profiilipilt</translation> <translation id="4093955363990068916">Kohalik fail:</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 62f0f14..ebb65922 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -4437,7 +4437,6 @@ <translation id="4089235344645910861">Gorde dira ezarpenak. Hasi da sinkronizazioa.</translation> <translation id="4089817585533500276">Maius + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Gaitu egiaztatutako sarbidea</translation> -<translation id="4091307190120921067">Konfigurazio-prozesua amaitu ondoren instalatuko dira hautatutako aplikazioak. Gomendio gehiago jasotzeko, joan Arakatu aplikaziora.</translation> <translation id="4092709865241032354">Google-ren Pasahitz-kudeatzailea zerbitzuari saioa hasteko informazioa gordetzen laguntzeko, gehitu webgune honetarako darabilzun erabiltzaile-izena</translation> <translation id="4093865285251893588">Profileko irudia</translation> <translation id="4093955363990068916">Fitxategi lokala:</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index f788952..430c37a0 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -4449,7 +4449,6 @@ <translation id="4089235344645910861">تنظیمات ذخیره شد. همگامسازی شروع شد.</translation> <translation id="4089817585533500276">تبدیل + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">فعال کردن دسترسی تأییدشده</translation> -<translation id="4091307190120921067">برنامههای انتخابشده بعداز راهاندازی نصب خواهد شد. بعداً در برنامه «کاوش» توصیههای بیشتری خواهید دید.</translation> <translation id="4092709865241032354">برای اینکه «مدیر گذرواژه Google» اطلاعات ورود به سیستم شما را ذخیره کند، نام کاربریتان در این سایت را اضافه کنید</translation> <translation id="4093865285251893588">تصویر نمایه</translation> <translation id="4093955363990068916">فایل محلی:</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 4fbb69d..713520ec 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -4446,9 +4446,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Näytä oikealla</translation> <translation id="4089235344645910861">Asetukset tallennettiin. Synkronointi aloitettiin.</translation> +<translation id="4089743381329341712">Valitut sovellukset asennetaan käyttöönoton jälkeen. Löydät lisää suosituksia myöhemmin Sovellukset ja pelit ‑sovelluksesta.</translation> <translation id="4089817585533500276">vaihto + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Ota käyttöön vahvistettu käyttö</translation> -<translation id="4091307190120921067">Valitut sovellukset asennetaan käyttöönoton jälkeen. Löydät lisää suosituksia myöhemmin Explore-sovelluksesta.</translation> <translation id="4092709865241032354">Lisää käyttäjätunnuksesi tälle sivustolle, jotta Google Salasanat voi tallentaa sisäänkirjautumistiedot</translation> <translation id="4093865285251893588">Profiilikuva</translation> <translation id="4093955363990068916">Paikallinen tiedosto:</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 4ba0256..d723739 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -4453,7 +4453,6 @@ <translation id="4089235344645910861">Na-save ang mga setting. Nasimulan ang pag-sync.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">I-enable ang Bine-verify na Access</translation> -<translation id="4091307190120921067">Mai-install ang mga piniling app pagkatapos ng pag-set up. Maghanap ng higit pang rekomendasyon sa ibang pagkakataon sa Explore app.</translation> <translation id="4092709865241032354">Para makatulong na ma-save ng Google Password Manager ang iyong impormasyon sa pag-sign in, idagdag ang username mo para sa site na ito</translation> <translation id="4093865285251893588">Larawan sa profile</translation> <translation id="4093955363990068916">Lokal na file:</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 506d141c..c05b4aa 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -427,6 +427,7 @@ <translation id="1282436639288565079">Détails du groupe d'onglets</translation> <translation id="1283126956823499975">Un problème est survenu lors de la configuration de l'appareil</translation> <translation id="1284277788676816155">Ne pas autoriser l'enregistrement des données</translation> +<translation id="1284912418686719556">Chrome est en train de créer un mot de passe fort pour vous. Vous n'avez pas besoin de vous en souvenir, car il est enregistré pour vous dans le <ph name="GOOGLE_PASSWORD_MANAGER" /> pour l'adresse <ph name="EMAIL" />.</translation> <translation id="1285320974508926690">Ne jamais traduire ce site</translation> <translation id="1285484354230578868">Stocker les données dans votre compte Google Disque</translation> <translation id="1285625592773741684">Le paramètre actuel d'utilisation de données est Données cellulaires</translation> @@ -4441,7 +4442,6 @@ <translation id="4089235344645910861">Paramètres enregistrés. Synchronisation lancée.</translation> <translation id="4089817585533500276">majuscule+<ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Activer l'accès validé</translation> -<translation id="4091307190120921067">Les applis sélectionnées seront installées après la configuration. Vous trouverez d'autres recommandations dans l'appli Explorer.</translation> <translation id="4092709865241032354">Pour aider le gestionnaire de mots de passe Google à enregistrer vos renseignements de connexion, ajoutez votre nom d'utilisateur pour ce site</translation> <translation id="4093865285251893588">Image de profil</translation> <translation id="4093955363990068916">Fichier local :</translation> @@ -7565,6 +7565,7 @@ <translation id="637642201764944055">Les anciennes versions des applications Chrome ne s'ouvriront plus sur les appareils Linux après décembre 2022. Communiquez avec votre administrateur pour passer à une nouvelle version ou retirer cette application.</translation> <translation id="6377268785556383139">1 résultat trouvé pour « <ph name="SEARCH_TEXT" /> »</translation> <translation id="6378392501584240055">Ouvrir dans la liste des réseaux Wi-Fi</translation> +<translation id="6379228010899751161">Confirmez votre identité pour vous assurer de toujours pouvoir utiliser les mots de passe de votre compte, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="6380143666419481200">Accepter et continuer</translation> <translation id="6383382161803538830">Le mode lecture n'est pas accessible sur cette page</translation> <translation id="638418309848716977">Liens compatibles</translation> @@ -9613,6 +9614,7 @@ <ph name="BEGIN_PARAGRAPH2" />Vous pouvez activer ou désactiver l'autorisation de ces rapports en tout temps dans les paramètres de votre appareil Chrome OS. Si vous êtes un administrateur de domaine, vous pouvez modifier ce paramètre dans la console d'administrateur.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />Si le paramètre Activité sur le Web et dans les applications est activé pour votre compte Google, vos données Android peuvent être enregistrées dans ce dernier. Vous pouvez consulter et supprimer vos données ainsi que modifier vos paramètres de compte sur le site account.google.com.<ph name="END_PARAGRAPH3" /></translation> <translation id="7851021205959621355"><ph name="BEGIN_BOLD" />Remarque :<ph name="END_BOLD" /> Une personne ayant une voix semblable à la vôtre ou disposant d'un enregistrement de celle-ci pourrait aussi accéder à vos résultats personnalisés ou à votre Assistant. Pour économiser la pile, dans les paramètres de votre Assistant, vous pouvez sélectionner d'activer « Ok Google » uniquement lorsque cet appareil est connecté à une source d'alimentation.</translation> +<translation id="7851196412551419054">Modification de votre mot de passe en cours…</translation> <translation id="7851457902707056880">La connexion a été restreinte au compte du propriétaire uniquement. Veuillez redémarrer et utiliser ce compte pour vous connecter. L'appareil redémarrera automatiquement dans 30 secondes.</translation> <translation id="7851716364080026749">Toujours bloquer l'accès à la caméra et au microphone</translation> <translation id="7851720427268294554">Analyseur IPP</translation> @@ -11196,6 +11198,7 @@ <translation id="8962863356073277855">L'URL doit respecter le format https://www.example.com</translation> <translation id="8962918469425892674">Ce site utilise des capteurs de mouvement ou de luminosité.</translation> <translation id="8963117664422609631">Accéder aux paramètres du site</translation> +<translation id="8964927371396953727">Confirmez votre identité pour utiliser et enregistrer les mots de passe dans votre compte, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="8965037249707889821">Entrez l'ancien mot de passe</translation> <translation id="8966809848145604011">Autres profils</translation> <translation id="8967427617812342790">Ajouter à liste lecture</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index c6fab2b2..f7becc11 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -4438,7 +4438,6 @@ <translation id="4089235344645910861">Paramètres enregistrés. Synchronisation démarrée.</translation> <translation id="4089817585533500276">Maj+<ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Activer l'accès validé</translation> -<translation id="4091307190120921067">Les applis sélectionnées seront installées après la configuration. Retrouvez d'autres recommandations plus tard dans l'appli Explorer.</translation> <translation id="4092709865241032354">Pour aider le Gestionnaire de mots de passe de Google à enregistrer vos informations de connexion, ajoutez votre nom d'utilisateur pour ce site</translation> <translation id="4093865285251893588">Image de profil</translation> <translation id="4093955363990068916">Fichier local :</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index b89d9ac..8c20957c 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -4439,9 +4439,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Mostrar na parte dereita</translation> <translation id="4089235344645910861">Gardouse a configuración e iniciouse a sincronización.</translation> +<translation id="4089743381329341712">As aplicacións seleccionadas instalaranse despois da configuración. Poderás atopar outras recomendacións máis adiante na aplicación Xogos e aplicacións.</translation> <translation id="4089817585533500276">maiúsculas + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Activar acceso verificado</translation> -<translation id="4091307190120921067">As aplicacións seleccionadas instalaranse despois da configuración. Poderás atopar outras recomendacións máis adiante na aplicación Explorar.</translation> <translation id="4092709865241032354">Para axudar ao xestor de contrasinais de Google a gardar a túa información de inicio de sesión, engade o teu nome de usuario para este sitio</translation> <translation id="4093865285251893588">Imaxe do perfil</translation> <translation id="4093955363990068916">Ficheiro local:</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index a62fb70..7a04218a 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -4437,7 +4437,6 @@ <translation id="4089235344645910861">સેટિંગ સાચવી. સિંક શરૂ થયું.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">ચકાસાયેલો ઍક્સેસ ચાલુ કરો</translation> -<translation id="4091307190120921067">સેટઅપ કર્યા પછી પસંદ કરેલી ઍપ ઇન્સ્ટૉલ કરવામાં આવશે. પછીથી 'શોધખોળ કરો' ઍપમાં વધુ સુઝાવો મેળવો.</translation> <translation id="4092709865241032354">Google Password Managerને તમારી સાઇન-ઇનની માહિતી સાચવવામાં સહાય કરવા માટે, આ સાઇટ માટેનું તમારું વપરાશકર્તાનું નામ ઉમેરો</translation> <translation id="4093865285251893588">પ્રોફાઇલ ફોટો</translation> <translation id="4093955363990068916">સ્થાનિક ફાઇલ:</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 8dfb86e6..dee1bd3 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">सेटिंग सेव की गई. सिंक शुरू हो गया.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">पुष्टि हो चुके एक्सेस चालू करें</translation> -<translation id="4091307190120921067">सेटअप पूरा होने के बाद, चुने गए ऐप्लिकेशन इंस्टॉल हो जाएंगे. बाद में, Explore ऐप्लिकेशन पर ज़्यादा सुझाव पाएं.</translation> <translation id="4092709865241032354">इस साइट के लिए अपना उपयोगकर्ता नाम जोड़ें, ताकि Google Password Manager साइन इन करने के लिए आपके क्रेडेंशियल सेव कर सके</translation> <translation id="4093865285251893588">प्रोफ़ाइल फ़ोटो</translation> <translation id="4093955363990068916">स्थानीय फ़ाइल:</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 57c3989..42e4cf8c 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -784,7 +784,7 @@ <translation id="1543538514740974167">Brže otvaranje ove stranice</translation> <translation id="1544588554445317666">Pokušajte upotrijebiti kraći naziv datoteke ili je spremiti u drugu mapu</translation> <translation id="1545177026077493356">Automatski način kioska</translation> -<translation id="1545749641540134597">Skenirajte QR kod</translation> +<translation id="1545749641540134597">Skenirajte QR kôd</translation> <translation id="1545775234664667895">Instalirana tema "<ph name="THEME_NAME" />"</translation> <translation id="1546031833947068368">{COUNT,plural, =1{Anonimni se prozor neće ponovno otvoriti.}one{Vaš # anonimni prozor neće se ponovno otvoriti.}few{Vaša # anonimna prozora neće se ponovno otvoriti.}other{Vaših # anonimnih prozora neće se ponovno otvoriti.}}</translation> <translation id="1546280085599573572">Ovo proširenje promijenilo je stranicu koja se prikazuje kada se klikne gumb Početna.</translation> @@ -3202,7 +3202,7 @@ <translation id="3240426699337459095">Veza je kopirana</translation> <translation id="3241638166094654466">Ćelije u svakom retku:</translation> <translation id="3241680850019875542">Odaberite korijenski direktorij proširenja za pakiranje. Da biste ažurirali proširenje, odaberite i datoteku osobnog ključa za ponovnu upotrebu.</translation> -<translation id="3241810535741601486">Ta je promjena trajna i ne može se poništiti. Proširena ažuriranja primjenjuju se na sve korisnike ovog uređaja. <ph name="LINK_START" />Saznajte više<ph name="LINK_END" /></translation> +<translation id="3241810535741601486">Ta je promjena trajna i ne može se poništiti. Produžena podrška za ažuriranje uređaja primjenjuje se na sve korisnike ovog uređaja. <ph name="LINK_START" />Saznajte više<ph name="LINK_END" /></translation> <translation id="3242289508736283383">Aplikaciju s atributom manifesta kiosk_only potrebno je instalirati u načinu kioska Chrome OS-a</translation> <translation id="3243017971870859287">Čitaj serijske brojeve Chrome OS Flex uređaja i komponenti</translation> <translation id="324366796737464147">Uklanjanje buke</translation> @@ -4441,7 +4441,6 @@ <translation id="4089235344645910861">Postavke spremljene. Sinkronizacija pokrenuta.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Omogući potvrđeni pristup</translation> -<translation id="4091307190120921067">Odabrane aplikacije instalirat će se nakon postavljanja. Više preporuka pronađite kasnije u aplikaciji Istražite.</translation> <translation id="4092709865241032354">Da biste pomogli Google upravitelju zaporki da spremi vaše podatke za prijavu, dodajte svoje korisničko ime za ovu web-lokaciju</translation> <translation id="4093865285251893588">Profilna slika</translation> <translation id="4093955363990068916">Lokalna datoteka:</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index b88579a..06199af 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -4450,7 +4450,6 @@ <translation id="4089235344645910861">Beállítások mentve, a szinkronizálás megkezdődött.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Ellenőrzött hozzáférés engedélyezése</translation> -<translation id="4091307190120921067">A kiválasztott alkalmazásokat a beállítás után telepíti a rendszer. A Felfedezés alkalmazásban később további javaslatokat találhat.</translation> <translation id="4092709865241032354">Adja meg felhasználónevét ehhez a webhelyhez, hogy a Google Jelszókezelő menteni tudja a bejelentkezési adatait.</translation> <translation id="4093865285251893588">Profilkép</translation> <translation id="4093955363990068916">Helyi fájl:</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 70eeeb8f..6444313 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -4437,7 +4437,6 @@ <translation id="4089235344645910861">Կարգավորումները պահվեցին: Համաժամացումը սկսվեց:</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Միացնել ստուգված մուտքի ծառայությունը</translation> -<translation id="4091307190120921067">Ընտրված հավելվածները կտեղադրվեն կարգավորումից հետո։ «Հնարավորություններ» հավելվածում ավելի ուշ կարող եք գտնել այլ առաջարկներ։</translation> <translation id="4092709865241032354">Ավելացրեք ձեր օգտանունն այս կայքի համար, որպեսզի Google գաղտնաբառերի կառավարիչը կարողանա պահել ձեր մուտքի տվյալները</translation> <translation id="4093865285251893588">Պրոֆիլի պատկեր</translation> <translation id="4093955363990068916">Տեղային ֆայլ՝</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 078f6e0..308365f 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">Setelan disimpan. Sinkronisasi dimulai.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Mengaktifkan Akses Terverifikasi</translation> -<translation id="4091307190120921067">Aplikasi yang dipilih akan diinstal setelah proses penyiapan selesai. Temukan rekomendasi lainnya nanti di aplikasi Jelajahi.</translation> <translation id="4092709865241032354">Untuk membantu Pengelola Sandi Google menyimpan info login Anda, tambahkan nama pengguna Anda untuk situs ini</translation> <translation id="4093865285251893588">Gambar profil</translation> <translation id="4093955363990068916">File lokal:</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index 0611b3e..1d0673d8 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -4453,7 +4453,6 @@ <translation id="4089235344645910861">Stillingar vistaðar. Samstilling hafin.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Virkja staðfestan aðgang</translation> -<translation id="4091307190120921067">Valin forrit verða sett upp að uppsetningu lokinni. Þú getur séð fleiri tillögur síðar í forritinu „Kanna“.</translation> <translation id="4092709865241032354">Bættu við notandanafni þínu fyrir þetta vefsvæði til að hjálpa Google-aðgangsorðastjórnun að vista innskráningarupplýsingarnar þínar</translation> <translation id="4093865285251893588">Prófílmynd</translation> <translation id="4093955363990068916">Staðbundin skrá:</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index edb0b0f..59d59f4 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -4437,9 +4437,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Mostra a destra</translation> <translation id="4089235344645910861">Impostazioni salvate. Sincronizzazione avviata.</translation> +<translation id="4089743381329341712">Le app selezionate verranno installate dopo la configurazione. Trova altri consigli in un secondo momento nell'app App e giochi.</translation> <translation id="4089817585533500276">Maiusc + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Attiva Accesso verificato</translation> -<translation id="4091307190120921067">Le app selezionate verranno installate dopo la configurazione. Trova altri consigli in un secondo momento nell'app Esplora.</translation> <translation id="4092709865241032354">Per aiutare Gestore delle password di Google a salvare i tuoi dati di accesso, aggiungi il tuo nome utente per questo sito</translation> <translation id="4093865285251893588">Immagine profilo</translation> <translation id="4093955363990068916">File locale:</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 7132ece..b192be90 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -4451,7 +4451,6 @@ <translation id="4089235344645910861">ההגדרות נשמרו והסנכרון החל.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">הפעלת גישה מאומתת</translation> -<translation id="4091307190120921067">האפליקציות שבחרת יותקנו לאחר סיום ההגדרה. אפשר לקבל המלצות נוספות מאוחר יותר באפליקציה 'מה חדש ב-Chromebook'.</translation> <translation id="4092709865241032354">כדי לעזור למנהל הסיסמאות של Google לשמור את פרטי הכניסה, עליך להוסיף את שם המשתמש שלך באתר הזה</translation> <translation id="4093865285251893588">תמונת הפרופיל</translation> <translation id="4093955363990068916">קובץ מקומי:</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index cd22a6de..229ff34 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -4428,9 +4428,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">右側に表示</translation> <translation id="4089235344645910861">設定が保存され、同期が始まりました。</translation> +<translation id="4089743381329341712">選択したアプリは設定後にインストールされます。他のおすすめのアプリは後から「アプリとゲーム」アプリで確認できます。</translation> <translation id="4089817585533500276">Shift+<ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">確認済みアクセスを有効にする</translation> -<translation id="4091307190120921067">選択したアプリは設定後にインストールされます。他のおすすめのアプリは後から「使い方・ヒント」アプリで確認できます。</translation> <translation id="4092709865241032354">Google パスワード マネージャーでログイン情報を保存するには、このサイトのユーザー名を追加してください</translation> <translation id="4093865285251893588">プロフィール画像</translation> <translation id="4093955363990068916">ローカル ファイル:</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index f0dd093..ff88f36e 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -4439,7 +4439,6 @@ <translation id="4089235344645910861">პარამეტრები შენახულია. სინქრონიზაცია დაიწყო.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">ჩართეთ შემოწმებული წვდომა</translation> -<translation id="4091307190120921067">შერჩეული აპები დაყენდება კონფიგურაციის შემდეგ. იხილეთ მეტი რეკომენდაცია გაცნობის აპში.</translation> <translation id="4092709865241032354">Google პაროლების მმართველს სისტემაში შესვლის მონაცემების შენახვაში რომ დაეხმაროთ, დაამატეთ თქვენი მომხმარებლის სახელი ამ საიტისთვის</translation> <translation id="4093865285251893588">პროფილის სურათი</translation> <translation id="4093955363990068916">ლოკალური ფაილი:</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index 9c00efe..616f4c9 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -4434,7 +4434,6 @@ <translation id="4089235344645910861">Параметрлер сақталды. Синхрондау басталды.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Расталған кіру құқығын қосу</translation> -<translation id="4091307190120921067">Таңдалған қолданбалар реттеуден кейін орнатылады. Қосымша ұсыныстарды кейінірек Explore қолданбасынан табуға болады.</translation> <translation id="4092709865241032354">Google Password Manager аккаунтқа кіру туралы ақпаратыңызды сақтай алуы үшін, бұл сайт үшін пайдаланушы атын қосыңыз.</translation> <translation id="4093865285251893588">Профиль суреті</translation> <translation id="4093955363990068916">Жергілікті файл:</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index f2d8bb1..91ead19 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -4448,9 +4448,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">បង្ហាញនៅខាងស្តាំ</translation> <translation id="4089235344645910861">បានរក្សាទុកការកំណត់។ បានចាប់ផ្ដើមសមកាលកម្ម។</translation> +<translation id="4089743381329341712">កម្មវិធីដែលបានជ្រើសរើសនឹងត្រូវបានដំឡើងបន្ទាប់ពីរៀបចំរួច។ ស្វែងរកការណែនាំបន្ថែមនៅពេលក្រោយនៅក្នុងកម្មវិធី "កម្មវិធី និងហ្គេម"។</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">បើកដំណើរការចូលប្រើដែលបានផ្ទៀងផ្ទាត់</translation> -<translation id="4091307190120921067">កម្មវិធីដែលបានជ្រើសរើសនឹងត្រូវបានដំឡើងបន្ទាប់ពីរៀបចំរួច។ ស្វែងរកការណែនាំបន្ថែមនៅពេលក្រោយនៅក្នុងកម្មវិធីរុករក។</translation> <translation id="4092709865241032354">ដើម្បីជួយកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់រក្សាទុកព័ត៌មានចូលគណនីរបស់អ្នក សូមបញ្ចូលឈ្មោះអ្នកប្រើប្រាស់របស់អ្នកសម្រាប់គេហទំព័រនេះ</translation> <translation id="4093865285251893588">រូបភាពកម្រងព័ត៌មាន</translation> <translation id="4093955363990068916">ឯកសារមូលដ្ឋាន៖</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 936a634b..a3907386 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -3634,7 +3634,7 @@ <translation id="3553442438687311630">Microsoft ದೃಢೀಕರಣ</translation> <translation id="3554493885489666172">ನಿಮ್ಮ ಸಾಧನವನ್ನು <ph name="PROFILE_NAME" /> ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ. ನಿರ್ವಾಹಕರು ಈ ಸಾಧನದಲ್ಲಿನ ಯಾವುದೇ ಪ್ರೊಫೈಲ್ನಲ್ಲಿ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು.</translation> <translation id="3555812735919707620">ವಿಸ್ತರಣೆ ತೆಗೆದುಹಾಕು</translation> -<translation id="3557101512409028104">Family Link ಮೂಲಕ ವೆಬ್ಸೈಟ್ ನಿರ್ಬಂಧನೆಗಳು ಮತ್ತು ವೀಕ್ಷಣಾ ಅವಧಿಯನ್ನು ಹೊಂದಿಸಿ</translation> +<translation id="3557101512409028104">Family Link ಮೂಲಕ ವೆಬ್ಸೈಟ್ ನಿರ್ಬಂಧನೆಗಳು ಮತ್ತು ವೀಕ್ಷಣಾ ಅವಧಿಯನ್ನು ಸೆಟ್ ಮಾಡಿ</translation> <translation id="3557267430539505890"><ph name="BEGIN_PARAGRAPH1" />ಸ್ವಯಂಚಾಲಿತ ವರದಿಗಳನ್ನು ಕಳುಹಿಸಲು ChromeOS ಸಾಧನಗಳಿಗೆ ಅನುಮತಿಸುವುದರಿಂದ, ChromeOS ನಲ್ಲಿ ಏನನ್ನು ಸರಿಪಡಿಸಬೇಕು ಮತ್ತು ಸುಧಾರಿಸಬೇಕು ಎಂಬುದನ್ನು ಆದ್ಯತೆಯ ಪ್ರಕಾರ ನಿರ್ವಹಿಸಲು ನಮಗೆ ಸಹಾಯವಾಗುತ್ತದೆ. Chrome OS ಯಾವಾಗ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತದೆ, ಯಾವ ಫೀಚರ್ಗಳನ್ನು ಬಳಸಲಾಗಿದೆ ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ ಎಷ್ಟು ಮೆಮೊರಿಯನ್ನು ಬಳಸಲಾಗಿದೆ ಎನ್ನುವಂತಹ ವಿಷಯಗಳು ಈ ವರದಿಗಳಲ್ಲಿ ಸೇರಿರಬಹುದು.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />ನಿಮ್ಮ ಮಗುವಿನ ChromeOS ಸಾಧನದ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಯಾವಾಗ ಬೇಕಾದರೂ, ನೀವು ಈ ವರದಿಗಳನ್ನು ಅನುಮತಿಸಲು ಪ್ರಾರಂಭಿಸಬಹುದು ಅಥವಾ ನಿಲ್ಲಿಸಬಹುದು. ನೀವು ಡೊಮೇನ್ ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ, ನಿರ್ವಾಹಕರ ಕನ್ಸೋಲ್ನಲ್ಲಿ ನೀವು ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಬಹುದು.<ph name="END_PARAGRAPH2" /></translation> <translation id="3559079791149580653"><ph name="DEVICE_NAME" /> ಗೆ ಸ್ಕ್ರೀನ್ ಬಿತ್ತರಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ</translation> @@ -3941,7 +3941,7 @@ <translation id="3755411799582650620">ನಿಮ್ಮ <ph name="PHONE_NAME" /> ಫೋನ್ ಈ <ph name="DEVICE_TYPE" /> ವನ್ನು ಸಹ ಅನ್ಲಾಕ್ ಮಾಡಬಹುದು.</translation> <translation id="375636864092143889">ನಿಮ್ಮ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಸೈಟ್ ಬಳಸುತ್ತಿದೆ</translation> <translation id="3756485814916578707">ಬಿತ್ತರಿಸುವ ಸ್ಕ್ರೀನ್</translation> -<translation id="3756578970075173856">ಪಿನ್ ಹೊಂದಿಸಿ</translation> +<translation id="3756578970075173856">ಪಿನ್ ಸೆಟ್ ಮಾಡಿ</translation> <translation id="3756795331760037744">ಸಹಾಯ ಮಾಡುವುದಕ್ಕಾಗಿ <ph name="SUPERVISED_USER_NAME" /> ಅವರ ಸ್ಕ್ರೀನ್ನಲ್ಲಿರುವ ಮಾಹಿತಿಯನ್ನು ಬಳಸಲು Google Assistant ಗೆ ಅನುಮತಿಸಿ</translation> <translation id="3756806135608816820">ಸೈಟ್ಗಳು ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ಹುಡುಕಲು ಅನುಮತಿಸುವಂತೆ ಕೇಳಬಹುದು</translation> <translation id="3757567010566591880">ಟೂಲ್ಬಾರ್ನಿಂದ ಅನ್ಪಿನ್ ಮಾಡಿ</translation> @@ -4444,7 +4444,6 @@ <translation id="4089235344645910861">ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಸೇವ್ ಮಾಡಲಾಗಿದೆ. ಸಿಂಕ್ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಲಾಗಿದೆ.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">ಪರಿಶೀಲಿಸಿದ ಪ್ರವೇಶವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> -<translation id="4091307190120921067">ಸೆಟಪ್ ಮಾಡಿದ ನಂತರ ಆಯ್ಕೆಮಾಡಿದ ಆ್ಯಪ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗುತ್ತದೆ. ಎಕ್ಸ್ಪ್ಲೋರ್ ಆ್ಯಪ್ನಲ್ಲಿ ನಂತರ ಹೆಚ್ಚಿನ ಶಿಫಾರಸುಗಳನ್ನು ಹುಡುಕಿ.</translation> <translation id="4092709865241032354">ನಿಮ್ಮ ಸೈನ್-ಇನ್ ಮಾಹಿತಿಯನ್ನು ಸೇವ್ ಮಾಡಲು Google Password Manager ಗೆ ಸಹಾಯ ಮಾಡಲು, ಈ ಸೈಟ್ಗೆ ಸಂಬಂಧಿಸಿದ ನಿಮ್ಮ ಬಳಕೆದಾರರ ಹೆಸರನ್ನು ಸೇರಿಸಿ</translation> <translation id="4093865285251893588">ಪ್ರೊಫೈಲ್ ಚಿತ್ರ</translation> <translation id="4093955363990068916">ಸ್ಥಳೀಯ ಫೈಲ್:</translation> @@ -4725,7 +4724,7 @@ <translation id="4300272766492248925">ಆ್ಯಪ್ ತೆರೆಯಿರಿ</translation> <translation id="4301671483919369635">ಫೈಲ್ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಲು ಈ ಪುಟಕ್ಕೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="4301697210743228350">{COUNT,plural, =1{# ಸಂಪರ್ಕ ಲಭ್ಯವಿಲ್ಲ. ಅವರ ಜೊತೆಗೆ <ph name="FEATURE_NAME" /> ಅನ್ನು ಬಳಸಲು, ಅವರ Google ಖಾತೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಇಮೇಲ್ ವಿಳಾಸಗಳನ್ನು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸಿ.}one{# ಸಂಪರ್ಕಗಳು ಲಭ್ಯವಿಲ್ಲ. ಅವರೊಂದಿಗೆ <ph name="FEATURE_NAME" /> ಅನ್ನು ಬಳಸಲು, ಅವರ Google ಖಾತೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಇಮೇಲ್ ವಿಳಾಸಗಳನ್ನು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸಿ.}other{# ಸಂಪರ್ಕಗಳು ಲಭ್ಯವಿಲ್ಲ. ಅವರೊಂದಿಗೆ <ph name="FEATURE_NAME" /> ಅನ್ನು ಬಳಸಲು, ಅವರ Google ಖಾತೆಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಇಮೇಲ್ ವಿಳಾಸಗಳನ್ನು ನಿಮ್ಮ ಸಂಪರ್ಕಗಳಿಗೆ ಸೇರಿಸಿ.}}</translation> -<translation id="4303079906735388947">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀಗಾಗಿ ಹೊಸ ಪಿನ್ ಹೊಂದಿಸಿ</translation> +<translation id="4303079906735388947">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀಗಾಗಿ ಹೊಸ ಪಿನ್ ಸೆಟಪ್ ಮಾಡಿ</translation> <translation id="4304713468139749426">ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕ</translation> <translation id="4305402730127028764"><ph name="DEVICE_NAME" /> ಗೆ ನಕಲಿಸಿ</translation> <translation id="4305817255990598646">ಬದಲಿಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index d4f7561..badfe98 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">설정이 저장되었으며, 동기화가 시작되었습니다.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">인증 액세스 서비스 사용</translation> -<translation id="4091307190120921067">선택한 앱은 설정 후에 설치됩니다. 나중에 탐색 앱에서 더 많은 추천을 찾아보세요</translation> <translation id="4092709865241032354">Google 비밀번호 관리자에서 로그인 정보를 저장하도록 이 사이트의 사용자 이름을 추가하세요.</translation> <translation id="4093865285251893588">프로필 이미지</translation> <translation id="4093955363990068916">로컬 파일:</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index 0d64cb3e..ef1ad5e 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">Параметрлер сакталды. Шайкештирүү башталды.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Текшерилген кирүү мүмкүнчүлүгүн иштетүү</translation> -<translation id="4091307190120921067">Тандалган колдонмолор тууралоо процесси аяктагандан кийин орнотулат. Башка сунуштарды кийинчерээк Мүмкүнчүлүктөр колдонмосунан табууга болот.</translation> <translation id="4092709865241032354">Google Сырсөздөрдү башкаргычка аккаунтка кирүү маалыматыңызды сактоого жардам берүү үчүн бул сайтка колдонуучу атыңызды кошуңуз</translation> <translation id="4093865285251893588">Профиль сүрөтү</translation> <translation id="4093955363990068916">Жергиликтүү файл:</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index ae9126b..118f8672 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -4451,7 +4451,6 @@ <translation id="4089235344645910861">ບັນທຶກການຕັ້ງຄ່າໄວ້ແລ້ວ. ເລີ່ມການຊິ້ງຂໍ້ມູນແລ້ວ.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">ເປີດໃຊ້ງານການເຂົ້າຫາທີ່ກວດສອບແລ້ວ</translation> -<translation id="4091307190120921067">ລະບົບຈະຕິດຕັ້ງແອັບທີ່ເລືອກຫຼັງຈາກການຕັ້ງຄ່າ. ຊອກຫາການແນະນຳເພີ່ມເຕີມໃນພາຍຫຼັງໄດ້ໃນແອັບສຳຫຼວດ.</translation> <translation id="4092709865241032354">ເພື່ອຊ່ວຍຕົວຈັດການລະຫັດຜ່ານ Google ໃຫ້ບັນທຶກຂໍ້ມູນການເຂົ້າສູ່ລະບົບຂອງທ່ານ, ໃຫ້ເພີ່ມຊື່ຜູ້ໃຊ້ຂອງທ່ານສຳລັບເວັບໄຊນີ້ໄວ້</translation> <translation id="4093865285251893588">ຮູບໂປຣໄຟລ໌</translation> <translation id="4093955363990068916">ໄຟລ໌ບັນທຶກກັບທີ່.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index ba7fbac..057bede 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -4455,7 +4455,6 @@ <translation id="4089235344645910861">Nustatymai išsaugoti. Pradėta sinchronizuoti.</translation> <translation id="4089817585533500276">„Shift“ + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Įgalinti patvirtintą prieigą</translation> -<translation id="4091307190120921067">Pasirinktos programos bus įdiegiamos po sąrankos. Daugiau rekomendacijų vėliau rasite programoje „Explore“.</translation> <translation id="4092709865241032354">Kad padėtumėte „Google“ slaptažodžių tvarkyklei išsaugoti prisijungimo informaciją, pridėkite šios svetainės naudotojo vardą</translation> <translation id="4093865285251893588">Profilio nuotrauka</translation> <translation id="4093955363990068916">Vietinis failas:</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 26a0ab6..bdf6bba 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -4439,7 +4439,6 @@ <translation id="4089235344645910861">Iestatījumi saglabāti. Sākta sinhronizācija.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Iespējot verificētu piekļuvi</translation> -<translation id="4091307190120921067">Atlasītās lietotnes tiks instalētas pēc iestatīšanas. Vēlāk varēsiet atrast citus ieteikumus lietotnē Izpēte.</translation> <translation id="4092709865241032354">Lai palīdzētu Google paroļu pārvaldniekā saglabāt pierakstīšanās informāciju, pievienojiet savu lietotājvārdu šajā vietnē.</translation> <translation id="4093865285251893588">Profila attēls</translation> <translation id="4093955363990068916">Lokālais fails:</translation> @@ -9196,7 +9195,7 @@ <translation id="7561196759112975576">Vienmēr</translation> <translation id="7561759921596375678">Ieslēgt skaņu</translation> <translation id="7561982940498449837">Aizvērt izvēlni</translation> -<translation id="7563970324931922582">[placeholder text]</translation> +<translation id="7563970324931922582">[viettura teksts]</translation> <translation id="756445078718366910">Atvērt pārlūkprogrammas logu</translation> <translation id="7564847347806291057">Pārtraukt procesu</translation> <translation id="756503097602602175">Varat pārvaldīt Google kontus, kuros esat pierakstījies, sadaļā <ph name="LINK_BEGIN" />Iestatījumi<ph name="LINK_END" />. Jūsu piešķirtās atļaujas vietnēm un lietotnēm var būt spēkā visos kontos. Ja nevēlaties atļaut vietnēm vai lietotnēm piekļūt jūsu konta informācijai, varat pierakstīties <ph name="DEVICE_TYPE" /> ierīcē kā viesis vai pārlūkot tīmekli <ph name="LINK_2_BEGIN" />inkognito režīma logā<ph name="LINK_2_END" />.</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 055a19a..0c6dfd2 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -4453,7 +4453,6 @@ <translation id="4089235344645910861">Поставките се зачувани. Синхронизацијата започна.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Овозможи потврден пристап</translation> -<translation id="4091307190120921067">Избраните апликации ќе се инсталираат по поставувањето. Најдете повеќе препораки подоцна во апликацијата Explore.</translation> <translation id="4092709865241032354">За да му помогнете на Google Password Manager да ги зачува вашите податоци за најавување, додајте го вашето корисничко име за сајтов</translation> <translation id="4093865285251893588">Профилна слика</translation> <translation id="4093955363990068916">Локална датотека:</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 89a93091..db2cdc9 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -4435,7 +4435,6 @@ <translation id="4089235344645910861">ക്രമീകരണം സംരക്ഷിച്ചു. സമന്വയം ആരംഭിച്ചു.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">പരിശോധിച്ചുറപ്പിച്ച ആക്സസ് പ്രവർത്തനക്ഷമമാക്കുക</translation> -<translation id="4091307190120921067">തിരഞ്ഞെടുത്ത ആപ്പുകൾ സജ്ജീകരണത്തിന് ശേഷം ഇൻസ്റ്റാൾ ചെയ്യും. Explore ആപ്പിൽ പിന്നീട് കൂടുതൽ നിർദ്ദേശങ്ങൾ കണ്ടെത്തുക.</translation> <translation id="4092709865241032354">സൈൻ ഇൻ വിവരങ്ങൾ സംരക്ഷിക്കാൻ, Google Password Manager-നെ സഹായിക്കുന്നതിന്, ഈ സൈറ്റിനായി നിങ്ങളുടെ ഉപയോക്തൃനാമം ചേർക്കുക</translation> <translation id="4093865285251893588">പ്രൊഫൈൽ ചിത്രം</translation> <translation id="4093955363990068916">പ്രാദേശിക ഫയൽ:</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 0899933..24ff6c2a 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -4445,9 +4445,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Баруун талд харуулах</translation> <translation id="4089235344645910861">Тохиргоонуудыг хадгалсан. Синкийг эхлүүлсэн.</translation> +<translation id="4089743381329341712">Тохируулгын дараа сонгосон аппуудыг суулгана. Дараа Апп, тоглоом аппаас илүү олон зөвлөмж олоорой.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Хандалт баталгаажуулалтыг идэвхжүүлэх</translation> -<translation id="4091307190120921067">Тохируулгын дараа сонгосон аппуудыг суулгана. Дараа нь Судлах аппаас илүү их зөвлөмж олоорой.</translation> <translation id="4092709865241032354">Google Password Manager-т таны нэвтрэх мэдээллийг хадгалахад туслахын тулд энэ сайтын хэрэглэгчийн нэрээ нэмнэ үү</translation> <translation id="4093865285251893588">Профайлын зураг</translation> <translation id="4093955363990068916">Суурин файл:</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 4509a07..1adb6d5 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -4449,7 +4449,6 @@ <translation id="4089235344645910861">सेटिंग्ज सेव्ह केल्या. सिंक सुरू केले.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">पडताळणीने दिलेला ॲक्सेस सक्षम करा</translation> -<translation id="4091307190120921067">निवडलेली अॅप्स सेटअपनंतर इंस्टॉल केली जातील. Explore अॅपमध्ये नंतर आणखी शिफारशी शोधा.</translation> <translation id="4092709865241032354">Google Password Manager ला तुमची साइन-इनसंबंधित माहिती सेव्ह करण्यात मदत करण्यासाठी, या साइटवर तुमचे वापरकर्ता नाव जोडा</translation> <translation id="4093865285251893588">प्रोफाइल फोटो</translation> <translation id="4093955363990068916">स्थानिक फाईल:</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 0e236a3..ce0aba4 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">Tetapan disimpan. Penyegerakan bermula.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Dayakan Akses Disahkan</translation> -<translation id="4091307190120921067">Apl yang dipilih akan dipasang selepas persediaan. Temukan lebih banyak syor dalam apl Teroka kemudian.</translation> <translation id="4092709865241032354">Untuk membantu Google Password Manager menyimpan maklumat log masuk anda, tambahkan nama pengguna anda untuk laman ini</translation> <translation id="4093865285251893588">Imej profil</translation> <translation id="4093955363990068916">Fail setempat:</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index 02759b3..48ff2ff 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -4450,7 +4450,6 @@ <translation id="4089235344645910861">ဆက်တင်များကို သိမ်းပြီး၍ စင့်ခ်လုပ်ခြင်းကို စတင်ထားပါသည်။</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">စိစစ်ပြီး ရယူမှုကို ဖွင့်ပေးရန်</translation> -<translation id="4091307190120921067">စနစ်ထည့်သွင်းပြီးနောက် ရွေးထားသော အက်ပ်များကို ထည့်သွင်းပါမည်။ နောက်ထပ်အကြံပြုချက်များကို ‘စူးစမ်းလေ့လာခြင်း’ အက်ပ်တွင် နောက်မှရှာနိုင်သည်။</translation> <translation id="4092709865241032354">သင်၏လက်မှတ်ထိုးဝင်သည့် အချက်အလက်ကို Google Password Manager ကသိမ်းပေးနိုင်ရန် ဤဝဘ်ဆိုက်အတွက် သင့်အသုံးပြုသူအမည် ထည့်ပါ</translation> <translation id="4093865285251893588">ပရိုဖိုင်ပုံ</translation> <translation id="4093955363990068916">ဒေသန္တရ ဖိုင်:</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index ad7ecaa..5b93eef 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -3134,7 +3134,7 @@ <translation id="3188257591659621405">मेरा फाइलहरू</translation> <translation id="3188465121994729530">औसत चलायमान</translation> <translation id="3189187154924005138">ठुलो कर्सर</translation> -<translation id="3189533916970342007">{PASSWORD_COUNT,plural, =1{एउटा पासवर्ड र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{PASSWORD_COUNT} वटा पासवर्ड र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> +<translation id="3189533916970342007">{PASSWORD_COUNT,plural, =1{एउटा पासवर्ड र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यो पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यसलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{PASSWORD_COUNT} वटा पासवर्ड र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> <translation id="3190558889382726167">पासवर्ड सेभ गरियो</translation> <translation id="3192586965067888278">यो समस्या विस्तृत रूपमा वर्णन गर्नुहोस्। प्रतिक्रिया मानव समीक्षा गर्ने प्रयोजनका लागि Google मा पठाइने छ र Google का उत्पादन र सेवाहरूको गुणस्तर सुधार वा विकास गर्न यसको प्रयोग गर्न सकिन्छ।</translation> <translation id="3192947282887913208">अडियो फाइलहरू</translation> @@ -4434,7 +4434,6 @@ <translation id="4089235344645910861">सेटिङहरू सेभ गरियो। सिंक सुरु भयो।</translation> <translation id="4089817585533500276">सिफ्ट + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">रुजू गरिएको पहुँच सक्षम बनाउनुहोस्</translation> -<translation id="4091307190120921067">सेटअप गर्ने कार्य पूरा भएपछि चयन गरिएका एपहरू इन्स्टल गरिने छन्। पछि एक्स्प्लोर एपमा गई थप सिफारिसहरू हेर्नुहोस्।</translation> <translation id="4092709865241032354">Google पासवर्ड म्यानेजरलाई साइन इनसम्बन्धी जानकारी सेभ गर्न दिन यो साइटको युजरनेम हाल्नुहोस्</translation> <translation id="4093865285251893588">प्रोफाइल फोटो</translation> <translation id="4093955363990068916">स्थानीय फाइल:</translation> @@ -4792,7 +4791,7 @@ <translation id="4361745360460842907">ट्याबको रूपमा खोल्नुहोस्</translation> <translation id="4363262124589131906">"मेरो ड्राइभ" मा भएका नयाँ फाइलहरू यो Chromebook मा स्वतः सिंक हुन छाड्ने छन्</translation> <translation id="4364327530094270451">खरबुजो</translation> -<translation id="4364417397164696363">{ITEM_COUNT,plural, =1{एउटा सामग्री यो डिभाइसमा मात्र सेभ गरिएको छ। यो पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यसलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{ITEM_COUNT} वटा सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> +<translation id="4364417397164696363">{ITEM_COUNT,plural, =1{एउटा सामग्री यो डिभाइसमा मात्र सेभ गरिएको छ। यो सामग्री आफ्ना अन्य डिभाइसमा प्रयोग गर्न यसलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{ITEM_COUNT} वटा सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी सामग्री आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> <translation id="4364567974334641491"><ph name="APP_NAME" /> एउटा विन्डोलाई साझेदारी गर्दैछ</translation> <translation id="4364830672918311045">सूचनाहरू देखाउनुहोस्</translation> <translation id="4367971618859387374">देखाइने नाम</translation> @@ -8731,7 +8730,7 @@ <translation id="7231260028442989757">आफ्नो फोनमा प्राप्त भएका सूचनाहरू हेर्नुहोस् र हटाउनुहोस्। साथै, ती सूचनाको जवाफ पठाउनुहोस्</translation> <translation id="7231347196745816203">आफ्नो <ph name="DEVICE_TYPE" /> अनलक गर्न आफ्नो फोन प्रयोग गर्नुहोस्।</translation> <translation id="7232750842195536390">पुनः नामकरण गर्न सकिएन</translation> -<translation id="7232962679391151113">{BOOKMARK_COUNT,plural, =1{एउटा बुकमार्क र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{BOOKMARK_COUNT} वटा बुकमार्कहरू र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> +<translation id="7232962679391151113">{BOOKMARK_COUNT,plural, =1{एउटा बुकमार्क र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यो बुकमार्क आफ्ना अन्य डिभाइसमा प्रयोग गर्न यसलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{BOOKMARK_COUNT} वटा बुकमार्कहरू र अन्य सामग्री यो डिभाइसमा मात्र सेभ गरिएका छन्। यी बुकमार्क आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> <translation id="723343421145275488"><ph name="VISUAL_SEARCH_PROVIDER" /> मार्फत फोटोहरू खोज्नुहोस्</translation> <translation id="7234010996000898150">Linux को पुनर्स्थापना रद्द गरिँदै</translation> <translation id="7235305658956131898">तपाईंको डिभाइसका एड्मिनले इन्स्टल गरेको Android एप।</translation> @@ -8858,7 +8857,7 @@ <translation id="7327989755579928735"><ph name="MANAGER" /> ले ADB डिबग प्रक्रिया अफ गर्नुभएको छ। तपाईंले आफ्नो <ph name="DEVICE_TYPE" /> रिस्टार्ट गरेपछि तपाईं एपहरू प्ले स्टोर बाहेकका श्रोतबाट इन्स्टल सक्नु हुने छैन।</translation> <translation id="7328119182036084494"><ph name="WEB_DRIVE" /> मा सेभ गरियो</translation> <translation id="7328162502911382168">(<ph name="COUNT" />)</translation> -<translation id="732845903678043302">{BOOKMARK_COUNT,plural, =1{एउटा बुकमार्क यो डिभाइसमा मात्र सेभ गरिएको छ। यो पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यसलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{BOOKMARK_COUNT} वटा बुकमार्क यो डिभाइसमा मात्र सेभ गरिएका छन्। यी पासवर्ड आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> +<translation id="732845903678043302">{BOOKMARK_COUNT,plural, =1{एउटा बुकमार्क यो डिभाइसमा मात्र सेभ गरिएको छ। यो बुकमार्क आफ्ना अन्य डिभाइसमा प्रयोग गर्न यसलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}other{{BOOKMARK_COUNT} वटा बुकमार्क यो डिभाइसमा मात्र सेभ गरिएका छन्। यी बुकमार्क आफ्ना अन्य डिभाइसमा प्रयोग गर्न यिनलाई आफ्नो Google खातामा सेभ गर्नुहोस्।}}</translation> <translation id="7328867076235380839">अमान्य संयोजन</translation> <translation id="7329154610228416156">साइन इन विफल भयो किनभने यसलाई एउटा गैर-सुरक्षित URL (<ph name="BLOCKED_URL" />) सँग कन्फिगर गरिएको थियो। कृपया तपाईँको प्रशासकसँग सम्पर्क गर्नुहोस्।</translation> <translation id="7330533963640151632"><ph name="USER_NAME" /> को डिभाइसमा <ph name="USER_EMAIL" /> खाता प्रयोग गरी सेयर गरिएका <ph name="FEATURE_NAME" /> का सेटिङ।</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index b3d4df2..d5f83f7 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -4437,7 +4437,6 @@ <translation id="4089235344645910861">Instellingen opgeslagen. Synchronisatie gestart.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Verified Access aanzetten</translation> -<translation id="4091307190120921067">De geselecteerde apps worden geïnstalleerd na het instellen. Je kunt later meer aanbevelingen vinden in de app Ontdekken.</translation> <translation id="4092709865241032354">Voeg je gebruikersnaam voor deze site toe, zodat Google Wachtwoordmanager je inloggegevens kan opslaan</translation> <translation id="4093865285251893588">Profielafbeelding</translation> <translation id="4093955363990068916">Lokaal bestand:</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 7cea8ce..8e717dd 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -4442,9 +4442,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Vis til høyre</translation> <translation id="4089235344645910861">Innstillingene er lagret. Synkronisering er startet.</translation> +<translation id="4089743381329341712">De valgte appene installeres etter konfigureringen. Du kan finne flere anbefalinger senere i appen Apper og spill.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Slå på Bekreftet tilgang</translation> -<translation id="4091307190120921067">De valgte appene installeres etter konfigureringen. Du kan finne flere anbefalinger senere i Utforsk-appen.</translation> <translation id="4092709865241032354">For å hjelpe Google Passordlagring med å lagre påloggingsinformasjonen din, legg til brukernavnet ditt for dette nettstedet</translation> <translation id="4093865285251893588">Profilbilde</translation> <translation id="4093955363990068916">Lokal fil:</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index 4c4a2d2..5cc0c8c 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -4434,9 +4434,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">ଡାହାଣ ପଟରେ ଦେଖାନ୍ତୁ</translation> <translation id="4089235344645910861">ସେଟିଂସ୍ ସେଭ୍ ହୋଇଛି। ସିଙ୍କ୍ ଆରମ୍ଭ ହୋଇଛି।</translation> +<translation id="4089743381329341712">ସେଟଅପ କରିବା ପରେ ଚୟନିତ ଆପ୍ସକୁ ଇନଷ୍ଟଲ କରାଯିବ। ପରେ Apps & Games ଆପରେ ଅଧିକ ସୁପାରିଶ ଖୋଜନ୍ତୁ।</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">ଯାଞ୍ଚ ହୋଇଥିବା ଆକ୍ସେସ୍ ସକ୍ଷମ କରନ୍ତୁ</translation> -<translation id="4091307190120921067">ସେଟଅପ କରିବା ପରେ ଚୟନିତ ଆପ୍ସକୁ ଇନଷ୍ଟଲ କରାଯିବ। ପରେ Explore ଆପରେ ଅଧିକ ସୁପାରିଶ ଖୋଜନ୍ତୁ।</translation> <translation id="4092709865241032354">Google Password Managerକୁ ଆପଣଙ୍କ ସାଇନ-ଇନ ସୂଚନା ସେଭ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ ଏହି ସାଇଟ ପାଇଁ ଆପଣଙ୍କ ୟୁଜରନେମ ଯୋଗ କରନ୍ତୁ</translation> <translation id="4093865285251893588">ପ୍ରୋଫାଇଲ୍ ଛବି</translation> <translation id="4093955363990068916">ସ୍ଥାନୀୟ ଫାଇଲ୍:</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index b3283a2..3634d8a5 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -4452,9 +4452,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">ਸੱਜੇ ਪਾਸੇ ਦਿਖਾਓ</translation> <translation id="4089235344645910861">ਸੈਟਿੰਗਾਂ ਰੱਖਿਅਤ ਕੀਤੀਆਂ ਗਈਆਂ। ਸਿੰਕ ਸ਼ੁਰੂ ਹੋਇਆ।</translation> +<translation id="4089743381329341712">ਸੈੱਟਅੱਪ ਪੂਰਾ ਹੋਣ ਤੋਂ ਬਾਅਦ ਚੁਣੀਆਂ ਗਈਆਂ ਐਪਾਂ ਸਥਾਪਤ ਹੋ ਜਾਣਗੀਆਂ। Apps & Games ਐਪ ਵਿੱਚ ਬਾਅਦ ਵਿੱਚ ਹੋਰ ਸਿਫ਼ਾਰਸ਼ਾਂ ਪਾਓ।</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">ਤਸਦੀਕਸ਼ੁਦਾ ਪਹੁੰਚ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> -<translation id="4091307190120921067">ਸੈੱਟਅੱਪ ਪੂਰਾ ਹੋਣ ਤੋਂ ਬਾਅਦ ਚੁਣੀਆਂ ਗਈਆਂ ਐਪਾਂ ਸਥਾਪਤ ਹੋ ਜਾਣਗੀਆਂ। Explore ਐਪ ਵਿੱਚ ਬਾਅਦ ਵਿੱਚ ਹੋਰ ਸਿਫ਼ਾਰਸ਼ਾਂ ਦੇਖੋ।</translation> <translation id="4092709865241032354">ਤੁਹਾਡੀ ਸਾਈਨ-ਇਨ ਜਾਣਕਾਰੀ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨ ਵਿੱਚ Google Password Manager ਦੀ ਮਦਦ ਕਰਨ ਲਈ, ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਆਪਣਾ ਵਰਤੋਂਕਾਰ ਨਾਮ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="4093865285251893588">ਪ੍ਰੋਫਾਈਲ ਚਿੱਤਰ</translation> <translation id="4093955363990068916">ਸਥਾਨਕ ਫਾਈਲ:</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 5842088a..a4f9a840 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -4423,7 +4423,6 @@ <translation id="4089235344645910861">Ustawienia zapisane. Synchronizacja rozpoczęta.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Włącz weryfikację dostępu</translation> -<translation id="4091307190120921067">Wybrane aplikacje zostaną zainstalowane po zakończeniu konfiguracji. Więcej rekomendacji znajdziesz później w aplikacji Odkrywaj.</translation> <translation id="4092709865241032354">Aby pomóc Menedżerowi haseł Google zapisać dane logowania, dodaj nazwę użytkownika dla tej strony</translation> <translation id="4093865285251893588">Zdjęcie profilowe</translation> <translation id="4093955363990068916">Plik lokalny:</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 4ce4231..1b65b52 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -4453,7 +4453,6 @@ <translation id="4089235344645910861">Configurações salvas. Sincronização iniciada.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Ativar o acesso verificado</translation> -<translation id="4091307190120921067">Os apps selecionados serão instalados depois da configuração. Encontre mais recomendações no app Explorar.</translation> <translation id="4092709865241032354">Para ajudar o Gerenciador de senhas do Google a salvar suas informações de login, adicione seu nome de usuário desse site</translation> <translation id="4093865285251893588">Imagem do perfil</translation> <translation id="4093955363990068916">Arquivo local:</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 976631c..056863c 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -4438,9 +4438,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Mostrar à direita</translation> <translation id="4089235344645910861">Definições guardadas. A sincronização foi iniciada.</translation> +<translation id="4089743381329341712">As apps selecionadas são instaladas após a configuração. Encontre mais recomendações posteriormente na app Apps e jogos.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Ativar acesso confirmado</translation> -<translation id="4091307190120921067">As apps selecionadas são instaladas após a configuração. Encontre mais recomendações posteriormente na app Explore.</translation> <translation id="4092709865241032354">Para ajudar o Gestor de Palavras-passe da Google a guardar as suas informações de início de sessão, adicione o seu nome de utilizador para este site</translation> <translation id="4093865285251893588">Imagem do perfil</translation> <translation id="4093955363990068916">Ficheiro local:</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 54b3797..11a3a0b 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -4439,7 +4439,6 @@ <translation id="4089235344645910861">Setările au fost salvate. Sincronizarea a început.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Activați Acces verificat</translation> -<translation id="4091307190120921067">Aplicațiile selectate vor fi instalate după configurare. Găsește mai multe recomandări mai târziu în aplicația Explorare.</translation> <translation id="4092709865241032354">Pentru a ajuta Managerul de parole Google să-ți salveze informațiile de conectare, adaugă numele de utilizator pentru acest site</translation> <translation id="4093865285251893588">Imagine de profil</translation> <translation id="4093955363990068916">Fișier local:</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index f73c3a0..ce4beca 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -4441,7 +4441,6 @@ <translation id="4089235344645910861">Настройки сохранены. Синхронизация началась.</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Включить службу проверенного доступа</translation> -<translation id="4091307190120921067">Выбранные приложения будут установлены после завершения настройки. Ещё больше рекомендаций можно будет найти позже в приложении "Возможности".</translation> <translation id="4092709865241032354">Укажите имя пользователя для этого сайта, чтобы данные для входа были полностью сохранены в Google Менеджере паролей.</translation> <translation id="4093865285251893588">Изображение профиля</translation> <translation id="4093955363990068916">Локальный файл:</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 76851c1..89d3fea 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -4440,7 +4440,6 @@ <translation id="4089235344645910861">සැකසීම් සුරකින ලදී. සමමුහුර්ත කිරීම ආරම්භ විය.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">තහවුරුකළ පිවිසුම සක්රීය කරන්න</translation> -<translation id="4091307190120921067">සැකසීමෙන් පසු තෝරන ලද යෙදුම් ස්ථාපන කරනු ලැබේ. පසුව Explore යෙදුම තුළ තව නිර්දේශ සොයා ගන්න.</translation> <translation id="4092709865241032354">Google මුරපද කළමනාකරුට ඔබේ පුරනය වීමේ තතු සුරැකීමට උදවු කිරීම සඳහා, මෙම අඩවිය සඳහා ඔබේ පරිශීලක නාමය එක් කරන්න</translation> <translation id="4093865285251893588">පැතිකඩ රූපය</translation> <translation id="4093955363990068916">දේශීය ගොනුව:</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 63b5e7e..9bf1d2d 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -4441,7 +4441,6 @@ <translation id="4089235344645910861">Nastavenia boli uložené. Synchronizácia sa začala.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Povolí overený prístup</translation> -<translation id="4091307190120921067">Vybrané aplikácie budú nainštalované po nastavení. Ďalšie odporúčania nájdete neskôr v aplikácii Preskúmať.</translation> <translation id="4092709865241032354">Ak chcete pomôcť Správcovi hesiel Google ukladať vaše prihlasovacie údaje, pridajte si používateľské meno pre tento web</translation> <translation id="4093865285251893588">Profilový obrázok</translation> <translation id="4093955363990068916">Miestny súbor:</translation> @@ -9199,7 +9198,7 @@ <translation id="7561196759112975576">Vždy</translation> <translation id="7561759921596375678">Zapnutie zvuku</translation> <translation id="7561982940498449837">Zavrieť ponuku</translation> -<translation id="7563970324931922582">[text zástupného symbolu]</translation> +<translation id="7563970324931922582">[zástupný text]</translation> <translation id="756445078718366910">Otvoriť okno prehliadača</translation> <translation id="7564847347806291057">Ukončiť proces</translation> <translation id="756503097602602175">Účty Google prihlásených používateľov môžete spravovať v <ph name="LINK_BEGIN" />Nastaveniach<ph name="LINK_END" />. Povolenia, ktoré ste udelili webom a aplikáciám, môžu platiť pre všetky účty. Ak nechcete, aby mali weby či aplikácie prístup k informáciám o vašom účte, môžete sa v zariadení <ph name="DEVICE_TYPE" /> prihlásiť ako hosť alebo prehliadať internet v <ph name="LINK_2_BEGIN" />okne inkognito<ph name="LINK_2_END" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 6c184068..aac3762 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -4455,7 +4455,6 @@ <translation id="4089235344645910861">Nastavitve so bile shranjene. Sinhronizacija se je začela.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Omogočanje preverjenega dostopa</translation> -<translation id="4091307190120921067">Izbrane aplikacije bodo nameščene po nastavitvi. Več priporočil lahko pozneje poiščete v aplikaciji Raziskovanje.</translation> <translation id="4092709865241032354">Če želite Googlovemu upravitelju gesel pomagati shraniti podatke za prijavo, dodajte uporabniško ime za to spletno mesto</translation> <translation id="4093865285251893588">Slika profila</translation> <translation id="4093955363990068916">Lokalna datoteka:</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 1a8f2c5..5bc05c1 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -4435,7 +4435,6 @@ <translation id="4089235344645910861">Cilësimet u ruajtën. Sinkronizimi filloi.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Aktivizo qasjen e verifikuar</translation> -<translation id="4091307190120921067">Aplikacionet e zgjedhura do të instalohen pas konfigurimit. Gjej më shumë rekomandime më vonë në aplikacionin "Eksploro".</translation> <translation id="4092709865241032354">Për të ndihmuar që "Menaxheri i fjalëkalimeve i Google" të ruajë informacionet e tua të identifikimit, shto emrin tënd të përdoruesit për këtë sajt</translation> <translation id="4093865285251893588">Imazhi i profilit</translation> <translation id="4093955363990068916">Skedari lokal:</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 4ddb16b..47aa5ff 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -3719,7 +3719,7 @@ <translation id="3617891479562106823">Pozadine nisu dostupne. Probajte ponovo kasnije.</translation> <translation id="3618286417582819036">Žao nam je, došlo je do greške</translation> <translation id="3618647122592024084"><ph name="RECIPIENT_NAME" /> sada može da koristi vaše korisničko ime i lozinku kada koristi Google menadžer lozinki. Recite ovom članu porodice da poseti <ph name="WEBSITE" /> da bi se prijavio.</translation> -<translation id="3619115746895587757">Kapučino</translation> +<translation id="3619115746895587757">Kapućino</translation> <translation id="3619294456800709762">Sajtovi mogu automatski da uđu u sliku u slici</translation> <translation id="3620136223548713675">Geolociranje</translation> <translation id="3621202678540785336">Ulaz</translation> @@ -4437,7 +4437,6 @@ <translation id="4089235344645910861">Podešavanja su sačuvana. Sinhronizacija je počela.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Omogućite verifikovani pristup</translation> -<translation id="4091307190120921067">Izabrane aplikacije će biti instalirane posle podešavanja. Pronađite više preporuka kasnije u aplikaciji Istražite.</translation> <translation id="4092709865241032354">Da biste pomogli Google menadžeru lozinki da čuva informacije o prijavljivanju, dodajte korisničko ime za ovaj sajt</translation> <translation id="4093865285251893588">Slika profila</translation> <translation id="4093955363990068916">Lokalna datoteka:</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 0d2058f..2a58e29 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -3719,7 +3719,7 @@ <translation id="3617891479562106823">Позадине нису доступне. Пробајте поново касније.</translation> <translation id="3618286417582819036">Жао нам је, дошло је до грешке</translation> <translation id="3618647122592024084"><ph name="RECIPIENT_NAME" /> сада може да користи ваше корисничко име и лозинку када користи Google менаџер лозинки. Реците овом члану породице да посети <ph name="WEBSITE" /> да би се пријавио.</translation> -<translation id="3619115746895587757">Капучино</translation> +<translation id="3619115746895587757">Капућино</translation> <translation id="3619294456800709762">Сајтови могу аутоматски да уђу у слику у слици</translation> <translation id="3620136223548713675">Геолоцирање</translation> <translation id="3621202678540785336">Улаз</translation> @@ -4437,7 +4437,6 @@ <translation id="4089235344645910861">Подешавања су сачувана. Синхронизација је почела.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Омогућите верификовани приступ</translation> -<translation id="4091307190120921067">Изабране апликације ће бити инсталиране после подешавања. Пронађите више препорука касније у апликацији Истражите.</translation> <translation id="4092709865241032354">Да бисте помогли Google менаџеру лозинки да чува информације о пријављивању, додајте корисничко име за овај сајт</translation> <translation id="4093865285251893588">Слика профила</translation> <translation id="4093955363990068916">Локална датотека:</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 47d7f6a5..256f81a 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">Inställningarna har sparats och synkroniseringen startats.</translation> <translation id="4089817585533500276">skift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Aktivera verifierad åtkomst</translation> -<translation id="4091307190120921067">Valda appar kommer att installeras efter konfigureringen. Hitta fler rekommendationer senare i appen Utforska.</translation> <translation id="4092709865241032354">Hjälp Google Lösenordshantering att spara dina inloggningsuppgifter genom att lägga till ditt användarnamn för den här webbplatsen</translation> <translation id="4093865285251893588">Profilbild</translation> <translation id="4093955363990068916">Lokal fil:</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index b4c1a6a..872ecac 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -4447,7 +4447,6 @@ <translation id="4089235344645910861">Mipangilio imehifadhiwa. Imeanza kusawazisha.</translation> <translation id="4089817585533500276">kitufe cha "shift" pamoja na <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Washa Ufikiaji Uliothibitishwa</translation> -<translation id="4091307190120921067">Programu ulizochagua zitawekwa kwenye kifaa baada ya kuweka mipangilio. Pata mapendekezo zaidi baadaye kwenye programu ya Gundua.</translation> <translation id="4092709865241032354">Ili kusaidia Kidhibiti cha Manenosiri cha Google kuhifadhi maelezo yako ya kuingia katika akaunti, weka jina lako la mtumiaji la tovuti hii</translation> <translation id="4093865285251893588">Picha ya wasifu</translation> <translation id="4093955363990068916">Faili ya ndani:</translation> @@ -4612,7 +4611,7 @@ <translation id="4220648711404560261">Hitilafu imetokea wakati wa kuwasha mipangilio.</translation> <translation id="4222917615373664617">Umewasha kipengele cha ufuatiliaji bei Bei ni <ph name="CURRENT_PRICE" />.</translation> <translation id="4223404254440398437">Ufikiaji wa maikrofoni hauruhusiwi</translation> -<translation id="4224541845943007092">Soma na uhifadhi ingizo la kibodi kwenye sehemu ya anwani</translation> +<translation id="4224541845943007092">Soma na uhifadhi maingizo ya kibodi kwenye sehemu ya anwani</translation> <translation id="4225397296022057997">Kwenye tovuti zote</translation> <translation id="4228071595943929139">Tumia anwani ya barua pepe ya shirika lako</translation> <translation id="4228209296591583948">{NUM_EXTENSIONS,plural, =1{Kiendelezi hiki hakiruhusiwi}other{Baadhi ya viendelezi haviruhusiwi}}</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 307b4061..6c0ebd54 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">அமைப்புகள் சேமிக்கப்பட்டன. ஒத்திசைவு தொடங்கியது.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">சரிபார்க்கப்பட்ட அணுகலை இயக்கு</translation> -<translation id="4091307190120921067">தேர்ந்தெடுக்கப்பட்ட ஆப்ஸ் அமைவிற்குப் பிறகு நிறுவப்படும். Explore ஆப்ஸில் இன்னும் பல பரிந்துரைகளைப் பார்க்கலாம்.</translation> <translation id="4092709865241032354">உங்கள் உள்நுழைவுத் தகவலை Google Password Manager சேமிக்க உதவும் வகையில் இந்தத் தளத்திற்கான உங்கள் பயனர்பெயரைச் சேர்க்கவும்</translation> <translation id="4093865285251893588">சுயவிவரப் படம்</translation> <translation id="4093955363990068916">அக ஃபைல்:</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 0856b2c..42a6f6a6 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -4450,7 +4450,6 @@ <translation id="4089235344645910861">సెట్టింగ్ సేవ్ చేయబడింది. సింక్ ప్రారంభించబడింది.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">ధృవీకృత యాక్సెస్ను ప్రారంభించండి</translation> -<translation id="4091307190120921067">సెటప్ చేసిన తర్వాత ఎంచుకున్న యాప్లు ఇన్స్టాల్ చేయబడతాయి. Explore యాప్లో తర్వాత మరిన్ని సిఫార్సులను కనుగొనండి.</translation> <translation id="4092709865241032354">మీ సైన్-ఇన్ సమాచారాన్ని సేవ్ చేయడంలో Google Password Managerకు సహాయపడటం కోసం, ఈ సైట్లో మీ యూజర్నేమ్ను జోడించండి</translation> <translation id="4093865285251893588">ప్రొఫైల్ ఇమేజ్</translation> <translation id="4093955363990068916">స్థానిక ఫైల్:</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index df10bac..d3954123 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -4435,9 +4435,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">แสดงทางด้านขวา</translation> <translation id="4089235344645910861">บันทึกการตั้งค่าและเริ่มซิงค์แล้ว</translation> +<translation id="4089743381329341712">แอปที่เลือกไว้จะติดตั้งหลังจากการตั้งค่า ดูคำแนะนำเพิ่มเติมได้ภายหลังในแอป "แอปและเกม"</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">เปิดใช้การเข้าถึงที่ได้รับการยืนยัน</translation> -<translation id="4091307190120921067">แอปที่เลือกไว้จะติดตั้งหลังจากการตั้งค่า ดูคำแนะนำเพิ่มเติมได้ในภายหลังในแอปสํารวจ</translation> <translation id="4092709865241032354">เพิ่มชื่อผู้ใช้สำหรับเว็บไซต์นี้เพื่อช่วยเครื่องมือจัดการรหัสผ่านบน Google บันทึกข้อมูลการลงชื่อเข้าใช้</translation> <translation id="4093865285251893588">รูปโปรไฟล์</translation> <translation id="4093955363990068916">ไฟล์ในเครื่อง:</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 1c6cac5..68dd2cc 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -4435,7 +4435,6 @@ <translation id="4089235344645910861">Ayarlar kaydedildi. Senkronizasyon başladı.</translation> <translation id="4089817585533500276">üst karakter + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Doğrulanmış Erişimi Etkinleştir</translation> -<translation id="4091307190120921067">Seçilen uygulamalar kurulumdan sonra yüklenir. Daha sonra Keşfet uygulamasında daha fazla öneri görebilirsiniz.</translation> <translation id="4092709865241032354">Google Şifre Yöneticisi'nin oturum açma bilgilerinizi kaydetmesini sağlamak için bu sitedeki kullanıcı adınızı ekleyin</translation> <translation id="4093865285251893588">Profil resmi</translation> <translation id="4093955363990068916">Yerel dosya:</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 3f3e1120..12b071d 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -4455,7 +4455,6 @@ <translation id="4089235344645910861">Налаштування збережено. Почато синхронізацію.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Увімкнути перевірений доступ</translation> -<translation id="4091307190120921067">Вибрані додатки буде встановлено після налаштування. Інші рекомендації можна переглянути пізніше в додатку Можливості.</translation> <translation id="4092709865241032354">Щоб зберегти ваші дані для входу в Google Менеджері паролів, додайте ім’я користувача для цього сайту</translation> <translation id="4093865285251893588">Зображення профілю</translation> <translation id="4093955363990068916">Локальний файл:</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 2344612..7257f0e 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -4439,7 +4439,6 @@ <translation id="4089235344645910861">ترتیبات محفوظ ہو گئیں۔ مطابقت پذیری شروع ہو گئی۔</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">توثیق شدہ رسائی فعال کریں</translation> -<translation id="4091307190120921067">منتخب کردہ ایپس سیٹ اپ کے بعد انسٹال ہوں گی۔ بعد میں Explore ایپ میں مزید تجاویز دیکھیں۔</translation> <translation id="4092709865241032354">Google پاس ورڈ مینیجر کو اپنے سائن ان کی معلومات محفوظ کرنے میں مدد کرنے کی خاطر، اس سائٹ کے لیے اپنا صارف نام شامل کریں</translation> <translation id="4093865285251893588">پروفائل تصویر</translation> <translation id="4093955363990068916">مقامی فائل:</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 778ecdb..a7e18fce8 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -4437,9 +4437,9 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="4087328411748538168">Oʻngda chiqarish</translation> <translation id="4089235344645910861">Sozlamalar saqlandi. Sinxronizatsiya boshlandi.</translation> +<translation id="4089743381329341712">Tanlangan ilovalar sozlashdan keyin oʻrnatiladi. Boshqa tavsiyalar keyinroq Ilovalar va oʻyinlar ilovasida chiqadi.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Tekshirilgan ruxsat xizmatini yoqish</translation> -<translation id="4091307190120921067">Tanlangan ilovalar sozlashdan keyin oʻrnatiladi. Boshqa tavsiyalarni keyinroq Tanishuv ilovasida topish mumkin.</translation> <translation id="4092709865241032354">Google Parollar menejeriga kirish maʼlumotlaringizni saqlashga yordam berish uchun ushbu sayt uchun foydalanuvchi nomini kiriting</translation> <translation id="4093865285251893588">Profil rasmi</translation> <translation id="4093955363990068916">Lokal fayl:</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 47cac886..c53d1d1 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">Đã lưu chế độ cài đặt. Đã bắt đầu đồng bộ hóa.</translation> <translation id="4089817585533500276">shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Bật quyền truy cập đã xác minh</translation> -<translation id="4091307190120921067">Các ứng dụng đã chọn sẽ được cài đặt sau quá trình thiết lập. Bạn có thể xem thêm đề xuất trong ứng dụng Khám phá vào lúc khác.</translation> <translation id="4092709865241032354">Để giúp Trình quản lý mật khẩu của Google lưu thông tin đăng nhập của bạn, hãy thêm tên người dùng cho trang web này</translation> <translation id="4093865285251893588">Ảnh hồ sơ</translation> <translation id="4093955363990068916">Tệp cục bộ:</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 65f9140..1ac9acb 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -4428,7 +4428,6 @@ <translation id="4089235344645910861">设置已保存。已开始同步。</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">允许已通过验证的访问凭证</translation> -<translation id="4091307190120921067">所选应用将在设置完毕后安装。您稍后可以在“探索”应用中找到更多推荐内容。</translation> <translation id="4092709865241032354">请添加您在此网站上使用的用户名,以便 Google 密码管理工具保存您的登录信息</translation> <translation id="4093865285251893588">个人资料图片</translation> <translation id="4093955363990068916">本地文件:</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 8ccb74e..5a5157a 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -4444,7 +4444,6 @@ <translation id="4089235344645910861">設定已儲存。已開始同步。</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /> 鍵</translation> <translation id="4090103403438682346">啟用已驗證存取權</translation> -<translation id="4091307190120921067">選取的應用程式將會在設定後安裝。你可於稍後在「探索」應用程式中找到更多建議。</translation> <translation id="4092709865241032354">請新增你在此網站的使用者名稱,「Google 密碼管理工具」才能儲存登入資料</translation> <translation id="4093865285251893588">個人檔案圖片</translation> <translation id="4093955363990068916">本機檔案:</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 4b7d3b52..2b491658 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -4435,7 +4435,6 @@ <translation id="4089235344645910861">設定儲存完畢,已開始同步處理。</translation> <translation id="4089817585533500276">Shift + <ph name="TOP_ROW_KEY" /> 鍵</translation> <translation id="4090103403438682346">啟用已驗證存取權</translation> -<translation id="4091307190120921067">系統會在完成設定後安裝所選應用程式,你之後可以在「探索」應用程式中查看更多推薦內容。</translation> <translation id="4092709865241032354">請新增你在這個網站的使用者名稱,Google 密碼管理工具才能儲存登入資訊</translation> <translation id="4093865285251893588">個人資料圖片</translation> <translation id="4093955363990068916">本機檔案:</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index aede755..6299ca9 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -4452,7 +4452,6 @@ <translation id="4089235344645910861">Izilungiselelo zilondoloziwe. Ukuvumelanisa kuqalisiwe.</translation> <translation id="4089817585533500276">u-shift + <ph name="TOP_ROW_KEY" /></translation> <translation id="4090103403438682346">Nika amandla ukufinyelela okuqinisekisiwe</translation> -<translation id="4091307190120921067">Ama-app akhethiwe azofakwa ngemva kokusetha. Thola okunconywayo okwengeziwe kamuva ku-app ye-Explore.</translation> <translation id="4092709865241032354">Ukuze usize Umphathi Wephasiwedi ye-Google, londoloza imininingwane yakho yokungena ngemvume, yengeza igama lakho lomsebenzisi kule sayithi</translation> <translation id="4093865285251893588">Isithombe sephrofayela</translation> <translation id="4093955363990068916">Ifayela lasendaweni:</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr-CA.xtb b/chrome/app/resources/google_chrome_strings_fr-CA.xtb index 77a5037..8e4ce49 100644 --- a/chrome/app/resources/google_chrome_strings_fr-CA.xtb +++ b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
@@ -244,6 +244,7 @@ <translation id="3889417619312448367">Désinstaller Google Chrome</translation> <translation id="3892148308691398805">Copier le texte</translation> <translation id="3941890832296813527">Erreur d'installation : le nom du fichier du programme d'installation n'est pas valide ou n'est pas pris en charge.</translation> +<translation id="3968962723676998462">Entrez votre phrase de passe pour utiliser et enregistrer les données Chrome dans votre compte, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="3973161977468201858">Google Chrome souhaite supprimer vos données du gestionnaire de mots de passe Google. Tapez votre mot de passe Windows pour autoriser la suppression.</translation> <translation id="398236277091248993">Chrome reste rapide grâce à des fonctionnalités améliorant les performances</translation> <translation id="3999683152997576765">Vous pouvez voir et retirer les sujets d'intérêt que les sites utilisent pour vous montrer des annonces. Chrome estime vos centres d'intérêt en fonction de votre historique de navigation récent.</translation> @@ -308,6 +309,7 @@ <translation id="4728575227883772061">Échec de l'installation suite à une erreur non spécifiée. Si Google Chrome est en cours d'exécution, veuillez le fermer, puis réessayer.</translation> <translation id="4741235124132242877">La fonctionnalité a été épinglée! Utilisez à nouveau Lentille Google à partir de la barre d'outils</translation> <translation id="4747730611090640388">Chrome peut estimer vos centres d'intérêt. Ultérieurement, un site que vous visitez peut demander à Chrome de voir vos centres d'intérêt afin de personnaliser les annonces que vous voyez.</translation> +<translation id="475321580758063259">Mettez à jour Chrome pour continuer à utiliser les données Chrome dans votre compte Google, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="479167709087336770">Cela fait appel au même correcteur orthographique que celui qui est utilisé dans la recherche Google. Le texte que vous tapez dans le navigateur est envoyé à Google. Vous pouvez toujours modifier ce comportement dans les paramètres.</translation> <translation id="4793679854893018356">Découvrez comment Chrome assure votre sécurité</translation> @@ -584,6 +586,7 @@ <translation id="8077579734294125741">Autres profils Chrome</translation> <translation id="8086881907087796310">L'installation a échoué, car votre ordinateur ne répond pas aux exigences minimales concernant le matériel.</translation> <translation id="8111297389482307122">Chrome doit confirmer votre identité avant que certaines données puissent être enregistrées dans votre compte Google et utilisées sur tous vos appareils. Si vous vous déconnectez, ces données resteront sur cet appareil.</translation> +<translation id="8113883687556086139">Confirmez votre identité pour utiliser et enregistrer les données Chrome dans votre compte, <ph name="ACCOUNT_EMAIL" /></translation> <translation id="8118331347066725040">Envoyer des commentaires sur la recherche avec Lentille</translation> <translation id="8129812357326543296">À propos de &Google Chrome</translation> <translation id="813913629614996137">Initialisation en cours...</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index ec3343f..8a3568c 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -6863,6 +6863,8 @@ "policy/local_sync_policy_handler.h", "profiles/guest_mode_policy_handler.cc", "profiles/guest_mode_policy_handler.h", + "supervised_user/linux_mac_windows/parent_access_view.cc", + "supervised_user/linux_mac_windows/parent_access_view.h", "supervised_user/linux_mac_windows/supervised_user_extensions_metrics_delegate_impl.cc", "supervised_user/linux_mac_windows/supervised_user_extensions_metrics_delegate_impl.h", "supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 66f68091..a7d8f8b 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -5198,11 +5198,11 @@ {"enable-isolated-web-apps", flag_descriptions::kEnableIsolatedWebAppsName, flag_descriptions::kEnableIsolatedWebAppsDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kIsolatedWebApps)}, -#if BUILDFLAG(IS_CHROMEOS) {"enable-isolated-web-app-automatic-updates", flag_descriptions::kEnableIsolatedWebAppAutomaticUpdatesName, flag_descriptions::kEnableIsolatedWebAppAutomaticUpdatesDescription, - kOsCrOS, FEATURE_VALUE_TYPE(features::kIsolatedWebAppAutomaticUpdates)}, + kOsDesktop, FEATURE_VALUE_TYPE(features::kIsolatedWebAppAutomaticUpdates)}, +#if BUILDFLAG(IS_CHROMEOS) {"enable-isolated-web-app-managed-guest-session-install", flag_descriptions::kEnableIsolatedWebAppManagedGuestSessionInstallName, flag_descriptions:: @@ -9815,13 +9815,6 @@ FEATURE_VALUE_TYPE( autofill::features::kAutofillEnableNewCardArtAndNetworkImages)}, - {"autofill-enable-card-art-server-side-stretching", - flag_descriptions::kAutofillEnableCardArtServerSideStretchingName, - flag_descriptions::kAutofillEnableCardArtServerSideStretchingDescription, - kOsAll, - FEATURE_VALUE_TYPE( - autofill::features::kAutofillEnableCardArtServerSideStretching)}, - {"power-bookmark-backend", flag_descriptions::kPowerBookmarkBackendName, flag_descriptions::kPowerBookmarkBackendDescription, kOsAll, FEATURE_VALUE_TYPE(power_bookmarks::kPowerBookmarkBackend)},
diff --git a/chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.cc b/chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.cc index dee913f..3d1eeff6 100644 --- a/chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.cc +++ b/chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.cc
@@ -43,11 +43,6 @@ using ThrottleCheckResult = content::NavigationThrottle::ThrottleCheckResult; -#if BUILDFLAG(IS_CHROMEOS_LACROS) -constexpr char kAppInstallParentWindowFound[] = - "Apps.AppInstallParentWindowFound"; -#endif - constexpr std::string_view kAppInstallHost = "install-app"; constexpr std::string_view kAppInstallPath = "//install-app"; constexpr std::string_view kAppInstallPackageIdParam = "package_id"; @@ -101,12 +96,10 @@ proxy->BrowserAppInstanceTracker()->GetAppInstance(browser); if (browser_window) { - base::UmaHistogramBoolean(kAppInstallParentWindowFound, true); return browser_window->id; } if (browser_app) { - base::UmaHistogramBoolean(kAppInstallParentWindowFound, true); return browser_app->id; } @@ -116,7 +109,6 @@ // tracked at this point. In this case the dialog will not be anchored to any // parent. DLOG(WARNING) << "App Install Dialog parent not found."; - base::UmaHistogramBoolean(kAppInstallParentWindowFound, false); return std::nullopt; #endif // BUILDFLAG(IS_CHROMEOS_ASH) }
diff --git a/chrome/browser/ash/app_mode/isolated_web_app/DEPS b/chrome/browser/ash/app_mode/isolated_web_app/DEPS index ebe0bb57..3966275 100644 --- a/chrome/browser/ash/app_mode/isolated_web_app/DEPS +++ b/chrome/browser/ash/app_mode/isolated_web_app/DEPS
@@ -20,6 +20,7 @@ "+chrome/browser/ash/settings", "+chrome/browser/browser_process.h", "+chrome/browser/chromeos/app_mode", + "+chrome/browser/extensions/extension_special_storage_policy.h", "+chrome/browser/profiles/profile.h", "+chrome/browser/web_applications/isolated_web_apps/isolated_web_app_install_source.h", "+chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h",
diff --git a/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data.cc b/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data.cc index 37d50e5..aa71316 100644 --- a/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data.cc +++ b/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data.cc
@@ -62,7 +62,7 @@ iwa_info_(iwa_info), update_manifest_url_(update_manifest_url), delegate_(delegate) { - name_ = iwa_info_.origin().Serialize(); + name_ = update_manifest_url_.GetWithoutFilename().spec(); } KioskIwaData::~KioskIwaData() = default;
diff --git a/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data_unittest.cc b/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data_unittest.cc index 7177ad98..f68d0a8 100644 --- a/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data_unittest.cc +++ b/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data_unittest.cc
@@ -94,6 +94,8 @@ chrome::kIsolatedAppScheme, kTestWebBundleId, 0); const auto kExpectedWebAppId = web_app::GenerateAppId("", kExpectedOrigin.GetURL()); + const auto kExpectedDefaultName = + GURL(kTestUpdateUrl).GetWithoutFilename().spec(); auto iwa_data = KioskIwaData::Create(GetTestUserId(), kTestWebBundleId, GURL(kTestUpdateUrl), delegate_); @@ -102,6 +104,7 @@ EXPECT_EQ(iwa_data->app_id(), kExpectedWebAppId); EXPECT_EQ(iwa_data->web_bundle_id().id(), kTestWebBundleId); EXPECT_EQ(iwa_data->update_manifest_url().spec(), kTestUpdateUrl); + EXPECT_EQ(iwa_data->name(), kExpectedDefaultName); } } // namespace ash
diff --git a/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_launcher.cc b/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_launcher.cc index 730c59a..7b218df 100644 --- a/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_launcher.cc +++ b/chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_launcher.cc
@@ -4,9 +4,6 @@ #include "chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_launcher.h" -#include <string_view> -#include <utility> - #include "base/check.h" #include "base/functional/bind.h" #include "chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data.h" @@ -14,15 +11,14 @@ #include "chrome/browser/ash/app_mode/kiosk_app_launch_error.h" #include "chrome/browser/ash/app_mode/kiosk_app_launcher.h" #include "chrome/browser/ash/app_mode/kiosk_web_app_launcher_base.h" +#include "chrome/browser/extensions/extension_special_storage_policy.h" // nogncheck crbug.com/386960384 #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_external_install_options.h" #include "chrome/browser/web_applications/isolated_web_apps/policy/isolated_web_app_installer.h" -#include "chrome/browser/web_applications/web_app_constants.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "components/account_id/account_id.h" #include "components/webapps/common/web_app_id.h" -#include "services/network/public/cpp/shared_url_loader_factory.h" namespace ash { @@ -38,11 +34,8 @@ void KioskIwaLauncher::Initialize() { KioskWebAppLauncherBase::Initialize(); - // TODO(crbug.com/361018151): Is launch_url needed for IWA? See - // app_service_launcher_->SetLaunchUrl(); - - // TODO(crbug.com/372848158): add unlimited storage for IWA kiosk. Try - // profile.GetExtensionSpecialStoragePolicy().AddOriginWithUnlimitedStorage() + CHECK_DEREF(profile()->GetExtensionSpecialStoragePolicy()) + .AddOriginWithUnlimitedStorage(iwa_data().origin()); } void KioskIwaLauncher::ContinueWithNetworkReady() {
diff --git a/chrome/browser/ash/app_mode/test/BUILD.gn b/chrome/browser/ash/app_mode/test/BUILD.gn index 1d751218..1c398c2d 100644 --- a/chrome/browser/ash/app_mode/test/BUILD.gn +++ b/chrome/browser/ash/app_mode/test/BUILD.gn
@@ -16,6 +16,7 @@ "kiosk_file_system_volumes_browsertest.cc", "kiosk_installed_apps_browsertest.cc", "kiosk_iwa_browsertest.cc", + "kiosk_iwa_permissions_browsertest.cc", "kiosk_settings_browsertest.cc", "kiosk_web_app_offline_enabled_browsertest.cc", "new_windows_in_kiosk_allowed_browsertest.cc",
diff --git a/chrome/browser/ash/app_mode/test/DEPS b/chrome/browser/ash/app_mode/test/DEPS index 955ea0dd..d000be2 100644 --- a/chrome/browser/ash/app_mode/test/DEPS +++ b/chrome/browser/ash/app_mode/test/DEPS
@@ -5,6 +5,7 @@ include_rules = [ "+components/web_package/signed_web_bundles", "+components/web_package/test_support/signed_web_bundles", + "+chrome/browser/extensions/extension_special_storage_policy.h", "+chrome/browser/signin", "+chrome/browser/ui/browser_navigator.h", "+chrome/browser/ui/browser_navigator_params.h", @@ -14,5 +15,6 @@ "+chrome/browser/ui/webui/ash/login/gaia_screen_handler.h", "+chrome/browser/ui/webui/ash/login/oobe_ui.h", "+chrome/browser/web_applications/isolated_web_apps", + "+chrome/common/url_constants.h", "+extensions/components/native_app_window/native_app_window_views.h", ]
diff --git a/chrome/browser/ash/app_mode/test/kiosk_iwa_browsertest.cc b/chrome/browser/ash/app_mode/test/kiosk_iwa_browsertest.cc index 21223c2..c96a3b8 100644 --- a/chrome/browser/ash/app_mode/test/kiosk_iwa_browsertest.cc +++ b/chrome/browser/ash/app_mode/test/kiosk_iwa_browsertest.cc
@@ -7,23 +7,33 @@ #include "ash/constants/ash_features.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/ash/app_mode/test/kiosk_mixin.h" +#include "chrome/browser/ash/app_mode/test/kiosk_test_utils.h" +#include "chrome/browser/extensions/extension_special_storage_policy.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_server_mixin.h" #include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" #include "chrome/browser/web_applications/isolated_web_apps/test/test_signed_web_bundle_builder.h" +#include "chrome/common/url_constants.h" #include "chrome/test/base/mixin_based_in_process_browser_test.h" +#include "components/web_package/signed_web_bundles/signed_web_bundle_id.h" #include "content/public/test/browser_test.h" #include "net/base/host_port_pair.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" +#include "url/origin.h" namespace ash { +using kiosk::test::CurrentProfile; + namespace { +const web_package::SignedWebBundleId kTestWebBundleId = + web_app::test::GetDefaultEd25519WebBundleId(); + KioskMixin::Config GetKioskIwaConfig(const GURL& update_manifest_url) { KioskMixin::IsolatedWebAppOption iwa_option( /*account_id=*/"simple-iwa@localhost", - /*web_bundle_id=*/web_app::test::GetDefaultEd25519WebBundleId(), + /*web_bundle_id=*/kTestWebBundleId, /*update_manifest_url=*/update_manifest_url); KioskMixin::Config kiosk_iwa_config = { @@ -54,11 +64,23 @@ web_app::IsolatedWebAppUpdateServerMixin iwa_server_mixin_{&mixin_host_}; KioskMixin kiosk_{&mixin_host_, GetKioskIwaConfig(iwa_server_mixin_.GetUpdateManifestUrl( - web_app::test::GetDefaultEd25519WebBundleId()))}; + kTestWebBundleId))}; }; IN_PROC_BROWSER_TEST_F(KioskIwaTest, InstallsAndLaunchesApp) { ASSERT_TRUE(kiosk_.WaitSessionLaunched()); } +IN_PROC_BROWSER_TEST_F(KioskIwaTest, OriginHasUnlimitedStorage) { + ASSERT_TRUE(kiosk_.WaitSessionLaunched()); + + ExtensionSpecialStoragePolicy* storage_policy = + CurrentProfile().GetExtensionSpecialStoragePolicy(); + ASSERT_NE(storage_policy, nullptr); + + const url::Origin kExpectedOrigin = url::Origin::CreateFromNormalizedTuple( + chrome::kIsolatedAppScheme, kTestWebBundleId.id(), /*port=*/0); + EXPECT_TRUE(storage_policy->IsStorageUnlimited(kExpectedOrigin.GetURL())); +} + } // namespace ash
diff --git a/chrome/browser/ash/app_mode/test/kiosk_iwa_permissions_browsertest.cc b/chrome/browser/ash/app_mode/test/kiosk_iwa_permissions_browsertest.cc new file mode 100644 index 0000000..5f24005 --- /dev/null +++ b/chrome/browser/ash/app_mode/test/kiosk_iwa_permissions_browsertest.cc
@@ -0,0 +1,192 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <memory> +#include <string> +#include <string_view> + +#include "ash/constants/ash_features.h" +#include "base/functional/bind.h" +#include "base/strings/string_util.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/ash/app_mode/test/kiosk_mixin.h" +#include "chrome/browser/ash/login/test/test_predicate_waiter.h" +#include "chrome/browser/ui/views/frame/browser_view.h" +#include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_server_mixin.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/test_signed_web_bundle_builder.h" +#include "chrome/common/url_constants.h" +#include "chrome/test/base/mixin_based_in_process_browser_test.h" +#include "components/web_package/signed_web_bundles/signed_web_bundle_id.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" +#include "net/base/host_port_pair.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/mojom/permissions_policy/permissions_policy_feature.mojom-shared.h" +#include "url/gurl.h" + +namespace ash { + +namespace { + +const web_package::SignedWebBundleId kTestWebBundleId = + web_app::test::GetDefaultEd25519WebBundleId(); + +KioskMixin::Config GetKioskIwaAutolaunchConfig( + const GURL& update_manifest_url) { + KioskMixin::IsolatedWebAppOption iwa_option( + /*account_id=*/"simple-iwa@localhost", + /*web_bundle_id=*/kTestWebBundleId, + /*update_manifest_url=*/update_manifest_url); + + KioskMixin::Config kiosk_iwa_config = { + /*name=*/"IsolatedWebApp", + KioskMixin::AutoLaunchAccount{iwa_option.account_id}, + {iwa_option}}; + return kiosk_iwa_config; +} + +std::string QueryPermission(const content::ToRenderFrameHost& target, + const std::string& permission) { + const std::string descriptor = "{name: '" + permission + "'}"; + const std::string script = + "navigator.permissions.query(" + descriptor + + ").then(permission => permission.state).catch(e => e.name);"; + return EvalJs(target, script, content::EXECUTE_SCRIPT_NO_USER_GESTURE) + .ExtractString(); +} + +// Waits until a `js_name` is defined. Is used to prevent API calls before the +// test web page has loaded. +void WaitForJsObject(content::WebContents* web_contents, + const std::string& js_name) { + ash::test::TestPredicateWaiter( + base::BindRepeating( + [](content::WebContents* web_contents, const std::string& js_name) { + return content::EvalJs( + web_contents, + base::ReplaceStringPlaceholders( + "typeof $1 !== 'undefined'", {js_name}, nullptr)) + .ExtractBool(); + }, + web_contents, js_name)) + .Wait(); +} + +std::unique_ptr<web_app::BundledIsolatedWebApp> CreateTestIwa() { + return web_app::IsolatedWebAppBuilder( + web_app::ManifestBuilder() + .AddPermissionsPolicy( + blink::mojom::PermissionsPolicyFeature::kBluetooth, + /*self=*/true, /*origins=*/{}) + .AddPermissionsPolicy( + blink::mojom::PermissionsPolicyFeature::kMicrophone, + /*self=*/true, /*origins=*/{})) + .BuildBundle(web_app::test::GetDefaultEd25519KeyPair()); +} + +} // namespace + +class KioskIwaPermissionsTest : public MixinBasedInProcessBrowserTest { + public: + KioskIwaPermissionsTest() { iwa_server_mixin_.AddBundle(CreateTestIwa()); } + + ~KioskIwaPermissionsTest() override = default; + KioskIwaPermissionsTest(const KioskIwaPermissionsTest&) = delete; + KioskIwaPermissionsTest& operator=(const KioskIwaPermissionsTest&) = delete; + + void SetUpOnMainThread() override { + MixinBasedInProcessBrowserTest::SetUpOnMainThread(); + + ASSERT_TRUE(kiosk_.WaitSessionLaunched()); + + SelectFirstBrowser(); + ASSERT_NE(web_contents(), nullptr); + ASSERT_EQ(web_contents()->GetVisibleURL(), kExpectedOrigin.GetURL()); + } + + protected: + content::WebContents* web_contents() { + BrowserView* browser_view = + BrowserView::GetBrowserViewForBrowser(browser()); + return browser_view ? browser_view->GetActiveWebContents() : nullptr; + } + + private: + const url::Origin kExpectedOrigin = + url::Origin::CreateFromNormalizedTuple(chrome::kIsolatedAppScheme, + kTestWebBundleId.id(), + /*port=*/0); + + base::test::ScopedFeatureList feature_list_{ + ash::features::kIsolatedWebAppKiosk}; + web_app::IsolatedWebAppUpdateServerMixin iwa_server_mixin_{&mixin_host_}; + KioskMixin kiosk_{ + &mixin_host_, + GetKioskIwaAutolaunchConfig( + iwa_server_mixin_.GetUpdateManifestUrl(kTestWebBundleId))}; +}; + +IN_PROC_BROWSER_TEST_F(KioskIwaPermissionsTest, + AutograntsMicrophoneWhenRequested) { + WaitForJsObject(web_contents(), "navigator.mediaDevices"); + + constexpr char kRequestMicrophone[] = R"( + new Promise((resolve) => { + navigator.mediaDevices.getUserMedia({ audio: true }) + .then((stream) => { resolve(true); }) + .catch((err) => { resolve(false); }); + }) + )"; + EXPECT_TRUE( + content::EvalJs(web_contents(), kRequestMicrophone).ExtractBool()); + EXPECT_EQ(QueryPermission(web_contents(), "microphone"), "granted"); +} + +IN_PROC_BROWSER_TEST_F(KioskIwaPermissionsTest, + AutograntsBluetoothWhenRequested) { + WaitForJsObject(web_contents(), "navigator.bluetooth"); + + constexpr char kRequestBluetooth[] = R"( + new Promise((resolve) => { + navigator.bluetooth.getAvailability() + .then((available) => { resolve(available); }) + .catch((err) => { resolve(false); }); + }) + )"; + EXPECT_TRUE(content::EvalJs(web_contents(), kRequestBluetooth).ExtractBool()); +} + +IN_PROC_BROWSER_TEST_F(KioskIwaPermissionsTest, + DeniesMidiAsNotInPermissionsPolicy) { + WaitForJsObject(web_contents(), "navigator.requestMIDIAccess"); + + constexpr char kRequestMidi[] = R"( + new Promise((resolve) => { + navigator.requestMIDIAccess() + .then((access) => { resolve(true); }) + .catch((err) => { resolve(false); }); + }) + )"; + EXPECT_FALSE(content::EvalJs(web_contents(), kRequestMidi).ExtractBool()); + EXPECT_EQ(QueryPermission(web_contents(), "midi"), "denied"); +} + +IN_PROC_BROWSER_TEST_F(KioskIwaPermissionsTest, + DeniesCameraAsNotInPermissionsPolicy) { + WaitForJsObject(web_contents(), "navigator.mediaDevices"); + + constexpr char kRequestCamera[] = R"( + new Promise((resolve) => { + navigator.mediaDevices.getUserMedia({ video: true }) + .then((stream) => { resolve(true); }) + .catch((err) => { resolve(false); }); + }) + )"; + EXPECT_FALSE(content::EvalJs(web_contents(), kRequestCamera).ExtractBool()); + EXPECT_EQ(QueryPermission(web_contents(), "camera"), "denied"); +} + +} // namespace ash
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc index ea30da3d..b95444e8 100644 --- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc +++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_service_launcher.cc
@@ -54,7 +54,6 @@ // set the complete url as override url. app_service_launcher().SetLaunchUrl(GetCurrentApp()->install_url()); - // TODO(crbug.com/372848158): Move to base class if it works for IWAs. profile()->GetExtensionSpecialStoragePolicy()->AddOriginWithUnlimitedStorage( url::Origin::Create(GetCurrentApp()->install_url())); }
diff --git a/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.cc b/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.cc index 5e3b519..044c6b8 100644 --- a/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.cc +++ b/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.h" +#include <optional> + #include "chrome/browser/accessibility/live_caption/live_caption_controller_factory.h" #include "chrome/browser/ash/accessibility/live_caption/system_live_caption_service.h" #include "chrome/browser/speech/speech_recognition_client_browser_interface.h" @@ -12,6 +14,8 @@ #include "chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.h" #include "components/live_caption/live_caption_controller.h" #include "components/live_caption/pref_names.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" +#include "media/mojo/mojom/speech_recognition_result.h" namespace ash::babelorca { @@ -31,6 +35,11 @@ speech_recognition_event_handler_.OnSpeechResult(result); } +void BabelOrcaSpeechRecognizerImpl::OnLanguageIdentificationEvent( + media::mojom::LanguageIdentificationEventPtr event) { + speech_recognition_event_handler_.OnLanguageIdentificationEvent(event); +} + void BabelOrcaSpeechRecognizerImpl::Start() { SpeechRecognitionClientBrowserInterfaceFactory::GetForProfile( primary_profile_) @@ -47,15 +56,18 @@ ->ToggleLiveCaptionForBabelOrca(false); } -void BabelOrcaSpeechRecognizerImpl::ObserveTranscriptionResult( +void BabelOrcaSpeechRecognizerImpl::ObserveSpeechRecognition( BabelOrcaSpeechRecognizer::TranscriptionResultCallback - transcrcription_result_callback) { + transcription_result_callback, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_identification_callback) { speech_recognition_event_handler_.SetTranscriptionResultCallback( - std::move(transcrcription_result_callback)); + std::move(transcription_result_callback), + std::move(language_identification_callback)); } -void BabelOrcaSpeechRecognizerImpl::RemoveTranscriptionResultObservation() { - speech_recognition_event_handler_.RemoveTranscriptionResultObservation(); +void BabelOrcaSpeechRecognizerImpl::RemoveSpeechRecognitionObservation() { + speech_recognition_event_handler_.RemoveSpeechRecognitionObservation(); } } // namespace ash::babelorca
diff --git a/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.h b/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.h index 3ff055bf..c10a3511 100644 --- a/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.h +++ b/chrome/browser/ash/boca/babelorca/babel_orca_speech_recognizer_impl.h
@@ -12,6 +12,7 @@ #include "chrome/browser/profiles/profile.h" #include "chromeos/ash/components/boca/babelorca/babel_orca_speech_recognizer.h" #include "chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" #include "media/mojo/mojom/speech_recognition_result.h" namespace ash::babelorca { @@ -27,14 +28,18 @@ const std::u16string& text, bool is_final, const std::optional<media::SpeechRecognitionResult>& result) override; + void OnLanguageIdentificationEvent( + media::mojom::LanguageIdentificationEventPtr event) override; // BabelOrcaSpeechRecognizer void Start() override; void Stop() override; - void ObserveTranscriptionResult( + void ObserveSpeechRecognition( BabelOrcaSpeechRecognizer::TranscriptionResultCallback - transcription_result_callback) override; - void RemoveTranscriptionResultObservation() override; + transcription_result_callback, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_identification_callback) override; + void RemoveSpeechRecognitionObservation() override; private: SpeechRecognitionEventHandler speech_recognition_event_handler_;
diff --git a/chrome/browser/ash/cert_provisioning/cert_provisioning_test_helpers.cc b/chrome/browser/ash/cert_provisioning/cert_provisioning_test_helpers.cc index 2eaf3cb..8a4c832 100644 --- a/chrome/browser/ash/cert_provisioning/cert_provisioning_test_helpers.cc +++ b/chrome/browser/ash/cert_provisioning/cert_provisioning_test_helpers.cc
@@ -9,6 +9,7 @@ #include "base/test/gmock_callback_support.h" #include "base/time/time.h" #include "chrome/test/base/testing_browser_process.h" +#include "google_apis/gaia/gaia_id.h" #include "net/test/cert_builder.h" #include "testing/gtest/include/gtest/gtest.h" @@ -152,7 +153,7 @@ ASSERT_TRUE(testing_profile_); auto test_account = - AccountId::FromUserEmailGaiaId(kTestUserEmail, kTestUserGaiaId); + AccountId::FromUserEmailGaiaId(kTestUserEmail, GaiaId(kTestUserGaiaId)); user_ = fake_user_manager_->AddUserWithAffiliation(test_account, user_is_affiliated); }
diff --git a/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc b/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc index 51966d42..d981fd4c 100644 --- a/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc +++ b/chrome/browser/ash/floating_workspace/floating_workspace_service_unittest.cc
@@ -60,6 +60,7 @@ #include "components/user_manager/fake_user_manager.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/browser_task_environment.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/cros_system_api/dbus/shill/dbus-constants.h" @@ -420,7 +421,7 @@ /*is_child=*/false); CoreAccountInfo account_info; account_info.email = kTestAccount; - account_info.gaia = "gaia"; + account_info.gaia = GaiaId("gaia"); account_info.account_id = CoreAccountId::FromGaiaId(account_info.gaia); test_sync_service_.SetSignedIn(signin::ConsentLevel::kSync, account_info); @@ -2303,7 +2304,7 @@ /*is_child=*/false); CoreAccountInfo account_info; account_info.email = kTestAccount2; - account_info.gaia = "gaia2"; + account_info.gaia = GaiaId("gaia2"); account_info.account_id = CoreAccountId::FromGaiaId(account_info.gaia); test_sync_service()->SetSignedIn(signin::ConsentLevel::kSync, account_info); fake_desk_sync_service2_ =
diff --git a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc index c9d9876..cf0c737 100644 --- a/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc +++ b/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc
@@ -115,8 +115,8 @@ base::UmaHistogramLongTimes("Kiosk.LaunchDuration.Web", duration); break; case KioskAppType::kIsolatedWebApp: - // TODO(crbug.com/361019026): add a separate uma value for IWA. - NOTIMPLEMENTED(); + base::UmaHistogramLongTimes("Kiosk.LaunchDuration.IsolatedWebApp", + duration); break; } }
diff --git a/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc b/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc index ff1cbc0..f493775 100644 --- a/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc +++ b/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc
@@ -405,6 +405,14 @@ EXPECT_TRUE(accelerator_controller().enabled()); } +TEST_F(KioskLaunchControllerTest, CleanUpShouldLogLaunchDuration) { + base::HistogramTester histogram; + + controller().Start(kiosk_app(), /*auto_launch=*/false); + CleanUpController(); + histogram.ExpectTotalCount("Kiosk.LaunchDuration.Web", 1); +} + TEST_F(KioskLaunchControllerTest, ProfileLoadedShouldInitializeLauncher) { controller().Start(kiosk_app(), /*auto_launch=*/false); VerifyLaunchStateCrashKey(KioskLaunchState::kLauncherStarted);
diff --git a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java index f4643f2..aab02db 100644 --- a/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java +++ b/chrome/browser/autofill/android/java/src/org/chromium/chrome/browser/autofill/AutofillUiUtils.java
@@ -589,11 +589,6 @@ StringBuilder url = new StringBuilder(customIconUrl.getSpec()); url.append("=w").append(width).append("-h").append(height); - // If SCS supports stretching, add it as a param to fetch images of exact dimensions. - if (ChromeFeatureList.isEnabled( - ChromeFeatureList.AUTOFILL_ENABLE_CARD_ART_SERVER_SIDE_STRETCHING)) { - url.append("-s"); - } return new GURL(url.toString()); } @@ -669,20 +664,17 @@ /** * Resize the bitmap to the required specs, round corners, and add grey border. + * * @param bitmap to be updated. * @param cardIconSpecs {@link CardIconSpecs} instance containing the specs for the card icon. * @param addRoundedCornersAndGreyBorder If true, the bitmap corners are rounded, and a grey - * border is added. If false, no enhancements are applied to the bitmap. + * border is added. If false, no enhancements are applied to the bitmap. * @return Resized {@link Bitmap} with rounded corners and grey border. */ public static Bitmap resizeAndAddRoundedCornersAndGreyBorder( Bitmap bitmap, CardIconSpecs cardIconSpecs, boolean addRoundedCornersAndGreyBorder) { - // Until AutofillEnableCardArtServerSideStretching is rolled out, the server maintains the - // card art image's aspect ratio, so the fetched image might not be the exact required size. - // Scale the icon to the desired dimension. - // TODO(crbug.com/40274131): Remove scaling when AutofillEnableCardArtServerSideStretching - // is - // rolled out. + // The server maintains the card art image's aspect ratio, so the fetched image might not be + // the exact required size. Scale the icon to the desired dimension. if (bitmap.getWidth() != cardIconSpecs.getWidth() || bitmap.getHeight() != cardIconSpecs.getHeight()) { bitmap =
diff --git a/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java b/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java index 33801f5..1e9ae84 100644 --- a/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java +++ b/chrome/browser/autofill/test/android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManagerTest.java
@@ -446,9 +446,7 @@ @Test @SmallTest @Feature({"Autofill"}) - @DisableFeatures(ChromeFeatureList.AUTOFILL_ENABLE_CARD_ART_SERVER_SIDE_STRETCHING) - public void testCreditCardArtUrlIsFormattedWithImageSpecs_serverSideStretchingDisabled() - throws TimeoutException { + public void testCreditCardArtUrlIsFormattedWithImageSpecs() throws TimeoutException { GURL capitalOneIconUrl = new GURL(AutofillUiUtils.CAPITAL_ONE_ICON_URL); GURL cardArtUrl = new GURL("http://google.com/test"); int widthPixels = 32; @@ -475,42 +473,6 @@ @Test @SmallTest @Feature({"Autofill"}) - @EnableFeatures(ChromeFeatureList.AUTOFILL_ENABLE_CARD_ART_SERVER_SIDE_STRETCHING) - public void testCreditCardArtUrlIsFormattedWithImageSpecs_serverSideStretchingEnabled() - throws TimeoutException { - GURL capitalOneIconUrl = new GURL(AutofillUiUtils.CAPITAL_ONE_ICON_URL); - GURL cardArtUrl = new GURL("http://google.com/test"); - int widthPixels = 32; - int heightPixels = 20; - - // The URL should be updated as `cardArtUrl=w{width}-h{height}-s`. - assertThat( - AutofillUiUtils.getCreditCardIconUrlWithParams( - capitalOneIconUrl, widthPixels, heightPixels)) - .isEqualTo( - new GURL( - capitalOneIconUrl.getSpec() - + "=w" - + widthPixels - + "-h" - + heightPixels - + "-s")); - assertThat( - AutofillUiUtils.getCreditCardIconUrlWithParams( - cardArtUrl, widthPixels, heightPixels)) - .isEqualTo( - new GURL( - cardArtUrl.getSpec() - + "=w" - + widthPixels - + "-h" - + heightPixels - + "-s")); - } - - @Test - @SmallTest - @Feature({"Autofill"}) public void testAddAndDeleteCreditCard() throws TimeoutException { CreditCard card = createLocalCreditCard("Visa", "1234123412341234", "5", "2020"); card.setOrigin("Chrome settings");
diff --git a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc index 7a27f8e..60f720a 100644 --- a/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc +++ b/chrome/browser/chromeos/extensions/file_system_provider/file_system_provider_apitest.cc
@@ -4,13 +4,13 @@ #include <memory> #include <utility> -#include "build/build_config.h" #include "base/files/file.h" #include "base/functional/bind.h" #include "base/memory/raw_ptr.h" #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" +#include "build/build_config.h" #include "chrome/browser/ash/file_system_provider/observer.h" #include "chrome/browser/ash/file_system_provider/operation_request_manager.h" #include "chrome/browser/ash/file_system_provider/provided_file_system_info.h" @@ -24,6 +24,7 @@ #include "chrome/browser/notifications/notification_display_service_tester.h" #include "chrome/browser/ui/browser.h" #include "content/public/test/browser_test.h" +#include "google_apis/gaia/gaia_id.h" #include "ui/message_center/public/cpp/notification.h" #include "ui/message_center/public/cpp/notification_delegate.h" @@ -151,7 +152,8 @@ display_service_ = std::make_unique<NotificationDisplayServiceTester>( browser()->profile()); - user_manager_.AddUser(AccountId::FromUserEmailGaiaId("test@test", "12345")); + user_manager_.AddUser( + AccountId::FromUserEmailGaiaId("test@test", GaiaId("12345"))); } std::unique_ptr<NotificationDisplayServiceTester> display_service_;
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_api_ash_unittest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_api_ash_unittest.cc index 5212484..8ce6c875 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/login_api_ash_unittest.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login/login_api_ash_unittest.cc
@@ -45,6 +45,7 @@ #include "extensions/browser/api_unittest.h" #include "extensions/common/extension.h" #include "extensions/common/extension_builder.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/user_activity/user_activity_detector.h" @@ -143,7 +144,7 @@ } ash::UserContext GetRegularUserContext(const std::string& email, - const std::string& gaia_id) { + const GaiaId& gaia_id) { return ash::UserContext(user_manager::UserType::kRegular, AccountId::FromUserEmailGaiaId(email, gaia_id)); } @@ -413,7 +414,8 @@ } TEST_F(LoginApiUnittest, LockManagedGuestSessionNotManagedGuestSession) { - AccountId account_id = AccountId::FromUserEmailGaiaId(kEmail, kGaiaId); + AccountId account_id = + AccountId::FromUserEmailGaiaId(kEmail, GaiaId(kGaiaId)); fake_chrome_user_manager_->AddUser(account_id); fake_chrome_user_manager_->SwitchActiveUser(account_id); @@ -527,7 +529,8 @@ } TEST_F(LoginApiUnittest, UnlockManagedGuestSessionNotManagedGuestSession) { - AccountId account_id = AccountId::FromUserEmailGaiaId(kEmail, kGaiaId); + AccountId account_id = + AccountId::FromUserEmailGaiaId(kEmail, GaiaId(kGaiaId)); fake_chrome_user_manager_->AddUser(account_id); fake_chrome_user_manager_->SwitchActiveUser(account_id); @@ -626,7 +629,7 @@ std::unique_ptr<ScopedTestingProfile> AddRegularUser( const std::string& email) { auto* user = fake_chrome_user_manager_->AddUserWithAffiliation( - AccountId::FromUserEmailGaiaId(email, kGaiaId), + AccountId::FromUserEmailGaiaId(email, GaiaId(kGaiaId)), /* is_affiliated= */ true); TestingProfile* profile = profile_manager()->CreateTestingProfile(email); @@ -649,7 +652,8 @@ ui::UserActivityDetector::Get()->set_now_for_test(now); std::unique_ptr<ScopedTestingProfile> profile = AddRegularUser(kEmail); - ash::UserContext user_context = GetRegularUserContext(kEmail, kGaiaId); + ash::UserContext user_context = + GetRegularUserContext(kEmail, GaiaId(kGaiaId)); ash::Key key("password"); key.SetLabel(ash::kCryptohomeGaiaKeyLabel);
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc index 6eff28a..dddbbac5 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
@@ -44,6 +44,7 @@ #include "extensions/common/extension.h" #include "extensions/test/extension_test_message_listener.h" #include "extensions/test/result_catcher.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -450,7 +451,7 @@ user_policy_builder_->policy_data(); policy_data.set_policy_type(policy::dm_protocol::kChromeUserPolicyType); policy_data.set_username(account_id.GetUserEmail()); - policy_data.set_gaia_id(account_id.GetGaiaId()); + policy_data.set_gaia_id(account_id.GetGaiaId().ToString()); user_policy_builder_->Build(); auto registry_observer =
diff --git a/chrome/browser/collaboration/android/collaboration_controller_delegate_android.cc b/chrome/browser/collaboration/android/collaboration_controller_delegate_android.cc index 668f11c..7b2a708 100644 --- a/chrome/browser/collaboration/android/collaboration_controller_delegate_android.cc +++ b/chrome/browser/collaboration/android/collaboration_controller_delegate_android.cc
@@ -99,6 +99,7 @@ } void CollaborationControllerDelegateAndroid::ShowShareDialog( + const tab_groups::EitherGroupID& either_id, ResultCallback result) { JNIEnv* env = base::android::AttachCurrentThread(); Java_CollaborationControllerDelegateImpl_showShareDialog(
diff --git a/chrome/browser/collaboration/android/collaboration_controller_delegate_android.h b/chrome/browser/collaboration/android/collaboration_controller_delegate_android.h index d358a4cd..483b839 100644 --- a/chrome/browser/collaboration/android/collaboration_controller_delegate_android.h +++ b/chrome/browser/collaboration/android/collaboration_controller_delegate_android.h
@@ -30,7 +30,8 @@ void ShowJoinDialog(const data_sharing::GroupToken& token, const data_sharing::SharedDataPreview& preview_data, ResultCallback result) override; - void ShowShareDialog(ResultCallback result) override; + void ShowShareDialog(const tab_groups::EitherGroupID& either_id, + ResultCallback result) override; void PromoteTabGroup(const data_sharing::GroupId& group_id, ResultCallback result) override; void PromoteCurrentScreen() override;
diff --git a/chrome/browser/enterprise/data_protection/data_protection_navigation_controller.cc b/chrome/browser/enterprise/data_protection/data_protection_navigation_controller.cc index 1b8d1274..82394293 100644 --- a/chrome/browser/enterprise/data_protection/data_protection_navigation_controller.cc +++ b/chrome/browser/enterprise/data_protection/data_protection_navigation_controller.cc
@@ -59,7 +59,7 @@ // Fetch the protection settings for the current page. enterprise_data_protection::DataProtectionNavigationObserver:: - GetDataProtectionSettings( + ApplyDataProtectionSettings( Profile::FromBrowserContext( tab_interface_->GetContents()->GetBrowserContext()), tab_interface_->GetContents(), @@ -83,7 +83,7 @@ content::WebContents* contents = tab->GetContents(); Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext()); enterprise_data_protection::DataProtectionNavigationObserver:: - GetDataProtectionSettings( + ApplyDataProtectionSettings( profile, contents, base::BindOnce( &DataProtectionNavigationController::ApplyDataProtectionSettings,
diff --git a/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.cc b/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.cc index c279afd..a106d96 100644 --- a/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.cc +++ b/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.cc
@@ -221,7 +221,7 @@ } // static -void DataProtectionNavigationObserver::GetDataProtectionSettings( +void DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile* profile, content::WebContents* web_contents, Callback callback) {
diff --git a/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.h b/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.h index b057f5cb..d9e885e4 100644 --- a/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.h +++ b/chrome/browser/enterprise/data_protection/data_protection_navigation_observer.h
@@ -84,12 +84,12 @@ Callback callback); // Checks the `web_contents` url for enabled data protection settings. Note - // that `callback` is always invoked but it be called synchronously or + // that `callback` is always invoked but may be called synchronously or // asynchronously depending on whether the state is cached in // RealTimeUrlLookupService or not. - static void GetDataProtectionSettings(Profile* profile, - content::WebContents* web_contents, - Callback callback); + static void ApplyDataProtectionSettings(Profile* profile, + content::WebContents* web_contents, + Callback callback); // public for testing DataProtectionNavigationObserver(
diff --git a/chrome/browser/enterprise/data_protection/data_protection_navigation_observer_unittest.cc b/chrome/browser/enterprise/data_protection/data_protection_navigation_observer_unittest.cc index 1a5229f5..de65b27 100644 --- a/chrome/browser/enterprise/data_protection/data_protection_navigation_observer_unittest.cc +++ b/chrome/browser/enterprise/data_protection/data_protection_navigation_observer_unittest.cc
@@ -567,13 +567,13 @@ } TEST_F(DataProtectionNavigationObserverTest, - SkipSpecialURLs_GetDataProtectionSettings) { + SkipSpecialURLs_ApplyDataProtectionSettings) { SetContents(CreateTestWebContents()); for (const auto* url : kSkippedUrls) { NavigateAndCommit(GURL(url)); base::test::TestFuture<const UrlSettings&> future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), future.GetCallback()); ASSERT_EQ(future.Get(), UrlSettings()); @@ -603,7 +603,7 @@ NavigateAndCommit(GURL("https://example.com")); { base::test::TestFuture<const UrlSettings&> future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), future.GetCallback()); EXPECT_NE(future.Get().watermark_text.find("custom_message"), @@ -621,7 +621,7 @@ simulator->Commit(); { base::test::TestFuture<const UrlSettings&> future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), future.GetCallback()); EXPECT_NE(future.Get().watermark_text.find("custom_message"), @@ -629,7 +629,7 @@ } } -TEST_F(DataProtectionNavigationObserverTest, GetDataProtectionSettings) { +TEST_F(DataProtectionNavigationObserverTest, ApplyDataProtectionSettings) { enterprise_connectors::test::EventReportValidator validator(client_.get()); validator.ExpectNoReport(); DataProtectionNavigationObserver::SetLookupServiceForTesting( @@ -639,7 +639,7 @@ NavigateAndCommit(GURL("https://example.com")); base::test::TestFuture<const UrlSettings&> future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), future.GetCallback()); EXPECT_NE(future.Get().watermark_text.find("custom_message"), @@ -654,7 +654,7 @@ } TEST_F(DataProtectionNavigationObserverTest, - GetDataProtectionSettings_NoUrlCheck) { + ApplyDataProtectionSettings_NoUrlCheck) { profile()->GetPrefs()->SetInteger( enterprise_connectors::kEnterpriseRealTimeUrlCheckMode, enterprise_connectors::REAL_TIME_CHECK_DISABLED); @@ -668,7 +668,7 @@ NavigateAndCommit(GURL("https://example.com")); base::test::TestFuture<const UrlSettings&> future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), future.GetCallback()); EXPECT_TRUE(future.Get().watermark_text.empty()); @@ -684,7 +684,7 @@ } TEST_F(DataProtectionNavigationObserverTest, - GetDataProtectionSettings_DC_BlockScreenshot) { + ApplyDataProtectionSettings_DC_BlockScreenshot) { enterprise_connectors::test::EventReportValidator validator(client_.get()); validator.ExpectNoReport(); DataProtectionNavigationObserver::SetLookupServiceForTesting( @@ -702,7 +702,7 @@ NavigateAndCommit(GURL("https://example.com")); base::test::TestFuture<const UrlSettings&> future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), future.GetCallback()); EXPECT_NE(future.Get().watermark_text.find("custom_message"), @@ -717,7 +717,7 @@ } TEST_F(DataProtectionNavigationObserverTest, - GetDataProtectionSettings_DC_BlockScreenshot_NoUrlCheck) { + ApplyDataProtectionSettings_DC_BlockScreenshot_NoUrlCheck) { profile()->GetPrefs()->SetInteger( enterprise_connectors::kEnterpriseRealTimeUrlCheckMode, enterprise_connectors::REAL_TIME_CHECK_DISABLED); @@ -737,7 +737,7 @@ NavigateAndCommit(GURL("https://example.com")); base::test::TestFuture<const UrlSettings&> future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), future.GetCallback()); EXPECT_TRUE(future.Get().watermark_text.empty()); @@ -751,7 +751,7 @@ } TEST_F(DataProtectionNavigationObserverTest, - GetDataProtectionSettings_DC_BlockScreenshot_Redirect) { + ApplyDataProtectionSettings_DC_BlockScreenshot_Redirect) { enterprise_connectors::test::EventReportValidator validator(client_.get()); validator.ExpectNoReport(); DataProtectionNavigationObserver::SetLookupServiceForTesting( @@ -807,7 +807,7 @@ // The result of the above should be that // screenshots are not allowed. base::test::TestFuture<const UrlSettings&> get_settings_future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), get_settings_future.GetCallback()); EXPECT_FALSE(get_settings_future.Get().allow_screenshots); @@ -820,7 +820,7 @@ } TEST_F(DataProtectionNavigationObserverTest, - GetDataProtectionSettings_DC_BlockScreenshot_RedirectWithoutUrlCheck) { + ApplyDataProtectionSettings_DC_BlockScreenshot_RedirectWithoutUrlCheck) { profile()->GetPrefs()->SetInteger( enterprise_connectors::kEnterpriseRealTimeUrlCheckMode, enterprise_connectors::REAL_TIME_CHECK_DISABLED); @@ -860,7 +860,7 @@ // The result of the above should be that // screenshots are not allowed. base::test::TestFuture<const UrlSettings&> get_settings_future; - DataProtectionNavigationObserver::GetDataProtectionSettings( + DataProtectionNavigationObserver::ApplyDataProtectionSettings( Profile::FromBrowserContext(browser_context()), web_contents(), get_settings_future.GetCallback()); EXPECT_FALSE(get_settings_future.Get().allow_screenshots);
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc index 4a4a3d72..d91196d 100644 --- a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc +++ b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
@@ -240,7 +240,7 @@ // SetInfoWithVerificationStatus here. profile.SetRawInfoWithVerificationStatus( autofill::TypeNameToFieldType(autofill_private::ToString(field.type)), - base::UTF8ToUTF16(field.value), kUserVerified); + trimmed_value, kUserVerified); } profile.FinalizeAfterImport();
diff --git a/chrome/browser/facilitated_payments/ui/android/internal/java/res/layout/facilitated_payments_progress_screen.xml b/chrome/browser/facilitated_payments/ui/android/internal/java/res/layout/facilitated_payments_progress_screen.xml index b31ff67c..069ab938 100644 --- a/chrome/browser/facilitated_payments/ui/android/internal/java/res/layout/facilitated_payments_progress_screen.xml +++ b/chrome/browser/facilitated_payments/ui/android/internal/java/res/layout/facilitated_payments_progress_screen.xml
@@ -48,5 +48,6 @@ android:layout_marginTop="@dimen/facilitated_payments_progress_message_margin_top" android:textAlignment="center" android:text="@string/pix_payment_progress_screen_message" - android:textAppearance="@style/TextAppearance.TextMedium.Secondary" /> + android:textAppearance="@style/TextAppearance.TextMedium.Secondary" + android:focusable="true" /> </RelativeLayout>
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index d162b29..ed4879a 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -569,11 +569,6 @@ "expiry_milestone": 130 }, { - "name": "autofill-enable-card-art-server-side-stretching", - "owners": ["vishwasuppoor@google.com", "alexandertekle@google.com"], - "expiry_milestone": 122 - }, - { "name": "autofill-enable-card-benefits-for-american-express", "owners": [ "alexandertekle@google.com"], "expiry_milestone": 135 @@ -8843,6 +8838,11 @@ "expiry_milestone": -1 }, { + "name": "updated-fre-screens-sequence", + "owners": [ "hiramahmood@google.com", "bling-get-set-up@google.com" ], + "expiry_milestone": 136 + }, + { "name": "upload-office-to-cloud", "owners": [ "jboulic@chromium.org", "alexbn@chromium.org", "simmonsjosh@google.com" ], "expiry_milestone": 133
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 5cf5d163..9f9df0e 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -552,13 +552,6 @@ "When enabled, card product images (instead of network icons) will be " "shown in Payments Autofill UI."; -const char kAutofillEnableCardArtServerSideStretchingName[] = - "Enable server side stretching of card art images"; -const char kAutofillEnableCardArtServerSideStretchingDescription[] = - "When enabled, the server will stretch (if necessary) and return card art " - "images of the exact required dimensions. The client side resizing of " - "images will not be required."; - const char kAutofillEnableCardBenefitsForAmericanExpressName[] = "Enable showing card benefits for American Express cards"; const char kAutofillEnableCardBenefitsForAmericanExpressDescription[] = @@ -1440,13 +1433,13 @@ "Enables experimental support for Isolated Web Apps. " "See https://github.com/reillyeon/isolated-web-apps for more information."; -#if BUILDFLAG(IS_CHROMEOS) const char kEnableIsolatedWebAppAutomaticUpdatesName[] = "Enable automatic updates of Isolated Web Apps"; const char kEnableIsolatedWebAppAutomaticUpdatesDescription[] = "Enables experimental support for automatically updating Isolated Web " "Apps."; +#if BUILDFLAG(IS_CHROMEOS) const char kEnableIsolatedWebAppUnmanagedInstallName[] = "Enable Isolated Web App unmanaged installation"; const char kEnableIsolatedWebAppUnmanagedInstallDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 870bd3a..8beaa2b 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -344,9 +344,6 @@ extern const char kAutofillEnableCardArtImageName[]; extern const char kAutofillEnableCardArtImageDescription[]; -extern const char kAutofillEnableCardArtServerSideStretchingName[]; -extern const char kAutofillEnableCardArtServerSideStretchingDescription[]; - extern const char kAutofillEnableCardBenefitsForAmericanExpressName[]; extern const char kAutofillEnableCardBenefitsForAmericanExpressDescription[]; @@ -902,10 +899,10 @@ extern const char kEnableIsolatedWebAppsName[]; extern const char kEnableIsolatedWebAppsDescription[]; -#if BUILDFLAG(IS_CHROMEOS) extern const char kEnableIsolatedWebAppAutomaticUpdatesName[]; extern const char kEnableIsolatedWebAppAutomaticUpdatesDescription[]; +#if BUILDFLAG(IS_CHROMEOS) extern const char kEnableIsolatedWebAppUnmanagedInstallName[]; extern const char kEnableIsolatedWebAppUnmanagedInstallDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 22119bce..d0359bfe 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -91,7 +91,6 @@ &autofill::features::kAutofillEnableRankingFormulaAddressProfiles, &autofill::features::kAutofillEnableRankingFormulaCreditCards, &autofill::features::kAutofillEnableNewCardArtAndNetworkImages, - &autofill::features::kAutofillEnableCardArtServerSideStretching, &autofill::features::kAutofillEnableVirtualCardMetadata, &autofill::features::kAutofillEnableCardArtImage, &autofill::features::kAutofillEnableCardBenefitsForAmericanExpress, @@ -380,6 +379,7 @@ &privacy_sandbox::kPrivacySandboxActivityTypeStorage, &privacy_sandbox::kPrivacySandboxAdsApiUxEnhancements, &privacy_sandbox::kPrivacySandboxAdsNoticeCCT, + &privacy_sandbox::kPrivacySandboxEqualizedPromptButtons, &privacy_sandbox::kPrivacySandboxFirstPartySetsUI, &privacy_sandbox::kPrivacySandboxRelatedWebsiteSetsUi, &privacy_sandbox::kPrivacySandboxSettings4,
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 74d21a1..4635a95 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
@@ -200,8 +200,6 @@ public static final String AUTOFILL_ENABLE_NEW_CARD_ART_AND_NETWORK_IMAGES = "AutofillEnableNewCardArtAndNetworkImages"; public static final String AUTOFILL_ENABLE_SERVER_IBAN = "AutofillEnableServerIban"; - public static final String AUTOFILL_ENABLE_CARD_ART_SERVER_SIDE_STRETCHING = - "AutofillEnableCardArtServerSideStretching"; public static final String AUTOFILL_ENABLE_CVC_STORAGE = "AutofillEnableCvcStorageAndFilling"; public static final String AUTOFILL_ENABLE_PAYMENT_SETTINGS_CARD_PROMO_AND_SCAN_CARD = "AutofillEnablePaymentSettingsCardPromoAndScanCard"; @@ -437,6 +435,8 @@ public static final String PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS = "PrivacySandboxAdsApiUxEnhancements"; public static final String PRIVACY_SANDBOX_ADS_NOTICE_CCT = "PrivacySandboxAdsNoticeCCT"; + public static final String PRIVACY_SANDBOX_EQUALIZED_PROMPT_BUTTONS = + "PrivacySandboxEqualizedPromptButtons"; public static final String PRIVACY_SANDBOX_FPS_UI = "PrivacySandboxFirstPartySetsUI"; public static final String PRIVACY_SANDBOX_RELATED_WEBSITE_SETS_UI = "PrivacySandboxRelatedWebsiteSetsUi";
diff --git a/chrome/browser/glic/launcher/glic_status_icon.cc b/chrome/browser/glic/launcher/glic_status_icon.cc index 92e08a2..8f5156d1 100644 --- a/chrome/browser/glic/launcher/glic_status_icon.cc +++ b/chrome/browser/glic/launcher/glic_status_icon.cc
@@ -27,9 +27,15 @@ GlicStatusIcon::GlicStatusIcon(GlicController* controller, StatusTray* status_tray) : controller_(controller), status_tray_(status_tray) { - // TODO(https://crbug.com/382287104): Use correct icon. - gfx::ImageSkia status_tray_icon = - gfx::CreateVectorIcon(kGlicButtonIcon, SK_ColorBLACK); + // TODO(crbug.com/382287104): Use correct icon. + // TODO(crbug.com/386839488): Chose color based on system theme. + gfx::ImageSkia status_tray_icon = gfx::CreateVectorIcon(kGlicButtonIcon, +#if BUILDFLAG(IS_LINUX) + SK_ColorWHITE +#else + SK_ColorBLACK +#endif + ); status_icon_ = status_tray_->CreateStatusIcon( StatusTray::GLIC_ICON, status_tray_icon,
diff --git a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc index 3bff207..dfde22ffd 100644 --- a/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc +++ b/chrome/browser/media/webrtc/webrtc_getdisplaymedia_browsertest.cc
@@ -128,8 +128,7 @@ const char* display_surface; }; -struct TestConfigForHiDpi { - bool enable_hidpi; +struct TestConfigForMediaResolution { int constraint_width; int constraint_height; }; @@ -923,29 +922,21 @@ !(defined(MEMORY_SANITIZER) || defined(ADDRESS_SANITIZER)) class GetDisplayMediaHiDpiBrowserTest : public WebRtcTestBase, - public testing::WithParamInterface<TestConfigForHiDpi> { + public testing::WithParamInterface<TestConfigForMediaResolution> { public: GetDisplayMediaHiDpiBrowserTest() : test_config_(GetParam()) {} // The browser window size must be consistent with the - // INSTANTIATE_TEST_SUITE_P TestConfigForHiDpi configurations below. See the - // comments there for more details. + // INSTANTIATE_TEST_SUITE_P TestConfigForMediaResolution configurations below. + // See the comments there for more details. static constexpr int kBrowserWindowWidth = 800; static constexpr int kBrowserWindowHeight = 600; - bool enable_hidpi() const { return test_config_.enable_hidpi; } int constraint_width() const { return test_config_.constraint_width; } int constraint_height() const { return test_config_.constraint_height; } void SetUpInProcessBrowserTestFixture() override { - if (enable_hidpi()) { - feature_list_.InitAndEnableFeature(media::kWebContentsCaptureHiDpi); - } else { - feature_list_.InitAndDisableFeature(media::kWebContentsCaptureHiDpi); - } - WebRtcTestBase::SetUpInProcessBrowserTestFixture(); - DetectErrorsInJavaScript(); } @@ -1012,8 +1003,7 @@ .ExtractString(); } - base::test::ScopedFeatureList feature_list_; - const TestConfigForHiDpi test_config_; + const TestConfigForMediaResolution test_config_; raw_ptr<content::WebContents, AcrossTasksDanglingUntriaged> tab_ = nullptr; }; @@ -1048,10 +1038,8 @@ WaitForVideoToPlay(Tab()); // If the video size is higher resolution than the browser window - // size, expect that HiDPI mode should be active. This requires - // the feature to be enabled. - bool expect_hidpi = enable_hidpi() && - constraint_width() > kBrowserWindowWidth && + // size, expect that HiDPI mode should be active. + bool expect_hidpi = constraint_width() > kBrowserWindowWidth && constraint_height() > kBrowserWindowHeight; double device_pixel_ratio = GetDevicePixelRatio(); @@ -1071,15 +1059,10 @@ // (cf. kBrowserWindowWidth and kBrowserWindowHeight in // GetDisplayMediaHiDpiBrowserTest above), and the large sizes must be // significantly larger than the browser window size. - Values(TestConfigForHiDpi{/*enable_hidpi=*/false, - /*constraint_width=*/3840, - /*constraint_height=*/2160}, - TestConfigForHiDpi{/*enable_hidpi=*/true, - /*constraint_width=*/640, - /*constraint_height=*/480}, - TestConfigForHiDpi{/*enable_hidpi=*/true, - /*constraint_width=*/3840, - /*constraint_height=*/2160})); + Values(TestConfigForMediaResolution{/*constraint_width=*/640, + /*constraint_height=*/480}, + TestConfigForMediaResolution{/*constraint_width=*/3840, + /*constraint_height=*/2160})); #endif class GetDisplayMediaChangeSourceBrowserTest
diff --git a/chrome/browser/permissions/BUILD.gn b/chrome/browser/permissions/BUILD.gn index a27fe0c..c3a14ed6 100644 --- a/chrome/browser/permissions/BUILD.gn +++ b/chrome/browser/permissions/BUILD.gn
@@ -138,6 +138,7 @@ if (is_chromeos_ash) { deps += [ + "//chrome/browser/ash/app_mode/isolated_web_app", "//chrome/browser/ash/app_mode/web_app", "//chrome/browser/ash/privacy_hub", "//chrome/browser/ash/shimless_rma",
diff --git a/chrome/browser/permissions/chrome_permissions_client.cc b/chrome/browser/permissions/chrome_permissions_client.cc index 1a93421..5667bfb 100644 --- a/chrome/browser/permissions/chrome_permissions_client.cc +++ b/chrome/browser/permissions/chrome_permissions_client.cc
@@ -7,6 +7,7 @@ #include <optional> #include <vector> +#include "base/check_deref.h" #include "base/containers/contains.h" #include "base/feature_list.h" #include "base/functional/callback_helpers.h" @@ -89,6 +90,8 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) #include "ash/constants/ash_features.h" +#include "chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_data.h" +#include "chrome/browser/ash/app_mode/isolated_web_app/kiosk_iwa_manager.h" #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_data.h" #include "chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.h" #include "chromeos/ash/components/browser_context_helper/browser_context_types.h" @@ -96,10 +99,6 @@ #include "components/user_manager/user_manager.h" #endif -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chrome/browser/lacros/app_mode/kiosk_session_service_lacros.h" -#endif - #if BUILDFLAG(ENABLE_EXTENSIONS) #include "extensions/common/constants.h" #endif @@ -119,6 +118,41 @@ } #endif +#if BUILDFLAG(IS_CHROMEOS) +bool IsWebKiosk() { + return user_manager::UserManager::IsInitialized() && + user_manager::UserManager::Get()->IsLoggedInAsWebKioskApp(); +} + +bool IsIwaKiosk() { + return ash::features::IsIsolatedWebAppKioskEnabled() && + user_manager::UserManager::IsInitialized() && + user_manager::UserManager::Get()->IsLoggedInAsKioskIWA(); +} + +std::optional<url::Origin> GetCurrentKioskOrigin() { + if (IsWebKiosk()) { + const AccountId& account_id = + user_manager::UserManager::Get()->GetPrimaryUser()->GetAccountId(); + DCHECK(ash::WebKioskAppManager::IsInitialized()); + const ash::WebKioskAppData* app_data = + ash::WebKioskAppManager::Get()->GetAppByAccountId(account_id); + DCHECK(app_data); + return url::Origin::Create(app_data->install_url()); + } + + if (IsIwaKiosk()) { + const AccountId& account_id = + user_manager::UserManager::Get()->GetPrimaryUser()->GetAccountId(); + const ash::KioskIwaData* iwa_data = + CHECK_DEREF(ash::KioskIwaManager::Get()).GetApp(account_id); + return CHECK_DEREF(iwa_data).origin(); + } + + return std::nullopt; +} + +#endif } // namespace // static @@ -458,18 +492,12 @@ std::optional<url::Origin> ChromePermissionsClient::GetAutoApprovalOrigin( content::BrowserContext* browser_context) { - // In web kiosk mode, all permission requests are auto-approved for the origin - // of the main app. #if BUILDFLAG(IS_CHROMEOS_ASH) - if (user_manager::UserManager::IsInitialized() && - user_manager::UserManager::Get()->IsLoggedInAsWebKioskApp()) { - const AccountId& account_id = - user_manager::UserManager::Get()->GetPrimaryUser()->GetAccountId(); - DCHECK(ash::WebKioskAppManager::IsInitialized()); - const ash::WebKioskAppData* app_data = - ash::WebKioskAppManager::Get()->GetAppByAccountId(account_id); - DCHECK(app_data); - return url::Origin::Create(app_data->install_url()); + // In kiosk mode for web apps and isolated web apps, all permission requests + // are auto-approved for the origin of the main app. + std::optional<url::Origin> current_kiosk_origin = GetCurrentKioskOrigin(); + if (current_kiosk_origin.has_value()) { + return current_kiosk_origin; } // In Shimless RMA mode, permission requests are auto-approved during runtime @@ -479,11 +507,6 @@ return ash::shimless_rma::DiagnosticsAppProfileHelperDelegate:: GetInstalledDiagnosticsAppOrigin(); } -#elif BUILDFLAG(IS_CHROMEOS_LACROS) - if (profiles::IsWebKioskSession()) { - return url::Origin::Create( - KioskSessionServiceLacros::Get()->GetInstallURL()); - } #endif return std::nullopt; }
diff --git a/chrome/browser/permissions/notifications_engagement_service_unittest.cc b/chrome/browser/permissions/notifications_engagement_service_unittest.cc index 05abc25..1711bdf 100644 --- a/chrome/browser/permissions/notifications_engagement_service_unittest.cc +++ b/chrome/browser/permissions/notifications_engagement_service_unittest.cc
@@ -4,9 +4,11 @@ #include <array> +#include "base/test/metrics/histogram_tester.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/permissions/notifications_engagement_service_factory.h" #include "chrome/test/base/testing_profile.h" +#include "components/site_engagement/content/site_engagement_service.h" #include "content/public/test/browser_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -192,6 +194,79 @@ ASSERT_EQ(3, entryForDate->GetDict().FindInt(kEngagementKey).value()); } +TEST_F(NotificationsEngagementServiceTest, + RecordNotificationDisplayedAndInteractionReportsUMA) { + GURL url1("https://url1.test/"); + GURL url2("https://url2.test/"); + GURL url3("https://url3.test/"); + GURL url4("https://url4.test/"); + GURL url5("https://url5.test/"); + GURL url6("https://url6.test/"); + GURL url7("https://url7.test/"); + GURL url8("https://url8.test/"); + + { + base::HistogramTester histogram_tester; + service()->RecordNotificationDisplayed(url1); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Displayed.Volume0", 0, 1); + } + + { + site_engagement::SiteEngagementService* site_engagement_service = + site_engagement::SiteEngagementService::Get(profile()); + site_engagement_service->AddPointsForTesting(url2, 4); + + base::HistogramTester histogram_tester; + service()->RecordNotificationDisplayed(url2); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Displayed.Volume0", + site_engagement_service->GetScore(url2) * 2, 1); + } + + { + base::HistogramTester histogram_tester; + service()->RecordNotificationDisplayed(url3, 7); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Displayed.Volume1", 0, 7); + } + + { + base::HistogramTester histogram_tester; + service()->RecordNotificationDisplayed(url4, 5 * 7); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Displayed.Volume5", 0, 5 * 7); + } + + { + base::HistogramTester histogram_tester; + service()->RecordNotificationDisplayed(url5, 10 * 7); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Displayed.Volume10", 0, 10 * 7); + } + + { + base::HistogramTester histogram_tester; + service()->RecordNotificationDisplayed(url6, 20 * 7); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Displayed.Volume20", 0, 20 * 7); + } + + { + base::HistogramTester histogram_tester; + service()->RecordNotificationDisplayed(url7, 30 * 7); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Displayed.VolumeAbove20", 0, 30 * 7); + } + + { + base::HistogramTester histogram_tester; + service()->RecordNotificationInteraction(url8); + histogram_tester.ExpectUniqueSample( + "Notifications.Engagement.Clicked.Volume0", 0, 1); + } +} + TEST_F(NotificationsEngagementServiceTest, EraseStaleEntries) { GURL url("https://www.google.com/");
diff --git a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea.xml b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea.xml index a7cbc07a2..aec85543 100644 --- a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea.xml +++ b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea.xml
@@ -179,6 +179,16 @@ android:text="@string/privacy_sandbox_m1_notice_eea_ack_button" style="@style/FilledButton" /> + <org.chromium.ui.widget.ButtonCompat + android:id="@+id/ack_button_equalized" + android:focusable="true" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/privacy_sandbox_consent_button_margin_between" + android:text="@string/privacy_sandbox_m1_notice_eea_ack_button" + style="@style/OutlinedButton" /> + </LinearLayout> </org.chromium.components.browser_ui.widget.BoundedLinearLayout> </LinearLayout>
diff --git a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v2.xml b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v2.xml index f5489c2b..6990ea8 100644 --- a/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v2.xml +++ b/chrome/browser/privacy_sandbox/android/java/res/layout/privacy_sandbox_notice_eea_v2.xml
@@ -225,6 +225,16 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/privacy_sandbox_consent_button_margin_between" android:text="@string/privacy_sandbox_m1_notice_eea_ack_button" + style="@style/FilledButton" /> + + <org.chromium.ui.widget.ButtonCompat + android:id="@+id/ack_button_equalized" + android:focusable="true" + android:layout_width="0dp" + android:layout_weight="1" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/privacy_sandbox_consent_button_margin_between" + android:text="@string/privacy_sandbox_m1_notice_eea_ack_button" style="@style/OutlinedButton" /> </LinearLayout>
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java index 13fe6cf5..174a87d 100644 --- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java +++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEEA.java
@@ -12,6 +12,7 @@ import android.widget.ScrollView; import org.chromium.base.metrics.RecordUserAction; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.components.browser_ui.widget.ChromeDialog; import org.chromium.ui.widget.ButtonCompat; import org.chromium.ui.widget.CheckableImageView; @@ -45,6 +46,14 @@ ButtonCompat ackButton = mContentView.findViewById(R.id.ack_button); ackButton.setOnClickListener(this); + ButtonCompat ackButtonEqualized = mContentView.findViewById(R.id.ack_button_equalized); + ackButtonEqualized.setOnClickListener(this); + if (ChromeFeatureList.isEnabled( + ChromeFeatureList.PRIVACY_SANDBOX_EQUALIZED_PROMPT_BUTTONS)) { + ackButton.setVisibility(View.GONE); + } else { + ackButtonEqualized.setVisibility(View.GONE); + } ButtonCompat settingsButton = mContentView.findViewById(R.id.settings_button); settingsButton.setOnClickListener(this); @@ -91,7 +100,7 @@ @Override public void onClick(View view) { int id = view.getId(); - if (id == R.id.ack_button) { + if (id == R.id.ack_button || id == R.id.ack_button_equalized) { RecordUserAction.record("Settings.PrivacySandbox.NoticeEeaDialog.AckClicked"); mPrivacySandboxBridge.promptActionOccurred( PromptAction.NOTICE_ACKNOWLEDGE, mSurfaceType);
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEeaV2.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEeaV2.java index b577271..ec94e596 100644 --- a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEeaV2.java +++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogNoticeEeaV2.java
@@ -86,6 +86,14 @@ ButtonCompat ackButton = mContentView.findViewById(R.id.ack_button); ackButton.setOnClickListener(this); + ButtonCompat ackButtonEqualized = mContentView.findViewById(R.id.ack_button_equalized); + ackButtonEqualized.setOnClickListener(this); + if (ChromeFeatureList.isEnabled( + ChromeFeatureList.PRIVACY_SANDBOX_EQUALIZED_PROMPT_BUTTONS)) { + ackButton.setVisibility(View.GONE); + } else { + ackButtonEqualized.setVisibility(View.GONE); + } ButtonCompat settingsButton = mContentView.findViewById(R.id.settings_button); settingsButton.setOnClickListener(this); @@ -259,7 +267,7 @@ @Override public void onClick(View view) { int id = view.getId(); - if (id == R.id.ack_button) { + if (id == R.id.ack_button || id == R.id.ack_button_equalized) { handleAckButtonClick(); } else if (id == R.id.settings_button) { handleSettingsButtonClick();
diff --git a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java index f01c1d0..b47f79b 100644 --- a/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java +++ b/chrome/browser/privacy_sandbox/android/javatests/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxDialogTest.java
@@ -48,6 +48,7 @@ import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DisabledTest; +import org.chromium.base.test.util.DoNotBatch; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Features.DisableFeatures; import org.chromium.base.test.util.Features.EnableFeatures; @@ -72,6 +73,7 @@ /** Tests {@link PrivacySandboxDialog}. */ @RunWith(ChromeJUnit4ClassRunner.class) +@DoNotBatch(reason = "Need to evaluate these tests for batching; some test startup behavior.") @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public final class PrivacySandboxDialogTest { @ClassRule @@ -89,6 +91,8 @@ public ChromeRenderTestRule mRenderTestRule = ChromeRenderTestRule.Builder.withPublicCorpus() .setBugComponent(ChromeRenderTestRule.Component.UI_SETTINGS_PRIVACY) + .setRevision(2) + .setDescription("Changed feature flag behavior for button equalization") .build(); private FakePrivacySandboxBridge mFakePrivacySandboxBridge; @@ -425,6 +429,33 @@ @Test @SmallTest + @Feature({"RenderTest"}) + @EnableFeatures({ + ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS, + ChromeFeatureList.PRIVACY_SANDBOX_EQUALIZED_PROMPT_BUTTONS, + }) + public void testRenderEeaNoticeV2AdMeasurementDropdownWithEqualizedButtons() + throws IOException { + ThreadUtils.runOnUiThreadBlocking( + () -> { + mDialog = + new PrivacySandboxDialogNoticeEeaV2( + sActivityTestRule.getActivity(), + new PrivacySandboxBridge(sActivityTestRule.getProfile(false)), + SurfaceType.BR_APP, + sActivityTestRule.getProfile(false), + sActivityTestRule.getActivity().getWindowAndroid()); + mDialog.show(); + }); + onViewWaiting(withId(R.id.privacy_sandbox_dialog)); + tryClickOn(withId(R.id.ad_measurement_dropdown_element)); + renderViewWithId( + R.id.privacy_sandbox_dialog, + "privacy_sandbox_eea_notice_dialog_v2_ad_measurement_dropdown_equalized_buttons"); + } + + @Test + @SmallTest @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS) public void testEeaNoticeV2AckButton() throws IOException { mFakePrivacySandboxBridge.setRequiredPromptType(PromptType.M1_NOTICE_EEA); @@ -564,6 +595,27 @@ @SmallTest @Feature({"RenderTest"}) @DisableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS) + @EnableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_EQUALIZED_PROMPT_BUTTONS) + public void testRenderEeaNoticeAdMeasurementDropdownWithEqualizedButtons() throws IOException { + ThreadUtils.runOnUiThreadBlocking( + () -> { + mDialog = + new PrivacySandboxDialogNoticeEEA( + sActivityTestRule.getActivity(), + new PrivacySandboxBridge(sActivityTestRule.getProfile(false)), + SurfaceType.BR_APP); + mDialog.show(); + }); + onViewWaiting(withId(R.id.privacy_sandbox_dialog)); + tryClickOn(withId(R.id.dropdown_element)); + renderViewWithId( + R.id.privacy_sandbox_dialog, "privacy_sandbox_eea_notice_dialog_equalized_buttons"); + } + + @Test + @SmallTest + @Feature({"RenderTest"}) + @DisableFeatures(ChromeFeatureList.PRIVACY_SANDBOX_ADS_API_UX_ENHANCEMENTS) public void testRenderROWNotice() throws IOException { ThreadUtils.runOnUiThreadBlocking( () -> {
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service.h b/chrome/browser/privacy_sandbox/privacy_sandbox_service.h index fc948248..957d8c5 100644 --- a/chrome/browser/privacy_sandbox/privacy_sandbox_service.h +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service.h
@@ -113,6 +113,8 @@ // has made the decision (accepted or declined the consent). kConsentClosedNoDecision = 10, + // TODO(crbug.com/386240885): Clean up old learn more, as it is not used for + // any of the Privacy Sandbox Dialogs anymore. // Interaction with notice bubble: click on the link to open interests // settings. kNoticeLearnMore = 11,
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc index 2426981..291fb5fc 100644 --- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl.cc
@@ -328,6 +328,7 @@ case PromptAction::kConsentShown: case PromptAction::kConsentAccepted: case PromptAction::kConsentDeclined: + case PromptAction::kConsentMoreInfoOpened: return GetTopicsConsentNoticeName(surface_type); case PromptAction::kRestrictedNoticeShown: case PromptAction::kRestrictedNoticeAcknowledge: @@ -336,6 +337,7 @@ case PromptAction::kNoticeShown: case PromptAction::kNoticeAcknowledge: case PromptAction::kNoticeOpenSettings: + case PromptAction::kNoticeMoreInfoOpened: return privacy_sandbox::IsConsentRequired() ? GetProtectedAudienceMeasurementNoticeName(surface_type) : GetThreeAdsAPIsNoticeName(surface_type); @@ -916,6 +918,12 @@ privacy_sandbox::NoticeActionTaken::kOptOut, base::Time::Now()); break; } + case PromptAction::kConsentMoreInfoOpened: { + notice_storage->SetNoticeActionTaken( + pref_service, notice_name, + privacy_sandbox::NoticeActionTaken::kLearnMore, base::Time::Now()); + break; + } // EEA and ROW notices case PromptAction::kNoticeShown: { notice_storage->SetNoticeShown(pref_service, notice_name, @@ -934,6 +942,12 @@ privacy_sandbox::NoticeActionTaken::kSettings, base::Time::Now()); break; } + case PromptAction::kNoticeMoreInfoOpened: { + notice_storage->SetNoticeActionTaken( + pref_service, notice_name, + privacy_sandbox::NoticeActionTaken::kLearnMore, base::Time::Now()); + break; + } // TODO(crbug.com/377557616): Update notice storage with new Ads API UX // Enhancements prompt actions
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc index ef6e8f99..1a85204b 100644 --- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc +++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_impl_unittest.cc
@@ -2681,6 +2681,7 @@ using NoticeAckTest = PrivacySandboxNoticeActionToStorageTests; using NoticeShownTest = PrivacySandboxNoticeActionToStorageTests; using NoticeSettingsTest = PrivacySandboxNoticeActionToStorageTests; +using LearnMoreTest = PrivacySandboxNoticeActionToStorageTests; TEST_P(TopicsConsentTest, DidConsentOptInUpdateNoticeStorage) { // Show then OptIn @@ -2775,6 +2776,36 @@ privacy_sandbox::NoticeStartupState::kFlowCompleted, 1); } +TEST_P(LearnMoreTest, DidLearnMoreActionUpdateNoticeStorage) { + // Show then trigger Learn More + privacy_sandbox_service()->PromptActionOccurred(GetParam().shown_type, + GetParam().surface_type); + privacy_sandbox_service()->PromptActionOccurred(GetParam().prompt_action, + GetParam().surface_type); + // Pref + auto actual = + notice_storage_->ReadNoticeData(prefs(), GetParam().notice_name); + EXPECT_EQ(privacy_sandbox::NoticeActionTaken::kLearnMore, + actual->notice_action_taken); + + // Histogram + CreateService(); + histogram_tester_.ExpectBucketCount( + base::StrCat({"PrivacySandbox.Notice.NoticeStartupState.", + GetParam().notice_name}), + privacy_sandbox::NoticeStartupState::kPromptWaiting, 1); + + histogram_tester_.ExpectTotalCount( + base::StrCat({"PrivacySandbox.Notice.FirstShownToInteractedDuration.", + GetParam().notice_name, "_LearnMore"}), + 1); + + histogram_tester_.ExpectTotalCount( + base::StrCat({"PrivacySandbox.Notice.LastShownToInteractedDuration.", + GetParam().notice_name, "_LearnMore"}), + 1); +} + base::test::FeatureRefAndParams ConsentFeature() { return { privacy_sandbox::kPrivacySandboxSettings4, @@ -2979,6 +3010,28 @@ .prompt_action = PromptAction::kRestrictedNoticeOpenSettings, .notice_name = privacy_sandbox::kMeasurementNoticeModalClankCCT}})); +INSTANTIATE_TEST_SUITE_P( + NoticeTestSuite, + LearnMoreTest, + testing::ValuesIn<NoticeTestingParameters>( + // Learn More click + {{.surface_type = SurfaceType::kDesktop, + .feature_flag = ConsentFeature(), + .shown_type = PromptAction::kConsentShown, + .prompt_action = PromptAction::kConsentMoreInfoOpened, + .notice_name = privacy_sandbox::kTopicsConsentModal}, + {.surface_type = SurfaceType::kDesktop, + .feature_flag = ConsentFeature(), + .shown_type = PromptAction::kNoticeShown, + .prompt_action = PromptAction::kNoticeMoreInfoOpened, + .notice_name = + privacy_sandbox::kProtectedAudienceMeasurementNoticeModal}, + {.surface_type = SurfaceType::kDesktop, + .feature_flag = NoticeFeature(), + .shown_type = PromptAction::kNoticeShown, + .prompt_action = PromptAction::kNoticeMoreInfoOpened, + .notice_name = privacy_sandbox::kThreeAdsAPIsNoticeModal}})); + class PrivacySandboxServiceM1RestrictedNoticeTest : public PrivacySandboxServiceTest { public:
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.ts b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.ts index 8f806ed..05f8bdf 100644 --- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.ts +++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_consent_step.ts
@@ -103,7 +103,7 @@ } private getButtonsClass_() { - return this.shouldShowV2() ? 'tonal-button' : ''; + return this.equalizedButtons() ? 'tonal-button' : ''; } }
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_mixin.ts b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_mixin.ts index cde3af7..5ffc38e 100644 --- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_mixin.ts +++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_mixin.ts
@@ -27,6 +27,12 @@ private moreButtonInitialized_: PromiseResolver<void>; private shouldShowV2_: boolean; + /** + * Contains true if the dialog dismissal buttons should be the same + * styling. + */ + private equalizedButtons_: boolean; + static get properties() { return { wasScrolledToBottom: { @@ -44,6 +50,16 @@ 'isPrivacySandboxAdsApiUxEnhancementsEnabled'); }, }, + + /* + * If true the dismissal buttons should have the same styling. + */ + equalizedButtons_: { + type: Boolean, + value: () => { + return loadTimeData.getBoolean('isEqualizedPromptButtons'); + }, + }, }; } @@ -51,6 +67,10 @@ return this.shouldShowV2_; } + equalizedButtons(): boolean { + return this.equalizedButtons_; + } + onConsentLearnMoreExpandedChanged( newValue: boolean, oldValue: boolean) { // Check both old and new value to avoid reporting actions when the @@ -289,6 +309,9 @@ // Returns true if the Ads API UX Enhancement should be shown. shouldShowV2(): boolean; + // Returns true if the notice buttons should be equalized. + equalizedButtons(): boolean; + onConsentLearnMoreExpandedChanged(newValue: boolean, oldValue: boolean): void; onNoticeLearnMoreExpandedChanged(newValue: boolean, oldValue: boolean): void; onNoticeSiteSuggestedAdsLearnMoreExpandedChanged(
diff --git a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.ts b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.ts index a04a051..cfb0d51 100644 --- a/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.ts +++ b/chrome/browser/resources/privacy_sandbox/privacy_sandbox_dialog_notice_step.ts
@@ -101,11 +101,11 @@ } private getSettingsButtonsClass_() { - return this.shouldShowV2() ? 'tonal-button' : ''; + return this.equalizedButtons() ? 'tonal-button' : ''; } private getAckButtonsClass_() { - return this.shouldShowV2() ? 'tonal-button' : 'action-button'; + return this.equalizedButtons() ? 'tonal-button' : 'action-button'; } }
diff --git a/chrome/browser/resources/settings/people_page/sync_account_control.ts b/chrome/browser/resources/settings/people_page/sync_account_control.ts index 07ad850..670fb4f 100644 --- a/chrome/browser/resources/settings/people_page/sync_account_control.ts +++ b/chrome/browser/resources/settings/people_page/sync_account_control.ts
@@ -181,6 +181,10 @@ this.syncBrowserProxy_.getStoredAccounts().then( this.handleStoredAccounts_.bind(this)); + + this.syncBrowserProxy_.getProfileAvatar().then( + this.handleUpdateAvatar_.bind(this)); + this.addWebUiListener( 'stored-accounts-updated', this.handleStoredAccounts_.bind(this)); this.addWebUiListener(
diff --git a/chrome/browser/resources/settings_shared/people_page/sync_browser_proxy.ts b/chrome/browser/resources/settings_shared/people_page/sync_browser_proxy.ts index de5a74b..0ed58f8 100644 --- a/chrome/browser/resources/settings_shared/people_page/sync_browser_proxy.ts +++ b/chrome/browser/resources/settings_shared/people_page/sync_browser_proxy.ts
@@ -244,6 +244,11 @@ getStoredAccounts(): Promise<StoredAccount[]>; /** + * Gets the current profile avatar. + */ + getProfileAvatar(): Promise<string>; + + /** * Function to invoke when the sync page has been navigated to. This * registers the UI as the "active" sync UI so that if the user tries to * open another sync UI, this one will be shown instead. @@ -365,6 +370,10 @@ return sendWithPromise('SyncSetupGetStoredAccounts'); } + getProfileAvatar() { + return sendWithPromise('SyncSetupGetProfileAvatar'); + } + didNavigateToSyncPage() { chrome.send('SyncSetupShowSetupUI'); }
diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc index 1ab1c69..3c42151 100644 --- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc
@@ -206,7 +206,8 @@ // GUIDs for easy identification later. We also make the last_modified times // slightly older than CreateTestTemplateURL's default, to test conflict // resolution. - syncer::SyncDataList CreateInitialSyncData() const; + syncer::SyncDataList CreateInitialSyncData( + base::Time last_modified = base::Time::FromTimeT(90)) const; // Syntactic sugar. std::unique_ptr<TemplateURL> Deserialize(const syncer::SyncData& sync_data); @@ -326,19 +327,20 @@ TemplateURLService::CreateSyncDataFromTemplateURL(*turl)); } -syncer::SyncDataList TemplateURLServiceSyncTest::CreateInitialSyncData() const { +syncer::SyncDataList TemplateURLServiceSyncTest::CreateInitialSyncData( + base::Time last_modified) const { syncer::SyncDataList list; - std::unique_ptr<TemplateURL> turl = CreateTestTemplateURL( - u"key1", "http://key1.com", "guid1", base::Time::FromTimeT(90)); + std::unique_ptr<TemplateURL> turl = + CreateTestTemplateURL(u"key1", "http://key1.com", "guid1", last_modified); list.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*turl.get())); - turl = CreateTestTemplateURL(u"key2", "http://key2.com", "guid2", - base::Time::FromTimeT(90)); + turl = + CreateTestTemplateURL(u"key2", "http://key2.com", "guid2", last_modified); list.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*turl.get())); - turl = CreateTestTemplateURL(u"key3", "http://key3.com", "guid3", - base::Time::FromTimeT(90)); + turl = + CreateTestTemplateURL(u"key3", "http://key3.com", "guid3", last_modified); list.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*turl.get())); @@ -2980,3 +2982,69 @@ ASSERT_EQ(added_turl, model()->GetTemplateURLForKeyword(kNewKeyword16)); EXPECT_EQ(new_timestamp, added_turl->last_modified()); } + +TEST_F(TemplateURLServiceSyncTestWithSeparateLocalAndAccountSearchEngines, + StopSyncingRemovesAccountOnlyTemplateURLs) { + // Add local and account template urls. + model()->Add(CreateTestTemplateURL( + /*keyword=*/u"abc", /*url=*/"http://abc.com", /*guid=*/"localguid")); + std::optional<syncer::ModelError> merge_error = + MergeAndExpectNotify(CreateInitialSyncData(), 1); + ASSERT_FALSE(merge_error.has_value()); + ASSERT_TRUE(model()->GetTemplateURLForGUID("guid1")); + ASSERT_TRUE(model()->GetTemplateURLForGUID("localguid")); + + model()->StopSyncing(syncer::SEARCH_ENGINES); + + // Only account template urls should get removed. + EXPECT_FALSE(model()->GetTemplateURLForGUID("guid1")); + EXPECT_TRUE(model()->GetTemplateURLForGUID("localguid")); +} + +TEST_F(TemplateURLServiceSyncTestWithSeparateLocalAndAccountSearchEngines, + StopSyncingRemovesAccountData) { + // Add local and account template urls. + model()->Add(CreateTestTemplateURL( + /*keyword=*/u"abc", /*url=*/"http://abc.com", /*guid=*/"guid1", + /*last_modified=*/base::Time::FromTimeT(10))); + std::optional<syncer::ModelError> merge_error = MergeAndExpectNotify( + CreateInitialSyncData(/*last_modified=*/base::Time::FromTimeT(100)), 1); + ASSERT_FALSE(merge_error.has_value()); + + // Account value wins as it has a more recent last_modified time. + const TemplateURL* turl = model()->GetTemplateURLForGUID("guid1"); + ASSERT_TRUE(turl); + ASSERT_EQ(turl->keyword(), u"key1"); + ASSERT_EQ(turl->url(), "http://key1.com"); + + model()->StopSyncing(syncer::SEARCH_ENGINES); + + // Only account data is removed. + EXPECT_TRUE(model()->GetTemplateURLForGUID("guid1")); + EXPECT_EQ(turl->keyword(), u"abc"); + EXPECT_EQ(turl->url(), "http://abc.com"); +} + +TEST_F(TemplateURLServiceSyncTestWithSeparateLocalAndAccountSearchEngines, + StopSyncingDoesNotRemoveLocalData) { + // Add local and account template urls. + model()->Add(CreateTestTemplateURL( + /*keyword=*/u"abc", /*url=*/"http://abc.com", /*guid=*/"guid1", + /*last_modified=*/base::Time::FromTimeT(100))); + std::optional<syncer::ModelError> merge_error = MergeAndExpectNotify( + CreateInitialSyncData(/*last_modified=*/base::Time::FromTimeT(10)), 1); + ASSERT_FALSE(merge_error.has_value()); + + // Local value wins as it has a more recent last_modified time. + const TemplateURL* turl = model()->GetTemplateURLForGUID("guid1"); + ASSERT_TRUE(turl); + ASSERT_EQ(turl->keyword(), u"abc"); + ASSERT_EQ(turl->url(), "http://abc.com"); + + model()->StopSyncing(syncer::SEARCH_ENGINES); + + // Account data is removed, but local value still persists. + EXPECT_TRUE(model()->GetTemplateURLForGUID("guid1")); + EXPECT_EQ(turl->keyword(), u"abc"); + EXPECT_EQ(turl->url(), "http://abc.com"); +}
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc index 4b993fc..36b8df5 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -809,8 +809,7 @@ return false; } - if (switches::IsImprovedSigninUIOnDesktopEnabled() || - IsPrimaryAccountInterception(intercepted_account_info.account_id, + if (IsPrimaryAccountInterception(intercepted_account_info.account_id, identity_manager_)) { return true; }
diff --git a/chrome/browser/signin/signin_promo_unittest.cc b/chrome/browser/signin/signin_promo_unittest.cc index bc1aad2b..cb8c4ae 100644 --- a/chrome/browser/signin/signin_promo_unittest.cc +++ b/chrome/browser/signin/signin_promo_unittest.cc
@@ -7,11 +7,15 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/autofill/personal_data_manager_factory.h" +#include "chrome/browser/signin/chrome_signin_client_factory.h" +#include "chrome/browser/signin/chrome_signin_client_test_util.h" #include "chrome/browser/signin/chrome_signin_pref_names.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/browser/signin/signin_promo_util.h" #include "chrome/common/webui_url_constants.h" +#include "chrome/test/base/scoped_testing_local_state.h" +#include "chrome/test/base/testing_browser_process.h" #include "components/autofill/core/browser/data_manager/personal_data_manager.h" #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/test_utils/test_profiles.h" @@ -24,8 +28,8 @@ #include "components/sync/base/command_line_switches.h" #include "components/sync/base/pref_names.h" #include "content/public/test/browser_task_environment.h" +#include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" namespace signin { @@ -312,6 +316,71 @@ *profile(), CreateAddress(non_eligible_country_code))); } +TEST_F(ShowSigninPromoTestExplicitBrowserSignin, + RecordSignInPromoShownWithoutAccount) { + // Add an account without cookies. The per-profile pref will be recorded. + AccountInfo account = + MakeAccountAvailable(identity_manager(), "test@email.com"); + + RecordSignInPromoShown( + signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE, profile()); + RecordSignInPromoShown( + signin_metrics::AccessPoint::ACCESS_POINT_ADDRESS_BUBBLE, profile()); + + EXPECT_EQ(1, profile()->GetPrefs()->GetInteger( + prefs::kPasswordSignInPromoShownCountPerProfile)); + EXPECT_EQ(1, profile()->GetPrefs()->GetInteger( + prefs::kAddressSignInPromoShownCountPerProfile)); + EXPECT_EQ(0, SigninPrefs(*profile()->GetPrefs()) + .GetPasswordSigninPromoImpressionCount(account.gaia)); + EXPECT_EQ(0, SigninPrefs(*profile()->GetPrefs()) + .GetAddressSigninPromoImpressionCount(account.gaia)); +} + +TEST_F(ShowSigninPromoTestExplicitBrowserSignin, + RecordSignInPromoShownWithAccount) { + // Test setup for adding an account with cookies. + ScopedTestingLocalState local_state(TestingBrowserProcess::GetGlobal()); + network::TestURLLoaderFactory url_loader_factory = + network::TestURLLoaderFactory(); + + TestingProfile::Builder builder; + builder.AddTestingFactories( + IdentityTestEnvironmentProfileAdaptor:: + GetIdentityTestEnvironmentFactoriesWithAppendedFactories( + {TestingProfile::TestingFactory{ + ChromeSigninClientFactory::GetInstance(), + base::BindRepeating(&BuildChromeSigninClientWithURLLoader, + &url_loader_factory)}})); + + std::unique_ptr<TestingProfile> profile = builder.Build(); + auto identity_test_env_adaptor = + std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile.get()); + auto* identity_test_env = identity_test_env_adaptor->identity_test_env(); + identity_test_env->SetTestURLLoaderFactory(&url_loader_factory); + + // Add an account with cookies, which will record the per-account prefs. + AccountInfo account = identity_test_env->MakeAccountAvailable( + identity_test_env->CreateAccountAvailabilityOptionsBuilder() + .WithAccessPoint(signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN) + .WithCookie(true) + .Build("test@email.com")); + + RecordSignInPromoShown( + signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE, profile.get()); + RecordSignInPromoShown( + signin_metrics::AccessPoint::ACCESS_POINT_ADDRESS_BUBBLE, profile.get()); + + EXPECT_EQ(0, profile.get()->GetPrefs()->GetInteger( + prefs::kPasswordSignInPromoShownCountPerProfile)); + EXPECT_EQ(0, profile.get()->GetPrefs()->GetInteger( + prefs::kAddressSignInPromoShownCountPerProfile)); + EXPECT_EQ(1, SigninPrefs(*profile.get()->GetPrefs()) + .GetPasswordSigninPromoImpressionCount(account.gaia)); + EXPECT_EQ(1, SigninPrefs(*profile.get()->GetPrefs()) + .GetAddressSigninPromoImpressionCount(account.gaia)); +} + #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) } // namespace signin
diff --git a/chrome/browser/signin/signin_promo_util.cc b/chrome/browser/signin/signin_promo_util.cc index 7e24cf9..5a6835aaf 100644 --- a/chrome/browser/signin/signin_promo_util.cc +++ b/chrome/browser/signin/signin_promo_util.cc
@@ -37,6 +37,7 @@ constexpr int kSigninPromoShownThreshold = 5; constexpr int kSigninPromoDismissedThreshold = 2; +// Maps to a subset of `signin_metrics::AccessPoint`. enum class AutofillSignInPromoType { kPassword, kAddress }; // Performs base checks for whether the sign in promos should be shown. @@ -134,6 +135,20 @@ return show_count < kSigninPromoShownThreshold; } +AutofillSignInPromoType GetAutofillSignInPromoType( + signin_metrics::AccessPoint access_point) { + CHECK(signin::IsAutofillSigninPromo(access_point)); + + switch (access_point) { + case signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE: + return AutofillSignInPromoType::kPassword; + case signin_metrics::AccessPoint::ACCESS_POINT_ADDRESS_BUBBLE: + return AutofillSignInPromoType::kAddress; + default: + NOTREACHED(); + } +} + } // namespace #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) @@ -246,4 +261,44 @@ signin_metrics::AccessPoint::ACCESS_POINT_ADDRESS_BUBBLE; } +#if BUILDFLAG(ENABLE_DICE_SUPPORT) +void RecordSignInPromoShown(signin_metrics::AccessPoint access_point, + Profile* profile) { + CHECK(profile); + + AccountInfo account = signin_ui_util::GetSingleAccountForPromos( + IdentityManagerFactory::GetForProfile(profile)); + AutofillSignInPromoType promo_type = GetAutofillSignInPromoType(access_point); + + // Record the pref per profile if there is no account present. + if (account.gaia.empty()) { + const char* pref_name; + switch (promo_type) { + case AutofillSignInPromoType::kPassword: + pref_name = prefs::kPasswordSignInPromoShownCountPerProfile; + break; + case AutofillSignInPromoType::kAddress: + pref_name = prefs::kAddressSignInPromoShownCountPerProfile; + break; + } + + int show_count = profile->GetPrefs()->GetInteger(pref_name); + profile->GetPrefs()->SetInteger(pref_name, show_count + 1); + return; + } + + // Record the pref for the account that was used for the promo, either because + // it is signed into the web or in sign in pending state. + switch (promo_type) { + case AutofillSignInPromoType::kPassword: + SigninPrefs(*profile->GetPrefs()) + .IncrementPasswordSigninPromoImpressionCount(account.gaia); + return; + case AutofillSignInPromoType::kAddress: + SigninPrefs(*profile->GetPrefs()) + .IncrementAddressSigninPromoImpressionCount(account.gaia); + } +} +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) + } // namespace signin
diff --git a/chrome/browser/signin/signin_promo_util.h b/chrome/browser/signin/signin_promo_util.h index c21da3d..f447c57 100644 --- a/chrome/browser/signin/signin_promo_util.h +++ b/chrome/browser/signin/signin_promo_util.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_SIGNIN_SIGNIN_PROMO_UTIL_H_ #define CHROME_BROWSER_SIGNIN_SIGNIN_PROMO_UTIL_H_ +#include "components/signin/public/base/signin_buildflags.h" + class Profile; namespace signin_metrics { @@ -30,6 +32,13 @@ // Returns whether `access_point` has an equivalent autofill signin promo. bool IsAutofillSigninPromo(signin_metrics::AccessPoint access_point); +#if BUILDFLAG(ENABLE_DICE_SUPPORT) +// Records that the sign in promo was shown, either for the account used for the +// promo, or for the profile if there is no account available. +void RecordSignInPromoShown(signin_metrics::AccessPoint access_point, + Profile* profile); +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) + } // namespace signin #endif // CHROME_BROWSER_SIGNIN_SIGNIN_PROMO_UTIL_H_
diff --git a/chrome/browser/supervised_user/linux_mac_windows/parent_access_view.cc b/chrome/browser/supervised_user/linux_mac_windows/parent_access_view.cc new file mode 100644 index 0000000..7f2bbb0 --- /dev/null +++ b/chrome/browser/supervised_user/linux_mac_windows/parent_access_view.cc
@@ -0,0 +1,112 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/supervised_user/linux_mac_windows/parent_access_view.h" + +#include <memory> + +#include "base/functional/bind.h" +#include "base/functional/callback_forward.h" +#include "chrome/browser/ui/browser_element_identifiers.h" +#include "components/constrained_window/constrained_window_views.h" +#include "ui/base/metadata/metadata_impl_macros.h" +#include "ui/gfx/geometry/rounded_corners_f.h" +#include "ui/views/controls/webview/webview.h" +#include "ui/views/view_class_properties.h" +#include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_delegate.h" +#include "ui/views/window/dialog_delegate.h" + +namespace { + +// TODO(crbug.com/383997522): Configure according to the mocks. +constexpr int kDialogWidth = 650; +constexpr int kDialogHeight = 450; + +constexpr char kPacpUrl[] = + "https://families.google.com/" + "parentaccess/consent?callerid=5140b89c&continue=https://" + "families.google.com"; + +const GURL GetPacpUrl(const GURL& blocked_url) { + // TODO(crbug.com/383997522): Construct the url we need to + // invoke on the PACP-side. Include any arguments that need + // to added to the url such as the `blocked_url`. + return GURL(kPacpUrl); +} + +} // namespace + +ParentAccessView::ParentAccessView(content::BrowserContext* context) { + CHECK(context); + // Create the web view in the native dialog. + web_view_ = AddChildView(std::make_unique<views::WebView>(context)); +} + +ParentAccessView::~ParentAccessView() = default; + +// static +base::WeakPtr<ParentAccessView> ParentAccessView::ShowParentAccessDialog( + content::WebContents* web_contents, + const GURL& target_url) { + CHECK(web_contents); + + auto dialog_delegate = std::make_unique<views::DialogDelegate>(); + dialog_delegate->SetButtons(static_cast<int>(ui::mojom::DialogButton::kNone)); + dialog_delegate->SetModalType(/*modal_type=*/ui::mojom::ModalType::kWindow); + dialog_delegate->SetShowCloseButton(/*show_close_button=*/false); + dialog_delegate->SetOwnedByWidget(/*delete_self=*/true); + + // Obtain the default, platform-approriate, corner radius value computed by + // the delegate. This needs to be set in the ParentAccessView's inner web_view. + int corner_radius = dialog_delegate->GetCornerRadius(); + + auto parent_access_view = + std::make_unique<ParentAccessView>(web_contents->GetBrowserContext()); + parent_access_view->Initialize(GetPacpUrl(target_url), corner_radius); + + // Keeps a pointer to the parent access views as it's ownership is transferred + // to the delegate. + auto view_weak_ptr = parent_access_view->GetWeakPtr(); + dialog_delegate->SetContentsView(std::move(parent_access_view)); + + constrained_window::CreateBrowserModalDialogViews( + std::move(dialog_delegate), + /*parent=*/web_contents->GetTopLevelNativeWindow()); + + // Shows the dialog. + view_weak_ptr->ShowNativeView(); + return view_weak_ptr; +} + +void ParentAccessView::Initialize(const GURL& pacp_url, int corner_radius) { + // Loads the PACP widget's url. This creates the new web_contents of the + // dialog. + web_view_->LoadInitialURL(pacp_url); + // Allows dismissing the dialog via the `Escape` button. + web_view_->set_allow_accelerators(true); + + web_view_->SetPreferredSize(gfx::Size(kDialogWidth, kDialogHeight)); + web_view_->SetProperty(views::kElementIdentifierKey, + kLocalWebParentApprovalDialogId); + + SetUseDefaultFillLayout(true); + corner_radius_ = corner_radius; + is_initialized_ = true; +} + +void ParentAccessView::ShowNativeView() { + auto* widget = GetWidget(); + if (!widget) { + return; + } + CHECK(is_initialized_); + // Applies the round corners to the inner web_view. + web_view_->holder()->SetCornerRadii(gfx::RoundedCornersF(corner_radius_)); + widget->Show(); + web_view_->RequestFocus(); +} + +BEGIN_METADATA(ParentAccessView) +END_METADATA
diff --git a/chrome/browser/supervised_user/linux_mac_windows/parent_access_view.h b/chrome/browser/supervised_user/linux_mac_windows/parent_access_view.h new file mode 100644 index 0000000..edae159 --- /dev/null +++ b/chrome/browser/supervised_user/linux_mac_windows/parent_access_view.h
@@ -0,0 +1,49 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SUPERVISED_USER_LINUX_MAC_WINDOWS_PARENT_ACCESS_VIEW_H_ +#define CHROME_BROWSER_SUPERVISED_USER_LINUX_MAC_WINDOWS_PARENT_ACCESS_VIEW_H_ + +#include "base/memory/raw_ptr.h" +#include "ui/views/view.h" + +namespace views { +class WebView; +} // namespace views + +namespace content { +class WebContents; +class BrowserContext; +} // namespace content + +// Implements a View to display the Parent Access Widget (PACP). +// The view contains a WebView which loads the PACP url. +class ParentAccessView : public views::View { + METADATA_HEADER(ParentAccessView, views::View) + + public: + explicit ParentAccessView(content::BrowserContext* context); + ~ParentAccessView() override; + + // Creates and opens a view that displays the Parent Access widget (PACP). + static base::WeakPtr<ParentAccessView> ShowParentAccessDialog( + content::WebContents* web_contents, + const GURL& target_url); + + base::WeakPtr<ParentAccessView> GetWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); + } + + private: + // Initialize ParentAccessView's web_view_ element. + void Initialize(const GURL& pacp_url, int corner_radius); + void ShowNativeView(); + + bool is_initialized_ = false; + int corner_radius_ = 0; + raw_ptr<views::WebView> web_view_ = nullptr; + base::WeakPtrFactory<ParentAccessView> weak_ptr_factory_{this}; +}; + +#endif // CHROME_BROWSER_SUPERVISED_USER_LINUX_MAC_WINDOWS_PARENT_ACCESS_VIEW_H_
diff --git a/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.cc b/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.cc index 0609ed4..3f47294d 100644 --- a/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.cc +++ b/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.cc
@@ -4,7 +4,9 @@ #include "chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.h" -#include "base/notreached.h" +#include "chrome/browser/supervised_user/linux_mac_windows/parent_access_view.h" +#include "components/supervised_user/core/common/features.h" +#include "content/public/browser/web_contents.h" #include "url/gurl.h" SupervisedUserWebContentHandlerImpl::SupervisedUserWebContentHandlerImpl( @@ -23,6 +25,17 @@ const std::u16string& child_display_name, const supervised_user::UrlFormatter& url_formatter, ApprovalRequestInitiatedCallback callback) { - // Method unsupposted on Desktop. - NOTREACHED(); + CHECK(base::FeatureList::IsEnabled(supervised_user::kLocalWebApprovals)); + CHECK(web_contents_); + + auto target_url = url_formatter.FormatUrl(url); + weak_parent_access_view_ = + ParentAccessView::ShowParentAccessDialog(web_contents_, target_url); + // TODO(crbug.com/383997522): Track the new web contents created by the above + // call to obtain the result of the parents' approval. + // TODO(crbug.com/383997522): Dismiss the dialog. + + // Runs the `callback` to inform the caller that the flow initiation was + // successful. + std::move(callback).Run(true); }
diff --git a/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.h b/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.h index d5acfddc..e93c57dd 100644 --- a/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.h +++ b/chrome/browser/supervised_user/linux_mac_windows/supervised_user_web_content_handler_impl.h
@@ -18,6 +18,8 @@ class UrlFormatter; } // namespace supervised_user +class ParentAccessView; + // Windows / Mac / Linux implementation of web content handler, which // forces unsupported methods to fail. class SupervisedUserWebContentHandlerImpl @@ -39,6 +41,7 @@ ApprovalRequestInitiatedCallback callback) override; private: + base::WeakPtr<ParentAccessView> weak_parent_access_view_; base::WeakPtrFactory<SupervisedUserWebContentHandlerImpl> weak_ptr_factory_{ this}; };
diff --git a/chrome/browser/sync/test/integration/search_engines_helper.cc b/chrome/browser/sync/test/integration/search_engines_helper.cc index 0c4ff3f1..174e32a 100644 --- a/chrome/browser/sync/test/integration/search_engines_helper.cc +++ b/chrome/browser/sync/test/integration/search_engines_helper.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "components/search_engines/template_url.h" +#include "components/sync/base/data_type.h" #include "testing/gmock/include/gmock/gmock.h" namespace { @@ -266,6 +267,24 @@ return base::UTF16ToUTF8(service->GetDefaultSearchProvider()->keyword()); } +bool HasSearchEngineInFakeServer(const std::string& keyword, + fake_server::FakeServer* fake_server) { + return GetSearchEngineInFakeServerWithKeyword(keyword, fake_server) + .has_value(); +} + +std::optional<sync_pb::SearchEngineSpecifics> +GetSearchEngineInFakeServerWithKeyword(const std::string& keyword, + fake_server::FakeServer* fake_server) { + for (const sync_pb::SyncEntity& entity : + fake_server->GetSyncEntitiesByDataType(syncer::SEARCH_ENGINES)) { + if (entity.specifics().search_engine().keyword() == keyword) { + return entity.specifics().search_engine(); + } + } + return std::nullopt; +} + SearchEnginesMatchChecker::SearchEnginesMatchChecker() { if (test()->UseVerifier()) { observations_.AddObservation(GetVerifierService()); @@ -303,4 +322,13 @@ CheckExitCondition(); } +FakeServerHasSearchEngineChecker::FakeServerHasSearchEngineChecker( + const std::string& keyword) + : keyword_(keyword) {} + +bool FakeServerHasSearchEngineChecker::IsExitConditionSatisfied( + std::ostream* os) { + return HasSearchEngineInFakeServer(keyword_, fake_server()); +} + } // namespace search_engines_helper
diff --git a/chrome/browser/sync/test/integration/search_engines_helper.h b/chrome/browser/sync/test/integration/search_engines_helper.h index b2e89b40..105fe35 100644 --- a/chrome/browser/sync/test/integration/search_engines_helper.h +++ b/chrome/browser/sync/test/integration/search_engines_helper.h
@@ -11,9 +11,11 @@ #include "base/memory/raw_ptr.h" #include "base/scoped_multi_source_observation.h" +#include "chrome/browser/sync/test/integration/fake_server_match_status_checker.h" #include "chrome/browser/sync/test/integration/status_change_checker.h" #include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service_observer.h" +#include "components/sync/protocol/search_engine_specifics.pb.h" class TemplateURL; @@ -77,6 +79,15 @@ // Returns the keyword for the default search engine at |profile_index|. std::string GetDefaultSearchEngineKeyword(int profile_index); +// Return true if the fake server has a search engine matching `keyword`. +bool HasSearchEngineInFakeServer(const std::string& keyword, + fake_server::FakeServer* fake_server); + +// Returns the first search engine matching `keyword` in the fake server. +std::optional<sync_pb::SearchEngineSpecifics> +GetSearchEngineInFakeServerWithKeyword(const std::string& keyword, + fake_server::FakeServer* fake_server); + // Checker that blocks until all services have the same search engine data. class SearchEnginesMatchChecker : public StatusChangeChecker, public TemplateURLServiceObserver { @@ -118,6 +129,20 @@ observations_{this}; }; +// Waits until the fake server has an expected search engine. +class FakeServerHasSearchEngineChecker + : public fake_server::FakeServerMatchStatusChecker { + public: + explicit FakeServerHasSearchEngineChecker(const std::string& keyword); + + protected: + // StatusChangeChecker overrides. + bool IsExitConditionSatisfied(std::ostream* os) override; + + private: + const std::string keyword_; +}; + } // namespace search_engines_helper #endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_SEARCH_ENGINES_HELPER_H_
diff --git a/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc b/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc index a596a57..89fb96a 100644 --- a/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_search_engines_sync_test.cc
@@ -2,18 +2,23 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/strings/stringprintf.h" +#include "base/test/scoped_feature_list.h" #include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/search_engines/template_url_service_test_util.h" #include "chrome/browser/sync/test/integration/search_engines_helper.h" +#include "chrome/browser/sync/test/integration/sync_service_impl_harness.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "chrome/browser/sync/test/integration/updated_progress_marker_checker.h" #include "chrome/test/base/search_test_utils.h" #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_data.h" #include "components/search_engines/template_url_service.h" +#include "components/sync/base/features.h" #include "components/sync/engine/loopback_server/loopback_server_entity.h" #include "components/sync/engine/loopback_server/persistent_unique_client_entity.h" #include "components/sync/model/sync_data.h" +#include "components/sync/protocol/search_engine_specifics.pb.h" #include "components/sync/service/sync_service_impl.h" #include "content/public/test/browser_test.h" #include "testing/gmock/include/gmock/gmock.h" @@ -107,3 +112,257 @@ // But "guid1" should be considered the "best", as it's the most recent. EXPECT_EQ(guid1, service->GetTemplateURLForKeyword(u"key1")); } + +class + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled + : public SingleClientSearchEnginesSyncTest { + public: + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled() + : feature_list_(syncer::kSeparateLocalAndAccountSearchEngines) {} + + protected: + auto CreateSyncEntity(const std::u16string& keyword, + const std::string& url, + const std::string& guid, + base::Time last_modified) { + return CreateFromTemplateURL(CreateTestTemplateURL( + /*keyword=*/keyword, /*url=*/url, + /*guid=*/guid, last_modified, + /*safe_for_autoreplace=*/false, + /*created_by_policy=*/TemplateURLData::PolicyOrigin::kNoPolicy, + /*prepopulate_id=*/100)); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldNotUploadLocalSearchEngines) { + ASSERT_TRUE(SetupClients()); + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + + ASSERT_TRUE(SetupSync()); + ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); + + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + EXPECT_TRUE( + search_engines_helper::HasSearchEngine(/*profile_index=*/0, "key1")); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldDownloadAccountSearchEngines) { + ASSERT_TRUE(SetupClients()); + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + ASSERT_FALSE(HasSearchEngine(/*profile_index=*/0, "key2")); + + // Create a remote TemplateURL. + fake_server_->InjectEntity(CreateSyncEntity( + /*keyword=*/u"key2", /*url=*/"http://key2.com", + /*guid=*/"guid2", base::Time::FromTimeT(10))); + + ASSERT_TRUE(SetupSync()); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key2")); + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldReplaceConflictingLocalBuiltInSearchEngine) { + ASSERT_TRUE(SetupClients()); + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + ASSERT_FALSE(HasSearchEngine(/*profile_index=*/0, "key2")); + + // Create a remote TemplateURL with the same prepopulate_id to conflict with + // the local search engine. + fake_server_->InjectEntity(CreateFromTemplateURL(CreateTestTemplateURL( + /*keyword=*/u"key2", /*url=*/"http://key2.com", + /*guid=*/"guid2"))); + + ASSERT_TRUE(SetupSync()); + + EXPECT_FALSE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key2")); + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + + // Disable sync. + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_FALSE(HasSearchEngine(/*profile_index=*/0, "key2")); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldRemoveAccountSearchEnginesUponSignout) { + ASSERT_TRUE(SetupClients()); + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + // Create a remote TemplateURL with a different prepopulate_id to avoid + // conflict. + fake_server_->InjectEntity(CreateSyncEntity( + /*keyword=*/u"key2", /*url=*/"http://key2.com", + /*guid=*/"guid2", base::Time::FromTimeT(10))); + + ASSERT_TRUE(SetupSync()); + + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key2")); + + // Disable sync. + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + EXPECT_FALSE(HasSearchEngine(/*profile_index=*/0, "key2")); + EXPECT_TRUE(search_engines_helper::HasSearchEngineInFakeServer( + "key2", GetFakeServer())); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldAddToLocalAndAccountSearchEngines) { + ASSERT_TRUE(SetupSync()); + + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_TRUE( + search_engines_helper::FakeServerHasSearchEngineChecker("key1").Wait()); + + // Disable sync. + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_TRUE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldDualWriteUponEdit) { + ASSERT_TRUE(SetupClients()); + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + + ASSERT_TRUE(SetupSync()); + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + ASSERT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + + // Update the short name and the url. + search_engines_helper::EditSearchEngine( + /*profile_index=*/0, "key1", u"short_name", "key1", "http://key1.com"); + EXPECT_TRUE( + search_engines_helper::FakeServerHasSearchEngineChecker("key1").Wait()); + + // Disable sync. + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_TRUE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + + // Ensure that the edits are applied to the local value. + const TemplateURL* local = + search_engines_helper::GetServiceForBrowserContext(0) + ->GetTemplateURLForKeyword(u"key1"); + ASSERT_TRUE(local); + EXPECT_EQ(u"short_name", local->short_name()); + EXPECT_EQ("http://key1.com", local->url()); + + // Ensure that the edits are applied to the account value. + const std::optional<sync_pb::SearchEngineSpecifics>& account = + search_engines_helper::GetSearchEngineInFakeServerWithKeyword( + "key1", GetFakeServer()); + ASSERT_TRUE(account); + EXPECT_EQ("short_name", account->short_name()); + EXPECT_EQ("http://key1.com", account->url()); +} + +// TODO(crbug.com/374903497): Investigate why these tests fail on ChromeOS. +#if !BUILDFLAG(IS_CHROMEOS) + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + PRE_ShouldPreserveLocalAndAccountSearchEnginesAcrossRestart) { + ASSERT_TRUE(SetupClients()); + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + fake_server_->InjectEntity(CreateSyncEntity( + /*keyword=*/u"key2", /*url=*/"http://key2.com", + /*guid=*/"guid2", base::Time::FromTimeT(10))); + + ASSERT_TRUE(SetupSync()); + + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key2")); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldPreserveLocalAndAccountSearchEnginesAcrossRestart) { + ASSERT_TRUE(SetupClients()); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key2")); + + ASSERT_TRUE(GetClient(0)->AwaitSyncSetupCompletion()); + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + EXPECT_TRUE(search_engines_helper::HasSearchEngineInFakeServer( + "key2", GetFakeServer())); + + // Disable sync. + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + EXPECT_FALSE(HasSearchEngine(/*profile_index=*/0, "key2")); + EXPECT_TRUE(search_engines_helper::HasSearchEngineInFakeServer( + "key2", GetFakeServer())); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + PRE_ShouldNotMarkLocalSearchEngineAsAccount) { + ASSERT_TRUE(SetupClients()); + search_engines_helper::AddSearchEngine(/*profile_index=*/0, "key1"); + + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); +} + +IN_PROC_BROWSER_TEST_F( + SingleClientSearchEnginesSyncTestWithSeparateLocalAndAccountSearchEnginesEnabled, + ShouldNotMarkLocalSearchEngineAsAccount) { + ASSERT_TRUE(SetupSync()); + + ASSERT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); + + // Disable sync. + ASSERT_TRUE(GetClient(0)->DisableSyncForType( + syncer::UserSelectableType::kPreferences)); + + EXPECT_TRUE(HasSearchEngine(/*profile_index=*/0, "key1")); + EXPECT_FALSE(search_engines_helper::HasSearchEngineInFakeServer( + "key1", GetFakeServer())); +} + +#endif // !BUILDFLAG(IS_CHROMEOS)
diff --git a/chrome/browser/touch_to_fill/password_manager/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java b/chrome/browser/touch_to_fill/password_manager/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java index 4718b46..95016f57 100644 --- a/chrome/browser/touch_to_fill/password_manager/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java +++ b/chrome/browser/touch_to_fill/password_manager/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java
@@ -27,7 +27,9 @@ import static org.chromium.chrome.browser.touch_to_fill.TouchToFillProperties.WebAuthnCredentialProperties.WEBAUTHN_FAVICON_OR_FALLBACK; import static org.chromium.chrome.browser.touch_to_fill.TouchToFillProperties.WebAuthnCredentialProperties.WEBAUTHN_ITEM_COLLECTION_INFO; +import android.content.Context; import android.text.Html; +import android.text.TextUtils; import android.text.method.PasswordTransformationMethod; import android.view.View; import android.view.ViewGroup; @@ -186,23 +188,9 @@ passwordText.setText(credential.getPassword()); passwordText.setTransformationMethod(new PasswordTransformationMethod()); - String label = - view.getContext() - .getString( - R.string - .touch_to_fill_password_credential_accessibility_description, - credential.getFormattedUsername()); - FillableItemCollectionInfo collectionInfo = model.get(ITEM_COLLECTION_INFO); - String contentDescription = - collectionInfo == null - ? label - : view.getContext() - .getString( - R.string.touch_to_fill_a11y_item_collection_info, - label, - collectionInfo.getPosition(), - collectionInfo.getTotal()); - view.setContentDescription(contentDescription); + view.setContentDescription( + createContentDescription( + credential, model.get(ITEM_COLLECTION_INFO), view.getContext())); } else if (propertyKey == SHOW_SUBMIT_BUTTON) { // Whether Touch To Fill should auto-submit a form doesn't affect the credentials list. } else { @@ -210,6 +198,34 @@ } } + private static String createContentDescription( + Credential credential, FillableItemCollectionInfo collectionInfo, Context context) { + String label; + if (TextUtils.isEmpty(credential.getDisplayName())) { + label = + context.getString( + R.string.touch_to_fill_password_credential_accessibility_description, + credential.getFormattedUsername()); + } else { + label = + context.getString( + R.string + .touch_to_fill_password_credential_accessibility_description_with_url, + credential.getFormattedUsername(), + credential.getDisplayName()); + } + + String contentDescription = + collectionInfo == null + ? label + : context.getString( + R.string.touch_to_fill_a11y_item_collection_info, + label, + collectionInfo.getPosition(), + collectionInfo.getTotal()); + return contentDescription; + } + /** * Called whenever a WebAuthn credential is bound to this view holder. *
diff --git a/chrome/browser/touch_to_fill/password_manager/android/internal/java/strings/android_touch_to_fill_strings.grd b/chrome/browser/touch_to_fill/password_manager/android/internal/java/strings/android_touch_to_fill_strings.grd index e527c50a..982e8cb 100644 --- a/chrome/browser/touch_to_fill/password_manager/android/internal/java/strings/android_touch_to_fill_strings.grd +++ b/chrome/browser/touch_to_fill/password_manager/android/internal/java/strings/android_touch_to_fill_strings.grd
@@ -246,6 +246,9 @@ <message name="IDS_TOUCH_TO_FILL_PASSWORD_CREDENTIAL_ACCESSIBILITY_DESCRIPTION" desc="Content description for a password credential item on the sheet list. This is not visually displayed, but is audibly read by screen readers for accessibility purposes."> Password for <ph name="USERNAME">%1$s<ex>John.Doe@example.com</ex></ph> </message> + <message name="IDS_TOUCH_TO_FILL_PASSWORD_CREDENTIAL_ACCESSIBILITY_DESCRIPTION_WITH_URL" desc="Content description for a password credential item on the sheet list. This is not visually displayed, but is audibly read by screen readers for accessibility purposes."> + Password for <ph name="USERNAME">%1$s<ex>John.Doe@example.com</ex></ph> saved for <ph name="WEBSITE">%2$s<ex>exmaple.com</ex></ph> + </message> <message name="IDS_TOUCH_TO_FILL_PASSKEY_CREDENTIAL_ACCESSIBILITY_DESCRIPTION" desc="Content description for a passkey credential item on the sheet list. This is not visually displayed, but is audibly read by screen readers for accessibility purposes."> Passkey for <ph name="USERNAME">%1$s<ex>John.Doe@example.com</ex></ph>, use your screen lock </message>
diff --git a/chrome/browser/touch_to_fill/password_manager/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_PASSWORD_CREDENTIAL_ACCESSIBILITY_DESCRIPTION_WITH_URL.png.sha1 b/chrome/browser/touch_to_fill/password_manager/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_PASSWORD_CREDENTIAL_ACCESSIBILITY_DESCRIPTION_WITH_URL.png.sha1 new file mode 100644 index 0000000..1fb317d --- /dev/null +++ b/chrome/browser/touch_to_fill/password_manager/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_PASSWORD_CREDENTIAL_ACCESSIBILITY_DESCRIPTION_WITH_URL.png.sha1
@@ -0,0 +1 @@ +adbf60195b9ddc371c7706ef57adf39d194cfedf \ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/password_manager/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java b/chrome/browser/touch_to_fill/password_manager/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java index 7f34c93..e6a00ca 100644 --- a/chrome/browser/touch_to_fill/password_manager/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java +++ b/chrome/browser/touch_to_fill/password_manager/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java
@@ -682,8 +682,9 @@ getActivity() .getString( R.string - .touch_to_fill_password_credential_accessibility_description, - ANA.getFormattedUsername()); + .touch_to_fill_password_credential_accessibility_description_with_url, + ANA.getFormattedUsername(), + ANA.getDisplayName()); assertEquals( getCredentials().getChildAt(0).getContentDescription(), getActivity() @@ -740,8 +741,9 @@ getActivity() .getString( R.string - .touch_to_fill_password_credential_accessibility_description, - ANA.getFormattedUsername())); + .touch_to_fill_password_credential_accessibility_description_with_url, + ANA.getFormattedUsername(), + ANA.getDisplayName())); assertNotNull(getCredentials().getChildAt(1)); assertEquals(
diff --git a/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyClientUnitTest.java b/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyClientUnitTest.java index 79b35354..14fdc722 100644 --- a/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyClientUnitTest.java +++ b/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyClientUnitTest.java
@@ -6,6 +6,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; @@ -15,7 +16,6 @@ import android.app.Activity; -import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -387,13 +387,13 @@ mSurveyController, mCrashUploadPermissionSupplier, mProfile); - Assert.assertThrows( + assertThrows( "Expected PSD(s) are missing.", AssertionError.class, () -> { client.showSurvey(mActivity, mLifecycleDispatcher); }); - Assert.assertThrows( + assertThrows( "Expected PSD(s) are missing.", AssertionError.class, () -> { @@ -404,7 +404,7 @@ stringValues.clear(); bitValues.clear(); bitValues.put("bitField", true); - Assert.assertThrows( + assertThrows( "Expected PSD(s) are missing.", AssertionError.class, () -> { @@ -415,7 +415,7 @@ stringValues.clear(); bitValues.clear(); stringValues.put("stringField", "value"); - Assert.assertThrows( + assertThrows( "Expected PSD(s) are missing.", AssertionError.class, () -> { @@ -427,7 +427,7 @@ bitValues.clear(); stringValues.put("stringField", "value"); stringValues.put("stringField2", "value2"); - Assert.assertThrows( + assertThrows( "Extra string PSDs were provided.", AssertionError.class, () -> {
diff --git a/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyThrottlerUnitTest.java b/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyThrottlerUnitTest.java index 96b802a..c8fd8c90 100644 --- a/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyThrottlerUnitTest.java +++ b/chrome/browser/ui/android/hats/internal/java/src/org/chromium/chrome/browser/ui/hats/SurveyThrottlerUnitTest.java
@@ -4,9 +4,12 @@ package org.chromium.chrome.browser.ui.hats; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import android.content.SharedPreferences; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -52,7 +55,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.USER_SELECTED_FOR_SURVEY)) { - Assert.assertTrue("Survey should be shown.", throttler.canShowSurvey()); + assertTrue("Survey should be shown.", throttler.canShowSurvey()); } } @@ -65,8 +68,7 @@ try (HistogramWatcher ignored = HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.FIRST_TIME_USER)) { - Assert.assertFalse( - "Survey shouldn't shown for first time users.", throttler.canShowSurvey()); + assertFalse("Survey shouldn't shown for first time users.", throttler.canShowSurvey()); } } @@ -75,7 +77,7 @@ final String triggerId1 = "triggerId1"; int date = 1; RiggedSurveyThrottler throttler1 = new RiggedSurveyThrottler(true, date, triggerId1); - Assert.assertTrue("User is selected for survey.", throttler1.canShowSurvey()); + assertTrue("User is selected for survey.", throttler1.canShowSurvey()); throttler1.recordSurveyPromptDisplayed(); // Try to show the survey in a far enough future. @@ -85,7 +87,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.SURVEY_PROMPT_ALREADY_DISPLAYED)) { - Assert.assertFalse("Survey can't shown if shown before.", throttlerNew.canShowSurvey()); + assertFalse("Survey can't shown if shown before.", throttlerNew.canShowSurvey()); } } @@ -107,8 +109,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.USER_SELECTED_FOR_SURVEY)) { - Assert.assertTrue( - "Survey with different triggerId can show.", throttler2.canShowSurvey()); + assertTrue("Survey with different triggerId can show.", throttler2.canShowSurvey()); } } @@ -117,8 +118,8 @@ String triggerId1 = "triggerId1"; RiggedSurveyThrottler throttler1 = new RiggedSurveyThrottler(/* randomlySelected= */ false, /* date= */ 1, triggerId1); - Assert.assertFalse("User is not selected for survey.", throttler1.canShowSurvey()); - Assert.assertEquals( + assertFalse("User is not selected for survey.", throttler1.canShowSurvey()); + assertEquals( "Trigger Id should be attempted.", throttler1.getEncodedDate(), getSurveyLastRequestedDate(triggerId1)); @@ -126,9 +127,9 @@ String triggerId2 = "triggerId2"; RiggedSurveyThrottler throttler2 = new RiggedSurveyThrottler(/* randomlySelected= */ true, /* date= */ 2, triggerId2); - Assert.assertTrue( + assertTrue( "TriggerId2 is not requested before and should show.", throttler2.canShowSurvey()); - Assert.assertEquals( + assertEquals( "Trigger Id should be attempted.", throttler2.getEncodedDate(), getSurveyLastRequestedDate(triggerId2)); @@ -144,8 +145,8 @@ /* month= */ 0, // Calendar.JANUARY /* date= */ 1, newSurveyConfig(triggerId1, false)); - Assert.assertTrue("User is selected for survey.", throttler1.canShowSurvey()); - Assert.assertEquals( + assertTrue("User is selected for survey.", throttler1.canShowSurvey()); + assertEquals( "Trigger Id should be attempted.", throttler1.getEncodedDate(), getSurveyLastRequestedDate(triggerId1)); @@ -163,7 +164,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.OTHER_SURVEY_DISPLAYED_RECENTLY)) { - Assert.assertFalse( + assertFalse( "Survey can't show since other survey is shown recently.", throttler2.canShowSurvey()); } @@ -180,8 +181,8 @@ /* month= */ 0, // Calendar.JANUARY /* date= */ 1, newSurveyConfig(triggerId1, false)); - Assert.assertTrue("User is selected for survey.", throttler1.canShowSurvey()); - Assert.assertEquals( + assertTrue("User is selected for survey.", throttler1.canShowSurvey()); + assertEquals( "Trigger Id should be attempted.", throttler1.getEncodedDate(), getSurveyLastRequestedDate(triggerId1)); @@ -197,7 +198,7 @@ /* month= */ 0, // Calendar.JANUARY /* date= */ 5, newSurveyConfig(triggerId2, false, Optional.of(10))); - Assert.assertTrue( + assertTrue( "User is selected for survey because the cooldown period is overridden to 10 days.", throttler2.canShowSurvey()); throttler2.recordSurveyPromptDisplayed(); @@ -216,7 +217,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.OTHER_SURVEY_DISPLAYED_RECENTLY)) { - Assert.assertFalse( + assertFalse( "Survey can't show since other survey with cooldown override is shown" + " recently.", throttler3.canShowSurvey()); @@ -231,7 +232,7 @@ /* month= */ 7, // Calendar.JULY /* date= */ 1, newSurveyConfig(triggerId4, false)); - Assert.assertTrue( + assertTrue( "User is selected for survey because the regular cooldown period is 180 days.", throttler4.canShowSurvey()); throttler4.recordSurveyPromptDisplayed(); @@ -247,8 +248,8 @@ /* month= */ 0, // Calendar.JANUARY /* date= */ 1, newSurveyConfig(triggerId1, false)); - Assert.assertTrue("User is selected for survey.", throttler1.canShowSurvey()); - Assert.assertEquals( + assertTrue("User is selected for survey.", throttler1.canShowSurvey()); + assertEquals( "TriggerId should be attempted.", throttler1.getEncodedDate(), getSurveyLastRequestedDate(triggerId1)); @@ -266,11 +267,11 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.USER_SELECTED_FOR_SURVEY)) { - Assert.assertTrue( + assertTrue( "Survey can show since other survey shown past the required 180 days.", throttler2.canShowSurvey()); } - Assert.assertEquals( + assertEquals( "TriggerId should be attempted.", throttler2.getEncodedDate(), getSurveyLastRequestedDate(triggerId2)); @@ -286,7 +287,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.USER_SELECTED_FOR_SURVEY)) { - Assert.assertTrue("Random selection should be true", throttler.canShowSurvey()); + assertTrue("Random selection should be true", throttler.canShowSurvey()); } } @@ -299,7 +300,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.USER_ALREADY_SAMPLED_TODAY)) { - Assert.assertFalse("Random selection should be false.", throttler.canShowSurvey()); + assertFalse("Random selection should be false.", throttler.canShowSurvey()); } } @@ -307,12 +308,12 @@ public void testEligibilityFirstTimeRollingQualifies() { RiggedSurveyThrottler throttler = new RiggedSurveyThrottler(/* randomlySelected= */ true, /* date= */ 1); - Assert.assertEquals( + assertEquals( "Last requested date do not exist yet.", -1, getSurveyLastRequestedDate(TEST_TRIGGER_ID)); - Assert.assertTrue("Random selection should be true", throttler.canShowSurvey()); - Assert.assertEquals( + assertTrue("Random selection should be true", throttler.canShowSurvey()); + assertEquals( "Trigger Id should be attempted.", throttler.getEncodedDate(), getSurveyLastRequestedDate(TEST_TRIGGER_ID)); @@ -326,9 +327,9 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.ROLLED_NON_ZERO_NUMBER)) { - Assert.assertFalse("Random selection should be false.", throttler.canShowSurvey()); + assertFalse("Random selection should be false.", throttler.canShowSurvey()); } - Assert.assertEquals( + assertEquals( "Trigger Id should be attempted.", throttler.getEncodedDate(), getSurveyLastRequestedDate(TEST_TRIGGER_ID)); @@ -348,7 +349,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.USER_PROMPT_SURVEY)) { - Assert.assertTrue( + assertTrue( "User prompted survey will show without random selection.", throttler.canShowSurvey()); } @@ -363,8 +364,7 @@ HistogramWatcher.newSingleRecordWatcher( "Android.Survey.SurveyFilteringResults", FilteringResult.FORCE_SURVEY_ON_COMMAND_PRESENT)) { - Assert.assertTrue( - "Survey should be enabled by commandline flag.", throttler.canShowSurvey()); + assertTrue("Survey should be enabled by commandline flag.", throttler.canShowSurvey()); } } @@ -376,12 +376,12 @@ int dateJan1st2020 = SurveyThrottler.getEncodedDateImpl(calendar); calendar.set(2020, Calendar.FEBRUARY, 1); int dateFeb1st2020 = SurveyThrottler.getEncodedDateImpl(calendar); - Assert.assertEquals( + assertEquals( "Date in between encoded dates is wrong.", 31, dateFeb1st2020 - dateJan1st2020); calendar.set(2019, Calendar.DECEMBER, 31); int dateDec31th2019 = SurveyThrottler.getEncodedDateImpl(calendar); - Assert.assertEquals( + assertEquals( "The last date has a gap for non-leap year. This is expected.", 2, dateJan1st2020 - dateDec31th2019); @@ -390,7 +390,7 @@ int dateDec31th2020 = SurveyThrottler.getEncodedDateImpl(calendar); calendar.set(2021, Calendar.JANUARY, 1); int dateJan1st2021 = SurveyThrottler.getEncodedDateImpl(calendar); - Assert.assertEquals( + assertEquals( "The last date has no gap for leap year.", 1, dateJan1st2021 - dateDec31th2020); }
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncPromoControllerUiTest.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncPromoControllerUiTest.java index 89b86e00..b2bf540 100644 --- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncPromoControllerUiTest.java +++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncPromoControllerUiTest.java
@@ -45,7 +45,6 @@ import org.chromium.base.test.util.ApplicationTestUtils; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; -import org.chromium.base.test.util.Features.EnableFeatures; import org.chromium.base.test.util.Restriction; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.profiles.Profile; @@ -64,7 +63,6 @@ import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.signin.test.util.TestAccounts; -import org.chromium.components.sync.SyncFeatureMap; import org.chromium.content_public.browser.test.NativeLibraryTestUtils; import org.chromium.ui.test.util.BlankUiTestActivity; import org.chromium.ui.test.util.DeviceRestriction; @@ -190,7 +188,6 @@ @Test @MediumTest - @EnableFeatures(SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE) public void testBookmarkSyncPromoContinueButtonLaunchesSigninFlow() throws Throwable { mSigninTestRule.addAccount("test@" + SyncPromoController.GMAIL_DOMAIN); ProfileDataCache profileDataCache = createProfileDataCache(); @@ -223,7 +220,6 @@ @MediumTest // Disabled on Automotive since the choose account button doesn't exist on Automotive. @Restriction({DeviceRestriction.RESTRICTION_TYPE_NON_AUTO}) - @EnableFeatures(SyncFeatureMap.SYNC_ENABLE_BOOKMARKS_IN_TRANSPORT_MODE) public void testBookmarkSyncPromoChooseAccountButtonLaunchesSigninFlow() throws Throwable { mSigninTestRule.addAccount("test@" + SyncPromoController.GMAIL_DOMAIN); ProfileDataCache profileDataCache = createProfileDataCache();
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb index 8e4b482..66044694 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -644,7 +644,7 @@ <translation id="3932390316856284148">Donja tablica za prijavu otvorena u punoj visini.</translation> <translation id="393697183122708255">Glasovno pretraživanje nije dostupno</translation> <translation id="3950820424414687140">Prijava</translation> -<translation id="395377504920307820">Upotrebljavaj bez računa</translation> +<translation id="395377504920307820">Koristite bez računa</translation> <translation id="396192773038029076">{NUM_IN_PROGRESS,plural, =1{Chrome će učitati stranicu kad bude spreman}one{Chrome će učitati stranice kad bude spreman}few{Chrome će učitati stranice kad bude spreman}other{Chrome će učitati stranice kad bude spreman}}</translation> <translation id="3969142555815019568">Chrome ne može provjeriti vaše zaporke</translation> <translation id="3969863827134279083">Premjesti prema gore</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb index 086efc75..8f7fa88 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -974,7 +974,7 @@ <translation id="5444999712122199445">தளத்திற்குச் செல்</translation> <translation id="544776284582297024">ஒரே நேரத்தில் தாவல்களைத் திறந்து வெவ்வேறு பக்கங்களைப் பார்வையிட, 'திறக்கப்பட்டுள்ள தாவல்கள்' பட்டனைத் தட்டவும்</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> உடன்</translation> -<translation id="5454215368971121976">உங்கள் சாதனம் மடிக்கப்படும்போது அதற்கான விருப்பத்தைத் தேர்ந்தெடுக்கலாம் அல்லது முகவரிப் பட்டியைத் தொட்டுப் பிடித்து அதன் நிலையை மாற்றலாம்.</translation> +<translation id="5454215368971121976">உங்கள் சாதனம் மடிக்கப்படும்போது உரிய விருப்பத்தைத் தேர்ந்தெடுத்தோ முகவரிப் பட்டியைத் தொட்டுப் பிடித்தோ அதன் நிலையை மாற்றலாம்.</translation> <translation id="5458366071038729214">நீங்கள் பின்தொடரும் தளங்களின் பட்டியல் இங்கே காட்டப்படும்</translation> <translation id="5468068603361015296"><ph name="FILE_NAME" /> ஃபைலைப் பதிவிறக்க வேண்டுமா?</translation> <translation id="548278423535722844">வரைபடப் பயன்பாட்டில் திற</translation>
diff --git a/chrome/browser/ui/browser_element_identifiers.cc b/chrome/browser/ui/browser_element_identifiers.cc index a325f045..deb461e 100644 --- a/chrome/browser/ui/browser_element_identifiers.cc +++ b/chrome/browser/ui/browser_element_identifiers.cc
@@ -55,6 +55,7 @@ DEFINE_ELEMENT_IDENTIFIER_VALUE(kLensPreselectionBubbleElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kLensPreselectionBubbleExitButtonElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kLensSidePanelSearchBoxElementId); +DEFINE_ELEMENT_IDENTIFIER_VALUE(kLocalWebParentApprovalDialogId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kLocationIconElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kNewTabButtonElementId); DEFINE_ELEMENT_IDENTIFIER_VALUE(kOfferNotificationChipElementId);
diff --git a/chrome/browser/ui/browser_element_identifiers.h b/chrome/browser/ui/browser_element_identifiers.h index 4ad9560..685504ca8 100644 --- a/chrome/browser/ui/browser_element_identifiers.h +++ b/chrome/browser/ui/browser_element_identifiers.h
@@ -64,6 +64,7 @@ DECLARE_ELEMENT_IDENTIFIER_VALUE(kLensPreselectionBubbleElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kLensPreselectionBubbleExitButtonElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kLensSidePanelSearchBoxElementId); +DECLARE_ELEMENT_IDENTIFIER_VALUE(kLocalWebParentApprovalDialogId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kLocationIconElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kNewTabButtonElementId); DECLARE_ELEMENT_IDENTIFIER_VALUE(kOfferNotificationChipElementId);
diff --git a/chrome/browser/ui/safety_hub/notification_permission_review_service.cc b/chrome/browser/ui/safety_hub/notification_permission_review_service.cc index 9f690b5..10554c15 100644 --- a/chrome/browser/ui/safety_hub/notification_permission_review_service.cc +++ b/chrome/browser/ui/safety_hub/notification_permission_review_service.cc
@@ -29,36 +29,6 @@ namespace { constexpr char kExcludedKey[] = "exempted"; -constexpr char kDisplayedKey[] = "display_count"; -// The daily average is calculated over the past this many days. -constexpr int kDays = 7; - -int ExtractNotificationCount(ContentSettingPatternSource item, - std::string date) { - if (!item.setting_value.is_dict()) { - return 0; - } - - base::Value::Dict* bucket = item.setting_value.GetDict().FindDict(date); - if (!bucket) { - return 0; - } - return bucket->FindInt(kDisplayedKey).value_or(0); -} - -int GetDailyAverageNotificationCount(ContentSettingPatternSource item) { - // Calculate daily average count for the past week. - base::Time date = base::Time::Now(); - int notification_count_total = 0; - - for (int day = 0; day < kDays; ++day) { - notification_count_total += ExtractNotificationCount( - item, permissions::NotificationsEngagementService::GetBucketLabel( - date - base::Days(day))); - } - - return std::ceil(notification_count_total / kDays); -} std::set<std::pair<ContentSettingsPattern, ContentSettingsPattern>> GetIgnoredPatternPairs(scoped_refptr<HostContentSettingsMap> hcsm) { @@ -87,7 +57,8 @@ for (auto& item : hcsm->GetSettingsForOneType( ContentSettingsType::NOTIFICATION_INTERACTIONS)) { result[std::pair{item.primary_pattern, item.secondary_pattern}] = - GetDailyAverageNotificationCount(item); + permissions::NotificationsEngagementService:: + GetDailyAverageNotificationCount(item); } return result;
diff --git a/chrome/browser/ui/views/autofill/address_sign_in_promo_view.cc b/chrome/browser/ui/views/autofill/address_sign_in_promo_view.cc index bedc2bd..0bc0c57 100644 --- a/chrome/browser/ui/views/autofill/address_sign_in_promo_view.cc +++ b/chrome/browser/ui/views/autofill/address_sign_in_promo_view.cc
@@ -19,8 +19,7 @@ views::View* anchor_view, content::WebContents* web_contents, base::OnceCallback<void(content::WebContents*)> move_address_callback) - : AddressBubbleBaseView(anchor_view, web_contents), - web_contents_(web_contents) { + : AddressBubbleBaseView(anchor_view, web_contents) { SetButtons(static_cast<int>(ui::mojom::DialogButton::kNone)); SetTitle(IDS_AUTOFILL_SIGNIN_PROMO_TITLE_ADDRESS); SetShowCloseButton(true); @@ -71,7 +70,11 @@ } void AddressSignInPromoView::WindowClosing() { - AddressBubblesController::FromWebContents(web_contents_)->OnBubbleClosed(); + if (!web_contents()) { + return; + } + + AddressBubblesController::FromWebContents(web_contents())->OnBubbleClosed(); } DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(AddressSignInPromoView,
diff --git a/chrome/browser/ui/views/autofill/address_sign_in_promo_view.h b/chrome/browser/ui/views/autofill/address_sign_in_promo_view.h index 3062c34d..f41cdc8 100644 --- a/chrome/browser/ui/views/autofill/address_sign_in_promo_view.h +++ b/chrome/browser/ui/views/autofill/address_sign_in_promo_view.h
@@ -32,9 +32,6 @@ // views::WidgetDelegate: void WindowClosing() override; - - private: - raw_ptr<content::WebContents> web_contents_; }; } // namespace autofill
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc index a5ed376..388bb0e 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_unittest.cc
@@ -50,6 +50,7 @@ #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/button/menu_button.h" +#include "ui/views/style/platform_style.h" #include "ui/views/test/views_test_utils.h" #include "ui/views/view_utils.h" #include "url/gurl.h" @@ -660,6 +661,30 @@ EXPECT_EQ(u"new title\na.com", button->GetTooltipText(p)); } +// Regression test for https://crbug.com/385805737. When BookmarkButton receives +// an AddedToWidget call, it should also call the corresponding superclass +// method (specifically, `LabelButton::AddedToWidget()` must be called). +TEST_F(BookmarkBarViewInWidgetTest, + BookmarkButtonAddedToWidgetCallsSuperclass) { + widget()->ShowInactive(); + widget()->Hide(); + + bookmarks::test::AddNodesFromModelString(model(), + model()->bookmark_bar_node(), "a b"); + SizeUntilButtonsVisible(1); + + // `BookmarkButton::AddedToWidget()` will have been called, so ensure that + // `LabelButton::AddedToWidget()` has been called as well. + ASSERT_EQ(1u, test_helper_->GetBookmarkButtonCount()); + views::LabelButton* button = test_helper_->GetBookmarkButton(0); + ASSERT_TRUE(button); + // The `LabelButton::AddedToWidget()` call only has an effect for bookmark + // buttons on certain platforms, so gate the check. + if (views::PlatformStyle::kInactiveWidgetControlsAppearDisabled) { + EXPECT_TRUE(button->has_paint_as_active_subscription_for_testing()); + } +} + // TODO(crbug.com/375364962): Flaky on Windows & Linux. #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) #define MAYBE_AccessibleRoleDescription DISABLED_AccessibleRoleDescription
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_button.cc b/chrome/browser/ui/views/bookmarks/bookmark_button.cc index 301f66a..3d1e314e 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_button.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_button.cc
@@ -118,12 +118,16 @@ BookmarkButton::~BookmarkButton() = default; void BookmarkButton::AddedToWidget() { + BookmarkButtonBase::AddedToWidget(); + widget_observation_.Observe(GetWidget()); UpdateMaxTooltipWidth(); } void BookmarkButton::RemovedFromWidget() { + BookmarkButtonBase::RemovedFromWidget(); + widget_observation_.Reset(); }
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.cc b/chrome/browser/ui/views/frame/browser_view_layout.cc index c364e30..0c01106 100644 --- a/chrome/browser/ui/views/frame/browser_view_layout.cc +++ b/chrome/browser/ui/views/frame/browser_view_layout.cc
@@ -783,10 +783,12 @@ // minimum. gfx::Rect side_panel_bounds = contents_container_bounds; + // Cap the side panel width at 2/3rds of the contents container width as long + // as the side panel remains at or above its minimum width. side_panel_bounds.set_width( - std::min(side_panel->GetPreferredSize().width(), - contents_container_bounds.width() - GetMinWebContentsWidth() - - side_panel_separator->GetPreferredSize().width())); + std::max(std::min(side_panel->GetPreferredSize().width(), + contents_container_bounds.width() * 2 / 3), + side_panel->GetMinimumSize().width())); double side_panel_visible_width = side_panel_bounds.width() *
diff --git a/chrome/browser/ui/views/glic/border/border_view.cc b/chrome/browser/ui/views/glic/border/border_view.cc index 74abf0de..ae9f53b3 100644 --- a/chrome/browser/ui/views/glic/border/border_view.cc +++ b/chrome/browser/ui/views/glic/border/border_view.cc
@@ -70,6 +70,13 @@ MakeTopMostChild(observed_view, child); } +void BorderView::OnViewBoundsChanged(views::View* observed_view) { + if (observed_view != parent()) { + return; + } + SetBoundsRect(parent()->bounds()); +} + void BorderView::OnAnimationStep(base::TimeTicks timestamp) { // Update the border style based on`timestamp` and the motion curve(s). } @@ -87,7 +94,7 @@ return; } animation_ongoing_ = true; - SetBoundsRect(parent()->GetVisibleBounds()); + SetBoundsRect(parent()->bounds()); SetPaintToLayer(); layer()->SetFillsBoundsOpaquely(false); } @@ -102,7 +109,8 @@ DestroyLayer(); } -void BorderView::MakeTopMostChild(View* parent_view, View* child) { +void BorderView::MakeTopMostChild(views::View* parent_view, + views::View* child) { CHECK(parent()); if (parent_view != parent()) { return;
diff --git a/chrome/browser/ui/views/glic/border/border_view.h b/chrome/browser/ui/views/glic/border/border_view.h index 4482929..a792c9b 100644 --- a/chrome/browser/ui/views/glic/border/border_view.h +++ b/chrome/browser/ui/views/glic/border/border_view.h
@@ -46,7 +46,9 @@ // `views::ViewObserver`: void OnChildViewAdded(views::View* observed_view, views::View* child) override; - void OnChildViewReordered(View* observed_view, View* child) override; + void OnChildViewReordered(views::View* observed_view, + views::View* child) override; + void OnViewBoundsChanged(views::View* observed_view) override; // `ui::CompositorAnimationObserver`: void OnAnimationStep(base::TimeTicks timestamp) override; @@ -58,7 +60,7 @@ private: // Reorder `this` to make sure `this` is the topmost child of `parent()`. - void MakeTopMostChild(View* observed_view, View* child); + void MakeTopMostChild(views::View* observed_view, views::View* child); // Tracks if we are during a `MakeTopMostChild()`. Used to prevent infinite // re-entrance to `MakeTopMostChild()`,
diff --git a/chrome/browser/ui/views/glic/border/border_view_browsertest.cc b/chrome/browser/ui/views/glic/border/border_view_browsertest.cc index d0e35ad7..20006977 100644 --- a/chrome/browser/ui/views/glic/border/border_view_browsertest.cc +++ b/chrome/browser/ui/views/glic/border/border_view_browsertest.cc
@@ -8,6 +8,7 @@ #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/test/base/in_process_browser_test.h" #include "content/public/test/browser_test.h" +#include "content/public/test/test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/metadata/metadata_header_macros.h" @@ -16,6 +17,40 @@ namespace glic { namespace { +using BorderViewBrowserTest = InProcessBrowserTest; +} + +// Exercise that, the border is resized correctly whenever the browser's size +// changes. +IN_PROC_BROWSER_TEST_F(BorderViewBrowserTest, BorderResize) { + // TODO(crbug.com/385828490): We should exercise the proper closing flow. + // Currently the BookmarkModel has a dangling observer during destruction, if + // the glic UI is toggled. + auto* border = + browser()->window()->AsBrowserView()->contents_web_view()->glic_border(); + border->StartAnimation(); + auto* contents_web_view = browser()->GetBrowserView().contents_web_view(); + EXPECT_EQ(border->GetVisibleBounds(), contents_web_view->GetVisibleBounds()); + + // Note: there is a minimal size that the desktop window can be. It seems to + // be around 500px by 500px. + const gfx::Size new_size(600, 600); + auto* browser_window = browser()->window(); + const gfx::Rect new_bounds(browser_window->GetBounds().origin(), new_size); + EXPECT_NE(browser_window->GetBounds(), new_bounds); + + { + SCOPED_TRACE("resizing"); + browser_window->SetBounds(new_bounds); + content::RunAllPendingInMessageLoop(); + } + + // Resized correctly. + EXPECT_EQ(browser_window->GetBounds(), new_bounds); + EXPECT_EQ(border->GetVisibleBounds(), contents_web_view->GetVisibleBounds()); +} + +namespace { class BorderViewZOrderBrowserTest : public InProcessBrowserTest, public ::testing::WithParamInterface<bool> {
diff --git a/chrome/browser/ui/views/passwords/password_save_update_view.cc b/chrome/browser/ui/views/passwords/password_save_update_view.cc index cf4bac7..576e0b1 100644 --- a/chrome/browser/ui/views/passwords/password_save_update_view.cc +++ b/chrome/browser/ui/views/passwords/password_save_update_view.cc
@@ -237,21 +237,6 @@ std::move(move_callback)); AddChildView(std::move(sign_in_promo)); - // Record that the sign in promo was shown. - Profile* profile = controller_.GetProfile(); - AccountInfo account = signin_ui_util::GetSingleAccountForPromos( - IdentityManagerFactory::GetForProfile(profile)); - - if (account.gaia.empty()) { - int show_count = profile->GetPrefs()->GetInteger( - prefs::kPasswordSignInPromoShownCountPerProfile); - profile->GetPrefs()->SetInteger( - prefs::kPasswordSignInPromoShownCountPerProfile, show_count + 1); - } else { - SigninPrefs(*profile->GetPrefs()) - .IncrementPasswordSigninPromoImpressionCount(account.gaia); - } - // Notify the screen reader that the bubble changed. AnnounceBubbleChange();
diff --git a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_browsertest.cc b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_browsertest.cc index dc309b7c..870b1f5e 100644 --- a/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/privacy_sandbox/privacy_sandbox_dialog_view_browsertest.cc
@@ -88,9 +88,7 @@ }; #if !BUILDFLAG(IS_LINUX) -// TODO(crbug.com/371487612): Re-enable this tests. -IN_PROC_BROWSER_TEST_F(PrivacySandboxDialogViewBrowserTest, - DISABLED_InvokeUi_Consent) { +IN_PROC_BROWSER_TEST_F(PrivacySandboxDialogViewBrowserTest, InvokeUi_Consent) { base::WaitableEvent shown_waiter; base::WaitableEvent closed_waiter; @@ -111,9 +109,7 @@ closed_waiter.TimedWait(kMaxWaitTime); } -// TODO(crbug.com/371487612): Re-enable this test. -IN_PROC_BROWSER_TEST_F(PrivacySandboxDialogViewBrowserTest, - DISABLED_InvokeUi_Notice) { +IN_PROC_BROWSER_TEST_F(PrivacySandboxDialogViewBrowserTest, InvokeUi_Notice) { base::WaitableEvent shown_waiter; base::WaitableEvent closed_waiter;
diff --git a/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_view.cc b/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_view.cc index 83651b5..2b4d02c 100644 --- a/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_view.cc +++ b/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_view.cc
@@ -72,6 +72,8 @@ std::make_unique<AutofillBubbleSignInPromoView::DiceSigninPromoDelegate>( &controller_); + signin::RecordSignInPromoShown(access_point, profile); + AddChildView(new BubbleSignInPromoView( profile, dice_sign_in_promo_delegate_.get(), access_point)); }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_coordinator_browsertest.cc b/chrome/browser/ui/views/side_panel/side_panel_coordinator_browsertest.cc index 8e67de5..e7145ed 100644 --- a/chrome/browser/ui/views/side_panel/side_panel_coordinator_browsertest.cc +++ b/chrome/browser/ui/views/side_panel/side_panel_coordinator_browsertest.cc
@@ -322,6 +322,131 @@ IN_PROC_BROWSER_TEST_F(SidePanelCoordinatorTest, ChangeSidePanelWidth) { Init(); + // Set side panel to left-aligned so positive resize increments mean an + // increase in side panel width. + browser()->GetBrowserView().GetProfile()->GetPrefs()->SetBoolean( + prefs::kSidePanelHorizontalAlignment, false); + coordinator()->DisableAnimationsForTesting(); + + const int min_side_panel_width = browser() + ->GetBrowserView() + .unified_side_panel() + ->GetMinimumSize() + .width(); + + // Set the browser width so that two thirds of the browser would be larger + // than the minimum side panel width. + gfx::Rect original_browser_bounds(browser()->GetBrowserView().GetBounds()); + gfx::Rect new_bounds(original_browser_bounds); + new_bounds.set_width(min_side_panel_width * 3); + // Explicitly restore the browser window on ChromeOS, as it would otherwise + // be maximized and the SetBounds call would be a no-op. +#if BUILDFLAG(IS_CHROMEOS) + browser()->GetBrowserView().Restore(); +#endif + browser()->GetBrowserView().SetBounds(new_bounds); + + coordinator()->Toggle(SidePanelEntry::Key(SidePanelEntry::Id::kBookmarks), + SidePanelOpenTrigger::kPinnedEntryToolbarButton); + int browser_width = browser()->GetBrowserView().GetLocalBounds().width(); + int two_thirds_browser_width = browser_width * 2 / 3; + // Select a starting width less than the min width. + const int starting_width = min_side_panel_width - 1; + browser()->GetBrowserView().unified_side_panel()->SetPanelWidth( + starting_width); + views::test::RunScheduledLayout(&browser()->GetBrowserView()); + // Verify the side panel will is at the min width. + EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), + min_side_panel_width); + + // Increment the side panel width so that it is larger than the min width but + // less than two thirds of the browser width. + int increment = (two_thirds_browser_width - min_side_panel_width) / 2; + browser()->GetBrowserView().unified_side_panel()->OnResize(increment, true); + views::test::RunScheduledLayout(&browser()->GetBrowserView()); + // Verify the side panel is at its preferred width. + EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), + browser() + ->GetBrowserView() + .unified_side_panel() + ->GetPreferredSize() + .width()); + + // Increment the side panel width so that it is larger than two thirds of the + // browser width. + increment = (two_thirds_browser_width + 1) - + browser()->GetBrowserView().unified_side_panel()->width(); + browser()->GetBrowserView().unified_side_panel()->OnResize(increment, true); + views::test::RunScheduledLayout(&browser()->GetBrowserView()); + // Verify the side panel width is capped at two thirds of the browser width. + EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), + two_thirds_browser_width); +} + +// TODO(crbug.com/384507412): Flaky on Linux and ChromeOS. +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#define MAYBE_ChangeSidePanelWidthNarrowWindow \ + DISABLED_ChangeSidePanelWidthNarrowWindow +#else +#define MAYBE_ChangeSidePanelWidthNarrowWindow ChangeSidePanelWidthNarrowWindow +#endif + +IN_PROC_BROWSER_TEST_F(SidePanelCoordinatorTest, + MAYBE_ChangeSidePanelWidthNarrowWindow) { + Init(); + // Set side panel to left-aligned so positive resize increments mean an + // increase in side panel width. + browser()->GetBrowserView().GetProfile()->GetPrefs()->SetBoolean( + prefs::kSidePanelHorizontalAlignment, false); + coordinator()->DisableAnimationsForTesting(); + + const int min_side_panel_width = browser() + ->GetBrowserView() + .unified_side_panel() + ->GetMinimumSize() + .width(); + + // Set the browser width so that two thirds of the browser would be larger + // than the minimum side panel width. + gfx::Rect original_browser_bounds(browser()->GetBrowserView().GetBounds()); + gfx::Rect new_bounds(original_browser_bounds); + new_bounds.set_width((min_side_panel_width - 3) * 3 / 2); + // Explicitly restore the browser window on ChromeOS, as it would otherwise + // be maximized and the SetBounds call would be a no-op. +#if BUILDFLAG(IS_CHROMEOS) + browser()->GetBrowserView().Restore(); +#endif + browser()->GetBrowserView().SetBounds(new_bounds); + + coordinator()->Toggle(SidePanelEntry::Key(SidePanelEntry::Id::kBookmarks), + SidePanelOpenTrigger::kPinnedEntryToolbarButton); + int browser_width = browser()->GetBrowserView().GetLocalBounds().width(); + int two_thirds_browser_width = browser_width * 2 / 3; + EXPECT_GT(min_side_panel_width, two_thirds_browser_width); + + // Set the side panel width to be less than the min side panel width. + browser()->GetBrowserView().unified_side_panel()->SetPanelWidth( + min_side_panel_width - 1); + views::test::RunScheduledLayout(&browser()->GetBrowserView()); + // Verify the side panel width is the minimum width and is greater than two + // thirds of the browser width. + EXPECT_GT(browser()->GetBrowserView().unified_side_panel()->width(), + two_thirds_browser_width); + EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), + min_side_panel_width); + + // Set the side panel width to be larger than the min side panel width. + browser()->GetBrowserView().unified_side_panel()->SetPanelWidth( + min_side_panel_width + 1); + views::test::RunScheduledLayout(&browser()->GetBrowserView()); + // Verify the side panel width is is the minimum width. + EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), + min_side_panel_width); +} + +IN_PROC_BROWSER_TEST_F(SidePanelCoordinatorTest, + ChangeSidePanelWidthRightAlign) { + Init(); // Set side panel to right-aligned browser()->GetBrowserView().GetProfile()->GetPrefs()->SetBoolean( prefs::kSidePanelHorizontalAlignment, true); @@ -337,26 +462,17 @@ const int increment = 50; browser()->GetBrowserView().unified_side_panel()->OnResize(increment, true); views::test::RunScheduledLayout(&browser()->GetBrowserView()); + // Verify positive increments reduce the side panel width EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), starting_width - increment); - - // Set side panel to left-aligned - browser()->GetBrowserView().GetProfile()->GetPrefs()->SetBoolean( - prefs::kSidePanelHorizontalAlignment, false); - browser()->GetBrowserView().unified_side_panel()->SetPanelWidth( - starting_width); - views::test::RunScheduledLayout(&browser()->GetBrowserView()); - EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), - starting_width); - - browser()->GetBrowserView().unified_side_panel()->OnResize(increment, true); - views::test::RunScheduledLayout(&browser()->GetBrowserView()); - EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), - starting_width + increment); } IN_PROC_BROWSER_TEST_F(SidePanelCoordinatorTest, ChangeSidePanelWidthMaxMin) { Init(); + // Set side panel to left-aligned so positive resize increments mean an + // increase in side panel width. + browser()->GetBrowserView().GetProfile()->GetPrefs()->SetBoolean( + prefs::kSidePanelHorizontalAlignment, false); coordinator()->DisableAnimationsForTesting(); coordinator()->Toggle(SidePanelEntry::Key(SidePanelEntry::Id::kBookmarks), @@ -374,22 +490,27 @@ browser()->GetBrowserView().unified_side_panel()->OnResize(large_increment, true); views::test::RunScheduledLayout(&browser()->GetBrowserView()); - EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), - browser() - ->GetBrowserView() - .unified_side_panel() - ->GetMinimumSize() - .width()); - browser()->GetBrowserView().unified_side_panel()->OnResize(-large_increment, - true); - views::test::RunScheduledLayout(&browser()->GetBrowserView()); + const int browser_width = + browser()->GetBrowserView().GetLocalBounds().width(); + const int two_thirds_browser_width = browser_width * 2 / 3; + EXPECT_EQ(browser()->GetBrowserView().unified_side_panel()->width(), + std::max(browser() + ->GetBrowserView() + .unified_side_panel() + ->GetMinimumSize() + .width(), + two_thirds_browser_width)); + BrowserViewLayout* layout_manager = static_cast<BrowserViewLayout*>( browser()->GetBrowserView().GetLayoutManager()); - const int min_web_contents_width = - layout_manager->GetMinWebContentsWidthForTesting(); + // the web contents width will either be it's min width or 1/3 the browser + // width minus the side panel separator width. + const int web_contents_width = + std::max(layout_manager->GetMinWebContentsWidthForTesting(), + (browser_width - two_thirds_browser_width - 1)); EXPECT_EQ(browser()->GetBrowserView().contents_web_view()->width(), - min_web_contents_width); + web_contents_width); } IN_PROC_BROWSER_TEST_F(SidePanelCoordinatorTest, ChangeSidePanelWidthRTL) {
diff --git a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc index 8df2745..009faaaf 100644 --- a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc +++ b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_dialog_ui.cc
@@ -323,6 +323,12 @@ IDS_PRIVACY_SANDBOX_M1_NOTICE_LEARN_MORE_V2_DESKTOP_ARIA_DESCRIPTION), kPrivacyPolicyFunc)); + // Equalized buttons variation. + source->AddBoolean( + "isEqualizedPromptButtons", + base::FeatureList::IsEnabled( + privacy_sandbox::kPrivacySandboxEqualizedPromptButtons)); + const GURL& url = web_ui->GetWebContents()->GetVisibleURL(); if (url.query().find("debug") != std::string::npos) { // Not intended to be hooked to anything. The dialog will not initialize
diff --git a/chrome/browser/ui/webui/searchbox/realbox_handler.cc b/chrome/browser/ui/webui/searchbox/realbox_handler.cc index caec3a5..2bf303b 100644 --- a/chrome/browser/ui/webui/searchbox/realbox_handler.cc +++ b/chrome/browser/ui/webui/searchbox/realbox_handler.cc
@@ -60,6 +60,7 @@ #include "components/sessions/content/session_tab_helper.h" #include "components/strings/grit/components_strings.h" #include "net/cookies/cookie_util.h" +#include "searchbox_handler.h" #include "third_party/metrics_proto/omnibox_focus_type.pb.h" #include "third_party/omnibox_proto/types.pb.h" #include "ui/base/webui/resource_path.h" @@ -352,10 +353,6 @@ RealboxHandler::~RealboxHandler() = default; -bool RealboxHandler::IsRemoteBound() const { - return page_set_; -} - void RealboxHandler::AddObserver(OmniboxWebUIPopupChangeObserver* observer) { observers_.AddObserver(observer); observer->OnPopupElementSizeChanged(webui_size_); @@ -372,8 +369,7 @@ void RealboxHandler::SetPage( mojo::PendingRemote<searchbox::mojom::Page> pending_page) { - page_.Bind(std::move(pending_page)); - page_set_ = page_.is_bound(); + SearchboxHandler::SetPage(std::move(pending_page)); // The client may have text waiting to be sent to the searchbox that it // couldn't do earlier since the page binding was not set. So now we let the @@ -384,12 +380,7 @@ } void RealboxHandler::OnFocusChanged(bool focused) { - if (focused) { - edit_model()->OnSetFocus(false); - } else { - edit_model()->OnWillKillFocus(); - edit_model()->OnKillFocus(); - } + SearchboxHandler::OnFocusChanged(focused); if (lens_searchbox_client_) { lens_searchbox_client_->OnFocusChanged(focused); } @@ -401,84 +392,7 @@ lens_searchbox_client_->OnTextModified(); } - // TODO(tommycli): We use the input being empty as a signal we are requesting - // on-focus suggestions. It would be nice if we had a more explicit signal. - bool is_on_focus = input.empty(); - - // Early exit if a query is already in progress for on focus inputs. - if (!autocomplete_controller()->done() && is_on_focus) { - return; - } - - // This will SetInputInProgress and consequently mark the input timer so that - // Omnibox.TypingDuration will be logged correctly. - edit_model()->SetUserText(input); - - // RealboxOmniboxClient::GetPageClassification() ignores the arguments. - const auto page_classification = - omnibox_controller()->client()->GetPageClassification( - /*is_prefetch=*/false); - AutocompleteInput autocomplete_input( - input, page_classification, ChromeAutocompleteSchemeClassifier(profile_)); - autocomplete_input.set_current_url(controller_->client()->GetURL()); - autocomplete_input.set_focus_type( - is_on_focus ? metrics::OmniboxFocusType::INTERACTION_FOCUS - : metrics::OmniboxFocusType::INTERACTION_DEFAULT); - autocomplete_input.set_prevent_inline_autocomplete( - prevent_inline_autocomplete); - // Disable keyword matches as NTP realbox has no UI affordance for it. - autocomplete_input.set_prefer_keyword(false); - autocomplete_input.set_allow_exact_keyword_match(false); - // Set the lens overlay suggest inputs, if available. - if (std::optional<lens::proto::LensOverlaySuggestInputs> suggest_inputs = - controller_->client()->GetLensOverlaySuggestInputs()) { - autocomplete_input.set_lens_overlay_suggest_inputs(*suggest_inputs); - } - - omnibox_controller()->StartAutocomplete(autocomplete_input); -} - -void RealboxHandler::StopAutocomplete(bool clear_result) { - omnibox_controller()->StopAutocomplete(clear_result); -} - -void RealboxHandler::OpenAutocompleteMatch(uint8_t line, - const GURL& url, - bool are_matches_showing, - uint8_t mouse_button, - bool alt_key, - bool ctrl_key, - bool meta_key, - bool shift_key) { - const AutocompleteMatch* match = GetMatchWithUrl(line, url); - if (!match) { - // This can happen due to asynchronous updates changing the result while - // the web UI is referencing a stale match. - return; - } - const base::TimeTicks timestamp = base::TimeTicks::Now(); - const WindowOpenDisposition disposition = ui::DispositionFromClick( - /*middle_button=*/mouse_button == 1, alt_key, ctrl_key, meta_key, - shift_key); - edit_model()->OpenSelection(OmniboxPopupSelection(line), timestamp, - disposition); -} - -void RealboxHandler::OnNavigationLikely( - uint8_t line, - const GURL& url, - omnibox::mojom::NavigationPredictor navigation_predictor) { - const AutocompleteMatch* match = GetMatchWithUrl(line, url); - if (!match) { - // This can happen due to asynchronous updates changing the result while - // the web UI is referencing a stale match. - return; - } - if (auto* search_prefetch_service = - SearchPrefetchServiceFactory::GetForProfile(profile_)) { - search_prefetch_service->OnNavigationLikely( - line, *match, navigation_predictor, web_contents_); - } + SearchboxHandler::QueryAutocomplete(input, prevent_inline_autocomplete); } void RealboxHandler::OnThumbnailRemoved() { @@ -585,28 +499,6 @@ ->SetLensSearchboxClientForTesting(lens_searchbox_client); // IN-TEST } -OmniboxEditModel* RealboxHandler::edit_model() const { - return omnibox_controller()->edit_model(); -} - -const AutocompleteMatch* RealboxHandler::GetMatchWithUrl(size_t index, - const GURL& url) { - const AutocompleteResult& result = autocomplete_controller()->result(); - if (index >= result.size()) { - // This can happen due to asynchronous updates changing the result while - // the web UI is referencing a stale match. - return nullptr; - } - const AutocompleteMatch& match = result.match_at(index); - if (match.destination_url != url) { - // This can happen also, for the same reason. We could search the result - // for the match with this URL, but there would be no guarantee that it's - // the same match, so for this edge case we treat result mismatch as none. - return nullptr; - } - return &match; -} - void RealboxHandler::OnAutocompleteStopTimerTriggered( const AutocompleteInput& input) { // Only notify the lens controller when autocomplete stop timer is triggered
diff --git a/chrome/browser/ui/webui/searchbox/realbox_handler.h b/chrome/browser/ui/webui/searchbox/realbox_handler.h index 61d2913..08280d4 100644 --- a/chrome/browser/ui/webui/searchbox/realbox_handler.h +++ b/chrome/browser/ui/webui/searchbox/realbox_handler.h
@@ -57,9 +57,6 @@ ~RealboxHandler() override; - // Returns true if the page remote is bound and ready to receive calls. - bool IsRemoteBound() const; - // Handle observers to be notified of WebUI changes. void AddObserver(OmniboxWebUIPopupChangeObserver* observer); void RemoveObserver(OmniboxWebUIPopupChangeObserver* observer); @@ -77,15 +74,6 @@ void OnFocusChanged(bool focused) override; void QueryAutocomplete(const std::u16string& input, bool prevent_inline_autocomplete) override; - void StopAutocomplete(bool clear_result) override; - void OpenAutocompleteMatch(uint8_t line, - const GURL& url, - bool are_matches_showing, - uint8_t mouse_button, - bool alt_key, - bool ctrl_key, - bool meta_key, - bool shift_key) override; void DeleteAutocompleteMatch(uint8_t line, const GURL& url) override; void ToggleSuggestionGroupIdVisibility(int32_t suggestion_group_id) override; void ExecuteAction(uint8_t line, @@ -97,10 +85,6 @@ bool ctrl_key, bool meta_key, bool shift_key) override; - void OnNavigationLikely( - uint8_t line, - const GURL& url, - omnibox::mojom::NavigationPredictor navigation_predictor) override; void PopupElementSizeChanged(const gfx::Size& size) override; void OnThumbnailRemoved() override; @@ -116,8 +100,6 @@ LensSearchboxClient* lens_searchbox_client); private: - OmniboxEditModel* edit_model() const; - const AutocompleteMatch* GetMatchWithUrl(size_t index, const GURL& url); base::ObserverList<OmniboxWebUIPopupChangeObserver> observers_;
diff --git a/chrome/browser/ui/webui/searchbox/searchbox_handler.cc b/chrome/browser/ui/webui/searchbox/searchbox_handler.cc index e50d3cb..56937ad8 100644 --- a/chrome/browser/ui/webui/searchbox/searchbox_handler.cc +++ b/chrome/browser/ui/webui/searchbox/searchbox_handler.cc
@@ -7,6 +7,7 @@ #include "base/base64.h" #include "base/base64url.h" #include "build/branding_buildflags.h" +#include "chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/new_tab_page/new_tab_page_util.h" @@ -28,6 +29,7 @@ #include "third_party/omnibox_proto/answer_type.pb.h" #include "third_party/omnibox_proto/rich_answer_template.pb.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/window_open_disposition_utils.h" namespace { @@ -644,6 +646,107 @@ controller_ = nullptr; } +bool SearchboxHandler::IsRemoteBound() const { + return page_set_; +} + +void SearchboxHandler::SetPage( + mojo::PendingRemote<searchbox::mojom::Page> pending_page) { + page_.Bind(std::move(pending_page)); + page_set_ = page_.is_bound(); +} + +void SearchboxHandler::OnFocusChanged(bool focused) { + if (focused) { + edit_model()->OnSetFocus(false); + } else { + edit_model()->OnWillKillFocus(); + edit_model()->OnKillFocus(); + } +} + +void SearchboxHandler::QueryAutocomplete(const std::u16string& input, + bool prevent_inline_autocomplete) { + // TODO(tommycli): We use the input being empty as a signal we are requesting + // on-focus suggestions. It would be nice if we had a more explicit signal. + bool is_on_focus = input.empty(); + + // Early exit if a query is already in progress for on focus inputs. + if (!autocomplete_controller()->done() && is_on_focus) { + return; + } + + // This will SetInputInProgress and consequently mark the input timer so that + // Omnibox.TypingDuration will be logged correctly. + edit_model()->SetUserText(input); + + // RealboxOmniboxClient::GetPageClassification() ignores the arguments. + const auto page_classification = + omnibox_controller()->client()->GetPageClassification( + /*is_prefetch=*/false); + AutocompleteInput autocomplete_input( + input, page_classification, ChromeAutocompleteSchemeClassifier(profile_)); + autocomplete_input.set_current_url(controller_->client()->GetURL()); + autocomplete_input.set_focus_type( + is_on_focus ? metrics::OmniboxFocusType::INTERACTION_FOCUS + : metrics::OmniboxFocusType::INTERACTION_DEFAULT); + autocomplete_input.set_prevent_inline_autocomplete( + prevent_inline_autocomplete); + // Disable keyword matches as NTP realbox has no UI affordance for it. + autocomplete_input.set_prefer_keyword(false); + autocomplete_input.set_allow_exact_keyword_match(false); + // Set the lens overlay suggest inputs, if available. + if (std::optional<lens::proto::LensOverlaySuggestInputs> suggest_inputs = + controller_->client()->GetLensOverlaySuggestInputs()) { + autocomplete_input.set_lens_overlay_suggest_inputs(*suggest_inputs); + } + + omnibox_controller()->StartAutocomplete(autocomplete_input); +} + +void SearchboxHandler::StopAutocomplete(bool clear_result) { + omnibox_controller()->StopAutocomplete(clear_result); +} + +void SearchboxHandler::OpenAutocompleteMatch(uint8_t line, + const GURL& url, + bool are_matches_showing, + uint8_t mouse_button, + bool alt_key, + bool ctrl_key, + bool meta_key, + bool shift_key) { + const AutocompleteMatch* match = GetMatchWithUrl(line, url); + if (!match) { + // This can happen due to asynchronous updates changing the result while + // the web UI is referencing a stale match. + return; + } + const base::TimeTicks timestamp = base::TimeTicks::Now(); + const WindowOpenDisposition disposition = ui::DispositionFromClick( + /*middle_button=*/mouse_button == 1, alt_key, ctrl_key, meta_key, + shift_key); + edit_model()->OpenSelection(OmniboxPopupSelection(line), timestamp, + disposition); +} + +void SearchboxHandler::OnNavigationLikely( + uint8_t line, + const GURL& url, + omnibox::mojom::NavigationPredictor navigation_predictor) { + const AutocompleteMatch* match = GetMatchWithUrl(line, url); + if (!match) { + // This can happen due to asynchronous updates changing the result while + // the web UI is referencing a stale match. + return; + } + if (auto* search_prefetch_service = + SearchPrefetchServiceFactory::GetForProfile(profile_)) { + search_prefetch_service->OnNavigationLikely( + line, *match, navigation_predictor, web_contents_); + } +} + void SearchboxHandler::OnResultChanged(AutocompleteController* controller, bool default_match_changed) { if (metrics_reporter_ && !metrics_reporter_->HasLocalMark("ResultChanged")) { @@ -671,6 +774,24 @@ } } +const AutocompleteMatch* SearchboxHandler::GetMatchWithUrl(size_t index, + const GURL& url) { + const AutocompleteResult& result = autocomplete_controller()->result(); + if (index >= result.size()) { + // This can happen due to asynchronous updates changing the result while + // the web UI is referencing a stale match. + return nullptr; + } + const AutocompleteMatch& match = result.match_at(index); + if (match.destination_url != url) { + // This can happen also, for the same reason. We could search the result + // for the match with this URL, but there would be no guarantee that it's + // the same match, so for this edge case we treat result mismatch as none. + return nullptr; + } + return &match; +} + OmniboxController* SearchboxHandler::omnibox_controller() const { return controller_; } @@ -678,3 +799,7 @@ AutocompleteController* SearchboxHandler::autocomplete_controller() const { return omnibox_controller()->autocomplete_controller(); } + +OmniboxEditModel* SearchboxHandler::edit_model() const { + return omnibox_controller()->edit_model(); +}
diff --git a/chrome/browser/ui/webui/searchbox/searchbox_handler.h b/chrome/browser/ui/webui/searchbox/searchbox_handler.h index 1221356..b4e0bda2 100644 --- a/chrome/browser/ui/webui/searchbox/searchbox_handler.h +++ b/chrome/browser/ui/webui/searchbox/searchbox_handler.h
@@ -17,6 +17,7 @@ class MetricsReporter; class OmniboxController; class Profile; +class OmniboxEditModel; namespace content { class WebContents; @@ -37,10 +38,33 @@ static std::string ActionVectorIconToResourceName( const gfx::VectorIcon& icon); + // Returns true if the page remote is bound and ready to receive calls. + bool IsRemoteBound() const; + // AutocompleteController::Observer: void OnResultChanged(AutocompleteController* controller, bool default_match_changed) override; + // searchbox::mojom::PageHandler: + void SetPage( + mojo::PendingRemote<searchbox::mojom::Page> pending_page) override; + void OnFocusChanged(bool focused) override; + void QueryAutocomplete(const std::u16string& input, + bool prevent_inline_autocomplete) override; + void StopAutocomplete(bool clear_result) override; + void OpenAutocompleteMatch(uint8_t line, + const GURL& url, + bool are_matches_showing, + uint8_t mouse_button, + bool alt_key, + bool ctrl_key, + bool meta_key, + bool shift_key) override; + void OnNavigationLikely( + uint8_t line, + const GURL& url, + omnibox::mojom::NavigationPredictor navigation_predictor) override; + protected: FRIEND_TEST_ALL_PREFIXES(RealboxHandlerTest, AutocompleteController_Start); FRIEND_TEST_ALL_PREFIXES(RealboxHandlerTest, @@ -57,6 +81,9 @@ OmniboxController* omnibox_controller() const; AutocompleteController* autocomplete_controller() const; + OmniboxEditModel* edit_model() const; + + const AutocompleteMatch* GetMatchWithUrl(size_t index, const GURL& url); raw_ptr<Profile> profile_; raw_ptr<content::WebContents> web_contents_;
diff --git a/chrome/browser/ui/webui/settings/people_handler.cc b/chrome/browser/ui/webui/settings/people_handler.cc index 280ce1ba..26a398a 100644 --- a/chrome/browser/ui/webui/settings/people_handler.cc +++ b/chrome/browser/ui/webui/settings/people_handler.cc
@@ -371,6 +371,11 @@ base::BindRepeating(&PeopleHandler::HandleGetStoredAccounts, base::Unretained(this))); web_ui()->RegisterMessageCallback( + "SyncSetupGetProfileAvatar", + base::BindRepeating(&PeopleHandler::HandleGetProfileAvatar, + base::Unretained(this))); + + web_ui()->RegisterMessageCallback( "SyncSetupStartSyncingWithEmail", base::BindRepeating(&PeopleHandler::HandleStartSyncingWithEmail, base::Unretained(this))); @@ -523,14 +528,21 @@ ResolveJavascriptCallback(callback_id, GetStoredAccountsList()); } +void PeopleHandler::HandleGetProfileAvatar(const base::Value::List& args) { + AllowJavascript(); + CHECK_EQ(1U, args.size()); + const base::Value& callback_id = args[0]; + ResolveJavascriptCallback(callback_id, GetProfileAvatar()); +} + void PeopleHandler::OnExtendedAccountInfoUpdated(const AccountInfo& info) { UpdateStoredAccounts(); - UpdateProfileAvatar(profile_->GetPath()); + UpdateProfileAvatar(); } void PeopleHandler::OnExtendedAccountInfoRemoved(const AccountInfo& info) { UpdateStoredAccounts(); - UpdateProfileAvatar(profile_->GetPath()); + UpdateProfileAvatar(); } void PeopleHandler::OnRefreshTokenUpdatedForAccount( @@ -571,13 +583,13 @@ return; } - UpdateProfileAvatar(profile_path); + UpdateProfileAvatar(); } -void PeopleHandler::UpdateProfileAvatar(const base::FilePath& profile_path) { +base::Value PeopleHandler::GetProfileAvatar() { // Can be null in tests if (!g_browser_process->profile_manager()) { - return; + return base::Value(); } profiles::PlaceholderAvatarIconParams icon_params = {.has_padding = false}; @@ -587,13 +599,11 @@ ->GetProfileAttributesStorage() .GetProfileAttributesWithPath(profile_->GetPath()); - FireWebUIListener( - "profile-avatar-changed", - base::Value(webui::GetBitmapDataUrl( - entry - ->GetAvatarIcon(profiles::kAvatarIconSize, - /*use_high_res_file=*/true, icon_params) - .AsBitmap()))); + return base::Value(webui::GetBitmapDataUrl( + entry + ->GetAvatarIcon(profiles::kAvatarIconSize, + /*use_high_res_file=*/true, icon_params) + .AsBitmap())); } base::Value::List PeopleHandler::GetStoredAccountsList() { @@ -1042,6 +1052,7 @@ UpdateChromeSigninUserChoiceInfo(); UpdateStoredAccounts(); UpdateSyncStatus(); + UpdateProfileAvatar(); break; case signin::PrimaryAccountChangeEvent::Type::kNone: break; @@ -1252,6 +1263,10 @@ FireWebUIListener("stored-accounts-updated", GetStoredAccountsList()); } +void PeopleHandler::UpdateProfileAvatar() { + FireWebUIListener("profile-avatar-changed", GetProfileAvatar()); +} + void PeopleHandler::MarkFirstSetupComplete() { syncer::SyncService* service = GetSyncService(); // The sync service may be nullptr if it has been just disabled by policy.
diff --git a/chrome/browser/ui/webui/settings/people_handler.h b/chrome/browser/ui/webui/settings/people_handler.h index 42d1796..330d9107 100644 --- a/chrome/browser/ui/webui/settings/people_handler.h +++ b/chrome/browser/ui/webui/settings/people_handler.h
@@ -231,7 +231,9 @@ void HandleGetStoredAccounts(const base::Value::List& args); void HandleStartSyncingWithEmail(const base::Value::List& args); + void HandleGetProfileAvatar(const base::Value::List& args); base::Value::List GetStoredAccountsList(); + base::Value GetProfileAvatar(); #if BUILDFLAG(ENABLE_DICE_SUPPORT) // Sends the updated chrome signin user choice info to UI. @@ -252,7 +254,7 @@ void UpdateStoredAccounts(); // Sends the computed profile avatar to the JavaScript WebUI code. - void UpdateProfileAvatar(const base::FilePath& profile_path); + void UpdateProfileAvatar(); // Suppresses any further signin promos, since the user has signed in once. void MarkFirstSetupComplete();
diff --git a/chrome/browser/ui/webui/user_actions/user_actions_ui.cc b/chrome/browser/ui/webui/user_actions/user_actions_ui.cc index 6ddaaa24..adf59a06 100644 --- a/chrome/browser/ui/webui/user_actions/user_actions_ui.cc +++ b/chrome/browser/ui/webui/user_actions/user_actions_ui.cc
@@ -9,7 +9,8 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/user_actions/user_actions_ui_handler.h" #include "chrome/common/url_constants.h" -#include "components/grit/dev_ui_components_resources.h" +#include "components/grit/user_actions_ui_resources.h" +#include "components/grit/user_actions_ui_resources_map.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_data_source.h" @@ -20,9 +21,8 @@ content::WebUIDataSource* html_source = content::WebUIDataSource::CreateAndAdd(Profile::FromWebUI(web_ui), chrome::kChromeUIUserActionsHost); - html_source->SetDefaultResource(IDR_USER_ACTIONS_HTML); - html_source->AddResourcePath("user_actions.css", IDR_USER_ACTIONS_CSS); - html_source->AddResourcePath("user_actions.js", IDR_USER_ACTIONS_JS); + html_source->AddResourcePaths(kUserActionsUiResources); + html_source->AddResourcePath("", IDR_USER_ACTIONS_UI_USER_ACTIONS_HTML); web_ui->AddMessageHandler(std::make_unique<UserActionsUIHandler>()); }
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn index 8b481a2..f013858 100644 --- a/chrome/browser/web_applications/BUILD.gn +++ b/chrome/browser/web_applications/BUILD.gn
@@ -1062,6 +1062,7 @@ "isolated_web_apps/isolated_web_app_file_handling_browsertest.cc", "isolated_web_apps/isolated_web_app_install_prepare_apply_update_browsertest.cc", "isolated_web_apps/isolated_web_app_uninstall_browsertest.cc", + "isolated_web_apps/isolated_web_app_update_manager_browsertest.cc", "isolated_web_apps/isolated_web_app_url_loader_factory_browsertest.cc", "isolated_web_apps/key_distribution/iwa_key_distribution_component_installer_browsertest.cc", "manifest_update_manager_browsertest.cc", @@ -1096,10 +1097,6 @@ "isolated_web_apps/isolated_web_app_managed_configuration_api_browsertest.cc", "isolated_web_apps/policy/isolated_web_app_policy_manager_ash_browsertest.cc", "web_app_run_on_os_login_manager_browsertest.cc", - - # TODO(crbug.com/40274058): Support automatic IWA updates on other - # platforms. - "isolated_web_apps/isolated_web_app_update_manager_browsertest.cc", ] }
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager.cc b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager.cc index 28609e8..a12cef0 100644 --- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager.cc +++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager.cc
@@ -151,7 +151,6 @@ using IwaBundleIdToUpdateOptionsMap = base::flat_map<web_package::SignedWebBundleId, IsolatedWebAppUpdateOptions>; -#if BUILDFLAG(IS_CHROMEOS) IwaBundleIdToUpdateOptionsMap GetForceInstalledPolicyIsolatedWebApps( Profile* profile) { IwaBundleIdToUpdateOptionsMap result; @@ -177,6 +176,7 @@ return result; } +#if BUILDFLAG(IS_CHROMEOS) IwaBundleIdToUpdateOptionsMap GetKioskPolicyIsolatedWebApps() { IwaBundleIdToUpdateOptionsMap result; std::optional<ash::KioskIwaPolicyData> kiosk_iwa_policy_data = @@ -195,17 +195,14 @@ IwaBundleIdToUpdateOptionsMap GetBundleIdToIsolatedWebAppsUpdateOptionsMap( Profile* profile) { -// TODO(crbug.com/40274058): Enable automatic updates on other platforms. #if BUILDFLAG(IS_CHROMEOS) // DeviceLocalAccounts policy defines an IWA used in kiosk mode. // IsolatedWebAppInstallForceList is used in other session types. if (chromeos::IsKioskSession()) { return GetKioskPolicyIsolatedWebApps(); } - return GetForceInstalledPolicyIsolatedWebApps(profile); -#else - return {}; #endif + return GetForceInstalledPolicyIsolatedWebApps(profile); } bool ShouldProceedWithVersionChange( @@ -251,16 +248,10 @@ // here just in case - we also wouldn't want to automatically update // IWAs in incognito windows. !profile.IsOffTheRecord() && -#if BUILDFLAG(IS_CHROMEOS) base::FeatureList::IsEnabled( - features::kIsolatedWebAppAutomaticUpdates) -#else - false -#endif - ), + features::kIsolatedWebAppAutomaticUpdates)), update_discovery_frequency_(std::move(update_discovery_frequency)), - task_queue_{*this} { -} + task_queue_{*this} {} IsolatedWebAppUpdateManager::~IsolatedWebAppUpdateManager() = default;
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_browsertest.cc b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_browsertest.cc index 71fc57ca..d64a680 100644 --- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_browsertest.cc +++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_browsertest.cc
@@ -126,13 +126,13 @@ const UpdateChannel kBetaChannel = UpdateChannel::Create("beta").value(); const UpdateChannel kRandomChannel = UpdateChannel::Create("random").value(); -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) void CheckBundleExists(Profile* profile, const base::FilePath& directory) { base::ScopedAllowBlockingForTesting allow_blocking; EXPECT_TRUE(base::DirectoryExists( CHECK_DEREF(profile).GetPath().Append(kIwaDirName).Append(directory))); } -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) class UpdateDiscoveryTaskResultWaiter : public IsolatedWebAppUpdateManager::Observer { @@ -1082,11 +1082,8 @@ /*integrity_block_data=*/_))); } -// TODO(crbug.com/40929933): Session restore does not restore app windows on -// Lacros. Forcing the IWA to open via the `--app-id` command line switch is -// also not viable, because `WebAppBrowserTestBase` expects a `browser()` -// to open before the `WebAppProvider` is ready. -#if !BUILDFLAG(IS_CHROMEOS_LACROS) +// Session restore related tests that can only be run in ChromeOS. +#if BUILDFLAG(IS_CHROMEOS) IN_PROC_BROWSER_TEST_F(IsolatedWebAppUpdateManagerBrowserTest, PRE_AppliesUpdateOnStartupIfAppWindowNeverCloses) { @@ -1212,7 +1209,7 @@ CheckBundleExists(profile(), app_update_location); } -#endif // !BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(IS_CHROMEOS) class IsolatedWebAppUpdateManagerWithKeyRotationBrowserTest : public IsolatedWebAppBrowserTestHarness {
diff --git a/chrome/browser/webapps/web_app_offline_browsertest.cc b/chrome/browser/webapps/web_app_offline_browsertest.cc index 6e5ddcb..c26fa17 100644 --- a/chrome/browser/webapps/web_app_offline_browsertest.cc +++ b/chrome/browser/webapps/web_app_offline_browsertest.cc
@@ -4,6 +4,10 @@ #include <string_view> +#include "base/base64.h" +#include "base/compiler_specific.h" +#include "base/containers/span.h" +#include "base/metrics/crc32.h" #include "base/test/metrics/histogram_tester.h" #include "build/build_config.h" #include "chrome/browser/profiles/profile.h" @@ -26,7 +30,9 @@ #include "content/public/test/url_loader_interceptor.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/skia/include/core/SkBitmap.h" #include "ui/base/ui_base_switches.h" +#include "ui/gfx/codec/png_codec.h" #include "ui/native_theme/native_theme.h" #if BUILDFLAG(IS_WIN) @@ -204,104 +210,6 @@ "/banners/no_sw_fetch_handler_test_page.html"); WaitForLoadStop(web_contents); - constexpr char kExpectedIconUrl[] = - "data:image/" - "png;base64," - "iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAIAAAAErfB6AAAAAXNSR0IArs4c6QAADvBJREFU" - "eJztnHuMXPV1x8/3/" - "O68dndmd2dtHDAmBoxxzMsOjwA2GFo1UVJC0xa1pUqDoihRU0IKIY2B8AhPE6ukRG2hDZXaC" - "oHSoqhq2jQhqQBhU2PzNGAgEMCQEBt7H7Oved37O6d//" - "GaXXXvXeLGdvfvj99FobO3M3Lkzn/n97vmdc+7F/" - "Lu2U8BfeLZ3IHBoCYI9Jwj2nCDYc4JgzwmCPScI9pwg2HOCYM8Jgj0nCPacINhzgmDPCYI9J" - "wj2nCDYc4JgzwmCPScI9pwg2HOCYM8Jgj0nCPacINhzgmDPCYI9Jwj2nCDYc4JgzwmCPScI9" - "pwg2HOCYM8Jgj0nCPacINhzgmDPCYI9Jwj2nCDYc4JgzwmCPScI9pwg2HOCYM8Jgj0nCPacI" - "NhzgmDPCYI9Jwj2nCDYc4JgzwmCPScI9pxotnfg/aOqDERT/" - "URFKREFMAu7lTLmqmAlBZCI7qoKqRKBSInI/ScToZw3VigonpOCVRVALLqwnf/" - "ut3s6s0bJOSZRZeCpdxq3Pj5QLhirs72vs83cE6xEAJi0EcvXT+u+eFlx7+" - "e0Z3BDIowgeA4KJlXDGGzoHx/ffvGyYiLqRq17MBGNGEMNIUA/" - "8HbnpGADVGNZXDJXntaVNbCiEYMBN28TUcQwDCLC+" - "HH5A8wcWyapqlVl4IqPlk6cn7OqZrLdwB7MJcHOYj3RTyzOX3JiKRE1gBLtHEkAaJiRp2LOC" - "HaxlRWdX+Bbzi5nDTMpESp1+61N/" - "S5+nu19TCNzRjCpGqKG1evO7F5SzoqoEgF051ODW3Y0iUg1TNFTMDcEq2rEqDTtp48u/" - "MmyDlG1qob56Z21u7cOMRMRBb9TMgcEKykDtUSOKkbXnd1dyLBVBVBp2Js3V/" - "oamjNwGawZbFMVRAwyE26M1kPun328eGwbCpq0hT03kgLmwDIJCoKK0hWndi7vycVWAYoY92" - "4bfuitensGMz36qhKAptVqMumFDGrP7EdM3groAFDDam3yRgyorbWRVCRK0y5YVQ1oqCkXHF" - "P4/AnFxCqRRoytu2p3Pj0YMWJRndnoJQMaiuXipe3XfKxLxpLYIOyqJn/2P7v6G5IxvC/" - "HqgAYNNSQC47J33ZOj1ViIlGKGDtGkr98uO/" - "VSlyIOA2jOO2CATRFFxWj6z5WzkWcWDGMeqy3bxncUZWuHNfrghl+" - "kULUHuGHr41etLTtk8d0jP99SXfm2+eWv/DT3SBtxe3T7RVpPdbju6P15/" - "Ys7sxOfOiuZyovDzQ7Mqmwm/ZjsKoSaWz18pWlkw7LWRHDYNB9L4/" - "8xy+qxQwnVkGY4QBuTdEJ4SsP9W3bXSciK2JFrOgfHNdx6YrScFMMjx1rJ87/" - "2hIvSrkIt59TXtyZTUSsSGxFVf/hmcrdzw23Z4xQWhKl6RXsYqtqrB9fnP/iKSVVBYgIrw/" - "Et2+ptGdY3Cw68+McQKSaYeyuydoN/" - "YN1S4TxguOVp3WtWZgfrGvE0D0OpICqGsZIUy5fWfrE0e2iagAQMoaf2tlY98RgIWKogjQNB" - "+D0ClYlEBLR+QW+eVXZwM14APTax/p3jloDOqDcJKCq+QiP/LKx/" - "okBwyBSBpS0pxCtX9NzVJFHY+HJCTK3Whuo2c8c23blaV2iSqruaD1Qs1c80tffkIghwAyD+" - "kNISgUDykSjsaw9vXN5T1ZUE1EG/" - "vWF4QffrOUMH3iECoAIhQzufm7k314aMsyJKECxlZPm5649qzvHsJPtGqZqrCfOy9y8upwda" - "yVRIkCv3tD39K5mW8SSsoRLGgWrqgGGmvb3l7R9dnlRlEQ1a/" - "gXA43vPjOYCEV8cBaa7o1U6VuPV57b1cgYVoUBWZHPLi99bnlHPVE3iN2qKBHKR3Tj2V1Lur" - "OxFVK1Sob5H7cO/fur1baMWxqlym8qBTNQi3Vhh/" - "nG6V0dWU6sqzHIHU8OvtAbt40lOg78jQBY1VyE7UP22o19Iw3rtgoiVb1pVfeqw3MjTWvgas" - "taj+XylaULji0mIhFDiDKGt+yorX+iItKa4Q/C5z+opE6wqooqQb+yorRyQT4RjQwiph+/" - "Mfr9n4+W82wPajedK2B0ZvnBt+q3bh5gEAGuNtWeNd85v+eIDtMUcb+" - "5Tx1duPzULivKgAuvdo0max/t2zEqhfGgL2WkS7ALWBpWz1mY/" - "+LJnbG4hCLeGUlu2lQRghIOenjqxnFnznzv+" - "eEHfj7i5DnxJ8zL3XRWtyg1RI8uRevX9BQyDFK4J6jesnlg8864K8+" - "pbeJMkWB9dzzhttXltgwbct+arttSeWUgKRgcohDGuRHFDZsq23obhtmqgjSx+" - "kfLil86qVhvynfO617cmRVRAEJg4P6XRv5520gxy4mkIy05FSkSTKpMVLdy9RldJ83PudCGg" - "R+/" - "Vr33pdG2DA7WoXeaN9ecwfbBZO2jfaOxNQARMdQwvvrRzh9cuOC8RW2i6kIuw3j2ndq1G/" - "szgLrc5SHarQMmLYJVKWIMNu3HP1y45ISia80hQm8tufHxgdhNgIf0awSsUinLD/" - "2yccumgUTIEtyOHVnMfOrY9sgwA6JEQG81ufzhvkpTIwNNs97UCFaGNqwe3hZdf2Z3e9aIKg" - "iGsX5LZVtfnI+gh3h9CSJARbUjg+89P/" - "LD10YzjLGAmsRlTVWVIEo3P155cldciOZAL1gqBKuCCE0rl60onnJYLhYVJcP42fbRe18cyb" - "ZC29/AjkABAFbpmg39L/c22GUrSRkgVasaMe5/cehfXhwuRFBCyu2mQrASMWi4Kb+1KP/" - "nK0uqBNWM4d5qcseTg9WE2rIwIAPsUVqfeNuDvevw2L8iPIhEtRDhreHk+" - "k0DLpxWVbd4M8DmHbXrN1UiwLgsZkpKCtMz++" - "VCEDWtHNFhrjurXIiMKwg2Elm3eeDBV0fzbWbH6LSFOxAlTemvy1jpqVWKb1i1VdsboTlW7y" - "1EaIv4PaNdHXOcj3DR0ra9i/" - "+GyGBCOiP1IzglgnV+wZz+oXxsxTAADNSTwaZ+bkXne36BjUQ/XIpc/" - "mv8flEx+" - "sxJpXKBrZIoMejVgfiF3jgfvVftuHXahL1sRemi44qunOCy1gyyqqcdXrhtdfnLP+" - "tNQK1BnG7HmH/X9tneB6rGcmJPZtOfLkyUMnxIIpe7nh289Ke9R3RGsUz7nFZrX8OuOjz3/" - "QsWlAtGWyfFgKg1V1ulCHTVht6/" - "3zpSMGh17uyrOWCWScUIJmolCDFWfVPVfZiYiBIxUaa1XGndi2osrS03rWYNhhpCvK8ivHNZ" - "jWVhu1l3bnleW2RFGCBA1dUN3d6qVVx1Rnnr7uSxt+" - "v5zD6be1JAKoIsIiLVRDQRtUrunrFfNzPN8thMftp+KICoGsY3Tu9yBwsQJaIgumfr0E3/" - "1+8UMwikXXlz5/" - "k9C9o5tpLykypSMYJdbihiRPz+" - "h4IbRhg7Eo9vyW2zLeJWwmkqF274jjT14mVtXzqlZMVFUsgYPL+" - "78d1nht4cilfMz154XNFVGqzI8eXsHWt6LvnJbiIF0jtHz75gJYoYQ0350evViSeC7g8gSlR" - "LWT5vUcG91t3vHE02/bqej9hdyyFiPNfbzEaQKe0SuXLkiT2Zdef0EAEkLkCuxva6x/" - "q3D9n2jPn6o/" - "1Ly9llPTkRYSJRvfDY9q+d2rh9y2ApZ8bS0akTPftBlvtKEtGBmp1wJYb9JpYlh+Ve/" - "cJRsZWMYXf/g1dGL7r/V6YUWWnNEYUMl3K810UdXFsdCVEG9MCnF6w+sqBjnXUMuuGx/" - "tu3DHbnjRDVEzl3Yf6+3z2sI8Nu2iHCcNN+/" - "ie7H3yz1pkz6Swozf4Ixlj4ekRxxjsDomosH2o3e0zRhQjZUnR48d2Y2SrtXUhWAikZpuG6v" - "XV19+ojC4kokyqRYf7v14bv2jrcmWOrRKT5CA//qr5+y8Ct58xz8ZdV7cpHf72m57X/" - "3PnGkG1LZUl49oOscSuxvJ9bUyjZK95Woubkp8mUzTSqEVOlbv/" - "wuLbLVnaKvmv3jUrz2o0D7veBVtUSbdGkBi4GJVaO7c7esrrckYVr6Rp7/" - "7SQCsGzQmtdlOgJPdnrzyq7sxmIiIBGItds6H+lYvPRu/" - "F3q4GL6IZNlWfHG7gYiciFSzouPaXUtMpjqbRZ/" - "mwT+" - "OAKdi0ZWaYbzupaWs66BY8lQOlvn6n81xu1Ypat0HiuqtXAZfDWsP3mxr6hhgVIVZlIVa86o" - "/uTi/ODDRulbNX0ARXs6gTVWP/ilOKFSzpcmch1w298u/" - "Y3Tw3lDBEpoADGKwqu4aSU5f99q37zpv6JDVyRwR3nzftIORpNxCBFZxd+" - "EAW7ybmW6PmLcmvP6LaqLoPGwK7R5K8e7RtsaoZZdCzPNuHg7cZxV8780wsj920bdqGWE7+" - "olPn2ufPaM0iU0pP9mNuCx0/UdVmw8ZsVne4UX1VioGGlnOd1q8r5CFbUKimBQN/" - "c2Pd8X1LM7qszF4ASEXDj5srT79Qj5qZVq1pL5LyjCl9dURpuCqUmnJ7bgidmwfIRj9+" - "XcjxdoxRAopo3uOd3ek5ekGcgazhj2DDu2Tr0wCvVjghjK9pph6Br4Hp72K7d0DfStLmIs4Y" - "LEWcYV59Z/vLJxYbVlMTSs78OPhD2zoKNX8owG/" - "GUeSsmGkl01RH5huBHr1d17OTgoaZd98QgTer8mnYIArBCxRw/" - "9uvm1x7p+70lHVbVgFwjykd6suU8DzZ1ygul/oaZ/" - "UzWgTBVFuw9LkaqSgyqJTrcsETjFpWAngLP5JJb6mb74VhqTZnwa1AwynmeUc710DG3R/" - "B0WbB9XE7YTdGFCMXsnp89FppJ7Q9uU51Z7s5NGqpKlMxsU4eQuS14YhZsyr9P9xKd6iX7ft" - "V0m7JKU17yNA1253yQFXhPgmDPCYI9Jwj2nCDYc4JgzwmCPScI9pwg2HOCYM8Jgj0nCPacIN" - "hzgmDPCYI9Jwj2nCDYc4JgzwmCPScI9pwg2HOCYM8Jgj0nCPacINhzgmDPCYI9Jwj2nCDYc4" - "JgzwmCPScI9pwg2HOCYM8Jgj0nCPacINhzgmDPCYI9Jwj2nCDYc4JgzwmCPScI9pwg2HOCYM" - "8Jgj0nCPacINhzgmDPCYI9Jwj2nCDYc4JgzwmCPef/Afw/wBt50raAAAAAAElFTkSuQmCC"; - // Ensure that we don't proceed until the icon loading is finished. ASSERT_EQ( true, @@ -338,13 +246,30 @@ .ExtractString()); EXPECT_EQ("Manifest test app", EvalJs(web_contents, "document.title").ExtractString()); - EXPECT_EQ(kExpectedIconUrl, - EvalJs(web_contents, "document.getElementById('icon').src") - .ExtractString()); EXPECT_EQ("inline", EvalJs(web_contents, "document.getElementById('offlineIcon').style.display") .ExtractString()); + + std::string actual_url = + EvalJs(web_contents, "document.getElementById('icon').src") + .ExtractString(); + constexpr std::string_view kDataUrlPrefix = "data:image/png;base64,"; + ASSERT_THAT(actual_url, testing::StartsWith(kDataUrlPrefix)); + std::string_view base64 = + std::string_view(actual_url).substr(kDataUrlPrefix.size()); + std::optional<std::vector<uint8_t>> png_bytes = base::Base64Decode(base64); + ASSERT_TRUE(png_bytes.has_value()); + SkBitmap bitmap = gfx::PNGCodec::Decode(*png_bytes); + ASSERT_FALSE(bitmap.isNull()); + EXPECT_EQ(bitmap.width(), 160); + EXPECT_EQ(bitmap.height(), 160); + // SAFETY: `bitmap.isNull()` has been checked above. span's data and size + // come from the same container. + base::span<const uint8_t> image_bytes = UNSAFE_BUFFERS( + base::span(static_cast<const uint8_t*>(bitmap.pixmap().addr()), + bitmap.computeByteSize())); + EXPECT_EQ(4172094509u, base::Crc32(0, image_bytes)); } IN_PROC_BROWSER_TEST_F(WebAppOfflinePageTest, WebAppOfflineMetricsNavigation) {
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt index 2100fe2..2a07b09b 100644 --- a/chrome/build/android-arm32.pgo.txt +++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@ -chrome-android32-main-1735623587-baeb9235699a0e3f5305bf51bd13d4d82a7fed9d-d469071a18dd6781e4c9de96b44c2de91f9e3202.profdata +chrome-android32-main-1735818720-c2f2924392cbd668d2c2bacb19eb11eb92d00c17-5bf4d88ca251c22931064af72a88452bb3918d1d.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt index 48cf6a0..527f7b6 100644 --- a/chrome/build/android-arm64.pgo.txt +++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@ -chrome-android64-main-1735636206-021fe18984c67ed8a07769e700a47275e290abb2-be2f02370b86f0e03788faf2c22ba64ecfefaeb7.profdata +chrome-android64-main-1735833257-dc30766517abddb0cf959335d85f63ee16dbfbf1-fc1eded9c99631b9e9d38f362b39cef7ece70097.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index da95c8d..951a99c6 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1735623587-d2a7d74692c0490d9b173da4252004fb1a4295aa-d469071a18dd6781e4c9de96b44c2de91f9e3202.profdata +chrome-linux-main-1735796835-4a604d70f5e8a3a15676cdfe9f5b227e580f4aac-d1925e3f72b5c496a7702e51a698160e7599d30e.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 30663e6..cc27669 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1735636206-07aa3a7f1e2a97257547767e24d0a93aa2dcc007-be2f02370b86f0e03788faf2c22ba64ecfefaeb7.profdata +chrome-mac-arm-main-1735826308-10d61009d694f10f2a78b1df43c1cb58bee4d090-1b5daa2f72abc5ca8e71d1c06977ab343cb08fbc.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 5f43e9a..bf4d2ae 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1735623587-dabb39cee5221c5bb0837c13ddba9ca46e6fa28d-d469071a18dd6781e4c9de96b44c2de91f9e3202.profdata +chrome-mac-main-1735818720-ab6603b8b2054512772f760587df08abb8d48984-5bf4d88ca251c22931064af72a88452bb3918d1d.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt index 228427b..426036b 100644 --- a/chrome/build/win-arm64.pgo.txt +++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@ -chrome-win-arm64-main-1735623587-53e4da37af987a3e8b46bb3f645f9b81e4e1b138-d469071a18dd6781e4c9de96b44c2de91f9e3202.profdata +chrome-win-arm64-main-1735818720-91d7b6281f9a28cc5cebaebd939ceaab52479e79-5bf4d88ca251c22931064af72a88452bb3918d1d.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index be1a22a..cf6af5eb4 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1735613901-a1f268fa0c8cea1f0893e94c4eeaaac893b169cc-4c34284c77cc558d93ef9c9f574e906ecee6adeb.profdata +chrome-win32-main-1735796835-fb46f67b218c0ccfe4b83c6bc45f4711586fb68f-d1925e3f72b5c496a7702e51a698160e7599d30e.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index ea79fe5..e30cbbc 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1735613901-891e9d2c25b0e8b95c7b3997aba735435bef205a-4c34284c77cc558d93ef9c9f574e906ecee6adeb.profdata +chrome-win64-main-1735808360-8b52c21c9a4906924564a9fa2395ac809a0c365c-cc171de8614cfe5f5af75a9aec9b93e75d0200b0.profdata
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index be4dcc3..b6b0e0d77 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -120,6 +120,7 @@ "$root_gen_dir/components/crashes_resources.pak", "$root_gen_dir/components/flags_ui_resources.pak", "$root_gen_dir/components/metrics/metrics_server_urls.pak", + "$root_gen_dir/components/user_actions_ui_resources.pak", "$root_gen_dir/components/version_ui_resources.pak", "$root_gen_dir/content/attribution_internals_resources.pak", "$root_gen_dir/content/content_resources.pak",
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index c7e66adc..e2c9a3c8 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -700,12 +700,15 @@ "InternalOnlyUisPref", base::FEATURE_DISABLED_BY_DEFAULT); -#if BUILDFLAG(IS_CHROMEOS) // Enables automatic updates of Isolated Web Apps. BASE_FEATURE(kIsolatedWebAppAutomaticUpdates, "IsolatedWebAppAutomaticUpdates", - base::FEATURE_ENABLED_BY_DEFAULT); -#endif +#if BUILDFLAG(IS_CHROMEOS) + base::FEATURE_ENABLED_BY_DEFAULT +#else + base::FEATURE_DISABLED_BY_DEFAULT +#endif // BUILDFLAG(IS_CHROMEOS) +); // Enables Isolated Web App Developer Mode, which allows developers to // install untrusted Isolated Web Apps.
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index e5d39025..015e5bc 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -423,10 +423,8 @@ COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kInternalOnlyUisPref); -#if BUILDFLAG(IS_CHROMEOS) COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kIsolatedWebAppAutomaticUpdates); -#endif // LINT.IfChange COMPONENT_EXPORT(CHROME_FEATURES) BASE_DECLARE_FEATURE(kIsolatedWebAppDevMode);
diff --git a/chrome/test/data/webui/chromeos/settings/test_os_sync_browser_proxy.ts b/chrome/test/data/webui/chromeos/settings/test_os_sync_browser_proxy.ts index de510e0..d83d5ca 100644 --- a/chrome/test/data/webui/chromeos/settings/test_os_sync_browser_proxy.ts +++ b/chrome/test/data/webui/chromeos/settings/test_os_sync_browser_proxy.ts
@@ -9,18 +9,21 @@ SyncBrowserProxy { private impressionCount_: number = 0; private storedAccounts_: StoredAccount[] = []; + private profileAvatarURL_: string = ''; private syncStatus_: SyncStatus = { signedInState: SignedInState.SYNCING, signedInUsername: 'fakeUsername', statusAction: StatusAction.NO_ACTION, }; + constructor() { super([ 'didNavigateAwayFromSyncPage', 'didNavigateToSyncPage', 'getPromoImpressionCount', 'getStoredAccounts', + 'getProfileAvatar', 'getSyncStatus', 'incrementPromoImpressionCount', 'pauseSync', @@ -50,6 +53,11 @@ return Promise.resolve(this.storedAccounts_); } + getProfileAvatar() { + this.methodCalled('getProfileAvatar'); + return Promise.resolve(this.profileAvatarURL_); + } + signOut(deleteProfile: boolean): void { this.methodCalled('signOut', deleteProfile); }
diff --git a/chrome/test/data/webui/settings/test_sync_browser_proxy.ts b/chrome/test/data/webui/settings/test_sync_browser_proxy.ts index 3ddff66f..b856e009 100644 --- a/chrome/test/data/webui/settings/test_sync_browser_proxy.ts +++ b/chrome/test/data/webui/settings/test_sync_browser_proxy.ts
@@ -24,6 +24,7 @@ encryptionPassphraseSuccess: boolean = false; decryptionPassphraseSuccess: boolean = false; storedAccounts: StoredAccount[] = []; + profileAvatarURL: string = ''; chromeSigninUserChoiceInfo: ChromeSigninUserChoiceInfo = { shouldShowSettings: false, choice: ChromeSigninUserChoice.NO_CHOICE, @@ -37,6 +38,7 @@ 'didNavigateToSyncPage', 'getPromoImpressionCount', 'getStoredAccounts', + 'getProfileAvatar', 'getSyncStatus', 'incrementPromoImpressionCount', 'setSyncDatatypes', @@ -90,6 +92,11 @@ return Promise.resolve(this.storedAccounts); } + getProfileAvatar() { + this.methodCalled('getProfileAvatar'); + return Promise.resolve(this.profileAvatarURL); + } + // <if expr="not chromeos_ash"> signOut(deleteProfile: boolean) { this.methodCalled('signOut', deleteProfile);
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index e4a8222..6ae7915 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -16144.0.0-1065761 \ No newline at end of file +16147.0.0-1065812 \ No newline at end of file
diff --git a/chromeos/ash/components/boca/babelorca/babel_orca_producer.cc b/chromeos/ash/components/boca/babelorca/babel_orca_producer.cc index 43912f5..84cc337 100644 --- a/chromeos/ash/components/boca/babelorca/babel_orca_producer.cc +++ b/chromeos/ash/components/boca/babelorca/babel_orca_producer.cc
@@ -25,6 +25,7 @@ #include "chromeos/ash/components/boca/babelorca/transcript_sender_impl.h" #include "chromeos/ash/components/boca/babelorca/transcript_sender_rate_limiter.h" #include "components/live_caption/pref_names.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" #include "media/mojo/mojom/speech_recognition_result.h" #include "services/network/public/cpp/shared_url_loader_factory.h" @@ -136,8 +137,10 @@ return; } - speech_recognizer_->ObserveTranscriptionResult( + speech_recognizer_->ObserveSpeechRecognition( base::BindRepeating(&BabelOrcaProducer::OnTranscriptionResult, + weak_ptr_factory_.GetWeakPtr()), + base::BindRepeating(&BabelOrcaProducer::OnLanguageIdentificationEvent, weak_ptr_factory_.GetWeakPtr())); speech_recognizer_->Start(); } @@ -165,8 +168,10 @@ if (local_captions_enabled_) { return; } - speech_recognizer_->ObserveTranscriptionResult( + speech_recognizer_->ObserveSpeechRecognition( base::BindRepeating(&BabelOrcaProducer::OnTranscriptionResult, + weak_ptr_factory_.GetWeakPtr()), + base::BindRepeating(&BabelOrcaProducer::OnLanguageIdentificationEvent, weak_ptr_factory_.GetWeakPtr())); speech_recognizer_->Start(); } @@ -182,7 +187,7 @@ result, base::BindOnce(&BabelOrcaProducer::DispatchToBubble, weak_ptr_factory_.GetWeakPtr()), - pref_service_->GetString(prefs::kUserMicrophoneCaptionLanguageCode), + source_language, pref_service_->GetString(prefs::kLiveTranslateTargetLanguageCode)); // `session_captions_enabled_` can be enabled but `rate_limited_sender_` is @@ -193,6 +198,12 @@ rate_limited_sender_->Send(result, source_language); } +void BabelOrcaProducer::OnLanguageIdentificationEvent( + const media::mojom::LanguageIdentificationEventPtr& event) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + caption_controller_wrapper_->OnLanguageIdentificationEvent(event); +} + void BabelOrcaProducer::OnSendFailed() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // TODO(crbug.com/373692250): report error. @@ -209,7 +220,7 @@ speech_recognizer_->Stop(); caption_controller_wrapper_->OnAudioStreamEnd(); // This should be a no-op if not currently observing. - speech_recognizer_->RemoveTranscriptionResultObservation(); + speech_recognizer_->RemoveSpeechRecognitionObservation(); rate_limited_sender_.reset(); }
diff --git a/chromeos/ash/components/boca/babelorca/babel_orca_producer.h b/chromeos/ash/components/boca/babelorca/babel_orca_producer.h index d258511a2..460a924 100644 --- a/chromeos/ash/components/boca/babelorca/babel_orca_producer.h +++ b/chromeos/ash/components/boca/babelorca/babel_orca_producer.h
@@ -17,6 +17,7 @@ #include "chromeos/ash/components/boca/babelorca/babel_orca_controller.h" #include "chromeos/ash/components/boca/babelorca/tachyon_authed_client_impl.h" #include "components/prefs/pref_service.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" namespace media { struct SpeechRecognitionResult; @@ -70,6 +71,12 @@ void OnTranscriptionResult(const media::SpeechRecognitionResult& result, const std::string& source_language); + // This callback method forwards language identification events to the + // live caption controller wrapper, the source language for translations + // is passed per call to OnTranscriptionResult above. + void OnLanguageIdentificationEvent( + const media::mojom::LanguageIdentificationEventPtr& event); + void OnSendFailed(); void StopRecognition();
diff --git a/chromeos/ash/components/boca/babelorca/babel_orca_producer_unittest.cc b/chromeos/ash/components/boca/babelorca/babel_orca_producer_unittest.cc index 15dec29..a8ac7a1 100644 --- a/chromeos/ash/components/boca/babelorca/babel_orca_producer_unittest.cc +++ b/chromeos/ash/components/boca/babelorca/babel_orca_producer_unittest.cc
@@ -28,6 +28,7 @@ #include "components/live_caption/pref_names.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" #include "media/mojo/mojom/speech_recognition_result.h" #include "services/network/public/cpp/data_element.h" #include "services/network/public/cpp/resource_request.h" @@ -49,10 +50,11 @@ MOCK_METHOD(void, Start, (), (override)); MOCK_METHOD(void, Stop, (), (override)); MOCK_METHOD(void, - ObserveTranscriptionResult, - (TranscriptionResultCallback), + ObserveSpeechRecognition, + (TranscriptionResultCallback, + LanguageIdentificationEventCallback), (override)); - MOCK_METHOD(void, RemoveTranscriptionResultObservation, (), (override)); + MOCK_METHOD(void, RemoveSpeechRecognitionObservation, (), (override)); }; class MockLiveCaptionControllerWrapper : public LiveCaptionControllerWrapper { @@ -63,6 +65,10 @@ DispatchTranscription, (const media::SpeechRecognitionResult&), (override)); + MOCK_METHOD(void, + OnLanguageIdentificationEvent, + (const media::mojom::LanguageIdentificationEventPtr&), + (override)); MOCK_METHOD(void, ToggleLiveCaptionForBabelOrca, (bool), (override)); MOCK_METHOD(void, OnAudioStreamEnd, (), (override)); MOCK_METHOD(void, RestartCaptions, (), (override)); @@ -135,9 +141,12 @@ EXPECT_CALL(*caption_controller_wrapper_ptr, ToggleLiveCaptionForBabelOrca(true)) .Times(1); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult) + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) .WillOnce( - [&transcript_cb](TranscriptionResultCallback transcript_cb_param) { + [&transcript_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_id_cb_param) { transcript_cb = std::move(transcript_cb_param); }); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); @@ -152,7 +161,7 @@ EXPECT_CALL(*caption_controller_wrapper_ptr, ToggleLiveCaptionForBabelOrca(false)) .Times(1); - EXPECT_CALL(*speech_recognizer_ptr, RemoveTranscriptionResultObservation) + EXPECT_CALL(*speech_recognizer_ptr, RemoveSpeechRecognitionObservation) .Times(1); EXPECT_CALL(*speech_recognizer_ptr, Stop).Times(1); EXPECT_CALL(*caption_controller_wrapper_ptr, OnAudioStreamEnd).Times(1); @@ -160,7 +169,7 @@ // Stop recognition methods are called on`producer` destruction as a safe // guard in case the object was destroyed before stopping recognition. - EXPECT_CALL(*speech_recognizer_ptr, RemoveTranscriptionResultObservation) + EXPECT_CALL(*speech_recognizer_ptr, RemoveSpeechRecognitionObservation) .Times(1); EXPECT_CALL(*speech_recognizer_ptr, Stop).Times(1); EXPECT_CALL(*caption_controller_wrapper_ptr, OnAudioStreamEnd).Times(1); @@ -174,7 +183,7 @@ std::move(caption_controller_wrapper_), std::move(authed_client_), &request_data_provider_, std::move(translator_), &pref_service_); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult).Times(0); + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition).Times(0); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(0); producer.OnSessionCaptionConfigUpdated(/*session_captions_enabled=*/true, /*translations_enabled=*/false); @@ -201,9 +210,12 @@ /*translations_enabled=*/false); base::OnceCallback<void(bool)> signin_cb = data_provider.TakeSigninCb(); ASSERT_FALSE(signin_cb.is_null()); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult) + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) .WillOnce( - [&transcript_cb](TranscriptionResultCallback transcript_cb_param) { + [&transcript_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_id_cb_param) { transcript_cb = std::move(transcript_cb_param); }); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); @@ -239,7 +251,7 @@ .Times(1); producer.OnLocalCaptionConfigUpdated(/*local_captions_enabled=*/false); // 2 Times, one on enabled set to false and one on destruction. - EXPECT_CALL(*speech_recognizer_ptr, RemoveTranscriptionResultObservation) + EXPECT_CALL(*speech_recognizer_ptr, RemoveSpeechRecognitionObservation) .Times(2); EXPECT_CALL(*speech_recognizer_ptr, Stop).Times(2); EXPECT_CALL(*caption_controller_wrapper_ptr, OnAudioStreamEnd).Times(2); @@ -268,9 +280,12 @@ EXPECT_CALL(*caption_controller_wrapper_ptr, ToggleLiveCaptionForBabelOrca(true)) .Times(1); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult) + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) .WillOnce( - [&transcript_cb](TranscriptionResultCallback transcript_cb_param) { + [&transcript_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + langauge_id_cb_param) { transcript_cb = std::move(transcript_cb_param); }); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); @@ -304,7 +319,7 @@ ToggleLiveCaptionForBabelOrca(false)) .Times(1); // 2 Times, one on enabled set to false and one on destruction. - EXPECT_CALL(*speech_recognizer_ptr, RemoveTranscriptionResultObservation) + EXPECT_CALL(*speech_recognizer_ptr, RemoveSpeechRecognitionObservation) .Times(2); EXPECT_CALL(*speech_recognizer_ptr, Stop).Times(2); EXPECT_CALL(*caption_controller_wrapper_ptr, OnAudioStreamEnd).Times(2); @@ -323,7 +338,7 @@ producer.OnSessionStarted(); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult).Times(1); + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition).Times(1); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); producer.OnSessionCaptionConfigUpdated(/*session_captions_enabled=*/true, /*translations_enabled=*/false); @@ -347,7 +362,7 @@ producer.OnSessionCaptionConfigUpdated(/*session_captions_enabled=*/true, /*translations_enabled=*/false); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult).Times(0); + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition).Times(0); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(0); base::OnceCallback<void(bool)> signin_cb = data_provider.TakeSigninCb(); ASSERT_FALSE(signin_cb.is_null()); @@ -371,7 +386,7 @@ producer.OnSessionCaptionConfigUpdated(/*session_captions_enabled=*/false, /*translations_enabled=*/false); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult).Times(0); + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition).Times(0); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(0); base::OnceCallback<void(bool)> signin_cb = data_provider.TakeSigninCb(); ASSERT_FALSE(signin_cb.is_null()); @@ -395,7 +410,7 @@ /*translations_enabled=*/false); producer.OnSessionEnded(); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult).Times(0); + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition).Times(0); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(0); base::OnceCallback<void(bool)> signin_cb = data_provider.TakeSigninCb(); ASSERT_FALSE(signin_cb.is_null()); @@ -416,13 +431,13 @@ &data_provider, std::move(translator_), &pref_service_); producer.OnSessionStarted(); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult).Times(1); + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition).Times(1); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); producer.OnSessionCaptionConfigUpdated(/*session_captions_enabled=*/true, /*translations_enabled=*/false); // 2 Times, one on `OnSessionEnded` and one on destruction. - EXPECT_CALL(*speech_recognizer_ptr, RemoveTranscriptionResultObservation) + EXPECT_CALL(*speech_recognizer_ptr, RemoveSpeechRecognitionObservation) .Times(2); EXPECT_CALL(*speech_recognizer_ptr, Stop).Times(2); EXPECT_CALL(*caption_controller_wrapper_ptr, OnAudioStreamEnd).Times(2); @@ -444,14 +459,14 @@ producer.OnSessionStarted(); producer.OnLocalCaptionConfigUpdated(/*local_captions_enabled=*/true); - EXPECT_CALL(*speech_recognizer_ptr, RemoveTranscriptionResultObservation) + EXPECT_CALL(*speech_recognizer_ptr, RemoveSpeechRecognitionObservation) .Times(0); EXPECT_CALL(*speech_recognizer_ptr, Stop).Times(0); EXPECT_CALL(*caption_controller_wrapper_ptr, OnAudioStreamEnd).Times(0); producer.OnSessionEnded(); // Stop recognition on destruction. - EXPECT_CALL(*speech_recognizer_ptr, RemoveTranscriptionResultObservation) + EXPECT_CALL(*speech_recognizer_ptr, RemoveSpeechRecognitionObservation) .Times(1); EXPECT_CALL(*speech_recognizer_ptr, Stop).Times(1); EXPECT_CALL(*caption_controller_wrapper_ptr, OnAudioStreamEnd).Times(1); @@ -476,9 +491,12 @@ EXPECT_CALL(*caption_controller_wrapper_ptr, ToggleLiveCaptionForBabelOrca(true)) .Times(1); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult) + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) .WillOnce( - [&transcript_cb](TranscriptionResultCallback transcript_cb_param) { + [&transcript_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_id_cb_param) { transcript_cb = std::move(transcript_cb_param); }); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); @@ -518,9 +536,12 @@ std::move(caption_controller_wrapper_), std::move(authed_client_), &request_data_provider_, std::move(translator_), &pref_service_); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult) + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) .WillOnce( - [&transcript_cb](TranscriptionResultCallback transcript_cb_param) { + [&transcript_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_id_cb_param) { transcript_cb = std::move(transcript_cb_param); }); producer.OnLocalCaptionConfigUpdated(/*local_captions_enabled=*/true); @@ -557,9 +578,12 @@ EXPECT_CALL(*caption_controller_wrapper_ptr, ToggleLiveCaptionForBabelOrca(true)) .Times(1); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult) + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) .WillOnce( - [&transcript_cb](TranscriptionResultCallback transcript_cb_param) { + [&transcript_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_id_cb_param) { transcript_cb = std::move(transcript_cb_param); }); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); @@ -607,9 +631,12 @@ EXPECT_CALL(*caption_controller_wrapper_ptr, ToggleLiveCaptionForBabelOrca(true)) .Times(1); - EXPECT_CALL(*speech_recognizer_ptr, ObserveTranscriptionResult) + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) .WillOnce( - [&transcript_cb](TranscriptionResultCallback transcript_cb_param) { + [&transcript_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_id_cb_param) { transcript_cb = std::move(transcript_cb_param); }); EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); @@ -640,5 +667,51 @@ EXPECT_EQ(transcript, sent_transcript); } +TEST_F(BabelOrcaProducerTest, + SourceLanguageSwitchTriggersOnLanguageIdentificationEvent) { + FakeTachyonRequestDataProvider data_provider("session-id", + /*tachyon_token=*/std::nullopt, + "group-id", "sender@email.com"); + MockSpeechRecognizer* speech_recognizer_ptr = speech_recognizer_.get(); + MockLiveCaptionControllerWrapper* caption_controller_wrapper_ptr = + caption_controller_wrapper_.get(); + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback language_id_cb; + BabelOrcaProducer producer( + url_loader_factory_.GetSafeWeakWrapper(), std::move(speech_recognizer_), + std::move(caption_controller_wrapper_), std::move(authed_client_), + &data_provider, std::move(translator_), &pref_service_); + + // Values here are arbitrary, we're just testing that the producer forwards + // this object to the caption controller. + media::mojom::LanguageIdentificationEventPtr language_id_event = + media::mojom::LanguageIdentificationEvent::New( + kTranslationTargetLanguage, + media::mojom::ConfidenceLevel::kDefaultValue); + language_id_event->asr_switch_result = + media::mojom::AsrSwitchResult::kSwitchSucceeded; + + producer.OnSessionStarted(); + producer.OnSessionCaptionConfigUpdated(/*session_captions_enabled=*/true, + /*translations_enabled=*/false); + base::OnceCallback<void(bool)> signin_cb = data_provider.TakeSigninCb(); + ASSERT_FALSE(signin_cb.is_null()); + EXPECT_CALL(*speech_recognizer_ptr, ObserveSpeechRecognition) + .WillOnce( + [&language_id_cb]( + TranscriptionResultCallback transcript_cb_param, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_id_cb_param) { + language_id_cb = std::move(language_id_cb_param); + }); + EXPECT_CALL(*speech_recognizer_ptr, Start).Times(1); + data_provider.set_tachyon_token("tachyon_token"); + std::move(signin_cb).Run(true); + + ASSERT_TRUE(language_id_cb); + EXPECT_CALL(*caption_controller_wrapper_ptr, OnLanguageIdentificationEvent) + .Times(1); + language_id_cb.Run(std::move(language_id_event)); +} + } // namespace } // namespace ash::babelorca
diff --git a/chromeos/ash/components/boca/babelorca/babel_orca_speech_recognizer.h b/chromeos/ash/components/boca/babelorca/babel_orca_speech_recognizer.h index 56214d7..02094cc 100644 --- a/chromeos/ash/components/boca/babelorca/babel_orca_speech_recognizer.h +++ b/chromeos/ash/components/boca/babelorca/babel_orca_speech_recognizer.h
@@ -8,6 +8,7 @@ #include <string> #include "base/functional/callback.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" namespace media { struct SpeechRecognitionResult; @@ -22,6 +23,8 @@ using TranscriptionResultCallback = base::RepeatingCallback<void(const media::SpeechRecognitionResult& result, const std::string& source_language)>; + using LanguageIdentificationEventCallback = base::RepeatingCallback<void( + const media::mojom::LanguageIdentificationEventPtr& event)>; BabelOrcaSpeechRecognizer(const BabelOrcaSpeechRecognizer&) = delete; BabelOrcaSpeechRecognizer& operator=(const BabelOrcaSpeechRecognizer&) = @@ -31,9 +34,11 @@ virtual void Start() = 0; virtual void Stop() = 0; - virtual void ObserveTranscriptionResult( - TranscriptionResultCallback transcription_result_callback) = 0; - virtual void RemoveTranscriptionResultObservation() = 0; + virtual void ObserveSpeechRecognition( + TranscriptionResultCallback transcription_result_callback, + LanguageIdentificationEventCallback + language_identification_event_callback) = 0; + virtual void RemoveSpeechRecognitionObservation() = 0; protected: BabelOrcaSpeechRecognizer() = default;
diff --git a/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper.h b/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper.h index 5dbe861..05f6876 100644 --- a/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper.h +++ b/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper.h
@@ -5,6 +5,8 @@ #ifndef CHROMEOS_ASH_COMPONENTS_BOCA_BABELORCA_LIVE_CAPTION_CONTROLLER_WRAPPER_H_ #define CHROMEOS_ASH_COMPONENTS_BOCA_BABELORCA_LIVE_CAPTION_CONTROLLER_WRAPPER_H_ +#include "media/mojo/mojom/speech_recognition.mojom.h" + namespace media { struct SpeechRecognitionResult; } // namespace media @@ -25,6 +27,9 @@ virtual void ToggleLiveCaptionForBabelOrca(bool enabled) = 0; + virtual void OnLanguageIdentificationEvent( + const media::mojom::LanguageIdentificationEventPtr& event) = 0; + virtual void OnAudioStreamEnd() = 0; virtual void RestartCaptions() = 0;
diff --git a/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.cc b/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.cc index af90174..ff741f3f 100644 --- a/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.cc +++ b/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.cc
@@ -9,6 +9,7 @@ #include "components/live_caption/caption_bubble_context.h" #include "components/live_caption/live_caption_controller.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" #include "media/mojo/mojom/speech_recognition_result.h" namespace ash::babelorca { @@ -32,6 +33,12 @@ live_caption_controller_->ToggleLiveCaptionForBabelOrca(enabled); } +void LiveCaptionControllerWrapperImpl::OnLanguageIdentificationEvent( + const media::mojom::LanguageIdentificationEventPtr& event) { + live_caption_controller_->OnLanguageIdentificationEvent( + caption_bubble_context_.get(), event); +} + void LiveCaptionControllerWrapperImpl::OnAudioStreamEnd() { live_caption_controller_->OnAudioStreamEnd(caption_bubble_context_.get()); }
diff --git a/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.h b/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.h index 131299e..93214d0 100644 --- a/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.h +++ b/chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper_impl.h
@@ -9,6 +9,7 @@ #include "base/memory/raw_ptr.h" #include "chromeos/ash/components/boca/babelorca/live_caption_controller_wrapper.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" namespace captions { class CaptionBubbleContext; @@ -35,6 +36,9 @@ void ToggleLiveCaptionForBabelOrca(bool enabled) override; + void OnLanguageIdentificationEvent( + const media::mojom::LanguageIdentificationEventPtr& event) override; + void OnAudioStreamEnd() override; void RestartCaptions() override;
diff --git a/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.cc b/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.cc index 996e36d..42416f3e 100644 --- a/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.cc +++ b/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.cc
@@ -8,6 +8,7 @@ #include <string> #include "chromeos/ash/components/boca/babelorca/babel_orca_speech_recognizer.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" #include "media/mojo/mojom/speech_recognition_result.h" namespace ash::babelorca { @@ -24,13 +25,31 @@ } } -void SpeechRecognitionEventHandler::SetTranscriptionResultCallback( - BabelOrcaSpeechRecognizer::TranscriptionResultCallback callback) { - transcription_result_callback_ = callback; +void SpeechRecognitionEventHandler::OnLanguageIdentificationEvent( + const media::mojom::LanguageIdentificationEventPtr& event) { + if (event->asr_switch_result == + media::mojom::AsrSwitchResult::kSwitchSucceeded) { + source_language_ = event->language; + } + + // This will make its way back to the live caption controller and bubble, + // which has its own logic to complete regardless of the value of + // `event->asr_switch_result`. + language_identification_callback_.Run(event); } -void SpeechRecognitionEventHandler::RemoveTranscriptionResultObservation() { +void SpeechRecognitionEventHandler::SetTranscriptionResultCallback( + BabelOrcaSpeechRecognizer::TranscriptionResultCallback + transcription_result_callback, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_identification_callback) { + language_identification_callback_ = language_identification_callback; + transcription_result_callback_ = transcription_result_callback; +} + +void SpeechRecognitionEventHandler::RemoveSpeechRecognitionObservation() { transcription_result_callback_.Reset(); + language_identification_callback_.Reset(); } } // namespace ash::babelorca
diff --git a/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.h b/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.h index dd25c204..5d05ec50 100644 --- a/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.h +++ b/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.h
@@ -9,17 +9,12 @@ #include <string> #include "chromeos/ash/components/boca/babelorca/babel_orca_speech_recognizer.h" - -namespace media { -struct SpeechRecognitionResult; -} // namespace media +#include "media/mojo/mojom/speech_recognition.mojom.h" namespace ash::babelorca { // This class implements the behavior of the BabelOrcaSpeechReocgnizerImpl for // handling speech recognition events. -// -// TODO(376671280): Handle LanguageIdentificationEvents. class SpeechRecognitionEventHandler { public: explicit SpeechRecognitionEventHandler(const std::string& source_language); @@ -30,19 +25,29 @@ // Set and unset callback for transcription results void SetTranscriptionResultCallback( - BabelOrcaSpeechRecognizer::TranscriptionResultCallback callback); - void RemoveTranscriptionResultObservation(); + BabelOrcaSpeechRecognizer::TranscriptionResultCallback + transcription_result_callback, + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_identification_callback); + void RemoveSpeechRecognitionObservation(); // Called by the speech recognizer when a transcript is received. void OnSpeechResult( const std::optional<media::SpeechRecognitionResult>& result); + // called by the speech recognizer when a language change is identified. + void OnLanguageIdentificationEvent( + const media::mojom::LanguageIdentificationEventPtr& event); + private: std::string source_language_; + BabelOrcaSpeechRecognizer::LanguageIdentificationEventCallback + language_identification_callback_; BabelOrcaSpeechRecognizer::TranscriptionResultCallback transcription_result_callback_; }; } // namespace ash::babelorca + #endif // CHROMEOS_ASH_COMPONENTS_BOCA_BABELORCA_SPEECH_RECOGNITION_EVENT_HANDLER_H_
diff --git a/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler_unittest.cc b/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler_unittest.cc index 5507666..7ba41ce 100644 --- a/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler_unittest.cc +++ b/chromeos/ash/components/boca/babelorca/speech_recognition_event_handler_unittest.cc
@@ -7,12 +7,15 @@ #include <string> #include "base/test/bind.h" +#include "chromeos/ash/components/boca/babelorca/speech_recognition_event_handler.h" +#include "media/mojo/mojom/speech_recognition.mojom.h" #include "media/mojo/mojom/speech_recognition_result.h" #include "testing/gtest/include/gtest/gtest.h" namespace ash::babelorca { namespace { constexpr char kDefaultLanguage[] = "en-US"; +constexpr char kAlternativeLanguage[] = "de-DE"; constexpr char kTranscript[] = "hello there."; } // namespace @@ -25,14 +28,16 @@ std::string language; SpeechRecognitionEventHandler event_handler(kDefaultLanguage); - event_handler.SetTranscriptionResultCallback(base::BindLambdaForTesting( - [&callback_invoked, &transcription, &language]( - const media::SpeechRecognitionResult& result, - const std::string& source_language) { - transcription = result.transcription; - language = source_language; - callback_invoked = true; - })); + event_handler.SetTranscriptionResultCallback( + base::BindLambdaForTesting( + [&callback_invoked, &transcription, &language]( + const media::SpeechRecognitionResult& result, + const std::string& source_language) { + transcription = result.transcription; + language = source_language; + callback_invoked = true; + }), + base::DoNothing()); event_handler.OnSpeechResult( media::SpeechRecognitionResult(kTranscript, /*is_final=*/true)); @@ -46,11 +51,13 @@ bool callback_invoked = false; SpeechRecognitionEventHandler event_handler(kDefaultLanguage); - event_handler.SetTranscriptionResultCallback(base::BindLambdaForTesting( - [&callback_invoked](const media::SpeechRecognitionResult& result, - const std::string& source_language) { - callback_invoked = true; - })); + event_handler.SetTranscriptionResultCallback( + base::BindLambdaForTesting( + [&callback_invoked](const media::SpeechRecognitionResult& result, + const std::string& source_language) { + callback_invoked = true; + }), + base::DoNothing()); event_handler.OnSpeechResult(std::nullopt); EXPECT_FALSE(callback_invoked); @@ -61,16 +68,74 @@ bool callback_invoked = false; SpeechRecognitionEventHandler event_handler(kDefaultLanguage); - event_handler.SetTranscriptionResultCallback(base::BindLambdaForTesting( - [&callback_invoked](const media::SpeechRecognitionResult& result, - const std::string& source_language) { - callback_invoked = true; - })); - event_handler.RemoveTranscriptionResultObservation(); + event_handler.SetTranscriptionResultCallback( + base::BindLambdaForTesting( + [&callback_invoked](const media::SpeechRecognitionResult& result, + const std::string& source_language) { + callback_invoked = true; + }), + base::DoNothing()); + event_handler.RemoveSpeechRecognitionObservation(); event_handler.OnSpeechResult( media::SpeechRecognitionResult(kTranscript, /*is_final=*/true)); EXPECT_FALSE(callback_invoked); } +// Tests that source language changes on LanguageChangeEvent +TEST(SpeechRecognitionEventHandlerTest, + ChangesSourceLanguageOnLanguageIdentificationEvent) { + size_t num_transcript_callback_invocations = 0u; + bool language_id_callback_invoked = false; + std::string on_recognition_source_language; + std::string on_language_id_source_language; + std::string transcript; + media::mojom::AsrSwitchResult asr_switch_result; + SpeechRecognitionEventHandler event_handler(kDefaultLanguage); + media::mojom::LanguageIdentificationEventPtr language_event = + media::mojom::LanguageIdentificationEvent::New( + kAlternativeLanguage, media::mojom::ConfidenceLevel::kConfident); + language_event->asr_switch_result = + media::mojom::AsrSwitchResult::kSwitchSucceeded; + + event_handler.SetTranscriptionResultCallback( + base::BindLambdaForTesting( + [&num_transcript_callback_invocations, + &on_recognition_source_language, + &transcript](const media::SpeechRecognitionResult& result, + const std::string& source_language) { + transcript = result.transcription; + on_recognition_source_language = source_language; + ++num_transcript_callback_invocations; + }), + base::BindLambdaForTesting( + [&language_id_callback_invoked, &asr_switch_result, + &on_language_id_source_language]( + const media::mojom::LanguageIdentificationEventPtr& event) { + ASSERT_TRUE(event->asr_switch_result.has_value()); + asr_switch_result = event->asr_switch_result.value(); + on_language_id_source_language = event->language; + language_id_callback_invoked = true; + })); + + // Verify default behavior before switching language. + event_handler.OnSpeechResult( + media::SpeechRecognitionResult(kTranscript, /*is_final=*/true)); + ASSERT_EQ(num_transcript_callback_invocations, 1u); + EXPECT_EQ(on_recognition_source_language, kDefaultLanguage); + EXPECT_EQ(transcript, kTranscript); + + // Simulate id event, ensure that source language changes. + event_handler.OnLanguageIdentificationEvent(std::move(language_event)); + ASSERT_TRUE(language_id_callback_invoked); + EXPECT_EQ(asr_switch_result, media::mojom::AsrSwitchResult::kSwitchSucceeded); + EXPECT_EQ(on_language_id_source_language, kAlternativeLanguage); + + event_handler.OnSpeechResult( + media::SpeechRecognitionResult(kTranscript, /*is_final=*/true)); + EXPECT_EQ(num_transcript_callback_invocations, 2u); + EXPECT_EQ(on_recognition_source_language, kAlternativeLanguage); + EXPECT_EQ(transcript, kTranscript); +} + } // namespace ash::babelorca
diff --git a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.cc b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.cc index 33ab455..3b4e223 100644 --- a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.cc +++ b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.cc
@@ -210,9 +210,7 @@ : loop_back_input_(media::AudioDeviceDescription::kLoopbackInputDeviceId), volume_control_impl_(), main_task_runner_(base::SequencedTaskRunner::GetCurrentDefault()), - device_id_(device_id), - start_audio_decoder_on_demand_( - features::IsStartAssistantAudioDecoderOnDemandEnabled()) {} + device_id_(device_id) {} void AudioOutputProviderImpl::Bind( mojo::PendingRemote<mojom::AudioOutputDelegate> audio_output_delegate, @@ -269,27 +267,6 @@ // TODO(muyuanli): implement. } -void AudioOutputProviderImpl::BindAudioDecoderFactory() { - DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_); - - if (start_audio_decoder_on_demand_) - return; - - // Hold a ref counted object of |AudioDecoderFactoryManager| as it won't get - // destructed. - audio_decoder_factory_manager_ref_counted_ = - GetOrCreateAudioDecoderFactoryManager(); -} - -void AudioOutputProviderImpl::UnBindAudioDecoderFactory() { - DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_); - - if (start_audio_decoder_on_demand_) - return; - - audio_decoder_factory_manager_ref_counted_.reset(); -} - scoped_refptr<AudioOutputProviderImpl::AudioDecoderFactoryManager> AudioOutputProviderImpl::GetOrCreateAudioDecoderFactoryManager() { DCHECK_CALLED_ON_VALID_SEQUENCE(main_sequence_checker_);
diff --git a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h index a5e6b8d..872059c 100644 --- a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h +++ b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl.h
@@ -78,8 +78,6 @@ void RegisterAudioEmittingStateCallback( AudioEmittingStateCallback callback) override; - void BindAudioDecoderFactory(); - void UnBindAudioDecoderFactory(); scoped_refptr<AudioDecoderFactoryManager> GetOrCreateAudioDecoderFactoryManager(); @@ -107,14 +105,6 @@ base::WeakPtr<AudioDecoderFactoryManager> audio_decoder_factory_manager_ GUARDED_BY_CONTEXT(main_sequence_checker_); - const bool start_audio_decoder_on_demand_; - // This is used to implement |start_audio_decoder_on_demand_| flag off - // behavior. |AudioOutputProviderImpl| will hold a ref counted object of - // |AudioDecoderFactoryManager| as it won't destructed. - scoped_refptr<AudioDecoderFactoryManager> - audio_decoder_factory_manager_ref_counted_ - GUARDED_BY_CONTEXT(main_sequence_checker_); - SEQUENCE_CHECKER(main_sequence_checker_); base::WeakPtrFactory<AudioOutputProviderImpl> weak_ptr_factory_{this};
diff --git a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl_unittest.cc b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl_unittest.cc index 378bb61..f799cf4 100644 --- a/chromeos/ash/services/libassistant/audio/audio_output_provider_impl_unittest.cc +++ b/chromeos/ash/services/libassistant/audio/audio_output_provider_impl_unittest.cc
@@ -7,13 +7,11 @@ #include <memory> #include <utility> -#include "ash/constants/ash_features.h" #include "base/functional/bind.h" #include "base/functional/callback.h" #include "base/run_loop.h" #include "base/task/bind_post_task.h" #include "base/test/bind.h" -#include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/threading/thread.h" #include "base/time/time.h" @@ -28,7 +26,6 @@ using assistant::FakePlatformDelegate; using assistant::mojom::AssistantAudioDecoderFactory; using ::assistant_client::OutputStreamMetadata; -using ::base::test::ScopedFeatureList; using ::base::test::SingleThreadTaskEnvironment; constexpr char kFakeDeviceId[] = "device_id"; @@ -147,47 +144,7 @@ base::test::TaskEnvironment task_env_; }; -TEST(AudioOutputProviderImplTest, StartDecoderServiceWithBindCall) { - ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndDisableFeature( - features::kStartAssistantAudioDecoderOnDemand); - - SingleThreadTaskEnvironment task_environment; - - auto provider = std::make_unique<AudioOutputProviderImpl>(kFakeDeviceId); - - FakePlatformDelegate platform_delegate; - mojo::PendingRemote<mojom::AudioOutputDelegate> audio_output_delegate; - { auto unused = audio_output_delegate.InitWithNewPipeAndPassReceiver(); } - provider->Bind(std::move(audio_output_delegate), &platform_delegate); - - provider->BindAudioDecoderFactory(); - - mojo::PendingReceiver<AssistantAudioDecoderFactory> - audio_decoder_factory_pending_receiver = - platform_delegate.audio_decoder_factory_receiver(); - FakeAssistantAudioDecoderFactory fake_assistant_audio_decoder_factory; - mojo::Receiver<AssistantAudioDecoderFactory> - assistant_audio_decoder_factory_receiver( - &fake_assistant_audio_decoder_factory, - std::move(audio_decoder_factory_pending_receiver)); - // If the flag is off, we expect that AudioDecoderFactory will be bound after - // BindAudioDecoderFactory call. - EXPECT_TRUE(assistant_audio_decoder_factory_receiver.is_bound()); - - bool disconnected = false; - assistant_audio_decoder_factory_receiver.set_disconnect_handler( - base::BindLambdaForTesting([&]() { disconnected = true; })); - - provider->UnBindAudioDecoderFactory(); - task_environment.RunUntilIdle(); - - // Confirm that it's disconnected after UnBindAudioDecoderFactory call. - EXPECT_TRUE(disconnected); -} - TEST(AudioOutputProviderImplTest, StartDecoderServiceOnDemand) { - ASSERT_TRUE(features::IsStartAssistantAudioDecoderOnDemandEnabled()); SingleThreadTaskEnvironment task_environment; auto provider = std::make_unique<AudioOutputProviderImpl>(kFakeDeviceId); @@ -197,11 +154,6 @@ { auto unused = audio_output_delegate.InitWithNewPipeAndPassReceiver(); } provider->Bind(std::move(audio_output_delegate), &platform_delegate); - provider->BindAudioDecoderFactory(); - // If the flag is on, AudioDecoderFactory should not be bound with - // BindAudioDecoderFactory, i.e. It should not be valid. - EXPECT_FALSE(platform_delegate.audio_decoder_factory_receiver().is_valid()); - // Set encoding format to MP3 as we use AudioDecoder only if it's in encoded // format. OutputStreamMetadata metadata = { @@ -266,14 +218,10 @@ third_output.reset(); task_environment.RunUntilIdle(); EXPECT_TRUE(disconnected); - - provider->UnBindAudioDecoderFactory(); } // We do not use AssistantAudioDecoder if audio format is in raw format. TEST(AudioOutputProviderImplTest, DoNotStartAudioServiceForRawFormat) { - ScopedFeatureList scoped_feature_list( - features::kStartAssistantAudioDecoderOnDemand); SingleThreadTaskEnvironment task_environment; FakeAssistantAudioDecoderFactory fake_assistant_audio_decoder_factory; @@ -284,9 +232,6 @@ { auto unused = audio_output_delegate.InitWithNewPipeAndPassReceiver(); } provider->Bind(std::move(audio_output_delegate), &platform_delegate); - provider->BindAudioDecoderFactory(); - EXPECT_FALSE(platform_delegate.audio_decoder_factory_receiver().is_valid()); - OutputStreamMetadata metadata = { .buffer_stream_format = { .encoding = assistant_client::OutputStreamEncoding::STREAM_PCM_S16, @@ -308,9 +253,6 @@ output.reset(); task_environment.RunUntilIdle(); - - provider->UnBindAudioDecoderFactory(); - task_environment.RunUntilIdle(); } // TODO(b/234874756): Move AssistantAudioDeviceOwner test under
diff --git a/chromeos/ash/services/libassistant/libassistant_service.cc b/chromeos/ash/services/libassistant/libassistant_service.cc index 4d4068e..69cc916c 100644 --- a/chromeos/ash/services/libassistant/libassistant_service.cc +++ b/chromeos/ash/services/libassistant/libassistant_service.cc
@@ -65,7 +65,6 @@ &audio_input_controller_), display_controller_(&speech_recognition_observers_), speaker_id_enrollment_controller_(&audio_input_controller_) { - service_controller_.AddAndFireAssistantClientObserver(&platform_api_); service_controller_.AddAndFireAssistantClientObserver( &conversation_controller_); service_controller_.AddAndFireAssistantClientObserver(
diff --git a/chromeos/ash/services/libassistant/platform_api.cc b/chromeos/ash/services/libassistant/platform_api.cc index b5c6330..39291bb 100644 --- a/chromeos/ash/services/libassistant/platform_api.cc +++ b/chromeos/ash/services/libassistant/platform_api.cc
@@ -76,12 +76,4 @@ return *system_provider_; } -void PlatformApi::OnAssistantClientCreated(AssistantClient* assistant_client) { - audio_output_provider_->BindAudioDecoderFactory(); -} - -void PlatformApi::OnAssistantClientDestroyed() { - audio_output_provider_->UnBindAudioDecoderFactory(); -} - } // namespace ash::libassistant
diff --git a/chromeos/ash/services/libassistant/platform_api.h b/chromeos/ash/services/libassistant/platform_api.h index 3a98f19a..951f330e 100644 --- a/chromeos/ash/services/libassistant/platform_api.h +++ b/chromeos/ash/services/libassistant/platform_api.h
@@ -8,7 +8,6 @@ #include <memory> #include "base/memory/raw_ptr.h" -#include "chromeos/ash/services/libassistant/grpc/assistant_client_observer.h" #include "chromeos/ash/services/libassistant/network_provider_impl.h" #include "chromeos/ash/services/libassistant/public/mojom/audio_output_delegate.mojom.h" #include "chromeos/ash/services/libassistant/public/mojom/platform_delegate.mojom.h" @@ -26,8 +25,7 @@ // Implementation of the Libassistant PlatformApi. // The components that haven't been migrated to this mojom service will still be // implemented chromeos/service/assistant/platform (and simply be exposed here). -class PlatformApi : public assistant_client::PlatformApi, - public AssistantClientObserver { +class PlatformApi : public assistant_client::PlatformApi { public: PlatformApi(); PlatformApi(const PlatformApi&) = delete; @@ -48,10 +46,6 @@ assistant_client::NetworkProvider& GetNetworkProvider() override; assistant_client::SystemProvider& GetSystemProvider() override; - // AssistantClientObserver: - void OnAssistantClientCreated(AssistantClient* assistant_client) override; - void OnAssistantClientDestroyed() override; - private: // This is owned by |AudioInputController|. raw_ptr<assistant_client::AudioInputProvider> audio_input_provider_ = nullptr;
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb index 4349d3cb..62dfdd7 100644 --- a/chromeos/strings/chromeos_strings_af.xtb +++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Taal</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" />-eksklusiewe muurpapier</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Dateer <ph name="DEVICE_NAME" /> op na weergawe <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identiteit</translation> <translation id="5317780077021120954">Berg</translation> <translation id="5318310531701770497">Kan nie name skep nie. Probeer ’n langer transkripsie.</translation>
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb index 397a64f..7154af7 100644 --- a/chromeos/strings/chromeos_strings_am.xtb +++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ቋንቋ</translation> <translation id="5303837385540978511">የ<ph name="PRODUCT_NAME" /> ለሚመለከተው የተወሰነ ልጣፍ</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" />ን ወደ ሥሪት <ph name="VERSION" /> ድረስ ያዘምኑ</translation> <translation id="5315873049536339193">ማንነት</translation> <translation id="5317780077021120954">አስቀምጥ</translation> <translation id="5318310531701770497">ስሞችን መፍጠር አልተቻለም። ረዘም ያለ ጽሑፍ ግልባጭ ይፍጠሩ።</translation>
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb index f4cc6f7..e491a627 100644 --- a/chromeos/strings/chromeos_strings_ar.xtb +++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">اللغة</translation> <translation id="5303837385540978511">خلفية حصرية على <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">تحديث <ph name="DEVICE_NAME" /> إلى الإصدار <ph name="VERSION" /></translation> <translation id="5315873049536339193">الهوية</translation> <translation id="5317780077021120954">حفظ</translation> <translation id="5318310531701770497">يتعذّر إنشاء الأسماء. يُرجى تجربة استخدام نص أطول.</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb index 7fe1360..4a9934a 100644 --- a/chromeos/strings/chromeos_strings_bn.xtb +++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ভাষা</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> এক্সক্লুসিভ ওয়ালপেপার</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">ভার্সন <ph name="VERSION" />-এ <ph name="DEVICE_NAME" /> আপডেট করুন</translation> <translation id="5315873049536339193">পরিচয়</translation> <translation id="5317780077021120954">সেভ করুন</translation> <translation id="5318310531701770497">নাম তৈরি করা যাচ্ছে না। দীর্ঘ ট্রানস্ক্রিপ্ট ব্যবহার করে দেখুন।</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb index 85fc177..d6b0cb60 100644 --- a/chromeos/strings/chromeos_strings_bs.xtb +++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -902,7 +902,7 @@ <translation id="5302048478445481009">Jezik</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> ekskluzivna pozadinska slika</translation> <translation id="5304899856529773394">EVDO</translation> -<translation id="530883153651464140">Ažurirajte <ph name="DEVICE_NAME" /> na verziju <ph name="VERSION" /></translation> +<translation id="530883153651464140">Ažuriranje uređaja <ph name="DEVICE_NAME" /> na verziju <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identitet</translation> <translation id="5317780077021120954">Sačuvaj</translation> <translation id="5318310531701770497">Nije moguće kreirati imena. Pokušajte s dužim transkriptom.</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb index 85d4e437..1830b94 100644 --- a/chromeos/strings/chromeos_strings_cs.xtb +++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Jazyk</translation> <translation id="5303837385540978511">Exkluzivní tapeta pro <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Aktualizovat zařízení <ph name="DEVICE_NAME" /> na verzi <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identita</translation> <translation id="5317780077021120954">Uložit</translation> <translation id="5318310531701770497">Nelze vytvořit názvy. Zkuste delší přepis.</translation>
diff --git a/chromeos/strings/chromeos_strings_cy.xtb b/chromeos/strings/chromeos_strings_cy.xtb index 200f4f0..a4a99679 100644 --- a/chromeos/strings/chromeos_strings_cy.xtb +++ b/chromeos/strings/chromeos_strings_cy.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Iaith</translation> <translation id="5303837385540978511">Papur wal unigryw <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Diweddarwch <ph name="DEVICE_NAME" /> i fersiwn <ph name="VERSION" /></translation> <translation id="5315873049536339193">Hunaniaeth</translation> <translation id="5317780077021120954">Cadw</translation> <translation id="5318310531701770497">Methu â chreu enwau. Rhowch gynnig ar drawsgrifiad hirach.</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb index 5a1fd72c..92178f7b 100644 --- a/chromeos/strings/chromeos_strings_da.xtb +++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Sprog</translation> <translation id="5303837385540978511">Baggrund udelukkende til <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140">Opdater <ph name="DEVICE_NAME" /> til version <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identitet</translation> <translation id="5317780077021120954">Gem</translation> <translation id="5318310531701770497">Det er ikke muligt at oprette navne. Prøv med en længere transskription.</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb index 1a6858f7..4ef1951a 100644 --- a/chromeos/strings/chromeos_strings_de.xtb +++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Sprache</translation> <translation id="5303837385540978511">Exklusiver <ph name="PRODUCT_NAME" />-Hintergrund</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">„<ph name="DEVICE_NAME" />“ auf Version <ph name="VERSION" /> aktualisieren</translation> <translation id="5315873049536339193">Identität</translation> <translation id="5317780077021120954">Speichern</translation> <translation id="5318310531701770497">Namen können nicht erstellt werden. Versuche es mit einem längeren Transkript.</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb index 92868aeb..32be238 100644 --- a/chromeos/strings/chromeos_strings_el.xtb +++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Γλώσσα</translation> <translation id="5303837385540978511">Αποκλειστική ταπετσαρία για <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140">Ενημέρωση <ph name="DEVICE_NAME" /> στην έκδοση <ph name="VERSION" /></translation> <translation id="5315873049536339193">Ταυτότητα</translation> <translation id="5317780077021120954">Αποθήκευση</translation> <translation id="5318310531701770497">Δεν είναι δυνατή η δημιουργία ονομάτων. Δοκιμάστε εκτενέστεση μεταγραφή.</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb index 9c5cf0a3..8b7e76d 100644 --- a/chromeos/strings/chromeos_strings_en-GB.xtb +++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Language</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> exclusive wallpaper</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Update <ph name="DEVICE_NAME" /> to version <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identity</translation> <translation id="5317780077021120954">Save</translation> <translation id="5318310531701770497">Can't create names. Try a longer transcript.</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb index 139afd1..c4dcd3f 100644 --- a/chromeos/strings/chromeos_strings_es-419.xtb +++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Idioma</translation> <translation id="5303837385540978511">Fondo de pantalla exclusivo para <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140">Actualizar <ph name="DEVICE_NAME" /> a la versión <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identidad</translation> <translation id="5317780077021120954">Guardar</translation> <translation id="5318310531701770497">No se pueden crear nombres. Prueba con una transcripción más larga.</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb index aa116c5..00c8ccc 100644 --- a/chromeos/strings/chromeos_strings_eu.xtb +++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Hizkuntza</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> gailuko horma-paper esklusiboa</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Eguneratu <ph name="DEVICE_NAME" /> <ph name="VERSION" /> bertsiora</translation> <translation id="5315873049536339193">Identitatea</translation> <translation id="5317780077021120954">Gorde</translation> <translation id="5318310531701770497">Ezin da sortu izenik. Probatu transkripzio luzeago batekin.</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb index c5ea3af..878cb11 100644 --- a/chromeos/strings/chromeos_strings_fa.xtb +++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">زبان</translation> <translation id="5303837385540978511">کاغذدیواری انحصاری <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">بهروزرسانی <ph name="DEVICE_NAME" /> به نسخه <ph name="VERSION" /></translation> <translation id="5315873049536339193">هویت</translation> <translation id="5317780077021120954">ذخیره</translation> <translation id="5318310531701770497">ایجاد کردن نام امکانپذیر نیست. ترانویسی طولانیتری را امتحان کنید.</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb index 2834ec3..b9a768b 100644 --- a/chromeos/strings/chromeos_strings_fi.xtb +++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Kieli</translation> <translation id="5303837385540978511">Tuotteen <ph name="PRODUCT_NAME" /> oma taustakuva</translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140">Päivitä <ph name="DEVICE_NAME" /> versioon <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identiteetti</translation> <translation id="5317780077021120954">Tallenna</translation> <translation id="5318310531701770497">Nimiä ei voi luoda. Kokeile pidempää transkriptiota.</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb index cc012d1..bfc361f 100644 --- a/chromeos/strings/chromeos_strings_fil.xtb +++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Wika</translation> <translation id="5303837385540978511">Wallpaper na eksklusibo sa <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">I-update ang <ph name="DEVICE_NAME" /> sa bersyon <ph name="VERSION" /></translation> <translation id="5315873049536339193">Pagkatao</translation> <translation id="5317780077021120954">I-save</translation> <translation id="5318310531701770497">Hindi makagawa ng mga pangalan. Sumubok ng mas mahabang transcript.</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb index 47724fe3..196cf0a 100644 --- a/chromeos/strings/chromeos_strings_fr-CA.xtb +++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -857,6 +857,7 @@ <translation id="5121677070210013200">Impossible de télécharger le modèle de transcription. Réessayez ou redémarrez votre Chromebook.</translation> <translation id="5130848777448318809">poneys</translation> <translation id="5137451382116112100">Plein écran</translation> +<translation id="5139813694804168398">Ne pas déranger</translation> <translation id="5140788690559353412">Lorsque vous perdez l'accès à votre compte scolaire, vous n'avez plus accès aux courriels associés ni aux fichiers Google Disque comme Gmail, Documents, Présentations et plus.</translation> <translation id="5142961317498132443">Authentification</translation> <translation id="5144311987923128508">Le bouton de confirmation est maintenant désactivé</translation> @@ -901,6 +902,7 @@ <translation id="5302048478445481009">Langue</translation> <translation id="5303837385540978511">Fond d'écran exclusif à <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Effectuer la mise à jour de <ph name="DEVICE_NAME" /> vers la version <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identité</translation> <translation id="5317780077021120954">Enregistrer</translation> <translation id="5318310531701770497">Impossible de créer des noms. Essayez une transcription plus longue.</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb index d655f24..dfa4963 100644 --- a/chromeos/strings/chromeos_strings_fr.xtb +++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Langue</translation> <translation id="5303837385540978511">Fond d'écran exclusif <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140">Mettre à jour <ph name="DEVICE_NAME" /> vers la version <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identité</translation> <translation id="5317780077021120954">Enregistrer</translation> <translation id="5318310531701770497">Impossible de créer des noms. Essayez avec une transcription plus longue.</translation>
diff --git a/chromeos/strings/chromeos_strings_gl.xtb b/chromeos/strings/chromeos_strings_gl.xtb index 480578e..ae7199f 100644 --- a/chromeos/strings/chromeos_strings_gl.xtb +++ b/chromeos/strings/chromeos_strings_gl.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Idioma</translation> <translation id="5303837385540978511">Fondo de pantalla exclusivo de <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EvDO</translation> +<translation id="530883153651464140">Actualizar <ph name="DEVICE_NAME" /> á versión <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identidade</translation> <translation id="5317780077021120954">Gardar</translation> <translation id="5318310531701770497">Non se poden crear nomes. Proba cunha transcrición máis longa.</translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb index 10960bd..8e9d766 100644 --- a/chromeos/strings/chromeos_strings_gu.xtb +++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ભાષા</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> માટે વિશિષ્ટ વૉલપેપર</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" />ને વર્ઝન <ph name="VERSION" /> પર અપડેટ કરો</translation> <translation id="5315873049536339193">ઓળખ</translation> <translation id="5317780077021120954">સાચવો</translation> <translation id="5318310531701770497">નામ બનાવી શકાતા નથી. કોઈ વધુ લાંબી ટ્રાન્સક્રિપ્ટ અજમાવી જુઓ.</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb index a9483c8d..553c4cd 100644 --- a/chromeos/strings/chromeos_strings_hu.xtb +++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Nyelv</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> exkluzív háttérkép</translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> frissítése a következő verzióra: <ph name="VERSION" /></translation> <translation id="5315873049536339193">Azonosítás</translation> <translation id="5317780077021120954">Mentés</translation> <translation id="5318310531701770497">Nem lehet neveket létrehozni. Próbálkozzon hosszabb átirattal.</translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb index 882816c..a25b638 100644 --- a/chromeos/strings/chromeos_strings_hy.xtb +++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Լեզու</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" />-ի բացառիկ պաստառ</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Թարմացրեք <ph name="DEVICE_NAME" /> սարքի ծրագրակազմը <ph name="VERSION" /> տարբերակով</translation> <translation id="5315873049536339193">Ինքնություն</translation> <translation id="5317780077021120954">Պահել</translation> <translation id="5318310531701770497">Հնարավոր չէ ստեղծել անվանումներ։ Փորձեք ավելի երկար գրադարձում։</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb index 3193c640..ba38d48d 100644 --- a/chromeos/strings/chromeos_strings_id.xtb +++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Bahasa</translation> <translation id="5303837385540978511">Wallpaper eksklusif untuk <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Update <ph name="DEVICE_NAME" /> ke versi <ph name="VERSION" /></translation> <translation id="5315873049536339193">identitas</translation> <translation id="5317780077021120954">Simpan</translation> <translation id="5318310531701770497">Tidak dapat membuat nama. Coba transkrip yang lebih panjang.</translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb index 8a6fd3a..3da62ca 100644 --- a/chromeos/strings/chromeos_strings_is.xtb +++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Tungumál</translation> <translation id="5303837385540978511">Sérstakt veggfóður <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Uppfæra <ph name="DEVICE_NAME" /> í útgáfu <ph name="VERSION" /></translation> <translation id="5315873049536339193">Auðkenni</translation> <translation id="5317780077021120954">Vista</translation> <translation id="5318310531701770497">Ekki hægt að búa til nöfn. Prófaðu lengri textauppskrift.</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb index c27eb1a..e43826b 100644 --- a/chromeos/strings/chromeos_strings_ja.xtb +++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">言語</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> 限定の壁紙</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> をバージョン <ph name="VERSION" /> にアップデート</translation> <translation id="5315873049536339193">ID</translation> <translation id="5317780077021120954">保存</translation> <translation id="5318310531701770497">名前を作成できません。文字起こしを長くしてみてください。</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb index caf6f4d7..c1bb8f3e 100644 --- a/chromeos/strings/chromeos_strings_kn.xtb +++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -130,7 +130,7 @@ <translation id="1564356849266217610">ಆರ್ಗಂಜಾ</translation> <translation id="1565038567006703504"><ph name="DEVICE_NAME" /> ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="1567064801249837505">ಆಲ್ಬಮ್ಗಳು</translation> -<translation id="1572585716423026576">ವಾಲ್ಪೇಪರ್ ಆಗಿ ಹೊಂದಿಸಿ</translation> +<translation id="1572585716423026576">ವಾಲ್ಪೇಪರ್ ಆಗಿ ಸೆಟ್ ಮಾಡಿ</translation> <translation id="1578784163189013834">ಸ್ಕ್ರೀನ್ ಸೇವರ್ ಹಿನ್ನೆಲೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</translation> <translation id="1587031308639983732">ಸಮಯ ಆಧಾರಿತ ಬದಲಾವಣೆಗಳು ನಿಖರವಾಗಿಲ್ಲದಿರಬಹುದು. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸುತ್ತಾರೆ.</translation> <translation id="1588438908519853928">ಸಾಮಾನ್ಯ</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb index c9e5484..bee7780 100644 --- a/chromeos/strings/chromeos_strings_ko.xtb +++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -857,7 +857,7 @@ <translation id="5121677070210013200">스크립트 작성 모델을 다운로드할 수 없습니다. 다시 시도하거나 Chromebook을 다시 시작하세요.</translation> <translation id="5130848777448318809">조랑말</translation> <translation id="5137451382116112100">전체</translation> -<translation id="5139813694804168398">알림 일시중지</translation> +<translation id="5139813694804168398">방해 금지 모드</translation> <translation id="5140788690559353412">학교 계정 액세스 권한을 상실하면 Gmail, Docs, Slides 등 연결된 이메일 및 Google Drive 파일에 더 이상 액세스할 수 없게 됩니다.</translation> <translation id="5142961317498132443">인증</translation> <translation id="5144311987923128508">확인 버튼이 사용 중지되었습니다.</translation> @@ -902,6 +902,7 @@ <translation id="5302048478445481009">언어</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> 전용 배경화면</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> 기기를 <ph name="VERSION" /> 버전으로 업데이트</translation> <translation id="5315873049536339193">주소</translation> <translation id="5317780077021120954">저장</translation> <translation id="5318310531701770497">이름을 만들 수 없습니다. 더 긴 스크립트를 사용해 보세요.</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb index f753b0c..81fc924a 100644 --- a/chromeos/strings/chromeos_strings_ky.xtb +++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Тил</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> өзгөчө тушкагазы</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> түзмөгүнүн версиясын төмөнкүгө жаңыртуу: <ph name="VERSION" /></translation> <translation id="5315873049536339193">Идентификация</translation> <translation id="5317780077021120954">Сактоо</translation> <translation id="5318310531701770497">Аталыштар түзүлбөй жатат. Узунураак транскрипцияны колдонуп көрүңүз.</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb index 3b66016..dff5608 100644 --- a/chromeos/strings/chromeos_strings_lo.xtb +++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ພາສາ</translation> <translation id="5303837385540978511">ຮູບພື້ນຫຼັງແບບພິເສດຈາກ <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">ອັບເດດ <ph name="DEVICE_NAME" /> ເປັນເວີຊັນ <ph name="VERSION" /></translation> <translation id="5315873049536339193">ລະບຸຕົວຕົນ</translation> <translation id="5317780077021120954">ບັນທຶກ</translation> <translation id="5318310531701770497">ສ້າງຊື່ບໍ່ໄດ້. ລອງຖອດຂໍ້ຄວາມຈາກສຽງໃຫ້ຍາວຂຶ້ນ.</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb index b9d09534..d74c5418 100644 --- a/chromeos/strings/chromeos_strings_lt.xtb +++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Kalba</translation> <translation id="5303837385540978511">„<ph name="PRODUCT_NAME" />“ išskirtinis ekrano fonas</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Atnaujinti įrenginį „<ph name="DEVICE_NAME" />“ į <ph name="VERSION" /> versiją</translation> <translation id="5315873049536339193">Tapatybė</translation> <translation id="5317780077021120954">Išsaugoti</translation> <translation id="5318310531701770497">Nepavyko sukurti pavadinimų. Išbandykite ilgesnį transkribuotą tekstą.</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb index 699a5e8..b7667bf 100644 --- a/chromeos/strings/chromeos_strings_lv.xtb +++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Valoda</translation> <translation id="5303837385540978511">Tikai ierīcē <ph name="PRODUCT_NAME" /> pieejama fona tapete</translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140">Atjaunināt ierīci <ph name="DEVICE_NAME" /> uz versiju <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identitāte</translation> <translation id="5317780077021120954">Saglabāt</translation> <translation id="5318310531701770497">Nevar izveidot nosaukumus. Izmēģiniet ar garāku transkripciju.</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb index 485cec3..905c10a 100644 --- a/chromeos/strings/chromeos_strings_mk.xtb +++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Јазик</translation> <translation id="5303837385540978511">Тапет ексклузивен за <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Ажурирајте го уредот <ph name="DEVICE_NAME" /> на верзија <ph name="VERSION" /></translation> <translation id="5315873049536339193">Идентитет</translation> <translation id="5317780077021120954">Зачувај</translation> <translation id="5318310531701770497">Не може да се создадат имиња. Обидете се со подолга транскрипција.</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb index 26d52bd8..49f339f 100644 --- a/chromeos/strings/chromeos_strings_ml.xtb +++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ഭാഷ</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> എക്സ്ക്ലൂസീവ് വാൾപേപ്പർ</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" />, <ph name="VERSION" /> പതിപ്പിലേക്ക് അപ്ഡേറ്റ് ചെയ്യുക</translation> <translation id="5315873049536339193">വ്യക്തിത്വം</translation> <translation id="5317780077021120954">സംരക്ഷിക്കുക</translation> <translation id="5318310531701770497">പേരുകൾ സൃഷ്ടിക്കാനാകില്ല. ദൈർഘ്യമേറിയ ട്രാൻസ്ക്രിപ്റ്റ് പരീക്ഷിക്കുക.</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb index 68d0dbf..fff64bd 100644 --- a/chromeos/strings/chromeos_strings_mn.xtb +++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Хэл</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" />-н онцгой дэлгэцийн зураг</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" />-г <ph name="VERSION" /> хувилбар луу шинэчлэх</translation> <translation id="5315873049536339193">Таниулбар</translation> <translation id="5317780077021120954">Хадгалах</translation> <translation id="5318310531701770497">Нэр үүсгэх боломжгүй. Илүү урт сийрүүлэг туршиж үзнэ үү.</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb index c306c40..e42e82a8 100644 --- a/chromeos/strings/chromeos_strings_mr.xtb +++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">भाषा</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> चा विशेष वॉलपेपर</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> हे <ph name="VERSION" /> या आवृत्तीवर अपडेट करा</translation> <translation id="5315873049536339193">ओळख</translation> <translation id="5317780077021120954">सेव्ह करा</translation> <translation id="5318310531701770497">नावे तयार करू शकत नाही. आणखी मोठे ट्रान्स्क्रिप्ट वापरून पहा.</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb index ae2352f..b6ab7f9 100644 --- a/chromeos/strings/chromeos_strings_my.xtb +++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ဘာသာစကား</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> သီးသန့် နောက်ခံ</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> ကို ဗားရှင်း <ph name="VERSION" /> သို့ အပ်ဒိတ်လုပ်ရန်</translation> <translation id="5315873049536339193">အထောက်အထား</translation> <translation id="5317780077021120954">သိမ်းရန်</translation> <translation id="5318310531701770497">အမည်များ ပြုလုပ်၍မရပါ။ ပိုရှည်သည့် စာသားဖြင့် စမ်းကြည့်ပါ။</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb index dd536b5..b96cae8 100644 --- a/chromeos/strings/chromeos_strings_or.xtb +++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ଭାଷା</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> ଏକ୍ସକ୍ଲୁସିଭ ୱାଲପେପର</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" />କୁ <ph name="VERSION" /> ଭର୍ସନକୁ ଅପଡେଟ କରନ୍ତୁ</translation> <translation id="5315873049536339193">ପରିଚୟ</translation> <translation id="5317780077021120954">ସେଭ କରନ୍ତୁ</translation> <translation id="5318310531701770497">ନାମ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ। ଏକ ଲମ୍ବା ଟ୍ରାନ୍ସକ୍ରିପ୍ଟ ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ।</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb index 79acd6c..fb6f0d7 100644 --- a/chromeos/strings/chromeos_strings_pa.xtb +++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">ਭਾਸ਼ਾ</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> ਦਾ ਵਿਸ਼ੇਸ਼ ਵਾਲਪੇਪਰ</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> ਨੂੰ ਵਰਜਨ <ph name="VERSION" /> 'ਤੇ ਅੱਪਡੇਟ ਕਰੋ</translation> <translation id="5315873049536339193">ਪਛਾਣ</translation> <translation id="5317780077021120954">ਰੱਖਿਅਤ ਕਰੋ</translation> <translation id="5318310531701770497">ਨਾਮ ਨਹੀਂ ਬਣਾਏ ਜਾ ਸਕਦੇ। ਲੰਬੀ ਪ੍ਰਤੀਲਿਪੀ ਵਰਤ ਕੇ ਦੇਖੋ।</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb index 70a2bbd6..8c2a835 100644 --- a/chromeos/strings/chromeos_strings_pl.xtb +++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Język</translation> <translation id="5303837385540978511">Tapeta tylko na urządzenie <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Zaktualizuj urządzenie <ph name="DEVICE_NAME" /> do wersji <ph name="VERSION" /></translation> <translation id="5315873049536339193">Tożsamość</translation> <translation id="5317780077021120954">Zapisz</translation> <translation id="5318310531701770497">Nie można utworzyć nazw. Użyj dłuższej transkrypcji.</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb index 17491c50..f4807174 100644 --- a/chromeos/strings/chromeos_strings_pt-BR.xtb +++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Idioma</translation> <translation id="5303837385540978511">Plano de fundo exclusivo para <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EvDO</translation> +<translation id="530883153651464140">Atualizar <ph name="DEVICE_NAME" /> para a versão <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identidade</translation> <translation id="5317780077021120954">Salvar</translation> <translation id="5318310531701770497">Não é possível criar nomes. Tente em uma transcrição mais longa.</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb index a7be8fa..7ef59d5 100644 --- a/chromeos/strings/chromeos_strings_ro.xtb +++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Limbă</translation> <translation id="5303837385540978511">Imagine de fundal exclusivă pentru <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Actualizează <ph name="DEVICE_NAME" /> la versiunea <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identitate</translation> <translation id="5317780077021120954">Salvează</translation> <translation id="5318310531701770497">Nu se pot crea nume. Încearcă o transcriere mai lungă.</translation>
diff --git a/chromeos/strings/chromeos_strings_si.xtb b/chromeos/strings/chromeos_strings_si.xtb index 91a69f7..789fe21 100644 --- a/chromeos/strings/chromeos_strings_si.xtb +++ b/chromeos/strings/chromeos_strings_si.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">භාෂාව</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> සුවිශේෂී වෝල්පේපරය</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="VERSION" /> අනුවාදයට <ph name="DEVICE_NAME" /> යාවත්කාලීන කරන්න</translation> <translation id="5315873049536339193">අනන්යතාවය</translation> <translation id="5317780077021120954">සුරකින්න</translation> <translation id="5318310531701770497">නම් තැනීමට නොහැක. දිගු අනුපතක් උත්සාහ කරන්න.</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb index 2af2bdf..7297715 100644 --- a/chromeos/strings/chromeos_strings_sk.xtb +++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Jazyk</translation> <translation id="5303837385540978511">Tapeta exkluzívna pre službu <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EvDo</translation> +<translation id="530883153651464140">Aktualizovať zariadenie <ph name="DEVICE_NAME" /> na verziu <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identita</translation> <translation id="5317780077021120954">Uložiť</translation> <translation id="5318310531701770497">Nedajú sa vytvoriť názvy. Skúste dlhší prepis.</translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb index aa5b0ddc..124e931f 100644 --- a/chromeos/strings/chromeos_strings_sq.xtb +++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Gjuha</translation> <translation id="5303837385540978511">Imazhi ekskluziv i sfondit për <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Përditëso <ph name="DEVICE_NAME" /> në versionin <ph name="VERSION" /></translation> <translation id="5315873049536339193">Identiteti</translation> <translation id="5317780077021120954">Ruaj</translation> <translation id="5318310531701770497">Nuk mund të krijohen emra. Provo një transkript më të gjatë.</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb index 40113d7..f499d4b 100644 --- a/chromeos/strings/chromeos_strings_sw.xtb +++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Lugha</translation> <translation id="5303837385540978511">Mandhari ya kipekee ya <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Sasisha <ph name="DEVICE_NAME" /> ili utumie toleo la <ph name="VERSION" /></translation> <translation id="5315873049536339193">Kitambulisho</translation> <translation id="5317780077021120954">Hifadhi</translation> <translation id="5318310531701770497">Imeshindwa kubuni majina. Jaribu kutumia manukuu marefu.</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb index 070f9b0..73f428c 100644 --- a/chromeos/strings/chromeos_strings_ta.xtb +++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">மொழி</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> பிரத்தியேக வால்பேப்பர்</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> சாதனத்தை <ph name="VERSION" /> பதிப்பிற்குப் புதுப்பிக்கும்</translation> <translation id="5315873049536339193">அடையாளம்</translation> <translation id="5317780077021120954">சேமி</translation> <translation id="5318310531701770497">பெயர்களை உருவாக்க முடியவில்லை. நீளமான டிரான்ஸ்கிரிப்ட்டைப் பயன்படுத்துங்கள்.</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb index ec73225..d92cee8 100644 --- a/chromeos/strings/chromeos_strings_tr.xtb +++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Dil</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> cihazlara özel duvar kağıdı</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> cihazını <ph name="VERSION" /> sürümüne güncelle</translation> <translation id="5315873049536339193">Kimlik</translation> <translation id="5317780077021120954">Kaydet</translation> <translation id="5318310531701770497">Ad oluşturulamadı. Daha uzun bir transkriptle deneyin.</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb index 682c42e4..9d6b160b 100644 --- a/chromeos/strings/chromeos_strings_uk.xtb +++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Мова</translation> <translation id="5303837385540978511">Ексклюзивний фоновий малюнок для <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">Стандарт EvDo</translation> +<translation id="530883153651464140">Оновити пристрій <ph name="DEVICE_NAME" /> до версії <ph name="VERSION" /></translation> <translation id="5315873049536339193">Ідентифікаційна інформація</translation> <translation id="5317780077021120954">Зберегти</translation> <translation id="5318310531701770497">Не вдалося створити назви. Оберіть довшу транскрипцію.</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb index 34da059..6b967a3 100644 --- a/chromeos/strings/chromeos_strings_ur.xtb +++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">زبان</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> خاص وال پیپر</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140"><ph name="DEVICE_NAME" /> کو ورژن <ph name="VERSION" /> میں اپ ڈیٹ کریں</translation> <translation id="5315873049536339193">شناخت</translation> <translation id="5317780077021120954">محفوظ کریں</translation> <translation id="5318310531701770497">نام تخلیق نہیں کیے جا سکتے۔ طویل ٹرانسکرپٹ آزمائیں۔</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb index f2ba3a34..2adfd32 100644 --- a/chromeos/strings/chromeos_strings_vi.xtb +++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Ngôn ngữ</translation> <translation id="5303837385540978511">Hình nền dành riêng cho <ph name="PRODUCT_NAME" /></translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">Cập nhật <ph name="DEVICE_NAME" /> lên phiên bản <ph name="VERSION" /></translation> <translation id="5315873049536339193">Nhận dạng</translation> <translation id="5317780077021120954">Lưu</translation> <translation id="5318310531701770497">Không tạo được tên. Hãy thử một bản chép lời dài hơn.</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb index 7e64438..3cd9a6c 100644 --- a/chromeos/strings/chromeos_strings_zh-CN.xtb +++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">语言</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> 专属壁纸</translation> <translation id="5304899856529773394">EVDO</translation> +<translation id="530883153651464140">将<ph name="DEVICE_NAME" />更新至版本 <ph name="VERSION" /></translation> <translation id="5315873049536339193">身份</translation> <translation id="5317780077021120954">保存</translation> <translation id="5318310531701770497">无法创建名称,请尝试输入较长的转写内容。</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb index 40515305..f4ff0ded 100644 --- a/chromeos/strings/chromeos_strings_zh-HK.xtb +++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -902,7 +902,7 @@ <translation id="5302048478445481009">語言</translation> <translation id="5303837385540978511"><ph name="PRODUCT_NAME" /> 專屬桌布</translation> <translation id="5304899856529773394">EVDO</translation> -<translation id="530883153651464140">將「<ph name="DEVICE_NAME" />」更新到 <ph name="VERSION" /> 版</translation> +<translation id="530883153651464140">將「<ph name="DEVICE_NAME" />」更新至版本 <ph name="VERSION" /></translation> <translation id="5315873049536339193">身分</translation> <translation id="5317780077021120954">儲存</translation> <translation id="5318310531701770497">無法建立名稱,請改用較長的轉錄文字。</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb index 69fbd2e..cd459be1 100644 --- a/chromeos/strings/chromeos_strings_zu.xtb +++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -902,6 +902,7 @@ <translation id="5302048478445481009">Ulimi</translation> <translation id="5303837385540978511">Isithombe sangemuva se-<ph name="PRODUCT_NAME" /> esikhethekile</translation> <translation id="5304899856529773394">I-EVDO</translation> +<translation id="530883153651464140">Thuthukisa i-<ph name="DEVICE_NAME" /> ibe uhlelo lwe-<ph name="VERSION" /></translation> <translation id="5315873049536339193">Ukuhlonza</translation> <translation id="5317780077021120954">Londoloza</translation> <translation id="5318310531701770497">Ayikwazi ukusungula amagama. Zama okulotshiweyo okude.</translation>
diff --git a/clank b/clank index d90d740..4d4cf098 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit d90d7402d89b583f564f4505a6d97802afea5cae +Subproject commit 4d4cf09821c697212343fc07e330cf0438982470
diff --git a/components/autofill/core/browser/data_model/autofill_profile_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc index eb515f6..0f3097e 100644 --- a/components/autofill/core/browser/data_model/autofill_profile_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_profile_unittest.cc
@@ -19,6 +19,7 @@ #include "base/time/time.h" #include "base/uuid.h" #include "components/autofill/core/browser/autofill_type.h" +#include "components/autofill/core/browser/country_type.h" #include "components/autofill/core/browser/data_model/autofill_profile_comparator.h" #include "components/autofill/core/browser/data_quality/addresses/profile_token_quality.h" #include "components/autofill/core/browser/data_quality/addresses/profile_token_quality_test_api.h" @@ -1113,6 +1114,30 @@ } } +// Tests whether calling `FinalizeAfterImport` where a root node is user +// verified to be empty, wipes the data from subcomponents. +TEST_F(AutofillProfileTest, TestFinalizeAfterImportUserVerifiedEmpty) { + base::test::ScopedFeatureList feature_list{ + features::kAutofillSupportPhoneticNameForJP}; + AutofillProfile profile(AddressCountryCode("JP")); + profile.SetRawInfoWithVerificationStatus(ALTERNATIVE_FULL_NAME, u"", + VerificationStatus::kUserVerified); + profile.SetRawInfoWithVerificationStatus(ALTERNATIVE_FAMILY_NAME, u"Smith", + VerificationStatus::kObserved); + profile.SetRawInfoWithVerificationStatus(ALTERNATIVE_GIVEN_NAME, u"John", + VerificationStatus::kObserved); + EXPECT_TRUE(profile.FinalizeAfterImport()); + EXPECT_TRUE(profile.GetRawInfo(ALTERNATIVE_FULL_NAME).empty()); + EXPECT_EQ(profile.GetVerificationStatus(ALTERNATIVE_FULL_NAME), + VerificationStatus::kFormatted); + EXPECT_TRUE(profile.GetRawInfo(ALTERNATIVE_FAMILY_NAME).empty()); + EXPECT_EQ(profile.GetVerificationStatus(ALTERNATIVE_FAMILY_NAME), + VerificationStatus::kNoStatus); + EXPECT_TRUE(profile.GetRawInfo(ALTERNATIVE_GIVEN_NAME).empty()); + EXPECT_EQ(profile.GetVerificationStatus(ALTERNATIVE_GIVEN_NAME), + VerificationStatus::kNoStatus); +} + TEST_F(AutofillProfileTest, SetAndGetRawInfoWithValidationStatus) { AutofillProfile profile(i18n_model_definition::kLegacyHierarchyCountryCode); // An unsupported type should return |kNoStatus|.
diff --git a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc index 9c76b01..162cee7 100644 --- a/components/autofill/core/browser/data_model/autofill_structured_address_component.cc +++ b/components/autofill/core/browser/data_model/autofill_structured_address_component.cc
@@ -880,9 +880,13 @@ ->MaximumNumberOfAssignedAddressComponentsOnNodeToLeafPaths()); } - // Only count non-empty nodes. - if (!GetValue().empty()) + // Only count non-empty nodes, unless they were user verified. + if (!GetValue().empty() || + (base::FeatureList::IsEnabled( + features::kAutofillSupportPhoneticNameForJP) && + GetVerificationStatus() == VerificationStatus::kUserVerified)) { ++result; + } return result; }
diff --git a/components/autofill/core/browser/data_model/contact_info.cc b/components/autofill/core/browser/data_model/contact_info.cc index 87124d3..fb320c52 100644 --- a/components/autofill/core/browser/data_model/contact_info.cc +++ b/components/autofill/core/browser/data_model/contact_info.cc
@@ -105,13 +105,12 @@ // The same logic as above for the alternative name. if (base::FeatureList::IsEnabled( features::kAutofillSupportPhoneticNameForJP)) { - alternative_name_->MigrateLegacyStructure(); bool result_alt = alternative_name_->CompleteFullTree(); if (!result_alt) { if (alternative_name_->GetVerificationStatus() == VerificationStatus::kUserVerified && alternative_name_->WipeInvalidStructure()) { - result_alt &= alternative_name_->CompleteFullTree(); + result_alt = alternative_name_->CompleteFullTree(); } result &= result_alt; }
diff --git a/components/autofill/core/browser/form_parsing/autofill_parsing_utils.cc b/components/autofill/core/browser/form_parsing/autofill_parsing_utils.cc index 20521780..9f53c82 100644 --- a/components/autofill/core/browser/form_parsing/autofill_parsing_utils.cc +++ b/components/autofill/core/browser/form_parsing/autofill_parsing_utils.cc
@@ -30,6 +30,8 @@ return &features::kAutofillUseNLAddressModel; case RegexFeature::kAutofillSupportPhoneticNameForJP: return &features::kAutofillSupportPhoneticNameForJP; + case RegexFeature::kAutofillSupportLastNamePrefix: + return &features::kAutofillSupportLastNamePrefix; } NOTREACHED(); }
diff --git a/components/autofill/core/browser/form_parsing/autofill_parsing_utils.h b/components/autofill/core/browser/form_parsing/autofill_parsing_utils.h index 71a7127..236666ad 100644 --- a/components/autofill/core/browser/form_parsing/autofill_parsing_utils.h +++ b/components/autofill/core/browser/form_parsing/autofill_parsing_utils.h
@@ -63,7 +63,8 @@ kAutofillUseFRAddressModel = 4, kAutofillSupportPhoneticNameForJP = 5, kAutofillUseNLAddressModel = 6, - kMaxValue = kAutofillUseNLAddressModel + kAutofillSupportLastNamePrefix = 7, + kMaxValue = kAutofillSupportLastNamePrefix }; // Returns a `DenseSet` containing all `RegexFeature`s whose corresponding
diff --git a/components/autofill/core/browser/form_parsing/form_field_parser.cc b/components/autofill/core/browser/form_parsing/form_field_parser.cc index 5c71012..b5ef785 100644 --- a/components/autofill/core/browser/form_parsing/form_field_parser.cc +++ b/components/autofill/core/browser/form_parsing/form_field_parser.cc
@@ -8,11 +8,13 @@ #include <cstddef> #include <iterator> #include <numeric> +#include <string> #include <string_view> #include "base/auto_reset.h" #include "base/containers/flat_map.h" #include "base/memory/raw_ptr.h" +#include "base/strings/strcat.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "components/autofill/core/browser/autofill_field.h" @@ -65,17 +67,21 @@ } void MaybePrintMatchLogs(LogManager* log_manager, - std::string_view regex_name, + const std::string& regex_name, std::string_view match_attribute_str, std::u16string_view value, - const std::vector<std::u16string>& matches) { + const std::vector<std::u16string>& matches, + bool is_negative_pattern) { if (!log_manager || !IsLoggingActive(log_manager)) { return; } CHECK(!matches.empty()); LogBuffer table_rows; LOG_AF(table_rows) << Tr{} << "Match type: Match in " << match_attribute_str; - LOG_AF(table_rows) << Tr{} << "RegEx:" << regex_name; + const std::string regex_name_to_log = + is_negative_pattern ? base::StrCat({regex_name, " (Negative Pattern)"}) + : regex_name; + LOG_AF(table_rows) << Tr{} << "RegEx:" << regex_name_to_log; LOG_AF(table_rows) << Tr{} << "Value: " << HighlightValue(value, matches[0]); // The matched substring is reported once more as the highlighting is not // particularly copy&paste friendly. @@ -464,7 +470,7 @@ // are considered for positive matching. for (MatchAttribute attribute : match_params.attributes) { if (Match(context, field, pattern.negative_pattern, {attribute}, - regex_name)) { + regex_name, /*is_negative_pattern=*/true)) { reduced_attributes.erase(attribute); } } @@ -649,7 +655,8 @@ const AutofillField& field, std::u16string_view pattern, DenseSet<MatchAttribute> match_attributes, - const char* regex_name) { + const char* regex_name, + bool is_negative_pattern) { // Since `MatchAttribute::kLabel < MatchAttribute::kName`, the logic attempts // matching `pattern` against the label first. However, when // `kAutofillBetterLocalHeuristicPlaceholderSupport` is enabled, label @@ -660,8 +667,8 @@ for (MatchAttribute attribute : match_attributes) { switch (attribute) { case MatchAttribute::kLabel: - if (std::optional<MatchInfo> match_info = - MatchInLabel(context, field, pattern, regex_name)) { + if (std::optional<MatchInfo> match_info = MatchInLabel( + context, field, pattern, regex_name, is_negative_pattern)) { if (match_info->matched_attribute == MatchInfo::MatchAttribute::kHighQualityLabel) { return match_info; @@ -670,8 +677,8 @@ } break; case MatchAttribute::kName: - if (std::optional<MatchInfo> match_info = - MatchInName(context, field, pattern, regex_name)) { + if (std::optional<MatchInfo> match_info = MatchInName( + context, field, pattern, regex_name, is_negative_pattern)) { return match_info; } break; @@ -685,7 +692,8 @@ ParsingContext& context, const AutofillField& field, std::u16string_view pattern, - const char* regex_name) { + const char* regex_name, + bool is_negative_pattern) { std::vector<std::u16string> matches; std::vector<std::u16string>* capture_destination = context.log_manager && context.log_manager->IsLoggingActive() ? &matches @@ -700,7 +708,7 @@ if (!context.better_placeholder_support || field.placeholder().empty()) { if (MatchesRegexWithCache(context, label, pattern, capture_destination)) { MaybePrintMatchLogs(context.log_manager, regex_name, "label", label, - matches); + matches, is_negative_pattern); return MatchInfo{.matched_attribute = MatchInfo::MatchAttribute::kHighQualityLabel}; } @@ -717,14 +725,14 @@ if (MatchesRegexWithCache(context, high_quality_label, pattern, capture_destination)) { MaybePrintMatchLogs(context.log_manager, regex_name, "high quality label", - high_quality_label, matches); + high_quality_label, matches, is_negative_pattern); return MatchInfo{.matched_attribute = MatchInfo::MatchAttribute::kHighQualityLabel}; } if (MatchesRegexWithCache(context, low_quality_label, pattern, capture_destination)) { MaybePrintMatchLogs(context.log_manager, regex_name, "low quality label", - low_quality_label, matches); + low_quality_label, matches, is_negative_pattern); return MatchInfo{.matched_attribute = MatchInfo::MatchAttribute::kLowQualityLabel}; } @@ -736,7 +744,8 @@ ParsingContext& context, const AutofillField& field, std::u16string_view pattern, - const char* regex_name) { + const char* regex_name, + bool is_negative_pattern) { std::vector<std::u16string> matches; std::vector<std::u16string>* capture_destination = context.log_manager && context.log_manager->IsLoggingActive() ? &matches @@ -744,7 +753,8 @@ const std::u16string& name = field.parseable_name(); if (MatchesRegexWithCache(context, name, pattern, capture_destination)) { - MaybePrintMatchLogs(context.log_manager, regex_name, "name", name, matches); + MaybePrintMatchLogs(context.log_manager, regex_name, "name", name, matches, + is_negative_pattern); return MatchInfo{.matched_attribute = MatchInfo::MatchAttribute::kName}; } return std::nullopt;
diff --git a/components/autofill/core/browser/form_parsing/form_field_parser.h b/components/autofill/core/browser/form_parsing/form_field_parser.h index edfceb7d..a48ea78 100644 --- a/components/autofill/core/browser/form_parsing/form_field_parser.h +++ b/components/autofill/core/browser/form_parsing/form_field_parser.h
@@ -316,17 +316,21 @@ const AutofillField& field, std::u16string_view pattern, DenseSet<MatchAttribute> match_attributes, - const char* regex_name); + const char* regex_name, + bool is_negative_pattern = false); // Like `Match()`, but only for the label or name of the field. - static std::optional<MatchInfo> MatchInLabel(ParsingContext& context, - const AutofillField& field, - std::u16string_view pattern, - const char* regex_name); + static std::optional<MatchInfo> MatchInLabel( + ParsingContext& context, + const AutofillField& field, + std::u16string_view pattern, + const char* regex_name, + bool is_negative_pattern = false); static std::optional<MatchInfo> MatchInName(ParsingContext& context, const AutofillField& field, std::u16string_view pattern, - const char* regex_name); + const char* regex_name, + bool is_negative_pattern = false); // Perform a "pass" over the |fields| where each pass uses the supplied // |parse| method to match content to a given field type.
diff --git a/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json b/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json index 75b1bc1..313e3b3 100644 --- a/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json +++ b/components/autofill/core/browser/form_parsing/resources/legacy_regex_patterns.json
@@ -3894,6 +3894,22 @@ } ] }, + "LAST_NAME_PREFIX": { + "nl": [ + { + "positive_pattern": "tussenv", + "positive_score": 0.9, + "negative_pattern": null, + "match_field_attributes": [ + "LABEL", + "NAME" + ], + "form_control_types": [ + "INPUT_TEXT" + ] + } + ] + }, "LAST_NAME_SECOND": { "es": [ {
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc index 8341d9c..7062cbd 100644 --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc
@@ -408,6 +408,11 @@ "AutofillSupportPhoneticNameForJP", base::FEATURE_DISABLED_BY_DEFAULT); +// Enables using custom name model with last name prefixes support. +BASE_FEATURE(kAutofillSupportLastNamePrefix, + "AutofillSupportLastNamePrefix", + base::FEATURE_DISABLED_BY_DEFAULT); + // Enables using a custom address model for the Netherlands, overriding the // legacy one. BASE_FEATURE(kAutofillUseNLAddressModel,
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h index 84989015..13fbee2 100644 --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h
@@ -105,6 +105,8 @@ COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillSupportPhoneticNameForJP); COMPONENT_EXPORT(AUTOFILL) +BASE_DECLARE_FEATURE(kAutofillSupportLastNamePrefix); +COMPONENT_EXPORT(AUTOFILL) extern const base::FeatureParam<int> kNumberOfIgnoredSuggestions; COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillAcceptDomMutationAfterAutofillSubmission);
diff --git a/components/autofill/core/common/autofill_payments_features.cc b/components/autofill/core/common/autofill_payments_features.cc index 8fed48d8..8edefc5 100644 --- a/components/autofill/core/common/autofill_payments_features.cc +++ b/components/autofill/core/common/autofill_payments_features.cc
@@ -43,12 +43,6 @@ "AutofillEnableCardArtImage", base::FEATURE_ENABLED_BY_DEFAULT); -// When enabled, server will return card art images of the exact required -// dimension. -BASE_FEATURE(kAutofillEnableCardArtServerSideStretching, - "AutofillEnableCardArtServerSideStretching", - base::FEATURE_DISABLED_BY_DEFAULT); - // When enabled, card benefits offered by American Express will be shown in // Payments Autofill UI. BASE_FEATURE(kAutofillEnableCardBenefitsForAmericanExpress,
diff --git a/components/autofill/core/common/autofill_payments_features.h b/components/autofill/core/common/autofill_payments_features.h index 254a574..6cf86d8 100644 --- a/components/autofill/core/common/autofill_payments_features.h +++ b/components/autofill/core/common/autofill_payments_features.h
@@ -30,8 +30,6 @@ BASE_DECLARE_FEATURE(kAutofillEnableBuyNowPayLaterSyncing); COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillEnableCardArtImage); COMPONENT_EXPORT(AUTOFILL) -BASE_DECLARE_FEATURE(kAutofillEnableCardArtServerSideStretching); -COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillEnableCardBenefitsForAmericanExpress); COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillEnableCardBenefitsForCapitalOne);
diff --git a/components/bookmarks/browser/bookmark_model.cc b/components/bookmarks/browser/bookmark_model.cc index 76ec1d2b..6ae465a 100644 --- a/components/bookmarks/browser/bookmark_model.cc +++ b/components/bookmarks/browser/bookmark_model.cc
@@ -458,16 +458,8 @@ DetermineTypeForUuidLookupForExistingNode(new_parent); if (old_type_for_uuid_lookup != new_type_for_uuid_lookup) { - uuid_index_[old_type_for_uuid_lookup].erase(node); - - bool success = uuid_index_[new_type_for_uuid_lookup].insert(node).second; - - if (!success) { - // It is possible that the UUID exists in the new index. In this case, to - // avoid the collision, it is necessary to assign a new UUID. - AsMutable(node)->SetNewRandomUuid(); - CHECK(uuid_index_[new_type_for_uuid_lookup].insert(node).second); - } + UpdateUuidIndexUponNodeMoveRecursive(node, old_type_for_uuid_lookup, + new_type_for_uuid_lookup); } BookmarkNode* mutable_old_parent = AsMutable(old_parent); @@ -1322,6 +1314,31 @@ } } +void BookmarkModel::UpdateUuidIndexUponNodeMoveRecursive( + const BookmarkNode* node, + NodeTypeForUuidLookup old_type_for_uuid_lookup, + NodeTypeForUuidLookup new_type_for_uuid_lookup) { + CHECK(node); + CHECK_NE(old_type_for_uuid_lookup, new_type_for_uuid_lookup); + + uuid_index_[old_type_for_uuid_lookup].erase(node); + + bool success = uuid_index_[new_type_for_uuid_lookup].insert(node).second; + + if (!success) { + // It is possible that the UUID exists in the new index. In this case, to + // avoid the collision, it is necessary to assign a new UUID. + AsMutable(node)->SetNewRandomUuid(); + CHECK(uuid_index_[new_type_for_uuid_lookup].insert(node).second); + } + + // Recursively do the same for all descendants. + for (const auto& child : node->children()) { + UpdateUuidIndexUponNodeMoveRecursive(child.get(), old_type_for_uuid_lookup, + new_type_for_uuid_lookup); + } +} + bool BookmarkModel::IsValidIndex(const BookmarkNode* parent, size_t index, bool allow_end) {
diff --git a/components/bookmarks/browser/bookmark_model.h b/components/bookmarks/browser/bookmark_model.h index c94f5be30..4003906 100644 --- a/components/bookmarks/browser/bookmark_model.h +++ b/components/bookmarks/browser/bookmark_model.h
@@ -500,6 +500,15 @@ BookmarkNode* node, NodeTypeForUuidLookup type_for_uuid_lookup); + // Updates the UUID index to ensure that `node`, whose former type was + // `old_type_for_uuid_lookup`, is instead indexed under type + // `new_type_for_uuid_lookup`. This is exercised when a node is moved across + // type boundaries, which requires updating the UUID index. + void UpdateUuidIndexUponNodeMoveRecursive( + const BookmarkNode* node, + NodeTypeForUuidLookup old_type_for_uuid_lookup, + NodeTypeForUuidLookup new_type_for_uuid_lookup); + // Returns true if the parent and index are valid. bool IsValidIndex(const BookmarkNode* parent, size_t index, bool allow_end);
diff --git a/components/bookmarks/browser/bookmark_model_unittest.cc b/components/bookmarks/browser/bookmark_model_unittest.cc index c154dee..10b86c8d 100644 --- a/components/bookmarks/browser/bookmark_model_unittest.cc +++ b/components/bookmarks/browser/bookmark_model_unittest.cc
@@ -1367,6 +1367,7 @@ // original UUID. EXPECT_EQ(folder2->uuid(), kInitialUuid); + // Verify that the UUID index was updated correctly. EXPECT_EQ(nullptr, model_->GetNodeByUuid( kInitialUuid, NodeTypeForUuidLookup::kLocalOrSyncableNodes)); @@ -1377,6 +1378,62 @@ NodeTypeForUuidLookup::kAccountNodes)); } +TEST_F(BookmarkModelTest, MoveWithUuidCollisionInDescendant) { + model_->CreateAccountPermanentFolders(); + const BookmarkNode* bookmark_bar_node = model_->bookmark_bar_node(); + const BookmarkNode* account_bookmark_bar_node = + model_->account_bookmark_bar_node(); + + ASSERT_NE(nullptr, account_bookmark_bar_node); + + const BookmarkNode* folder1 = + model_->AddFolder(bookmark_bar_node, 0, u"local folder"); + const base::Uuid kFolder1Uuid = folder1->uuid(); + + // Create two more folders with the same UUID. One is local (nested under + // `folder1`) and the other one is an account bookmark, so using the same UUID + // is allowed. + const BookmarkNode* folder2 = model_->AddFolder(folder1, 0, u"local folder"); + const base::Uuid kInitialUuid = folder2->uuid(); + const BookmarkNode* folder3 = + model_->AddFolder(account_bookmark_bar_node, 0, u"account folder", + /*meta_info=*/nullptr, + /*creation_time=*/std::nullopt, kInitialUuid); + + ClearCounts(); + + // Move `folder1`, which also includes the nested `folder2`, to account + // storage. + model_->Move(folder1, account_bookmark_bar_node, 0); + + // Should update the hierarchy. + AssertObserverCount(0, 1, 0, 0, 0, 0, 0, 0, 0); + observer_details_.ExpectEquals(bookmark_bar_node, account_bookmark_bar_node, + 0, 0, false); + EXPECT_EQ(bookmark_bar_node->children().size(), 0u); + EXPECT_EQ(account_bookmark_bar_node->children().size(), 2u); + + // The UUID should have changed for `folder2`, but not for `folder1`. + EXPECT_EQ(folder1->uuid(), kFolder1Uuid); + EXPECT_NE(folder2->uuid(), kInitialUuid); + + // The other folder involved in the collision should continue having the + // original UUID. + EXPECT_EQ(folder3->uuid(), kInitialUuid); + + // Verify that the UUID index was updated correctly. + EXPECT_EQ(nullptr, + model_->GetNodeByUuid( + kInitialUuid, NodeTypeForUuidLookup::kLocalOrSyncableNodes)); + EXPECT_EQ(folder3, model_->GetNodeByUuid( + kInitialUuid, NodeTypeForUuidLookup::kAccountNodes)); + EXPECT_EQ(folder1, model_->GetNodeByUuid( + kFolder1Uuid, NodeTypeForUuidLookup::kAccountNodes)); + EXPECT_EQ(folder2, + model_->GetNodeByUuid(folder2->uuid(), + NodeTypeForUuidLookup::kAccountNodes)); +} + TEST_F(BookmarkModelTest, Copy) { const BookmarkNode* bookmark_bar_node = model_->bookmark_bar_node(); const std::string kModelString("a 1:[ b c ] d 2:[ e f g ] h ");
diff --git a/components/browser_sync/sync_to_signin_migration_unittest.cc b/components/browser_sync/sync_to_signin_migration_unittest.cc index f589e7d..4fc9f7d 100644 --- a/components/browser_sync/sync_to_signin_migration_unittest.cc +++ b/components/browser_sync/sync_to_signin_migration_unittest.cc
@@ -100,11 +100,11 @@ void RecordStateToPrefs(bool include_status_recorder = true) { // Populate signin prefs based on the state of the TestSyncService. pref_service_.SetString(prefs::kGoogleServicesAccountId, - sync_service_.GetAccountInfo().gaia); + sync_service_.GetAccountInfo().gaia.ToString()); pref_service_.SetBoolean(prefs::kGoogleServicesConsentedToSync, sync_service_.HasSyncConsent()); pref_service_.SetString(prefs::kGoogleServicesLastSyncingGaiaId, - sync_service_.GetAccountInfo().gaia); + sync_service_.GetAccountInfo().gaia.ToString()); pref_service_.SetString(prefs::kGoogleServicesLastSyncingUsername, sync_service_.GetAccountInfo().email); @@ -187,7 +187,8 @@ // Note that TestSyncService doesn't consume the prefs, so verify the prefs // directly here. // The user should still be signed in. - EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), gaia_id); + EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), + gaia_id.ToString()); // But not syncing anymore. EXPECT_FALSE(pref_service_.GetBoolean(prefs::kGoogleServicesConsentedToSync)); #if !BUILDFLAG(IS_CHROMEOS) @@ -196,7 +197,7 @@ // The fact that the user was migrated should be recorded in prefs. EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingGaiaIdMigratedToSignedIn), - gaia_id); + gaia_id.ToString()); EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingUsernameMigratedToSignedIn), email); @@ -295,13 +296,14 @@ // Note that TestSyncService doesn't consume the prefs, so verify the prefs // directly here. // The user should still be signed in. - EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), gaia_id); + EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), + gaia_id.ToString()); // But not syncing anymore. EXPECT_FALSE(pref_service_.GetBoolean(prefs::kGoogleServicesConsentedToSync)); // The fact that the user was migrated should be recorded in prefs. EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingGaiaIdMigratedToSignedIn), - gaia_id); + gaia_id.ToString()); EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingUsernameMigratedToSignedIn), email); @@ -338,12 +340,12 @@ // Enabling the forced migration flag causes the min delay requirement to be // ignored, immediately moving the user to the signed-in state. EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), - gaia_id); + gaia_id.ToString()); EXPECT_FALSE( pref_service_.GetBoolean(prefs::kGoogleServicesConsentedToSync)); EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingGaiaIdMigratedToSignedIn), - gaia_id); + gaia_id.ToString()); EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingUsernameMigratedToSignedIn), email); @@ -354,7 +356,7 @@ // The migration should not run yet, giving the user some time to resolve // the error (switches::kMinDelayToMigrateSyncPaused). EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), - gaia_id); + gaia_id.ToString()); EXPECT_TRUE( pref_service_.GetBoolean(prefs::kGoogleServicesConsentedToSync)); EXPECT_EQ(pref_service_.GetString( @@ -403,13 +405,14 @@ // Note that TestSyncService doesn't consume the prefs, so verify the prefs // directly here. // The user should still be signed in. - EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), gaia_id); + EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), + gaia_id.ToString()); // But not syncing anymore. EXPECT_FALSE(pref_service_.GetBoolean(prefs::kGoogleServicesConsentedToSync)); // The fact that the user was migrated should be recorded in prefs. EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingGaiaIdMigratedToSignedIn), - gaia_id); + gaia_id.ToString()); EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingUsernameMigratedToSignedIn), email); @@ -452,11 +455,12 @@ IsBlockingAllowed(), fake_profile_dir_.GetPath(), &pref_service_); // The migration should have run. - EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), gaia_id); + EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), + gaia_id.ToString()); EXPECT_FALSE(pref_service_.GetBoolean(prefs::kGoogleServicesConsentedToSync)); EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingGaiaIdMigratedToSignedIn), - gaia_id); + gaia_id.ToString()); EXPECT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingUsernameMigratedToSignedIn), email); @@ -1513,7 +1517,7 @@ ASSERT_FALSE( pref_service_.GetString(prefs::kGoogleServicesAccountId).empty()); ASSERT_EQ(pref_service_.GetString(prefs::kGoogleServicesAccountId), - sync_service_.GetAccountInfo().gaia); + sync_service_.GetAccountInfo().gaia.ToString()); // Not syncing: ASSERT_FALSE(pref_service_.GetBoolean(prefs::kGoogleServicesConsentedToSync)); ASSERT_TRUE( @@ -1526,7 +1530,7 @@ // Marked as "migrated": ASSERT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingGaiaIdMigratedToSignedIn), - sync_service_.GetAccountInfo().gaia); + sync_service_.GetAccountInfo().gaia.ToString()); ASSERT_EQ(pref_service_.GetString( prefs::kGoogleServicesSyncingUsernameMigratedToSignedIn), sync_service_.GetAccountInfo().email); @@ -1543,7 +1547,7 @@ EXPECT_TRUE(sync_prefs_->IsInitialSyncFeatureSetupComplete()); // The "last syncing user" prefs should also have been restored. EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesLastSyncingGaiaId), - sync_service_.GetAccountInfo().gaia); + sync_service_.GetAccountInfo().gaia.ToString()); EXPECT_EQ(pref_service_.GetString(prefs::kGoogleServicesLastSyncingUsername), sync_service_.GetAccountInfo().email); // And the "was migrated" prefs should've been cleared.
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb index 231c2e6..f5e6259 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
@@ -26,7 +26,7 @@ <translation id="1384959399684842514">डाउनलोड रोकिएको छ</translation> <translation id="1396327438254055134">यो साइटलाई V8 अप्टिमाइजर प्रयोग गर्ने अनुमति दिनुहोस्।</translation> <translation id="1415402041810619267">URL छोटो बनाइयो</translation> -<translation id="1415855080660575082">हालसालैका ट्याबहरू आफ्नो डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देख्न Chrome लाई ती ट्याबहरू आफ्नो डिभाइससँग सेयर गर्ने अनुमति दिनुहोस्। तपाईं Chrome का सेटिङमा गई यसलाई अन वा अफ गर्न सक्नुहुन्छ।</translation> +<translation id="1415855080660575082">हालसालै खोलिएका ट्याबहरू आफ्नो डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देखिऊन् भन्नाका लागि Chrome लाई ती ट्याबहरू आफ्नो डिभाइससँग सेयर गर्ने अनुमति दिनुहोस्। तपाईं Chrome का सेटिङमा गई यसलाई अन वा अफ गर्न सक्नुहुन्छ।</translation> <translation id="1448064542941920355">जुमको स्तर घटाउनुहोस्</translation> <translation id="146867109637325312">{COUNT,plural, =1{<ph name="SITE_COUNT" /> साइट}other{<ph name="SITE_COUNT" /> वटा साइट}}</translation> <translation id="1500473259453106018">ट्याबहरूमा घटेको मूल्य देखाउने कार्ड लुकाउनुहोस्</translation> @@ -92,7 +92,7 @@ <translation id="2438120137003069591">तपाईंले यो साइटलाई केही समयका लागि तेस्रो पक्षीय कुकी प्रयोग गर्ने अनुमति दिनुभयो। यसले गर्दा ब्राउजिङको सुरक्षाको स्तर कम हुन्छ तर साइटका सुविधाहरूले गर्नु पर्ने जसरी काम गर्न सक्छन्। <ph name="BEGIN_LINK" />प्रतिक्रिया पठाउनुहोस्<ph name="END_LINK" /></translation> <translation id="244264527810019436">इन्कोग्निटो मोडमा केही साइटका सुविधाहरूले काम नगर्न सक्छन्</translation> <translation id="2442870161001914531">सधैँ साइटको डेस्कटप भ्यू देखाउनुहोस्</translation> -<translation id="2445311670906052406">Chrome ले अब तपाईंका हालसालैका ट्याबहरू तपाईंको डिभाइससँग सेयर गर्छ। तपाईं ती ट्याबहरू आफ्नो डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देख्नु हुने छ। तपाईं जुनसुकै बेला Chrome का सेटिङमा गई यो सुविधा अफ गर्न सक्नुहुन्छ।</translation> +<translation id="2445311670906052406">Chrome ले अब तपाईंले हालसालै खोलेका ट्याबहरू तपाईंको डिभाइससँग सेयर गर्छ। तपाईं ती ट्याबहरू आफ्नो डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देख्नु हुने छ। तपाईं जुनसुकै बेला Chrome का सेटिङमा गई यो सुविधा अफ गर्न सक्नुहुन्छ।</translation> <translation id="2469312991797799607">तपाईंले यो कारबाही गर्नुभयो भने <ph name="ORIGIN" /> र यसअन्तर्गत रहेका सबै साइटहरूले भण्डारण गरेका सबै डेटा तथा कुकीहरू मेटिने छन्</translation> <translation id="2482878487686419369">सूचनाहरू</translation> <translation id="2485422356828889247">विस्थापन गर्नुहोस्</translation> @@ -118,7 +118,7 @@ <translation id="2750481671343847896">साइटहरूले पहिचान सेवा प्रदायकहरूबाट प्राप्त साइन इन गर्ने प्रम्प्टहरू देखाउन सक्छन्।</translation> <translation id="2787357173144933081">ओम्नीबक्स तुरुन्तै सुरु गर्नुहोस्</translation> <translation id="2790501146643349491">यो सेटिङ अन भएका बेला हालसालै बन्द गरिएका साइटहरूले डेटा पठाउने र प्राप्त गर्ने कार्य पूरा गर्न सक्छन्। यो सेटिङ अफ भएका बेला हालसालै बन्द गरिएका साइटहरूले डेटा पठाउने र प्राप्त गर्ने कार्य पूरा गर्न सक्दैनन्।</translation> -<translation id="2814830417943086299">Chrome ले अब तपाईंका हालसालैका ट्याबहरू तपाईंको डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देखाउँछ। तपाईं जुनसुकै बेला Chrome का सेटिङमा गई यो सुविधा अफ गर्न सक्नुहुन्छ।</translation> +<translation id="2814830417943086299">Chrome ले अब तपाईंले हालसालै खोलेका ट्याबहरू तपाईंको डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देखाउँछ। तपाईं जुनसुकै बेला Chrome का सेटिङमा गई यो सुविधा अफ गर्न सक्नुहुन्छ।</translation> <translation id="2822354292072154809">तपाईं साँच्चिकै <ph name="CHOSEN_OBJECT_NAME" /> का साइटसम्बन्धी सम्पूर्ण अनुमतिहरू रिसेट गर्न चाहनुहुन्छ?</translation> <translation id="2850913818900871965">मोबाइल भ्यू देखाउन अनुरोध गर्नुहोस्</translation> <translation id="2870560284913253234">साइट</translation> @@ -560,7 +560,7 @@ <translation id="9109747640384633967">{PERMISSIONS_SUMMARY_MIXED,plural, =1{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> र थप <ph name="NUM_MORE" />}other{<ph name="PERMISSION_1" />, <ph name="PERMISSION_2" /> र थप <ph name="NUM_MORE" />}}</translation> <translation id="913657688200966289"><ph name="BEGIN_LINK" />Android का सेटिङ<ph name="END_LINK" />मा गई <ph name="APP_NAME" /> लाई अनुमति दिनुहोस्।</translation> <translation id="9138217887606523162">जुमको हालको स्तर <ph name="ZOOM_LEVEL" /> %% छ</translation> -<translation id="9156722768168878035">Chrome लाई तपाईंका हालसालैका ट्याबहरू आफ्नो डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देखाउने अनुमति दिनुहोस्। तपाईं जुनसुकै बेला Chrome का सेटिङमा गई यो सुविधा अफ गर्न सक्नुहुन्छ।</translation> +<translation id="9156722768168878035">Chrome लाई तपाईंले हालसालै खोलेका ट्याबहरू आफ्नो डिभाइसमा भएका एपको सूची तथा खोज परिणामहरूमा देखाउने अनुमति दिनुहोस्। तपाईं जुनसुकै बेला Chrome का सेटिङमा गई यो सुविधा अफ गर्न सक्नुहुन्छ।</translation> <translation id="9162462602695099906">यो पेज खतरनाक छ</translation> <translation id="947156494302904893">तपाईंले खोल्ने साइटहरूले तपाईं बट नभई वास्तविक व्यक्ति हो भन्ने कुरा पुष्टि गर्न सक्छन्</translation> <translation id="959682366969460160">व्यवस्थित गर्नुहोस्</translation>
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index ea323ef..f8d9ef1a 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "50.54", - "log_list_timestamp": "2024-12-30T12:55:16Z", + "version": "50.57", + "log_list_timestamp": "2025-01-02T12:54:35Z", "operators": [ { "name": "Google",
diff --git a/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/MessagingBackendServiceBridgeUnitTestCompanion.java b/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/MessagingBackendServiceBridgeUnitTestCompanion.java index 3ddf18ab..2a93a2c5 100644 --- a/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/MessagingBackendServiceBridgeUnitTestCompanion.java +++ b/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/MessagingBackendServiceBridgeUnitTestCompanion.java
@@ -19,7 +19,6 @@ import org.chromium.base.Callback; import org.chromium.base.ThreadUtils; -import org.chromium.base.TimeUtils; import org.chromium.base.Token; import org.chromium.components.tab_group_sync.LocalTabGroupId; import org.chromium.components.tab_groups.TabGroupColorId; @@ -183,20 +182,17 @@ Assert.assertEquals(2, logItems.size()); Assert.assertEquals(CollaborationEvent.TAB_UPDATED, logItems.get(0).collaborationEvent); - Assert.assertEquals("User 1", logItems.get(0).userDisplayName); - Assert.assertTrue(logItems.get(0).userIsSelf); - Assert.assertEquals("https://google.com", logItems.get(0).description); - Assert.assertEquals( - TimeUtils.MILLISECONDS_PER_MINUTE * 60 * 2, logItems.get(0).timeDeltaMs); + Assert.assertEquals("User 1", logItems.get(0).titleText); + Assert.assertEquals("https://google.com", logItems.get(0).descriptionText); + Assert.assertEquals("2 hours ago", logItems.get(0).timeDeltaText); Assert.assertTrue(logItems.get(0).showFavicon); Assert.assertEquals(RecentActivityAction.REOPEN_TAB, logItems.get(0).action); Assert.assertEquals( CollaborationEvent.COLLABORATION_MEMBER_ADDED, logItems.get(1).collaborationEvent); - Assert.assertEquals("User 2", logItems.get(1).userDisplayName); - Assert.assertFalse(logItems.get(1).userIsSelf); - Assert.assertEquals("foo@gmail.com", logItems.get(1).description); - Assert.assertEquals(TimeUtils.MILLISECONDS_PER_DAY * 3, logItems.get(1).timeDeltaMs); + Assert.assertEquals("User 2", logItems.get(1).titleText); + Assert.assertEquals("foo@gmail.com", logItems.get(1).descriptionText); + Assert.assertEquals("3 days ago", logItems.get(1).timeDeltaText); Assert.assertFalse(logItems.get(1).showFavicon); Assert.assertEquals(RecentActivityAction.MANAGE_SHARING, logItems.get(1).action);
diff --git a/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/bridge/ConversionUtils.java b/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/bridge/ConversionUtils.java index 47aa46c1..af6e74ca 100644 --- a/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/bridge/ConversionUtils.java +++ b/components/collaboration/internal/android/java/src/org/chromium/components/collaboration/messaging/bridge/ConversionUtils.java
@@ -124,19 +124,17 @@ private static ActivityLogItem createActivityLogItemAndMaybeAddToList( @Nullable ArrayList<ActivityLogItem> list, @CollaborationEvent int collaborationEvent, - String userDisplayName, - boolean userIsSelf, - String description, - long timeDeltaMs, + String titleText, + String descriptionText, + String timeDeltaText, boolean showFavicon, @RecentActivityAction int action, MessageAttribution activityMetadata) { ActivityLogItem activityLogItem = new ActivityLogItem(); activityLogItem.collaborationEvent = collaborationEvent; - activityLogItem.userDisplayName = userDisplayName; - activityLogItem.userIsSelf = userIsSelf; - activityLogItem.description = description; - activityLogItem.timeDeltaMs = timeDeltaMs; + activityLogItem.titleText = titleText; + activityLogItem.descriptionText = descriptionText; + activityLogItem.timeDeltaText = timeDeltaText; activityLogItem.showFavicon = showFavicon; activityLogItem.action = action; activityLogItem.activityMetadata = activityMetadata;
diff --git a/components/collaboration/internal/android/messaging/conversion_utils.cc b/components/collaboration/internal/android/messaging/conversion_utils.cc index 1de20212..82bc20ad 100644 --- a/components/collaboration/internal/android/messaging/conversion_utils.cc +++ b/components/collaboration/internal/android/messaging/conversion_utils.cc
@@ -155,10 +155,9 @@ for (const auto& activity_log_item : activity_log_items) { Java_ConversionUtils_createActivityLogItemAndMaybeAddToList( env, jlist, static_cast<int>(activity_log_item.collaboration_event), - ConvertUTF8ToJavaString(env, activity_log_item.user_display_name), - activity_log_item.user_is_self, - ConvertUTF16ToJavaString(env, activity_log_item.description), - activity_log_item.time_delta.InMilliseconds(), + ConvertUTF16ToJavaString(env, activity_log_item.title_text), + ConvertUTF16ToJavaString(env, activity_log_item.description_text), + ConvertUTF16ToJavaString(env, activity_log_item.time_delta_text), activity_log_item.show_favicon, static_cast<int>(activity_log_item.action), MessageAttributionToJava(env, activity_log_item.activity_metadata));
diff --git a/components/collaboration/internal/android/messaging/messaging_backend_service_bridge_unittest.cc b/components/collaboration/internal/android/messaging/messaging_backend_service_bridge_unittest.cc index 0e7ef0bf..a9c753d 100644 --- a/components/collaboration/internal/android/messaging/messaging_backend_service_bridge_unittest.cc +++ b/components/collaboration/internal/android/messaging/messaging_backend_service_bridge_unittest.cc
@@ -451,20 +451,18 @@ // Create two activity log items. ActivityLogItem activity_log_item1; activity_log_item1.collaboration_event = CollaborationEvent::TAB_UPDATED; - activity_log_item1.user_display_name = "User 1"; - activity_log_item1.user_is_self = true; - activity_log_item1.description = u"https://google.com"; - activity_log_item1.time_delta = base::Hours(2); + activity_log_item1.title_text = u"User 1"; + activity_log_item1.description_text = u"https://google.com"; + activity_log_item1.time_delta_text = u"2 hours ago"; activity_log_item1.show_favicon = true; activity_log_item1.action = RecentActivityAction::kReopenTab; ActivityLogItem activity_log_item2; activity_log_item2.collaboration_event = CollaborationEvent::COLLABORATION_MEMBER_ADDED; - activity_log_item2.user_display_name = "User 2"; - activity_log_item2.user_is_self = false; - activity_log_item2.description = u"foo@gmail.com"; - activity_log_item2.time_delta = base::Days(3); + activity_log_item2.title_text = u"User 2"; + activity_log_item2.description_text = u"foo@gmail.com"; + activity_log_item2.time_delta_text = u"3 days ago"; activity_log_item2.show_favicon = false; activity_log_item2.action = RecentActivityAction::kManageSharing;
diff --git a/components/collaboration/internal/collaboration_controller.cc b/components/collaboration/internal/collaboration_controller.cc index 1f6f712..c698d9a1 100644 --- a/components/collaboration/internal/collaboration_controller.cc +++ b/components/collaboration/internal/collaboration_controller.cc
@@ -361,10 +361,14 @@ : ControllerState(id, controller) {} void OnEnter(const ErrorInfo& error) override { + CHECK_EQ(controller->flow().type, Flow::Type::kShareOrManage); + // TODO(crbug.com/382557489): Wait for sync to upload the group before // showing the system share sheet. - controller->delegate()->ShowShareDialog(base::BindOnce( - &ShowingShareScreen::ProcessOutcome, weak_ptr_factory_.GetWeakPtr())); + controller->delegate()->ShowShareDialog( + controller->flow().either_id(), + base::BindOnce(&ShowingShareScreen::ProcessOutcome, + weak_ptr_factory_.GetWeakPtr())); } void OnProcessingFinishedWithSuccess() override { @@ -382,8 +386,12 @@ : ControllerState(id, controller) {} void OnEnter(const ErrorInfo& error) override { - controller->delegate()->ShowManageDialog(base::BindOnce( - &ShowingManageScreen::ProcessOutcome, weak_ptr_factory_.GetWeakPtr())); + CHECK_EQ(controller->flow().type, Flow::Type::kShareOrManage); + + controller->delegate()->ShowManageDialog( + controller->flow().either_id(), + base::BindOnce(&ShowingManageScreen::ProcessOutcome, + weak_ptr_factory_.GetWeakPtr())); } void OnProcessingFinishedWithSuccess() override { controller->Exit(); }
diff --git a/components/collaboration/internal/collaboration_controller_unittest.cc b/components/collaboration/internal/collaboration_controller_unittest.cc index 4957a46..7031a67b 100644 --- a/components/collaboration/internal/collaboration_controller_unittest.cc +++ b/components/collaboration/internal/collaboration_controller_unittest.cc
@@ -347,7 +347,7 @@ tab_group.SetLocalGroupId(local_id); EXPECT_CALL(*tab_group_sync_service_, GetGroup(either_id)) .WillOnce(Return(tab_group)); - EXPECT_CALL(*delegate_, ShowShareDialog(IsNotNullCallback())); + EXPECT_CALL(*delegate_, ShowShareDialog(either_id, IsNotNullCallback())); controller_->SetStateForTesting(StateId::kCheckingFlowRequirements); EXPECT_EQ(controller_->GetStateForTesting(), StateId::kShowingShareScreen); @@ -357,7 +357,7 @@ tab_groups::CollaborationId(std::string(kGroupId))); EXPECT_CALL(*tab_group_sync_service_, GetGroup(either_id)) .WillOnce(Return(tab_group)); - EXPECT_CALL(*delegate_, ShowManageDialog(IsNotNullCallback())); + EXPECT_CALL(*delegate_, ShowManageDialog(either_id, IsNotNullCallback())); controller_->SetStateForTesting(StateId::kCheckingFlowRequirements); EXPECT_EQ(controller_->GetStateForTesting(), StateId::kShowingManageScreen);
diff --git a/components/collaboration/public/android/java/src/org/chromium/components/collaboration/messaging/ActivityLogItem.java b/components/collaboration/public/android/java/src/org/chromium/components/collaboration/messaging/ActivityLogItem.java index 56e13449..7b4272d 100644 --- a/components/collaboration/public/android/java/src/org/chromium/components/collaboration/messaging/ActivityLogItem.java +++ b/components/collaboration/public/android/java/src/org/chromium/components/collaboration/messaging/ActivityLogItem.java
@@ -15,18 +15,26 @@ // The type of collaboration event associated with the log item. public @CollaborationEvent int collaborationEvent; - // Display name of the user. + // Explicit display metadata to be shown in the UI. + public String titleText; + public String descriptionText; + public String timeDeltaText; + + // Deprecated. Display name of the user. public String userDisplayName; - // Whether the user associated with the activity log item is the current signed in user + // Deprecated. Whether the user associated with the activity log item is the current signed in + // user // themselves. public boolean userIsSelf; - // Description text to be shown on first half of the description line. Timestamp will be + // Deprecated. Description text to be shown on first half of the description line. Timestamp + // will be // appended. public @Nullable String description; - // The time duration in milliseconds that has passed since the action happened. Used for + // Deprecated. The time duration in milliseconds that has passed since the action happened. Used + // for // generating the relative duration text that will be appended to the description. If the // description is empty, the entire description line will contain only the relative duration // without the concatenation character.
diff --git a/components/collaboration/public/collaboration_controller_delegate.h b/components/collaboration/public/collaboration_controller_delegate.h index 88ad753..cba1bf9 100644 --- a/components/collaboration/public/collaboration_controller_delegate.h +++ b/components/collaboration/public/collaboration_controller_delegate.h
@@ -7,6 +7,7 @@ #include "base/functional/callback.h" #include "components/data_sharing/public/group_data.h" +#include "components/saved_tab_groups/public/types.h" #if BUILDFLAG(IS_ANDROID) #include "base/android/jni_android.h" @@ -78,10 +79,12 @@ ResultCallback result) = 0; // Request to show the share dialog. - virtual void ShowShareDialog(ResultCallback result) = 0; + virtual void ShowShareDialog(const tab_groups::EitherGroupID& either_id, + ResultCallback result) = 0; // Request to show the manage dialog. - virtual void ShowManageDialog(ResultCallback result) = 0; + virtual void ShowManageDialog(const tab_groups::EitherGroupID& either_id, + ResultCallback result) = 0; // Open the local tab group associated with `group_id` in UI. virtual void PromoteTabGroup(const data_sharing::GroupId& group_id,
diff --git a/components/collaboration/public/messaging/activity_log.h b/components/collaboration/public/messaging/activity_log.h index 13397ae..335f675b 100644 --- a/components/collaboration/public/messaging/activity_log.h +++ b/components/collaboration/public/messaging/activity_log.h
@@ -49,30 +49,38 @@ // The type of event associated with the log item. CollaborationEvent collaboration_event; - // Explicit display metadata to be shown in the UI. - // Deprecated. Should be removed soon after the platforms have moved to use - // the raw values instead of composed strings. The platform UI is responsible - // to create the string to be shown. - std::string title_text; - std::string description_text; - std::string timestamp_text; + // Explicit display metadata to be shown in the UI. These strings are common + // across all platforms and hence generated in the service. + // Text to be shown as title of the activity log item. + std::u16string title_text; + // Text to be shown as description of the activity log item. + std::u16string description_text; + + // Text to be shown as relative time duration (e.g. 8 hours ago) of when + // the event happened. + std::u16string time_delta_text; + + // Deprecated. // Display name to be shown in the title line. // This is the triggering user for tab and tab group related events. // This is the affected user for membership changes (added/removed user). // This the `data_sharing::GroupMember::given_name`. std::string user_display_name; + // Deprecated. // Whether the user associated with the activity log item is the current // signed in user themselves. bool user_is_self = false; + // Deprecated. // Description text to be shown on first half of the description line. This // will be concatenated with the `time_delta` text. Can be empty string for // certain type of events in which case only `time_delta` is to be shown // without concatenation character. std::u16string description; + // Deprecated. // The time duration that has passed since the action happened. Used for // generating the relative duration text that will be appended to the // description. If the description is empty, the entire description line will
diff --git a/components/collaboration/test_support/mock_collaboration_controller_delegate.h b/components/collaboration/test_support/mock_collaboration_controller_delegate.h index dc36b54..2bac447 100644 --- a/components/collaboration/test_support/mock_collaboration_controller_delegate.h +++ b/components/collaboration/test_support/mock_collaboration_controller_delegate.h
@@ -30,8 +30,16 @@ const data_sharing::SharedDataPreview& preview_data, ResultCallback result), (override)); - MOCK_METHOD(void, ShowShareDialog, (ResultCallback result), (override)); - MOCK_METHOD(void, ShowManageDialog, (ResultCallback result), (override)); + MOCK_METHOD(void, + ShowShareDialog, + (const tab_groups::EitherGroupID& either_id, + ResultCallback result), + (override)); + MOCK_METHOD(void, + ShowManageDialog, + (const tab_groups::EitherGroupID& either_id, + ResultCallback result), + (override)); MOCK_METHOD(void, PromoteTabGroup, (const data_sharing::GroupId& group_id, ResultCallback result),
diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/media/ActivityContentVideoViewEmbedder.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/media/ActivityContentVideoViewEmbedder.java deleted file mode 100644 index c75906f2..0000000 --- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/media/ActivityContentVideoViewEmbedder.java +++ /dev/null
@@ -1,79 +0,0 @@ -// Copyright 2013 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.components.embedder_support.media; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.view.Gravity; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.FrameLayout; - -import org.chromium.content_public.browser.ContentVideoViewEmbedder; - -/** Uses an existing Activity to handle displaying video in full screen. */ -public class ActivityContentVideoViewEmbedder implements ContentVideoViewEmbedder { - private final Activity mActivity; - private View mView; - - public ActivityContentVideoViewEmbedder(Activity activity) { - this.mActivity = activity; - } - - @Override - public void enterFullscreenVideo(View view, boolean isVideoLoaded) { - FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView(); - decor.addView( - view, - 0, - new FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT, - Gravity.CENTER)); - setSystemUiVisibility(true); - mView = view; - } - - @Override - public void fullscreenVideoLoaded() {} - - @Override - public void exitFullscreenVideo() { - FrameLayout decor = (FrameLayout) mActivity.getWindow().getDecorView(); - decor.removeView(mView); - setSystemUiVisibility(false); - mView = null; - } - - @Override - @SuppressLint("InlinedApi") - public void setSystemUiVisibility(boolean enterFullscreen) { - View decor = mActivity.getWindow().getDecorView(); - if (enterFullscreen) { - mActivity - .getWindow() - .setFlags( - WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - } else { - mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - } - - int systemUiVisibility = decor.getSystemUiVisibility(); - int flags = - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - if (enterFullscreen) { - systemUiVisibility |= flags; - } else { - systemUiVisibility &= ~flags; - } - decor.setSystemUiVisibility(systemUiVisibility); - } -}
diff --git a/components/ip_protection/BUILD.gn b/components/ip_protection/BUILD.gn index dbd76788..2de70e5 100644 --- a/components/ip_protection/BUILD.gn +++ b/components/ip_protection/BUILD.gn
@@ -11,6 +11,7 @@ "//components/ip_protection/common:ip_protection_config_http_unittest", "//components/ip_protection/common:ip_protection_core_impl_mojo_unittest", "//components/ip_protection/common:ip_protection_core_impl_unittest", + "//components/ip_protection/common:ip_protection_crypter_unittest", "//components/ip_protection/common:ip_protection_data_types_unittest", "//components/ip_protection/common:ip_protection_proxy_config_direct_fetcher_unittest", "//components/ip_protection/common:ip_protection_proxy_config_manager_impl_unittest", @@ -46,6 +47,23 @@ ] } +test("components_ip_protection_fuzztests") { + sources = [ "common/ip_protection_crypter_fuzztests.cc" ] + fuzztests = [ + "IpProtectionCrypterFuzzTests.DeserializePublicKeyDoesNotCrash", + "IpProtectionCrypterFuzzTests.RandomizeDoesNotCrash", + ] + + deps = [ + "//base", + "//components/ip_protection/common:ip_protection_crypter", + "//third_party/abseil-cpp:absl", + "//third_party/boringssl", + "//third_party/fuzztest:fuzztest_gtest_main", + "//third_party/private-join-and-compute/src:ec_commutative_cipher", + ] +} + proto_library("get_proxy_config_proto") { sources = [ "get_proxy_config.proto" ] }
diff --git a/components/ip_protection/DEPS b/components/ip_protection/DEPS index 356cf74..5b556a3 100644 --- a/components/ip_protection/DEPS +++ b/components/ip_protection/DEPS
@@ -12,6 +12,9 @@ "+google_apis", "+services/network/test", "+mojo/public/cpp/base", + "+third_party/private-join-and-compute/src", + "+third_party/private-join-and-compute/base", + "+third_party/fuzztest", ] # time.h and statusor.h are required for quiche integration
diff --git a/components/ip_protection/common/BUILD.gn b/components/ip_protection/common/BUILD.gn index 030f878..f6e3ddb 100644 --- a/components/ip_protection/common/BUILD.gn +++ b/components/ip_protection/common/BUILD.gn
@@ -1,6 +1,7 @@ # Copyright 2024 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//testing/test.gni") source_set("ip_protection_core_host_remote") { sources = [ @@ -515,6 +516,7 @@ "//net", "//url", ] + deps = [ "//services/network/public/cpp" ] } source_set("url_matcher_with_bypass_unittest") { @@ -529,3 +531,27 @@ "//url", ] } + +source_set("ip_protection_crypter") { + sources = [ + "ip_protection_crypter.cc", + "ip_protection_crypter.h", + ] + deps = [ + "//base", + "//third_party/private-join-and-compute/src:ec_commutative_cipher", + ] +} + +source_set("ip_protection_crypter_unittest") { + testonly = true + sources = [ "ip_protection_crypter_unittest.cc" ] + deps = [ + ":ip_protection_crypter", + "//base", + "//base/test:test_support", + "//testing/gmock", + "//testing/gtest", + "//third_party/private-join-and-compute/src:ec_commutative_cipher", + ] +}
diff --git a/components/ip_protection/common/ip_protection_crypter.cc b/components/ip_protection/common/ip_protection_crypter.cc new file mode 100644 index 0000000..052c1112 --- /dev/null +++ b/components/ip_protection/common/ip_protection_crypter.cc
@@ -0,0 +1,49 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/ip_protection/common/ip_protection_crypter.h" + +#include "third_party/abseil-cpp/absl/status/statusor.h" +#include "third_party/private-join-and-compute/src/crypto/context.h" +#include "third_party/private-join-and-compute/src/crypto/ec_group.h" +#include "third_party/private-join-and-compute/src/crypto/ec_point.h" +#include "third_party/private-join-and-compute/src/crypto/elgamal.h" + +namespace ip_protection { + +using ::private_join_and_compute::Context; +using ::private_join_and_compute::ECGroup; +using ::private_join_and_compute::ECPoint; +using ::private_join_and_compute::ElGamalEncrypter; +using ::private_join_and_compute::elgamal::Ciphertext; +using ::private_join_and_compute::elgamal::PublicKey; + +absl::StatusOr<PublicKey> DeserializePublicKey( + const std::string& serialized_public_key) { + auto context = std::make_unique<Context>(); + ASSIGN_OR_RETURN(ECGroup group, + ECGroup::Create(NID_secp224r1, context.get())); + ASSIGN_OR_RETURN(ECPoint y, group.CreateECPoint(serialized_public_key)); + ASSIGN_OR_RETURN(ECPoint g, group.GetFixedGenerator()); + return PublicKey{std::move(g), std::move(y)}; +} + +// Serialize |key.y| in compressed form and return to it. +absl::StatusOr<std::string> SerializePublicKey(const PublicKey& key) { + return key.y.ToBytesCompressed(); +} + +absl::StatusOr<Ciphertext> Randomize(const std::string& serialized_public_key_y, + const Ciphertext& ciphertext) { + auto context = std::make_unique<Context>(); + ASSIGN_OR_RETURN(ECGroup group, + ECGroup::Create(NID_secp224r1, context.get())); + ASSIGN_OR_RETURN(PublicKey public_key, + DeserializePublicKey(serialized_public_key_y)); + auto encrypter = ElGamalEncrypter( + &group, std::make_unique<PublicKey>(std::move(public_key))); + return encrypter.ReRandomize(ciphertext); +} + +} // namespace ip_protection
diff --git a/components/ip_protection/common/ip_protection_crypter.h b/components/ip_protection/common/ip_protection_crypter.h new file mode 100644 index 0000000..5af4dac --- /dev/null +++ b/components/ip_protection/common/ip_protection_crypter.h
@@ -0,0 +1,30 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_IP_PROTECTION_COMMON_IP_PROTECTION_CRYPTER_H_ +#define COMPONENTS_IP_PROTECTION_COMMON_IP_PROTECTION_CRYPTER_H_ + +#include <string> + +#include "third_party/abseil-cpp/absl/status/statusor.h" +#include "third_party/private-join-and-compute/src/crypto/elgamal.h" + +namespace ip_protection { + +// Deserialize an elgamal public key from given string. +absl::StatusOr<::private_join_and_compute::elgamal::PublicKey> +DeserializePublicKey(const std::string& serialized_public_key); + +// Serialize an elgamal public key to a string. +absl::StatusOr<std::string> SerializePublicKey( + const ::private_join_and_compute::elgamal::PublicKey& key); + +// Randomize the given elgamal ciphertext using the given public key. +absl::StatusOr<::private_join_and_compute::elgamal::Ciphertext> Randomize( + const std::string& serialized_public_key_y, + const ::private_join_and_compute::elgamal::Ciphertext& ciphertext); + +} // namespace ip_protection + +#endif // COMPONENTS_IP_PROTECTION_COMMON_IP_PROTECTION_CRYPTER_H_
diff --git a/components/ip_protection/common/ip_protection_crypter_fuzztests.cc b/components/ip_protection/common/ip_protection_crypter_fuzztests.cc new file mode 100644 index 0000000..53ab339 --- /dev/null +++ b/components/ip_protection/common/ip_protection_crypter_fuzztests.cc
@@ -0,0 +1,48 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/ip_protection/common/ip_protection_crypter.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/abseil-cpp/absl/status/statusor.h" +#include "third_party/fuzztest/src/fuzztest/fuzztest.h" +#include "third_party/private-join-and-compute/src/crypto/context.h" +#include "third_party/private-join-and-compute/src/crypto/ec_group.h" +#include "third_party/private-join-and-compute/src/crypto/elgamal.h" + +using private_join_and_compute::Context; +using private_join_and_compute::ECGroup; +using private_join_and_compute::elgamal::Ciphertext; + +void DeserializePublicKeyDoesNotCrash( + const std::string& serialized_public_key) { + auto result = ip_protection::DeserializePublicKey(serialized_public_key); +} + +// In chrome, ciphertext is returned by the issuer service, which is from a hard +// coded url. Fuzzer creates ECPoints by hashing arbitrary strings to curve and +// creates a ciphertext from these points. +void RandomizeDoesNotCrash(const std::string& serialized_public_key, + const std::string& ciphertext_u, + const std::string& ciphertext_e) { + Context context{}; + auto maybe_group = ECGroup::Create(NID_secp224r1, &context); + ASSERT_TRUE(maybe_group.ok()); + const auto& group = maybe_group.value(); + + auto maybe_u = group.GetPointByHashingToCurveSha256(ciphertext_u); + ASSERT_TRUE(maybe_u.ok()); + auto maybe_e = group.GetPointByHashingToCurveSha256(ciphertext_e); + ASSERT_TRUE(maybe_e.ok()); + + Ciphertext ciphertext{ + std::move(maybe_u.value()), + std::move(maybe_e.value()), + }; + + auto result = ip_protection::Randomize(serialized_public_key, ciphertext); +} + +FUZZ_TEST(IpProtectionCrypterFuzzTests, DeserializePublicKeyDoesNotCrash); + +FUZZ_TEST(IpProtectionCrypterFuzzTests, RandomizeDoesNotCrash);
diff --git a/components/ip_protection/common/ip_protection_crypter_unittest.cc b/components/ip_protection/common/ip_protection_crypter_unittest.cc new file mode 100644 index 0000000..4e4c0a5 --- /dev/null +++ b/components/ip_protection/common/ip_protection_crypter_unittest.cc
@@ -0,0 +1,183 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/ip_protection/common/ip_protection_crypter.h" + +#include <string> + +#include "base/base64.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/private-join-and-compute/src/crypto/big_num.h" +#include "third_party/private-join-and-compute/src/crypto/context.h" +#include "third_party/private-join-and-compute/src/crypto/ec_group.h" +#include "third_party/private-join-and-compute/src/crypto/ec_point.h" +#include "third_party/private-join-and-compute/src/crypto/elgamal.h" + +namespace ip_protection { + +namespace { + +using ::private_join_and_compute::BigNum; +using ::private_join_and_compute::Context; +using ::private_join_and_compute::ECGroup; +using ::private_join_and_compute::ECPoint; +using ::private_join_and_compute::ElGamalDecrypter; +using ::private_join_and_compute::ElGamalEncrypter; +using ::private_join_and_compute::elgamal::Ciphertext; +using ::private_join_and_compute::elgamal::PrivateKey; +using ::private_join_and_compute::elgamal::PublicKey; + +inline bool operator==(const PublicKey& a, const PublicKey& b) { + return a.g.CompareTo(b.g) && a.y.CompareTo(b.y); +} + +// Create a big num from a given value. +absl::StatusOr<BigNum> Create(const ECGroup& group, uint64_t n) { + // get one + const auto order = group.GetOrder(); + const auto one = order >> (order.BitLength() - 1); + if (!one.IsOne()) { + return absl::InternalError("number is expected to be 1"); + } + // get zero + const auto zero = one >> 1; + if (!zero.IsZero()) { + return absl::InternalError("number is expected to be 0"); + } + + // build big number from zero and one + auto bn = zero; + for (int i = 0; i < 64; ++i) { + if (n & (uint64_t(1) << i)) { + bn += (one << i); + } + } + + // check value + ASSIGN_OR_RETURN(uint64_t iiv, bn.ToIntValue()); + if (iiv != n) { + return absl::InternalError( + "Number should fit uint64 and must be same as n."); + } + return bn; +} + +absl::StatusOr<ECPoint> Exponent(const ECGroup& group, + const ECPoint& point, + uint64_t n) { + ASSIGN_OR_RETURN(BigNum bn, Create(group, n)); + return point.Mul(bn); +} + +// gets g^n for +// where g is group generator for curve secp224r1. +absl::StatusOr<PublicKey> GetPublicKey(uint64_t private_key) { + auto context = std::make_unique<Context>(); + ASSIGN_OR_RETURN(ECGroup group, + ECGroup::Create(NID_secp224r1, context.get())); + ASSIGN_OR_RETURN(ECPoint g, group.GetFixedGenerator()); + ASSIGN_OR_RETURN(ECPoint y, Exponent(group, g, private_key)); + return PublicKey{std::move(g), std::move(y)}; +} + +absl::StatusOr<PrivateKey> CreatePrivateKey(uint64_t private_key) { + auto context = std::make_unique<Context>(); + ASSIGN_OR_RETURN(ECGroup group, + ECGroup::Create(NID_secp224r1, context.get())); + ASSIGN_OR_RETURN(BigNum pk, Create(group, private_key)); + return PrivateKey{std::move(pk)}; +} + +TEST(IpProtectionCrypterTest, SerializePublicKey) { + std::string expected_serialized_public_key; + // A9sva+Yw4kalz32ZuFGUsSPUh+LUZrlLJKA8Pig= corresponds to + // base64 encoding of compressed serialization of g^7 + // where g is group generator for curve secp224r1 + ASSERT_TRUE(base::Base64Decode("A9sva+Yw4kalz32ZuFGUsSPUh+LUZrlLJKA8Pig=", + &expected_serialized_public_key)); + + const uint64_t private_key = 7; + auto maybe_public_key = GetPublicKey(private_key); + ASSERT_TRUE(maybe_public_key.ok()); + const auto& public_key = maybe_public_key.value(); + + auto maybe_serialized_public_key = SerializePublicKey(public_key); + ASSERT_TRUE(maybe_serialized_public_key.ok()); + EXPECT_EQ(expected_serialized_public_key, + maybe_serialized_public_key.value()); +} + +TEST(IpProtectionCrypterTest, DeserializePublicKey) { + const uint64_t private_key = 7; + auto maybe_expected_public_key = GetPublicKey(private_key); + ASSERT_TRUE(maybe_expected_public_key.ok()); + const auto& expected_public_key = maybe_expected_public_key.value(); + + // A9sva+Yw4kalz32ZuFGUsSPUh+LUZrlLJKA8Pig= corresponds to + // base64 encoding of compressed serialization of g^7 + // where g is group generator for curve secp224r1 + std::string serialized_public_key; + ASSERT_TRUE(base::Base64Decode("A9sva+Yw4kalz32ZuFGUsSPUh+LUZrlLJKA8Pig=", + &serialized_public_key)); + + auto maybe_public_key = DeserializePublicKey(serialized_public_key); + ASSERT_TRUE(maybe_public_key.ok()); + EXPECT_TRUE(expected_public_key == maybe_public_key.value()); +} + +// Test ciphertext randomization. +TEST(IpProtectionCrypterTest, Randomize) { + Context context{}; + auto maybe_group = ECGroup::Create(NID_secp224r1, &context); + ASSERT_TRUE(maybe_group.ok()); + const auto& group = maybe_group.value(); + + // create an ECPoint to be encrypted + auto maybe_plaintext = group.GetPointByHashingToCurveSha256( + "Not all treasure is silver and gold, mate."); + ASSERT_TRUE(maybe_plaintext.ok()); + const auto& plaintext = maybe_plaintext.value(); + + // create private/public key pair + const uint64_t private_key = 91; + auto maybe_public_key = GetPublicKey(private_key); + ASSERT_TRUE(maybe_public_key.ok()); + auto public_key = + std::make_unique<PublicKey>(std::move(maybe_public_key.value())); + + // get serialized public key + auto maybe_serialized_public_key = SerializePublicKey(*public_key); + ASSERT_TRUE(maybe_serialized_public_key.ok()); + const auto& serialized_public_key = maybe_serialized_public_key.value(); + + // create encrypter + ElGamalEncrypter encrypter(&(maybe_group.value()), std::move(public_key)); + + // encrypt plaintext + auto maybe_ciphertext = encrypter.Encrypt(plaintext); + ASSERT_TRUE(maybe_ciphertext.ok()); + + // randomize + auto maybe_randomized_ciphertext = + Randomize(serialized_public_key, maybe_ciphertext.value()); + ASSERT_TRUE(maybe_randomized_ciphertext.ok()); + const auto& randomized_ciphertext = maybe_randomized_ciphertext.value(); + + // create decrypter + auto maybe_pk = CreatePrivateKey(private_key); + ASSERT_TRUE(maybe_pk.ok()); + ElGamalDecrypter decrypter( + std::make_unique<PrivateKey>(std::move(maybe_pk.value()))); + + // decrypt randomized ciphertext + auto maybe_decrypted_plaintext = decrypter.Decrypt(randomized_ciphertext); + ASSERT_TRUE(maybe_decrypted_plaintext.ok()); + + // decrypted randomized ciphertext should be same as plaintext + EXPECT_EQ(plaintext, maybe_decrypted_plaintext.value()); +} + +} // namespace +} // namespace ip_protection
diff --git a/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc b/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc index 5884aa8..d044a3af 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc +++ b/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc
@@ -20,6 +20,7 @@ #include "components/sync/service/sync_prefs.h" #include "components/sync/service/sync_user_settings.h" #include "components/sync/test/test_sync_service.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gtest/include/gtest/gtest.h" namespace password_manager::features_util { @@ -108,7 +109,7 @@ AccountStorageOptIn) { CoreAccountInfo account; account.email = "foo@account.com"; - account.gaia = "foo"; + account.gaia = GaiaId("foo"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); // SyncService is running in transport mode with |account| and the opt-in @@ -143,7 +144,7 @@ AccountStorageOptIn) { CoreAccountInfo account; account.email = "foo@account.com"; - account.gaia = "foo"; + account.gaia = GaiaId("foo"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); sync_service_.SetSignedOut(); @@ -196,12 +197,12 @@ AccountStorageKeepSettingsOnlyForUsers) { CoreAccountInfo first_account; first_account.email = "first@account.com"; - first_account.gaia = "first"; + first_account.gaia = GaiaId("first"); first_account.account_id = CoreAccountId::FromGaiaId(first_account.gaia); CoreAccountInfo second_account; second_account.email = "second@account.com"; - second_account.gaia = "second"; + second_account.gaia = GaiaId("second"); second_account.account_id = CoreAccountId::FromGaiaId(second_account.gaia); // Let SyncService run in transport mode with |first_account|, opt in and @@ -226,8 +227,8 @@ ASSERT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); // Keep the settings only for |first_account| (and some unknown other user). - KeepAccountStorageSettingsOnlyForUsers(&pref_service_, - {first_account.gaia, "other_gaia_id"}); + KeepAccountStorageSettingsOnlyForUsers( + &pref_service_, {first_account.gaia, GaiaId("other_gaia_id")}); // The first account should still have kProfileStore as the default store, // but not the second. @@ -244,7 +245,7 @@ SyncSuppressesAccountStorageOptIn) { CoreAccountInfo account; account.email = "name@account.com"; - account.gaia = "name"; + account.gaia = GaiaId("name"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); // Initially, the user is signed in but doesn't have Sync-the-feature enabled, @@ -274,7 +275,7 @@ pref_service_.SetBoolean(::prefs::kExplicitBrowserSignin, true); CoreAccountInfo account; account.email = "foo@account.com"; - account.gaia = "foo"; + account.gaia = GaiaId("foo"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); sync_service_.SetSignedIn(signin::ConsentLevel::kSignin, account); OptOutOfAccountStorage(&pref_service_, &sync_service_); @@ -301,7 +302,7 @@ AccountStorageOptInOnMobile) { CoreAccountInfo account; account.email = "name@account.com"; - account.gaia = "name"; + account.gaia = GaiaId("name"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); // Initial state: Not signed in. @@ -332,7 +333,7 @@ SyncDisablesAccountStorage) { CoreAccountInfo account; account.email = "name@account.com"; - account.gaia = "name"; + account.gaia = GaiaId("name"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); ASSERT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); @@ -378,7 +379,7 @@ LocalSyncDisablesAccountStorage) { CoreAccountInfo account; account.email = "name@account.com"; - account.gaia = "name"; + account.gaia = GaiaId("name"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); // The SyncService is running in local-sync mode. @@ -415,7 +416,7 @@ CoreAccountInfo account; account.email = "name@account.com"; - account.gaia = "name"; + account.gaia = GaiaId("name"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); // The SyncService is running in transport mode. @@ -446,7 +447,7 @@ OptOutSetsProfileStorePreference) { CoreAccountInfo account; account.email = "name@account.com"; - account.gaia = "name"; + account.gaia = GaiaId("name"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); // The SyncService is running in transport mode. @@ -471,7 +472,7 @@ OptedInIfSyncingAndPasswordsSelected) { CoreAccountInfo account; account.email = "foo@account.com"; - account.gaia = "foo"; + account.gaia = GaiaId("foo"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); sync_service_.SetSignedIn(signin::ConsentLevel::kSync, account); sync_service_.GetUserSettings()->SetSelectedType(
diff --git a/components/password_manager/core/browser/form_parsing/form_data_parser.cc b/components/password_manager/core/browser/form_parsing/form_data_parser.cc index e6dcf1d..01bc66f 100644 --- a/components/password_manager/core/browser/form_parsing/form_data_parser.cc +++ b/components/password_manager/core/browser/form_parsing/form_data_parser.cc
@@ -895,6 +895,17 @@ return; } +void ReportFormTypeMetric(SignificantFields* result, bool otp_detected) { + PasswordVsOtpFormType type = PasswordVsOtpFormType::kNone; + if (result->HasPasswords()) { + type |= PasswordVsOtpFormType::kPassword; + } + if (otp_detected) { + type |= PasswordVsOtpFormType::kOtp; + } + base::UmaHistogramEnumeration("PasswordManager.ParsedFormIsOtpForm", type); +} + // Tries to parse `processed_fields` based on model `predictions'. // Iterate over the `processed_fields`, looking up fields in `predictions`, // returns true if predictions were available for all the fields in the form. @@ -906,6 +917,8 @@ // Verify that predictions are available for all fields. bool predictions_complete = true; + bool otp_detected = false; + for (auto& field : processed_fields) { auto prediction = predictions.find(field.field->global_id()); if (prediction == predictions.end()) { @@ -936,6 +949,9 @@ result->confirmation_password = field.field; field.is_predicted_as_password = true; break; + case autofill::ONE_TIME_CODE: + otp_detected = true; + break; case autofill::UNKNOWN_TYPE: // The field is unrelated to passwords, do not update the parsing // result. @@ -961,6 +977,10 @@ result->is_single_username = true; } + if (predictions_complete && (mode == FormDataParser::Mode::kFilling)) { + ReportFormTypeMetric(result, otp_detected); + } + // TODO(crbug.com/371933424): Log metrics about renderer-recognized // credential forms the model predicted to be unrelated to passwords.
diff --git a/components/password_manager/core/browser/form_parsing/form_data_parser.h b/components/password_manager/core/browser/form_parsing/form_data_parser.h index eed78fa..cebc6118 100644 --- a/components/password_manager/core/browser/form_parsing/form_data_parser.h +++ b/components/password_manager/core/browser/form_parsing/form_data_parser.h
@@ -61,6 +61,24 @@ kMaxValue = kModelPrediction, }; +// This needs to be in sync with the histogram enumeration +// PasswordVsOtpFormType, because the values are reported in the +// "PasswordManager.ParsedFormIsOtpForm" histogram. Don't remove or shift +// existing values in the enum, only append and mark as obsolete as needed. +enum class PasswordVsOtpFormType { + kNone = 0, + kPassword = 1 << 1, + kOtp = 1 << 2, + kPasswordAndOtp = kPassword | kOtp, + kMaxValue = kPasswordAndOtp, +}; + +constexpr void operator|=(PasswordVsOtpFormType& lhs, + PasswordVsOtpFormType rhs) { + lhs = static_cast<PasswordVsOtpFormType>(static_cast<int>(lhs) | + static_cast<int>(rhs)); +} + // A wrapper around FormFieldData, carrying some additional data used during // parsing. struct ProcessedField {
diff --git a/components/password_manager/core/browser/form_parsing/form_data_parser_unittest.cc b/components/password_manager/core/browser/form_parsing/form_data_parser_unittest.cc index d19be4c..0c1bfc2 100644 --- a/components/password_manager/core/browser/form_parsing/form_data_parser_unittest.cc +++ b/components/password_manager/core/browser/form_parsing/form_data_parser_unittest.cc
@@ -3731,6 +3731,36 @@ }); } +TEST_F(FormParserTest, PasswordVsOtpMetric) { + { + base::HistogramTester histogram_tester; + CheckTestData({{ + .fields = + { + {.role = ElementRole::CURRENT_PASSWORD, + .value = u"password", + .form_control_type = FormControlType::kInputPassword, + .model_predicted_type = autofill::PASSWORD}, + }, + }}); + histogram_tester.ExpectUniqueSample("PasswordManager.ParsedFormIsOtpForm", + PasswordVsOtpFormType::kPassword, 1); + } + { + base::HistogramTester histogram_tester; + CheckTestData({{ + .fields = + { + {.value = u"whatever", + .form_control_type = FormControlType::kInputText, + .model_predicted_type = autofill::ONE_TIME_CODE}, + }, + }}); + histogram_tester.ExpectUniqueSample("PasswordManager.ParsedFormIsOtpForm", + PasswordVsOtpFormType::kOtp, 1); + } +} + } // namespace } // namespace password_manager
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc index 0c10b1a..904cf08 100644 --- a/components/password_manager/core/browser/password_form_manager_unittest.cc +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -61,6 +61,7 @@ #include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/ukm/test_ukm_recorder.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -4049,7 +4050,7 @@ TEST_P(PasswordFormManagerTest, NotMovableToAccountStoreWhenBlocked) { const std::string kEmail = "email@gmail.com"; - const std::string kGaiaId = signin::GetTestGaiaIdForEmail(kEmail); + const GaiaId kGaiaId = signin::GetTestGaiaIdForEmail(kEmail); PasswordForm saved_match(saved_match_); saved_match.in_store = PasswordForm::Store::kProfileStore; @@ -4078,7 +4079,7 @@ TEST_P(PasswordFormManagerTest, MovableToAccountStore) { const std::string kEmail = "email@gmail.com"; - const std::string kGaiaId = signin::GetTestGaiaIdForEmail(kEmail); + const GaiaId kGaiaId = signin::GetTestGaiaIdForEmail(kEmail); PasswordForm saved_match(saved_match_); saved_match.in_store = PasswordForm::Store::kProfileStore; @@ -5016,7 +5017,7 @@ TEST_F(PasswordFormManagerTestWithMockedSaver, BlockMovingCredentialsToAccountStore) { const std::string kEmail = "email@gmail.com"; - const std::string kGaiaId = signin::GetTestGaiaIdForEmail(kEmail); + const GaiaId kGaiaId = signin::GetTestGaiaIdForEmail(kEmail); PasswordForm saved_match(saved_match_); saved_match.in_store = PasswordForm::Store::kProfileStore;
diff --git a/components/password_manager/core/browser/password_reuse_manager_signin_notifier_impl_unittest.cc b/components/password_manager/core/browser/password_reuse_manager_signin_notifier_impl_unittest.cc index b3491ca..5f75d25 100644 --- a/components/password_manager/core/browser/password_reuse_manager_signin_notifier_impl_unittest.cc +++ b/components/password_manager/core/browser/password_reuse_manager_signin_notifier_impl_unittest.cc
@@ -75,7 +75,7 @@ EXPECT_CALL(reuse_manager_, ClearGaiaPasswordHash("username2")); auto* identity_manager = identity_test_env()->identity_manager(); identity_manager->GetAccountsMutator()->AddOrUpdateAccount( - /*gaia_id=*/"secondary_account_id", + GaiaId("secondary_account_id"), /*email=*/"username2", /*refresh_token=*/"refresh_token", /*is_under_advanced_protection=*/false,
diff --git a/components/password_manager/core/browser/password_save_manager_impl_unittest.cc b/components/password_manager/core/browser/password_save_manager_impl_unittest.cc index f184c45a..f4f10888 100644 --- a/components/password_manager/core/browser/password_save_manager_impl_unittest.cc +++ b/components/password_manager/core/browser/password_save_manager_impl_unittest.cc
@@ -23,6 +23,7 @@ #include "components/password_manager/core/browser/vote_uploads_test_matchers.h" #include "components/password_manager/core/browser/votes_uploader.h" #include "components/ukm/test_ukm_recorder.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -1554,7 +1555,7 @@ PasswordForm saved_match_in_profile_store(saved_match_in_account_store); saved_match_in_profile_store.in_store = PasswordForm::Store::kProfileStore; signin::GaiaIdHash user_id_hash = - signin::GaiaIdHash::FromGaiaId("user@gmail.com"); + signin::GaiaIdHash::FromGaiaId(GaiaId("user@gmail.com")); saved_match_in_profile_store.moving_blocked_for_list.push_back(user_id_hash); SetNonFederatedAndNotifyFetchCompleted( @@ -1683,7 +1684,7 @@ base::Time::Now() - base::Days(10); saved_match_in_profile_store.times_used_in_html_form = 10; saved_match_in_profile_store.moving_blocked_for_list.push_back( - signin::GaiaIdHash::FromGaiaId("email@gmail.com")); + signin::GaiaIdHash::FromGaiaId(GaiaId("email@gmail.com"))); PasswordForm saved_match_in_account_store(saved_match_in_profile_store); saved_match_in_account_store.in_store = PasswordForm::Store::kAccountStore; @@ -1896,7 +1897,7 @@ PasswordForm saved_match_in_profile_store(saved_match_); saved_match_in_profile_store.in_store = PasswordForm::Store::kProfileStore; saved_match_in_profile_store.moving_blocked_for_list.push_back( - signin::GaiaIdHash::FromGaiaId("user@gmail.com")); + signin::GaiaIdHash::FromGaiaId(GaiaId("user@gmail.com"))); SetNonFederatedAndNotifyFetchCompleted({saved_match_in_profile_store}); password_save_manager_impl()->CreatePendingCredentials( @@ -1924,7 +1925,7 @@ PasswordForm saved_match_in_profile_store(saved_match_); saved_match_in_profile_store.in_store = PasswordForm::Store::kProfileStore; saved_match_in_profile_store.moving_blocked_for_list.push_back( - signin::GaiaIdHash::FromGaiaId("user@gmail.com")); + signin::GaiaIdHash::FromGaiaId(GaiaId("user@gmail.com"))); SetNonFederatedAndNotifyFetchCompleted({saved_match_in_profile_store}); password_save_manager_impl()->CreatePendingCredentials( @@ -2090,9 +2091,9 @@ TEST_F(MultiStorePasswordSaveManagerTest, BlockMovingWhenExistsInProfileStore) { signin::GaiaIdHash user1_id_hash = - signin::GaiaIdHash::FromGaiaId("user1@gmail.com"); + signin::GaiaIdHash::FromGaiaId(GaiaId("user1@gmail.com")); signin::GaiaIdHash user2_id_hash = - signin::GaiaIdHash::FromGaiaId("user2@gmail.com"); + signin::GaiaIdHash::FromGaiaId(GaiaId("user2@gmail.com")); PasswordForm profile_saved_match(saved_match_); profile_saved_match.username_value = parsed_submitted_form_.username_value; @@ -2120,9 +2121,9 @@ TEST_F(MultiStorePasswordSaveManagerTest, BlockMovingWhenExistsInBothStores) { signin::GaiaIdHash user1_id_hash = - signin::GaiaIdHash::FromGaiaId("user1@gmail.com"); + signin::GaiaIdHash::FromGaiaId(GaiaId("user1@gmail.com")); signin::GaiaIdHash user2_id_hash = - signin::GaiaIdHash::FromGaiaId("user2@gmail.com"); + signin::GaiaIdHash::FromGaiaId(GaiaId("user2@gmail.com")); PasswordForm account_saved_match(saved_match_); account_saved_match.username_value = parsed_submitted_form_.username_value;
diff --git a/components/password_manager/core/browser/password_store/login_database_unittest.cc b/components/password_manager/core/browser/password_store/login_database_unittest.cc index e756b11..dfbbbcf 100644 --- a/components/password_manager/core/browser/password_store/login_database_unittest.cc +++ b/components/password_manager/core/browser/password_store/login_database_unittest.cc
@@ -46,6 +46,7 @@ #include "components/sync/base/data_type.h" #include "components/sync/model/metadata_batch.h" #include "components/sync/protocol/entity_metadata.pb.h" +#include "google_apis/gaia/gaia_id.h" #include "sql/database.h" #include "sql/statement.h" #include "sql/test/test_helpers.h" @@ -121,8 +122,10 @@ form.icon_url = GURL("https://accounts.google.com/Icon"); form.skip_zero_click = true; form.in_store = PasswordForm::Store::kProfileStore; - form.moving_blocked_for_list.push_back(GaiaIdHash::FromGaiaId("user1")); - form.moving_blocked_for_list.push_back(GaiaIdHash::FromGaiaId("user2")); + form.moving_blocked_for_list.push_back( + GaiaIdHash::FromGaiaId(GaiaId("user1"))); + form.moving_blocked_for_list.push_back( + GaiaIdHash::FromGaiaId(GaiaId("user2"))); form.sender_email = u"sender@gmail.com"; form.sender_name = u"Cool Sender"; form.sender_profile_image_url = GURL("http://www.sender.com/profile_image"); @@ -1210,9 +1213,9 @@ EXPECT_THAT(output, Eq(vec)); // Normal data. - vec.push_back(GaiaIdHash::FromGaiaId("first")); - vec.push_back(GaiaIdHash::FromGaiaId("second")); - vec.push_back(GaiaIdHash::FromGaiaId("third")); + vec.push_back(GaiaIdHash::FromGaiaId(GaiaId("first"))); + vec.push_back(GaiaIdHash::FromGaiaId(GaiaId("second"))); + vec.push_back(GaiaIdHash::FromGaiaId(GaiaId("third"))); temp = SerializeGaiaIdHashVector(vec); output = DeserializeGaiaIdHashVector(temp); @@ -1484,7 +1487,8 @@ form.federation_origin = url::SchemeHostPort(GURL("https://accounts.google.com/")); form.skip_zero_click = true; - form.moving_blocked_for_list.push_back(GaiaIdHash::FromGaiaId("gaia_id")); + form.moving_blocked_for_list.push_back( + GaiaIdHash::FromGaiaId(GaiaId("gaia_id"))); PasswordStoreChangeList changes = db().UpdateLogin(form); EXPECT_EQ(UpdateChangeForForm(form, /*password_changed=*/true), changes); @@ -1522,7 +1526,8 @@ form.display_name = u"Mr. Smith"; form.icon_url = GURL("https://accounts.google.com/Icon"); form.skip_zero_click = true; - form.moving_blocked_for_list.push_back(GaiaIdHash::FromGaiaId("gaia_id")); + form.moving_blocked_for_list.push_back( + GaiaIdHash::FromGaiaId(GaiaId("gaia_id"))); PasswordStoreChangeList changes = db().UpdateLogin(form); EXPECT_EQ(UpdateChangeForForm(form, /*password_changed=*/false), changes);
diff --git a/components/payments/content/BUILD.gn b/components/payments/content/BUILD.gn index 8644d497..ab27bd37 100644 --- a/components/payments/content/BUILD.gn +++ b/components/payments/content/BUILD.gn
@@ -223,6 +223,7 @@ "payment_event_response_util_unittest.cc", "payment_manifest_web_data_service_unittest.cc", "payment_method_manifest_table_unittest.cc", + "secure_payment_confirmation_app_factory_unittest.cc", "secure_payment_confirmation_app_unittest.cc", "secure_payment_confirmation_model_unittest.cc", "secure_payment_confirmation_no_creds_model_unittest.cc", @@ -244,7 +245,6 @@ "payment_request_state_unittest.cc", "payment_request_web_contents_manager_unittest.cc", "payment_response_helper_unittest.cc", - "secure_payment_confirmation_app_factory_unittest.cc", "service_worker_payment_app_unittest.cc", "test_content_payment_request_delegate.cc", "test_content_payment_request_delegate.h",
diff --git a/components/payments/content/DEPS b/components/payments/content/DEPS index fd78ef8..b5646293 100644 --- a/components/payments/content/DEPS +++ b/components/payments/content/DEPS
@@ -17,6 +17,7 @@ "+components/webdata/common", "+components/webdata_services", "+content/public", + "+content/test", "+crypto", "+device/fido/fido_transport_protocol.h", "+device/fido/fido_types.h",
diff --git a/components/payments/content/mock_payment_manifest_web_data_service.h b/components/payments/content/mock_payment_manifest_web_data_service.h index 829fba60..4fe96e1 100644 --- a/components/payments/content/mock_payment_manifest_web_data_service.h +++ b/components/payments/content/mock_payment_manifest_web_data_service.h
@@ -28,6 +28,12 @@ std::vector<uint8_t> browser_bound_key_id, WebDataServiceConsumer* consumer), (override)); + MOCK_METHOD(WebDataServiceBase::Handle, + GetBrowserBoundKey, + (std::vector<uint8_t> credential_id, + std::string relying_party_id, + WebDataServiceConsumer* consumer), + (override)); protected: ~MockPaymentManifestWebDataService() override;
diff --git a/components/payments/content/payment_manifest_web_data_service.cc b/components/payments/content/payment_manifest_web_data_service.cc index 36e19f4..e998ddd 100644 --- a/components/payments/content/payment_manifest_web_data_service.cc +++ b/components/payments/content/payment_manifest_web_data_service.cc
@@ -188,29 +188,27 @@ std::move(browser_bound_key_id))); } -WebDataServiceBase::Handle -PaymentManifestWebDataService::GetBrowserBoundKeyForTest( +WebDataServiceBase::Handle PaymentManifestWebDataService::GetBrowserBoundKey( std::vector<uint8_t> credential_id, std::string relying_party_id, WebDataServiceConsumer* consumer) { return wdbs_->ScheduleDBTaskWithResult( FROM_HERE, - base::BindOnce( - &PaymentManifestWebDataService::GetBrowserBoundKeyImplForTest, this, - std::move(credential_id), std::move(relying_party_id)), + base::BindOnce(&PaymentManifestWebDataService::GetBrowserBoundKeyImpl, + this, std::move(credential_id), + std::move(relying_party_id)), consumer); } std::unique_ptr<WDTypedResult> -PaymentManifestWebDataService::GetBrowserBoundKeyImplForTest( +PaymentManifestWebDataService::GetBrowserBoundKeyImpl( std::vector<uint8_t> credential_id, std::string relying_party_id, WebDatabase* db) { return std::make_unique<WDResult<std::optional<std::vector<uint8_t>>>>( BROWSER_BOUND_KEY, - PaymentMethodManifestTable::FromWebDatabase(db) - ->GetBrowserBoundKeyForTest(std::move(credential_id), // IN-TEST - std::move(relying_party_id))); + PaymentMethodManifestTable::FromWebDatabase(db)->GetBrowserBoundKey( + std::move(credential_id), std::move(relying_party_id))); } void PaymentManifestWebDataService::ClearSecurePaymentConfirmationCredentials(
diff --git a/components/payments/content/payment_manifest_web_data_service.h b/components/payments/content/payment_manifest_web_data_service.h index 9e356ca..5d3b9f8 100644 --- a/components/payments/content/payment_manifest_web_data_service.h +++ b/components/payments/content/payment_manifest_web_data_service.h
@@ -95,7 +95,7 @@ // Get the browser bound key id given the `credential_id` and // `relying_party_id`. Returns the key id or nullopt to the `consumer`, which // must outlive the DB operation, because DB tasks cannot be cancelled. - virtual WebDataServiceBase::Handle GetBrowserBoundKeyForTest( + virtual WebDataServiceBase::Handle GetBrowserBoundKey( const std::vector<uint8_t> credential_id, std::string relying_party_id, WebDataServiceConsumer* consumer); @@ -142,7 +142,7 @@ std::string relying_party_id, std::vector<uint8_t> browser_bound_key_id, WebDatabase* db); - std::unique_ptr<WDTypedResult> GetBrowserBoundKeyImplForTest( + std::unique_ptr<WDTypedResult> GetBrowserBoundKeyImpl( std::vector<uint8_t> credential_id, std::string relying_party_id, WebDatabase* db);
diff --git a/components/payments/content/payment_manifest_web_data_service_unittest.cc b/components/payments/content/payment_manifest_web_data_service_unittest.cc index 665db4f..cc22f71 100644 --- a/components/payments/content/payment_manifest_web_data_service_unittest.cc +++ b/components/payments/content/payment_manifest_web_data_service_unittest.cc
@@ -96,7 +96,7 @@ actual_result.reset(nullptr); // Retrieve the browser bound key id. - handle = payment_manifest_web_data_service_->GetBrowserBoundKeyForTest( + handle = payment_manifest_web_data_service_->GetBrowserBoundKey( credential_id, relying_party_id, &mock_web_data_service_consumer); task_environment_.RunUntilQuit();
diff --git a/components/payments/content/payment_method_manifest_table.cc b/components/payments/content/payment_method_manifest_table.cc index 58ab78fa..07f5560 100644 --- a/components/payments/content/payment_method_manifest_table.cc +++ b/components/payments/content/payment_method_manifest_table.cc
@@ -318,7 +318,7 @@ } std::optional<std::vector<uint8_t>> -PaymentMethodManifestTable::GetBrowserBoundKeyForTest( +PaymentMethodManifestTable::GetBrowserBoundKey( std::vector<uint8_t> credential_id, std::string_view relying_party_id) { sql::Statement s(db()->GetUniqueStatement(
diff --git a/components/payments/content/payment_method_manifest_table.h b/components/payments/content/payment_method_manifest_table.h index f992954f..74d6719 100644 --- a/components/payments/content/payment_method_manifest_table.h +++ b/components/payments/content/payment_method_manifest_table.h
@@ -150,7 +150,7 @@ // // Returns the browser bound key id or nullopt when not found (or error // occurred during retrieval). - std::optional<std::vector<uint8_t>> GetBrowserBoundKeyForTest( + std::optional<std::vector<uint8_t>> GetBrowserBoundKey( std::vector<uint8_t> credential_id, std::string_view relying_party_id); };
diff --git a/components/payments/content/payment_method_manifest_table_unittest.cc b/components/payments/content/payment_method_manifest_table_unittest.cc index 865735a0..9fadd1f 100644 --- a/components/payments/content/payment_method_manifest_table_unittest.cc +++ b/components/payments/content/payment_method_manifest_table_unittest.cc
@@ -529,7 +529,7 @@ EXPECT_TRUE(table->SetBrowserBoundKey(credential_id, relying_party_id, browser_bound_key_id)); std::optional<std::vector<uint8_t>> actual_browser_bound_key_id = - table->GetBrowserBoundKeyForTest(credential_id, relying_party_id); + table->GetBrowserBoundKey(credential_id, relying_party_id); EXPECT_EQ(browser_bound_key_id, actual_browser_bound_key_id); } @@ -543,7 +543,7 @@ std::vector<uint8_t> credential_id({0x01, 0x02, 0x03, 0x04}); std::optional<std::vector<uint8_t>> actual_browser_bound_key_id = - table->GetBrowserBoundKeyForTest(credential_id, relying_party_id); + table->GetBrowserBoundKey(credential_id, relying_party_id); EXPECT_EQ(std::nullopt, actual_browser_bound_key_id); } @@ -556,10 +556,10 @@ std::string relying_party_id("relying-party.example"); std::vector<uint8_t> credential_id({0x01, 0x02, 0x03, 0x04}); - EXPECT_EQ(std::nullopt, table->GetBrowserBoundKeyForTest(/*credential_id=*/{}, - relying_party_id)); - EXPECT_EQ(std::nullopt, table->GetBrowserBoundKeyForTest( - credential_id, /*relying_party_id=*/{})); + EXPECT_EQ(std::nullopt, + table->GetBrowserBoundKey(/*credential_id=*/{}, relying_party_id)); + EXPECT_EQ(std::nullopt, + table->GetBrowserBoundKey(credential_id, /*relying_party_id=*/{})); } // Tests that no entry is stored when empty credential id, relying party id, or @@ -573,16 +573,16 @@ EXPECT_FALSE(table->SetBrowserBoundKey(/*credential_id=*/{}, relying_party_id, browser_bound_key_id)); - EXPECT_EQ(std::nullopt, table->GetBrowserBoundKeyForTest(/*credential_id=*/{}, - relying_party_id)); + EXPECT_EQ(std::nullopt, + table->GetBrowserBoundKey(/*credential_id=*/{}, relying_party_id)); EXPECT_FALSE(table->SetBrowserBoundKey(credential_id, /*relying_party_id=*/"", browser_bound_key_id)); - EXPECT_EQ(std::nullopt, table->GetBrowserBoundKeyForTest( - credential_id, /*relying_party_id=*/{})); + EXPECT_EQ(std::nullopt, + table->GetBrowserBoundKey(credential_id, /*relying_party_id=*/{})); EXPECT_FALSE(table->SetBrowserBoundKey(credential_id, relying_party_id, /*browser_bound_key_id=*/{})); EXPECT_EQ(std::nullopt, - table->GetBrowserBoundKeyForTest(credential_id, relying_party_id)); + table->GetBrowserBoundKey(credential_id, relying_party_id)); } // Tests that two browser bound key ids can be set for two different relying @@ -601,9 +601,9 @@ EXPECT_TRUE(table->SetBrowserBoundKey(credential_id, relying_party_id_2, browser_bound_key_id_2)); std::optional<std::vector<uint8_t>> actual_browser_bound_key_id_1 = - table->GetBrowserBoundKeyForTest(credential_id, relying_party_id_1); + table->GetBrowserBoundKey(credential_id, relying_party_id_1); std::optional<std::vector<uint8_t>> actual_browser_bound_key_id_2 = - table->GetBrowserBoundKeyForTest(credential_id, relying_party_id_2); + table->GetBrowserBoundKey(credential_id, relying_party_id_2); EXPECT_EQ(browser_bound_key_id_1, actual_browser_bound_key_id_1); EXPECT_EQ(browser_bound_key_id_2, actual_browser_bound_key_id_2); @@ -625,9 +625,9 @@ EXPECT_TRUE(table->SetBrowserBoundKey(credential_id_2, relying_party_id, browser_bound_key_id_2)); std::optional<std::vector<uint8_t>> actual_browser_bound_key_id_1 = - table->GetBrowserBoundKeyForTest(credential_id_1, relying_party_id); + table->GetBrowserBoundKey(credential_id_1, relying_party_id); std::optional<std::vector<uint8_t>> actual_browser_bound_key_id_2 = - table->GetBrowserBoundKeyForTest(credential_id_2, relying_party_id); + table->GetBrowserBoundKey(credential_id_2, relying_party_id); EXPECT_EQ(browser_bound_key_id_1, actual_browser_bound_key_id_1); EXPECT_EQ(browser_bound_key_id_2, actual_browser_bound_key_id_2); @@ -649,7 +649,7 @@ EXPECT_FALSE(table->SetBrowserBoundKey(credential_id, relying_party_id, browser_bound_key_id_2)); std::optional<std::vector<uint8_t>> actual_browser_bound_key_id = - table->GetBrowserBoundKeyForTest(credential_id, relying_party_id); + table->GetBrowserBoundKey(credential_id, relying_party_id); // Expect the first browser bound key id stored to be unaffected. EXPECT_EQ(browser_bound_key_id_1, actual_browser_bound_key_id);
diff --git a/components/payments/content/secure_payment_confirmation_app.cc b/components/payments/content/secure_payment_confirmation_app.cc index 5ad6cef..94cd7abd 100644 --- a/components/payments/content/secure_payment_confirmation_app.cc +++ b/components/payments/content/secure_payment_confirmation_app.cc
@@ -31,7 +31,6 @@ #include "device/fido/fido_transport_protocol.h" #include "device/fido/fido_types.h" #include "device/fido/public_key_credential_descriptor.h" -#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/webauthn/authenticator.mojom.h" #include "url/url_constants.h" @@ -56,6 +55,7 @@ const std::u16string& payment_instrument_label, std::unique_ptr<SkBitmap> payment_instrument_icon, std::vector<uint8_t> credential_id, + std::optional<std::vector<uint8_t>> browser_bound_key_id, const url::Origin& merchant_origin, base::WeakPtr<PaymentRequestSpec> spec, mojom::SecurePaymentConfirmationRequestPtr request, @@ -72,6 +72,7 @@ payment_instrument_label_(payment_instrument_label), payment_instrument_icon_(std::move(payment_instrument_icon)), credential_id_(std::move(credential_id)), + browser_bound_key_id_(std::move(browser_bound_key_id)), merchant_origin_(merchant_origin), spec_(spec), request_(std::move(request)), @@ -124,19 +125,18 @@ options->allow_credentials = std::move(credentials); options->challenge = request_->challenge; - std::optional<std::vector<uint8_t>> maybe_browser_bound_key = std::nullopt; + std::optional<std::vector<uint8_t>> browser_bound_public_key = std::nullopt; #if BUILDFLAG(IS_ANDROID) - if (base::FeatureList::IsEnabled( - blink::features::kSecurePaymentConfirmationBrowserBoundKeys)) { + if (browser_bound_key_id_) { if (!browser_bound_key_store_) { browser_bound_key_store_ = GetBrowserBoundKeyStoreInstance(); } browser_bound_key_ = browser_bound_key_store_->GetOrCreateBrowserBoundKeyForCredentialId( - credential_id_); - maybe_browser_bound_key = browser_bound_key_->GetPublicKeyAsCoseKey(); + *browser_bound_key_id_); + browser_bound_public_key = browser_bound_key_->GetPublicKeyAsCoseKey(); } -#endif +#endif // BUILDFLAG(IS_ANDROID) // TODO(crbug.com/40225659): The 'showOptOut' flag status must also be signed // in the assertion, so that the verifier can check that the caller offered // the experience if desired. @@ -146,7 +146,7 @@ authenticator_->SetPaymentOptions(blink::mojom::PaymentOptions::New( spec_->GetTotal(/*selected_app=*/this)->amount.Clone(), request_->instrument.Clone(), request_->payee_name, - request_->payee_origin, maybe_browser_bound_key)); + request_->payee_origin, browser_bound_public_key)); authenticator_->GetAssertion( std::move(options), @@ -250,8 +250,7 @@ response_->signature, response_->user_handle, response_->extensions.Clone()); #if BUILDFLAG(IS_ANDROID) - if (base::FeatureList::IsEnabled( - blink::features::kSecurePaymentConfirmationBrowserBoundKeys)) { + if (browser_bound_key_) { std::vector<std::vector<uint8_t>> signatures; signatures.emplace_back( browser_bound_key_->Sign(response_->info->client_data_json)); @@ -262,7 +261,7 @@ assertion_response->extensions->payment->browser_bound_signatures = std::move(signatures); } -#endif +#endif // BUILDFLAG(IS_ANDROID) response->get_assertion_authenticator_response = std::move(assertion_response); return response; @@ -282,6 +281,13 @@ browser_bound_key_store_ = std::move(key_store); } +#if BUILDFLAG(IS_ANDROID) +const std::optional<std::vector<uint8_t>>& +SecurePaymentConfirmationApp::GetBrowserBoundKeyIdForTesting() const { + return browser_bound_key_id_; +} +#endif // BUILDFLAG(IS_ANDROID) + void SecurePaymentConfirmationApp::OnGetAssertion( base::WeakPtr<Delegate> delegate, blink::mojom::AuthenticatorStatus status,
diff --git a/components/payments/content/secure_payment_confirmation_app.h b/components/payments/content/secure_payment_confirmation_app.h index 379957e..ca333492 100644 --- a/components/payments/content/secure_payment_confirmation_app.h +++ b/components/payments/content/secure_payment_confirmation_app.h
@@ -57,6 +57,7 @@ const std::u16string& payment_instrument_label, std::unique_ptr<SkBitmap> payment_instrument_icon, std::vector<uint8_t> credential_id, + std::optional<std::vector<uint8_t>> browser_bound_key_id, const url::Origin& merchant_origin, base::WeakPtr<PaymentRequestSpec> spec, mojom::SecurePaymentConfirmationRequestPtr request, @@ -110,6 +111,11 @@ void SetBrowserBoundKeyStoreForTesting( std::unique_ptr<BrowserBoundKeyStore> key_store); +#if BUILDFLAG(IS_ANDROID) + const std::optional<std::vector<uint8_t>>& GetBrowserBoundKeyIdForTesting() + const; +#endif // BUILDFLAG(IS_ANDROID) + private: void OnGetAssertion( base::WeakPtr<Delegate> delegate, @@ -125,6 +131,7 @@ const std::u16string payment_instrument_label_; const std::unique_ptr<SkBitmap> payment_instrument_icon_; const std::vector<uint8_t> credential_id_; + const std::optional<std::vector<uint8_t>> browser_bound_key_id_; const url::Origin merchant_origin_; const base::WeakPtr<PaymentRequestSpec> spec_; const mojom::SecurePaymentConfirmationRequestPtr request_;
diff --git a/components/payments/content/secure_payment_confirmation_app_factory.cc b/components/payments/content/secure_payment_confirmation_app_factory.cc index 0611940d..e3de71b 100644 --- a/components/payments/content/secure_payment_confirmation_app_factory.cc +++ b/components/payments/content/secure_payment_confirmation_app_factory.cc
@@ -35,6 +35,7 @@ #include "content/public/browser/webauthn_security_utils.h" #include "content/public/common/content_features.h" #include "services/data_decoder/public/cpp/decode_image.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/payments/payment_request.mojom.h" #include "url/gurl.h" #include "url/origin.h" @@ -219,6 +220,7 @@ mojom::SecurePaymentConfirmationRequestPtr mojo_request; std::unique_ptr<webauthn::InternalAuthenticator> authenticator; std::map<IconType, IconInfo> icon_infos; + std::unique_ptr<SecurePaymentConfirmationCredential> credential; }; void SecurePaymentConfirmationAppFactory:: @@ -362,18 +364,24 @@ if (!request->delegate || !request->web_contents()) return; - if (!result || result->GetType() != SECURE_PAYMENT_CONFIRMATION) { + if (result && result->GetType() == SECURE_PAYMENT_CONFIRMATION) { + std::vector<std::unique_ptr<SecurePaymentConfirmationCredential>> + credentials = static_cast<WDResult<std::vector< + std::unique_ptr<SecurePaymentConfirmationCredential>>>*>( + result.get()) + ->GetValue(); + OnRetrievedCredentials(std::move(request), std::move(credentials)); + } else if (result && result->GetType() == BROWSER_BOUND_KEY) { + std::optional<std::vector<uint8_t>> browser_bound_key_id = + static_cast<WDResult<std::optional<std::vector<uint8_t>>>*>( + result.get()) + ->GetValue(); + OnRetrievedBrowserBoundKeyId(std::move(request), + std::move(browser_bound_key_id)); + } else { request->delegate->OnDoneCreatingPaymentApps(); return; } - - std::vector<std::unique_ptr<SecurePaymentConfirmationCredential>> - credentials = static_cast<WDResult< - std::vector<std::unique_ptr<SecurePaymentConfirmationCredential>>>*>( - result.get()) - ->GetValue(); - - OnRetrievedCredentials(std::move(request), std::move(credentials)); } void SecurePaymentConfirmationAppFactory::OnGetMatchingCredentialIdsFromStore( @@ -394,13 +402,30 @@ std::unique_ptr<Request> request, std::vector<std::unique_ptr<SecurePaymentConfirmationCredential>> credentials) { - std::unique_ptr<SecurePaymentConfirmationCredential> credential; - // For the pilot phase, arbitrarily use the first matching credential. // TODO(crbug.com/40142088): Handle multiple credentials. if (!credentials.empty()) - credential = std::move(credentials.front()); + request->credential = std::move(credentials.front()); +#if BUILDFLAG(IS_ANDROID) + if (base::FeatureList::IsEnabled( + blink::features::kSecurePaymentConfirmationBrowserBoundKeys)) { + WebDataServiceBase::Handle handle = + request->web_data_service->GetBrowserBoundKey( + request->credential->credential_id, + request->credential->relying_party_id, this); + requests_[handle] = std::move(request); + return; + } +#endif // BUILDFLAG(IS_ANDROID) + + OnRetrievedBrowserBoundKeyId(std::move(request), + /*browser_bound_key_id=*/std::nullopt); +} + +void SecurePaymentConfirmationAppFactory::OnRetrievedBrowserBoundKeyId( + std::unique_ptr<Request> request, + std::optional<std::vector<uint8_t>> browser_bound_key_id) { // Download the icons for the payment instrument, network icon, and issuer // icon. These download URLs were passed into the PaymentRequest API. If given // icon URL wasn't specified, then DownloadImageInFrame will simply return an @@ -424,8 +449,8 @@ auto barrier_closure = base::BarrierClosure( request_ptr->icon_infos.size(), base::BindOnce(&SecurePaymentConfirmationAppFactory::DidDownloadAllIcons, - weak_ptr_factory_.GetWeakPtr(), std::move(credential), - std::move(request))); + weak_ptr_factory_.GetWeakPtr(), + std::move(browser_bound_key_id), std::move(request))); gfx::Size preferred_size(kSecurePaymentConfirmationIconMaximumWidthPx, kSecurePaymentConfirmationIconHeightPx); @@ -443,7 +468,7 @@ } void SecurePaymentConfirmationAppFactory::DidDownloadAllIcons( - std::unique_ptr<SecurePaymentConfirmationCredential> credential, + std::optional<std::vector<uint8_t>> browser_bound_key_id, std::unique_ptr<Request> request) { DCHECK(request); if (!request->delegate || !request->web_contents()) @@ -470,7 +495,8 @@ request->mojo_request->instrument->icon = GURL(); } - if (!request->delegate->GetSpec() || !request->authenticator || !credential) { + if (!request->delegate->GetSpec() || !request->authenticator || + !request->credential) { request->delegate->OnDoneCreatingPaymentApps(); return; } @@ -495,10 +521,11 @@ request->delegate->OnPaymentAppCreated( std::make_unique<SecurePaymentConfirmationApp>( - request->web_contents(), credential->relying_party_id, + request->web_contents(), request->credential->relying_party_id, payment_instrument_label, std::make_unique<SkBitmap>(payment_instrument_icon), - std::move(credential->credential_id), + std::move(request->credential->credential_id), + std::move(browser_bound_key_id), url::Origin::Create(request->delegate->GetTopOrigin()), request->delegate->GetSpec()->AsWeakPtr(), std::move(request->mojo_request), std::move(request->authenticator),
diff --git a/components/payments/content/secure_payment_confirmation_app_factory.h b/components/payments/content/secure_payment_confirmation_app_factory.h index 3cca707..4b0d7f9 100644 --- a/components/payments/content/secure_payment_confirmation_app_factory.h +++ b/components/payments/content/secure_payment_confirmation_app_factory.h
@@ -58,10 +58,14 @@ std::vector<std::unique_ptr<SecurePaymentConfirmationCredential>> credentials); + void OnRetrievedBrowserBoundKeyId( + std::unique_ptr<Request> request, + std::optional<std::vector<uint8_t>> maybe_browser_bound_key_id); + // Called once all icons are downloaded and their respective SkBitmaps have // been set into the Request. void DidDownloadAllIcons( - std::unique_ptr<SecurePaymentConfirmationCredential> credential, + std::optional<std::vector<uint8_t>> browser_bound_key_id, std::unique_ptr<Request> request); std::map<WebDataServiceBase::Handle, std::unique_ptr<Request>> requests_;
diff --git a/components/payments/content/secure_payment_confirmation_app_factory_unittest.cc b/components/payments/content/secure_payment_confirmation_app_factory_unittest.cc index 9d4963c..4e70de56 100644 --- a/components/payments/content/secure_payment_confirmation_app_factory_unittest.cc +++ b/components/payments/content/secure_payment_confirmation_app_factory_unittest.cc
@@ -8,6 +8,7 @@ #include "base/base64.h" #include "base/test/gmock_callback_support.h" +#include "base/test/gmock_move_support.h" #include "base/test/scoped_feature_list.h" #include "components/os_crypt/async/browser/test_utils.h" #include "components/payments/content/mock_payment_app_factory_delegate.h" @@ -17,21 +18,31 @@ #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" #include "content/public/test/test_web_contents_factory.h" +#include "content/test/test_web_contents.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/payments/payment_request.mojom.h" +#include "ui/gfx/geometry/size.h" #include "url/gurl.h" #include "url/origin.h" +#if BUILDFLAG(IS_ANDROID) +#include "components/payments/content/secure_payment_confirmation_app.h" +#include "components/webdata/common/web_data_service_consumer.h" +#endif // BUILDFLAG(IS_ANDROID) + namespace payments { namespace { using ::base::test::RunOnceCallback; using ::testing::_; using ::testing::ByMove; +using ::testing::DoAll; using ::testing::Eq; using ::testing::Return; using ::testing::ReturnRef; +using ::testing::SaveArg; static constexpr char kChallengeBase64[] = "aaaa"; static constexpr char kCredentialIdBase64[] = "cccc"; @@ -467,8 +478,9 @@ caller_origin, /*expected_require_third_party_payment_bit=*/false); } -TEST_F(SecurePaymentConfirmationAppFactoryUsingCredentialStoreAPIsTest, - CorrectlyCalculatesThirdPartyPaymentRequirement_OriginSameDomainAsRpId) { +TEST_F( + SecurePaymentConfirmationAppFactoryUsingCredentialStoreAPIsTest, + CorrectlyCalculatesThirdPartyPaymentRequirGement_OriginSameDomainAsRpId) { // Because the RP ID is 'rp.example', and our origin is // 'https://www.rp.example', this is a first-party payment authentication. url::Origin caller_origin = @@ -513,5 +525,84 @@ secure_payment_confirmation_app_factory_.Create(mock_delegate->GetWeakPtr()); } +#if BUILDFLAG(IS_ANDROID) +class SecurePaymentConfirmationAppFactoryBrowserBoundKeysTest + : public SecurePaymentConfirmationAppFactoryUsingCredentialStoreAPIsTest { + private: + base::test::ScopedFeatureList feature_list_{ + blink::features::kSecurePaymentConfirmationBrowserBoundKeys}; +}; + +// Test that the browser bound key is retrieved +TEST_F(SecurePaymentConfirmationAppFactoryBrowserBoundKeysTest, + RetrievesBrowserBoundKey) { + base::test::ScopedFeatureList feature_list{ + blink::features::kSecurePaymentConfirmationBrowserBoundKeys}; + url::Origin caller_origin = url::Origin::Create(GURL("https://site.example")); + std::vector<uint8_t> browser_bound_key_id({0x11, 0x12, 0x13, 0x14}); + WebDataServiceBase::Handle web_data_service_handle = 1234; + auto method_data = mojom::PaymentMethodData::New(); + method_data->supported_method = "secure-payment-confirmation"; + method_data->secure_payment_confirmation = + CreateSecurePaymentConfirmationRequest(); + std::vector<std::vector<uint8_t>> credential_ids = + method_data->secure_payment_confirmation->credential_ids; + ASSERT_EQ(credential_ids.size(), 1u); + std::string relying_party_id = + method_data->secure_payment_confirmation->rp_id; + GURL icon = method_data->secure_payment_confirmation->instrument->icon; + + auto mock_authenticator = + std::make_unique<webauthn::MockInternalAuthenticator>(web_contents_); + EXPECT_CALL(*mock_authenticator, + IsUserVerifyingPlatformAuthenticatorAvailable(_)) + .WillOnce(RunOnceCallback<0>(true)); + EXPECT_CALL(*mock_authenticator, IsGetMatchingCredentialIdsSupported()) + .WillOnce(Return(true)); + EXPECT_CALL(*mock_authenticator, GetMatchingCredentialIds(_, _, _, _)) + .WillOnce(RunOnceCallback<3>( + method_data->secure_payment_confirmation->credential_ids)); + + auto mock_delegate = std::make_unique<MockPaymentAppFactoryDelegate>( + web_contents_, std::move(method_data)); + + scoped_refptr<MockPaymentManifestWebDataService> mock_service = + base::MakeRefCounted<MockPaymentManifestWebDataService>(); + WebDataServiceConsumer* web_data_service_consumer = nullptr; + EXPECT_CALL(*mock_service, GetBrowserBoundKey(Eq(credential_ids[0]), + Eq(relying_party_id), _)) + .WillOnce(DoAll(SaveArg<2>(&web_data_service_consumer), + Return(web_data_service_handle))); + EXPECT_CALL(*mock_delegate, CreateInternalAuthenticator()) + .WillOnce(Return(ByMove(std::move(mock_authenticator)))); + EXPECT_CALL(*mock_delegate, GetPaymentManifestWebDataService()) + .WillRepeatedly(Return(mock_service)); + EXPECT_CALL(*mock_delegate, GetFrameSecurityOrigin()) + .WillOnce(ReturnRef(caller_origin)); + std::unique_ptr<PaymentApp> secure_payment_confirmation_app; + EXPECT_CALL(*mock_delegate, OnPaymentAppCreated(_)) + .WillOnce(MoveArg<0>(&secure_payment_confirmation_app)); + + secure_payment_confirmation_app_factory_.Create(mock_delegate->GetWeakPtr()); + ASSERT_TRUE(web_data_service_consumer); + web_data_service_consumer->OnWebDataServiceRequestDone( + web_data_service_handle, + std::make_unique<WDResult<std::optional<std::vector<uint8_t>>>>( + WDResultType::BROWSER_BOUND_KEY, browser_bound_key_id)); + std::vector<gfx::Size> icon_sizes({{32, 32}}); + std::vector<SkBitmap> icon_bitmaps(1); + icon_bitmaps[0].allocN32Pixels(/*width=*/32, /*height=*/32); + static_cast<content::TestWebContents*>(web_contents_.get()) + ->TestDidDownloadImage(icon, /*https_status_code=*/200, + std::move(icon_bitmaps), std::move(icon_sizes)); + + ASSERT_TRUE(secure_payment_confirmation_app); + EXPECT_EQ(static_cast<SecurePaymentConfirmationApp*>( + secure_payment_confirmation_app.get()) + ->GetBrowserBoundKeyIdForTesting(), + browser_bound_key_id); +} +#endif // BUILDFLAG(IS_ANDROID) + } // namespace } // namespace payments
diff --git a/components/payments/content/secure_payment_confirmation_app_unittest.cc b/components/payments/content/secure_payment_confirmation_app_unittest.cc index f77c9f4..aacd7b6 100644 --- a/components/payments/content/secure_payment_confirmation_app_unittest.cc +++ b/components/payments/content/secure_payment_confirmation_app_unittest.cc
@@ -136,6 +136,7 @@ web_contents_, "effective_rp.example", payment_instrument_label_, /*payment_instrument_icon=*/std::make_unique<SkBitmap>(), std::move(credential_id), + /*browser_bound_key_id=*/std::nullopt, url::Origin::Create(GURL("https://merchant.example")), spec_->AsWeakPtr(), MakeRequest(), std::move(authenticator), /*network_label=*/u"", /*network_icon=*/SkBitmap(), @@ -178,17 +179,19 @@ const std::vector<uint8_t> client_data_json({0x01, 0x02, 0x03, 0x04}); const std::vector<uint8_t> public_key_as_cose_key({0x05, 0x06, 0x07, 0x08}); const std::vector<uint8_t> signature({0x09, 0x0a, 0x0b, 0x0c}); + const std::vector<uint8_t> browser_bound_key_id({0x0d, 0x0e, 0x0f, 0x10}); FakeBrowserBoundKey browser_bound_key(public_key_as_cose_key, signature, client_data_json); SecurePaymentConfirmationApp app( web_contents_, "effective_rp.example", payment_instrument_label_, /*payment_instrument_icon=*/std::make_unique<SkBitmap>(), credential_id, + browser_bound_key_id, url::Origin::Create(GURL("https://merchant.example")), spec_->AsWeakPtr(), MakeRequest(), std::move(authenticator), /*network_label=*/u"", /*network_icon=*/SkBitmap(), /*issuer_label=*/u"", /*issuer_icon=*/SkBitmap()); app.SetBrowserBoundKeyStoreForTesting(MakeFakeBrowserBoundKeyStore()); - browser_bound_key_store_->PutFakeKey(credential_id, browser_bound_key); + browser_bound_key_store_->PutFakeKey(browser_bound_key_id, browser_bound_key); EXPECT_CALL(*mock_authenticator, SetPaymentOptions(Pointee( @@ -240,6 +243,7 @@ web_contents_, "effective_rp.example", payment_instrument_label_, /*payment_instrument_icon=*/std::make_unique<SkBitmap>(), std::move(credential_id), + /*browser_bound_key_id=*/std::nullopt, url::Origin::Create(GURL("https://merchant.example")), spec_->AsWeakPtr(), MakeRequest(), std::move(authenticator), /*network_label=*/u"", /*network_icon=*/SkBitmap(),
diff --git a/components/permissions/notifications_engagement_service.cc b/components/permissions/notifications_engagement_service.cc index 24fd0637..c850d4b 100644 --- a/components/permissions/notifications_engagement_service.cc +++ b/components/permissions/notifications_engagement_service.cc
@@ -4,6 +4,9 @@ #include "components/permissions/notifications_engagement_service.h" +#include "base/metrics/histogram.h" +#include "base/numerics/safe_conversions.h" +#include "base/values.h" #include "components/permissions/permissions_client.h" #include "url/gurl.h" @@ -45,18 +48,64 @@ ++it; } } + +int ExtractNotificationCount(const base::Value::Dict& engagement, + std::string date) { + const base::Value::Dict* bucket = engagement.FindDict(date); + if (!bucket) { + return 0; + } + return bucket->FindInt(kDisplayedKey).value_or(0); +} + +void ReportNotificationEngagement(std::string_view type, + int daily_notification_count, + double site_engagement_score, + int count) { + if (count <= 0) { + return; + } + + std::string_view volume; + if (daily_notification_count < 0) { + return; + } else if (daily_notification_count == 0) { + volume = "Volume0"; + } else if (daily_notification_count == 1) { + volume = "Volume1"; + } else if (daily_notification_count <= 5) { + volume = "Volume5"; + } else if (daily_notification_count <= 10) { + volume = "Volume10"; + } else if (daily_notification_count <= 20) { + volume = "Volume20"; + } else { + volume = "VolumeAbove20"; + } + + // `site_engagement_score` is a double between 0 and 100, and starts being + // interested when greater than 0.5. We record `site_engagement_score * 2` in + // order to be able to distinguish positive values from zero. + int site_engagement_score_to_report = + base::saturated_cast<int>(site_engagement_score * 2); + base::HistogramBase* histogram = base::Histogram::FactoryGet( + base::StrCat({"Notifications.Engagement.", type, ".", volume}), 1, 201, + 50, base::HistogramBase::kUmaTargetedHistogramFlag); + histogram->AddCount(site_engagement_score_to_report, count); +} + } // namespace NotificationsEngagementService::NotificationsEngagementService( content::BrowserContext* context, PrefService* pref_service) - : pref_service_(pref_service) { - settings_map_ = - permissions::PermissionsClient::Get()->GetSettingsMap(context); -} + : pref_service_(pref_service), + browser_context_(context), + settings_map_(PermissionsClient::Get()->GetSettingsMap(context)) {} void NotificationsEngagementService::Shutdown() { settings_map_ = nullptr; + browser_context_ = nullptr; } void NotificationsEngagementService::RecordNotificationDisplayed( @@ -75,6 +124,32 @@ IncrementCounts(url, 0 /*display_count_delta*/, 1 /*click_count_delta*/); } +// static +int NotificationsEngagementService::GetDailyAverageNotificationCount( + const base::Value::Dict& engagement) { + // Calculate daily average count for the past week. + base::Time date = base::Time::Now(); + int notification_count_total = 0; + + static constexpr int kDays = 7; + + for (int day = 0; day < kDays; ++day) { + notification_count_total += ExtractNotificationCount( + engagement, GetBucketLabel(date - base::Days(day))); + } + + return std::ceil(notification_count_total / kDays); +} + +// static +int NotificationsEngagementService::GetDailyAverageNotificationCount( + ContentSettingPatternSource setting) { + if (!setting.setting_value.is_dict()) { + return 0; + } + return GetDailyAverageNotificationCount(setting.setting_value.GetDict()); +} + void NotificationsEngagementService::IncrementCounts(const GURL& url, int display_count_delta, int click_count_delta) { @@ -82,12 +157,15 @@ url, GURL(), ContentSettingsType::NOTIFICATION_INTERACTIONS); base::Value::Dict engagement; - if (engagement_as_value.is_dict()) + + if (engagement_as_value.is_dict()) { engagement = std::move(engagement_as_value).TakeDict(); + } std::string date = GetBucketLabel(base::Time::Now()); - if (date == std::string()) + if (date == std::string()) { return; + } EraseStaleEntries(engagement); base::Value::Dict* bucket = engagement.FindDict(date); @@ -104,6 +182,14 @@ click_count_delta + bucket->FindInt(kEngagementKey).value_or(0)); } + int daily_notification_count = GetDailyAverageNotificationCount(engagement); + double site_engagement_score = + PermissionsClient::Get()->GetSiteEngagementScore(browser_context_, url); + ReportNotificationEngagement("Displayed", daily_notification_count, + site_engagement_score, display_count_delta); + ReportNotificationEngagement("Clicked", daily_notification_count, + site_engagement_score, click_count_delta); + // Set the website setting of this origin with the updated |engagement|. settings_map_->SetWebsiteSettingDefaultScope( url, GURL(), ContentSettingsType::NOTIFICATION_INTERACTIONS, @@ -123,8 +209,9 @@ base::Time last_date; bool converted = base::Time::FromUTCExploded(local_date_exploded, &last_date); - if (converted) + if (converted) { return base::NumberToString(last_date.base::Time::ToTimeT()); + } return std::string(); } @@ -140,8 +227,9 @@ if (base::StringToInt(label.c_str(), &maybe_engagement_time)) { base::Time::Exploded date_exploded; base::Time::FromTimeT(maybe_engagement_time).UTCExplode(&date_exploded); - if (base::Time::FromLocalExploded(date_exploded, &local_period_begin)) + if (base::Time::FromLocalExploded(date_exploded, &local_period_begin)) { return local_period_begin; + } } return std::nullopt;
diff --git a/components/permissions/notifications_engagement_service.h b/components/permissions/notifications_engagement_service.h index 8821ae52..152b265 100644 --- a/components/permissions/notifications_engagement_service.h +++ b/components/permissions/notifications_engagement_service.h
@@ -7,7 +7,9 @@ #include "base/memory/raw_ptr.h" #include "base/time/time.h" +#include "base/values.h" #include "components/content_settings/core/browser/host_content_settings_map.h" +#include "components/content_settings/core/common/content_settings.h" #include "components/keyed_service/core/keyed_service.h" class GURL; @@ -41,6 +43,9 @@ void RecordNotificationDisplayed(const GURL& url, int display_count); void RecordNotificationInteraction(const GURL& url); + static int GetDailyAverageNotificationCount( + ContentSettingPatternSource setting); + static std::string GetBucketLabel(base::Time time); static std::optional<base::Time> ParsePeriodBeginFromBucketLabel( const std::string& label); @@ -50,10 +55,14 @@ const int display_count_delta, const int click_count_delta); - // Used to update the notification engagement per URL. - raw_ptr<HostContentSettingsMap> settings_map_; + static int GetDailyAverageNotificationCount( + const base::Value::Dict& engagement); raw_ptr<PrefService> pref_service_; + raw_ptr<content::BrowserContext> browser_context_; + + // Used to update the notification engagement per URL. + raw_ptr<HostContentSettingsMap> settings_map_; }; } // namespace permissions
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 93ea73d..b567319 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -1164,7 +1164,7 @@ Si se habilita esta política, los eventos de mutación seguirán activándose aunque se hayan inhabilitado de forma predeterminada para los usuarios web normales. Si se inhabilita esta política o no se define, estos eventos no se podrán activar. Esta política es una solución temporal y se eliminará en la versión M135.</translation> <translation id="1865417998205858223">Permisos clave</translation> -<translation id="1865867000796030567">Si se habilita esta política, el valor de la clave del archivo de manifiesto de <ph name="REQUIRED_PLATFORM_VERSION" /> de la aplicación de kiosco sin retardo con inicio automático se usará como prefijo de la versión de destino de actualización automática. +<translation id="1865867000796030567">Si se habilita esta política, el valor de la clave del archivo de manifiesto de <ph name="REQUIRED_PLATFORM_VERSION" /> de la aplicación de kiosco sin retardo con inicio automático se usará como prefijo de la versión seleccionada para la actualización automática. Si se inhabilita o no se define, la clave del archivo de manifiesto <ph name="REQUIRED_PLATFORM_VERSION" /> se ignorará y la actualización automática se realizará con normalidad. @@ -6148,7 +6148,7 @@ Si se habilita esta política, se le pedirá al usuario que seleccione un certificado de cliente cuando la política de selección automática coincida con varios certificados. Si se inhabilita esta política o no se establece, nunca se le pedirá al usuario que seleccione un certificado de cliente en la pantalla de inicio de sesión. Nota: Por lo general, no se recomienda activar esta política, ya que incluye riesgos potenciales de privacidad (si se usan certificados respaldados por TPM en todo el dispositivo) y ofrece una mala experiencia de usuario.</translation> -<translation id="5503933085302625442">No restaurar la versión de destino del SO</translation> +<translation id="5503933085302625442">No restaurar SO a la versión seleccionada</translation> <translation id="55057839818162162">Permitir búsqueda asistida mediante cámara de <ph name="GOOGLE_LENS_PRODUCT_NAME" /></translation> <translation id="55057971769693300">Inhabilitar el resaltado del cursor de texto</translation> <translation id="5508307164752647432">Habilitar la función Kerberos</translation> @@ -8172,7 +8172,7 @@ Si se inhabilita esta política o no se define, se aplicará el comportamiento predeterminado de bloquear dichas solicitudes.</translation> <translation id="6915524162137327111">Mostrar etiquetas de gestión durante 30 s</translation> <translation id="6919205861950516688">No permitir la función Organizador de pestañas.</translation> -<translation id="692096803256767290">Restaurar la versión de destino del SO</translation> +<translation id="692096803256767290">Restaurar SO a la versión seleccionada</translation> <translation id="6921241119085515674">Permitir el flujo de <ph name="CLOUD_UPLOAD_NAME" /> para <ph name="MICROSOFT_ONE_DRIVE_NAME" /> y <ph name="MICROSOFT_365_NAME" /></translation> <translation id="6921544339867564740">Permitir que los dispositivos utilicen máquinas virtuales en ChromeOS</translation> <translation id="6922884955650325312">Bloquear el complemento <ph name="FLASH_PLUGIN_NAME" /></translation> @@ -10219,9 +10219,9 @@ <translation id="8504243661032323176">Si se establece esta política, se aplica la longitud mínima definida del PIN. Los valores inferiores a 1 se redondean al mínimo de 1. Si no se establece esta política, se aplica la longitud mínima del PIN de 6 dígitos, que es el mínimo recomendado.</translation> -<translation id="8507835864888987300">Establece una versión de destino para las actualizaciones automáticas. +<translation id="8507835864888987300">Establece la versión seleccionada para las actualizaciones automáticas. - Especifica el prefijo de una versión de destino a la que debe actualizarse <ph name="PRODUCT_OS_NAME" />. Si el dispositivo utiliza una versión anterior al prefijo especificado, se actualizará a la versión más reciente con el prefijo establecido. Si el dispositivo ya utiliza la última versión, el resultado depende del valor de <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" />. El formato del prefijo depende del componente como se indica en el siguiente ejemplo: + Especifica el prefijo de la versión seleccionada a la que debe actualizarse <ph name="PRODUCT_OS_NAME" />. Si el dispositivo utiliza una versión anterior al prefijo especificado, se actualizará a la versión más reciente con el prefijo establecido. Si el dispositivo ya utiliza la última versión, el resultado depende del valor de <ph name="DEVICE_ROLLBACK_TO_TARGET_VERSION_POLICY_NAME" />. El formato del prefijo depende del componente como se indica en el siguiente ejemplo: "" (o no configurado): actualiza a la última versión disponible. "1412.": actualiza a cualquier versión menor de 1412 (por ejemplo, 1412.24.34 o 1412.60.2) @@ -10232,7 +10232,7 @@ <translation id="8508489378025029342">Habilitar los informes sobre el tiempo de actividad del dispositivo</translation> <translation id="8510357716574220408"><ph name="CLOUD_PRINT_NAME" /> (obsoleto)</translation> <translation id="8511192250554640451">Permitir que la lógica de Chrome controle la limitación de los temporizadores de JavaScript en segundo plano y que los usuarios puedan configurar esta limitación</translation> -<translation id="8511708772548158302">Restaura el dispositivo a la versión de destino si la versión actual del SO es más reciente que la de destino. Se hará un Powerwash en el dispositivo, pero se conservarán las configuraciones de red sin certificados de todo el dispositivo y se volverá a registrar el dispositivo automáticamente. +<translation id="8511708772548158302">Restaura el dispositivo a la versión seleccionada si la versión actual del SO es más reciente que la de destino. Se hará un Powerwash en el dispositivo, pero se conservarán las configuraciones de red sin certificados de todo el dispositivo y se volverá a registrar el dispositivo automáticamente. No se puede restaurar la versión 106 de <ph name="PRODUCT_OS_NAME" /> ni versiones anteriores.</translation> <translation id="8519264904050090490">URLs de excepción manual de usuario administrado</translation> <translation id="8519516251436131647">Esta política habilita las combinaciones de teclas para las funciones de accesibilidad.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 962a6a6..bac750b 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -664,6 +664,7 @@ Se a política não for definida, o <ph name="PRODUCT_NAME" /> tentará detectar se um servidor está na intranet. Só então ele responderá às solicitações IWA. Se um servidor for detectado como Internet, o <ph name="PRODUCT_NAME" /> ignorará as solicitações IWA dele. Observação: separe vários nomes de servidor usando vírgulas. Caracteres curinga (<ph name="WILDCARD_VALUE" />) são permitidos.</translation> +<translation id="1488008594883876680">Ativar o pré-carregamento de imagens da <ph name="ARC_VM" /></translation> <translation id="1488724823347505879">Permitir o compartilhamento de apps Android para apps da Web</translation> <translation id="1490962807364514840">O tempo de execução da CPU contabiliza a taxa de coleta da telemetria em milissegundos.</translation> <translation id="1492223733885011596">Esta política permite o uso de GIFs no seletor de emojis no <ph name="PRODUCT_OS_NAME" />. @@ -730,6 +731,44 @@ <translation id="1542491165152947087">Permitir que os usuários ativem ou desativem a configuração do <ph name="PRIVACY_SANDBOX_NAME" /> para temas de anúncios no dispositivo.</translation> <translation id="1542958897137600427">Ativar o provisionamento de certificado do cliente</translation> <translation id="1548431234399786388">Controla as configurações dos relatórios de eventos do navegador.</translation> +<translation id="155018731031610976">Esta política oferece uma maneira de substituir a lista de conjuntos que o navegador usa para recursos de conjunto primário. + +Cada item na lista do navegador precisa atender aos requisitos de um conjunto primário. +O conjunto primário precisa conter um site primário e um ou mais sites membros. +Um conjunto também pode conter uma lista de sites de serviços próprios, assim como um mapa de um site para todas as respectivas variantes do ccTLD. +Consulte https://github.com/WICG/first-party-sets (link em inglês) para mais informações sobre como conjuntos primários são usados pelo <ph name="PRODUCT_NAME" />. + +Todos os sites em um conjunto primário precisam ser um domínio registrável disponibilizado por HTTPS. Cada site em um conjunto primário também precisa ser único, +o que significa que um site não pode ser listado mais de uma vez em um mesmo conjunto primário. + +Quando esta política recebe um dicionário vazio, o navegador usa a lista pública de conjuntos primários. + +No caso de todos os sites em um conjunto primário da lista de <ph name="REPLACEMENTS" />, se o site também estiver presente +em um conjunto primário na lista do navegador, ele será removido desse último conjunto. +Em seguida, o conjunto primário da política será adicionado à lista de conjuntos primários do navegador. + +No caso de todos os sites em um conjunto primário da lista de <ph name="ADDITIONS" />, se um site também estiver presente +em um conjunto primário na lista do navegador, esse último será atualizado para que o +novo conjunto primário possa ser adicionado à lista do navegador. Depois que a lista do navegador for atualizada, +o conjunto primário da política será adicionado à lista de conjuntos primários do navegador. + +A lista de conjuntos primários do navegador exige que nenhum dos sites na lista esteja em +mais de um conjunto. Isso também é necessário para as listas de <ph name="REPLACEMENTS" /> +e <ph name="ADDITIONS" />. Da mesma forma, um site não pode estar na lista de +<ph name="REPLACEMENTS" /> e na de <ph name="ADDITIONS" /> ao mesmo tempo. + +Caracteres curinga (*) não podem ser usados como valor da política nem dentro de conjuntos primários nessas listas. + +Todos os conjuntos fornecidos pela política precisam ser um conjunto primário válido. Se não forem, ocorrerá +um erro na saída. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +Ela é equivalente à política <ph name="RELATED_WEBSITE_SETS_OVERRIDES_POLICY_NAME" />. +Qualquer uma dessas políticas pode ser usada, mas esta será descontinuada em breve. Portanto, a <ph name="RELATED_WEBSITE_SETS_OVERRIDES_POLICY_NAME" /> é a opção mais recomendada. +Ambas têm o mesmo efeito no comportamento do navegador.</translation> <translation id="1550295162561011575">Se a política for definida, os administradores poderão configurar a automação para iniciar apps em dispositivos <ph name="PRODUCT_NAME" />. Esses apps podem ser iniciados no login ou pelo usuário na tela de início.</translation> <translation id="1551782388466447648">Ativar o teclado virtual de toque na tela de login</translation> <translation id="1552418937045050762">Se esta configuração estiver ativada, os usuários poderão usar o recurso "Compartilhar por proximidade", que permite que eles enviem e recebam arquivos de pessoas próximas. @@ -748,6 +787,17 @@ <translation id="1561424797596341174">A política modifica as versões de depuração do host de acesso remoto</translation> <translation id="1561967320164410511">U2F e extensões para declaração individual</translation> <translation id="1562846754315919408">Mostrar notificações quando dispositivos USB forem detectados</translation> +<translation id="1563745847791078494">Se a política for definida, o URL de página inicial padrão será definido no <ph name="PRODUCT_NAME" />. O botão "Página inicial" abrirá a página inicial. No computador, as políticas <ph name="RESTORE_ON_STARTUP_POLICY_NAME" /> controlam as páginas que são abertas na inicialização. + +Se a página inicial for definida como a página Nova guia, seja pelo usuário ou por <ph name="HOMEPAGE_IS_NEW_TAB_PAGE_POLICY_NAME" />, esta política não terá efeito. + +O URL precisa de um esquema padrão, como http://example.com ou https://example.com. Quando a política for definida, os usuários não poderão mudar o URL da página inicial no <ph name="PRODUCT_NAME" />. + +Se <ph name="HOMEPAGE_LOCATION_POLICY_NAME" /> e <ph name="HOMEPAGE_IS_NEW_TAB_PAGE_POLICY_NAME" /> não forem definidas, o usuário poderá escolher a página inicial. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="1567718448549957373">Se a política for definida como "Ativada" ou não for definida, desafios de autenticação <ph name="BASIC_AUTH" /> recebidos por HTTP não seguro serão permitidos. Se a política for definida como "Desativada", solicitações HTTP não seguras não poderão usar o esquema de autenticação <ph name="BASIC_AUTH" />. Apenas conexões HTTPS seguras serão aceitas. @@ -948,6 +998,13 @@ Se ela for desativada, o <ph name="PRODUCT_NAME" /> não vai permitir que perfis de visitantes sejam iniciados.</translation> <translation id="1666001345366986837">Configurações do recurso de segundo plano de IA generativa para videochamadas</translation> +<translation id="166702014436078732">Se a política for definida, será possível configurar um URL em que os usuários poderão mudar a senha após receber um alerta no navegador. O serviço de proteção de senha direcionará os usuários ao URL (apenas protocolos HTTP e HTTPS) designado pela política. Para que o <ph name="PRODUCT_NAME" /> capture corretamente o hash com sal da nova senha na página de mudança de senha, essa página precisa seguir as diretrizes apresentadas em https://www.chromium.org/developers/design-documents/create-amazing-password-forms (link em inglês). + +Se a política for desativada ou não for definida, o serviço vai direcionar os usuários para https://myaccount.google.com para mudar a senha. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="1670638264428789878">Ativar conjuntos de sites relacionados</translation> <translation id="1671405606278443620">Configurações da pesquisa no histórico com tecnologia de IA</translation> <translation id="1673097259557436886">Sempre informar os sites de que não existem formas de pagamento salvas</translation> @@ -1847,6 +1904,13 @@ <translation id="2309284543927494965">Bloquear atualizações</translation> <translation id="2309341709647905294">Não relatar informações sobre periféricos que estão conectados ao dispositivo</translation> <translation id="2309390639296060546">Configuração padrão de geolocalização</translation> +<translation id="2315759015564614266">Se a política for definida como "Ativada", uma pesquisa padrão será realizada quando o usuário digitar um texto na barra de endereço que não seja um URL. Para especificar o provedor de pesquisa padrão, configure o restante das políticas de pesquisa padrão. Se essas políticas forem deixadas em branco, o usuário poderá escolher o provedor padrão. Se a política for definida como "Desativada", nenhuma pesquisa será realizada quando o usuário digitar um texto na barra de endereço que não seja um URL. O valor "Desativado" não pode ser usado no <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />. + +Se você definir a política, ela não poderá ser mudada pelos usuários no <ph name="PRODUCT_NAME" />. Se ela não for definida, o provedor de pesquisa padrão ficará ativado e o usuário poderá definir a lista de provedores de pesquisa. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="2316700579410680894">Se a política for definida, será possível criar uma lista de padrões de URL que especifica quais sites recebem permissão automaticamente para acessar um dispositivo USB com os IDs de produto e fornecedor especificados. Cada item na lista precisa ter os campos "<ph name="DEVICES_FIELD_NAME" />" e "<ph name="URLS_FIELD_NAME" />" para que a política seja válida. Cada item no campo "<ph name="DEVICES_FIELD_NAME" />" pode ter um campo "<ph name="VENDOR_ID_FIELD_NAME" />" e "<ph name="PRODUCT_ID_FIELD_NAME" />". A omissão de "<ph name="VENDOR_ID_FIELD_NAME" />" criará uma política válida para qualquer dispositivo. A omissão de "<ph name="PRODUCT_ID_FIELD_NAME" />" criará uma política válida para qualquer dispositivo com o ID de fornecedor especificado. Uma política com um campo "<ph name="PRODUCT_ID_FIELD_NAME" />" que não tiver um campo "<ph name="VENDOR_ID_FIELD_NAME" />" será inválida. O modelo de permissões de USB autorizará o URL especificado a acessar o dispositivo USB como uma origem de nível superior. Se os frames incorporados precisarem acessar dispositivos USB, o cabeçalho "usb" de <ph name="FEATURE_POLICY_HEADER_NAME" /> será usado para conceder o acesso. O URL precisa ser válido. Caso contrário, a política será ignorada. @@ -2311,6 +2375,23 @@ <translation id="264771271300359481">Não permitir que sites usem a permissão do site para a área de transferência</translation> <translation id="2649537800219643135">Origem da imagem do protetor da tela de bloqueio do usuário.</translation> <translation id="2649896281375932517">Deixar os usuários decidirem</translation> +<translation id="2649948251789347405">Esta política permite que os administradores definam um agregador de pesquisa corporativo designado para fornecer recomendações e resultados de pesquisa na barra de endereço quando for acionado por uma palavra-chave específica. É possível iniciar uma pesquisa digitando a palavra-chave especificada no campo <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD" /> com ou sem o prefixo @ (por exemplo, <ph name="SHORTCUT_EXAMPLE_SEARCH_AGGREGATOR_SETTINGS" />), seguida da barra de espaço ou tecla Tab, na barra de endereço. + +Estes campos são obrigatórios: <ph name="NAME_SEARCH_AGGREGATOR_SETTINGS_FIELD" />, <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD" />, <ph name="SEARCH_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD" />, <ph name="SUGGEST_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD" />. + +O campo <ph name="NAME_SEARCH_AGGREGATOR_SETTINGS_FIELD" /> corresponde ao nome do mecanismo de pesquisa mostrado ao usuário na barra de endereço. + +O campo <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD" /> corresponde à palavra-chave inserida pelo usuário para acionar a pesquisa. O atalho pode incluir palavras e caracteres simples, mas não pode incluir espaços nem começar com o símbolo @. Os atalhos precisam ser exclusivos. + +O campo <ph name="SEARCH_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD" /> especifica o URL em que a pesquisa será feita. Digite o endereço da Web da página de resultados do mecanismo de pesquisa e use <ph name="SEARCH_TERM_MARKER" /> no lugar da consulta. + +O campo <ph name="SUGGEST_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD" /> especifica o URL que fornece sugestões de pesquisa. Se <ph name="SUGGEST_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD" /> contiver <ph name="SEARCH_TERM_MARKER" />, o Chrome vai receber sugestões de pesquisa por uma solicitação GET no URL, substituindo <ph name="SEARCH_TERM_MARKER" /> pela consulta de pesquisa do usuário. Caso contrário, uma solicitação POST será feita, e a consulta do usuário será transmitida nos parâmetros POST na chave <ph name="SEARCH_SUGGEST_POST_PARAMS_QUERY_KEY" />. + +O campo <ph name="ICON_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD" /> especifica o URL de uma imagem que será usada nas sugestões de pesquisa. Um ícone padrão será usado quando este campo não estiver definido. Recomendamos usar um favicon (exemplo: <ph name="ICON_URL_EXAMPLE" />). + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas no <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="2650049181907741121">Ação a ser realizada quando o usuário fecha a tampa</translation> <translation id="2656559539624760733">Não usar a Chrome Root Store.</translation> <translation id="2658653824183107970">Usar a implementação legada de <ph name="CORS" /> em vez do novo <ph name="CORS" /></translation> @@ -3195,6 +3276,8 @@ Se ela for desativada, a segurança e a estabilidade do <ph name="PRODUCT_NAME" /> serão prejudicadas, porque ela vai enfraquecer o sandbox usado pelos processos do renderizador. Só desative a política se softwares de terceiros que precisam ser executados nos processos do renderizador apresentarem problemas de compatibilidade. Observação: leia mais sobre as políticas de mitigação de processos em https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md#Process-mitigation-policies.</translation> +<translation id="3338041636115991551">A não ser que o modo temporário ou o login múltiplo esteja ativado durante a sessão do usuário, a definição da política ArcEnabled como verdadeira ativará o ARC para o usuário. Se a política for definida como falsa ou não for definida, usuários corporativos não poderão usar o ARC. +Esta política só controla a <ph name="ARC_VM" /> no <ph name="PRODUCT_NAME" />. No <ph name="PRODUCT_OS_FLEX_NAME" />, consulte a política <ph name="DEVICE_FLEX_ARC_PRELOAD_ENABLED_POLICY_NAME" /> para mais detalhes.</translation> <translation id="3338431256935927407">Controla as configurações relacionadas ao recurso do Cloud Upload.</translation> <translation id="3339271789059866414">Configura a disponibilidade do serviço de proxy do sistema e as credenciais de proxy para os serviços do sistema. Se a política não for definida, o serviço de proxy do sistema não estará disponível.</translation> @@ -3522,6 +3605,7 @@ Se essa política for definida para um valor menor, o efeito será permanente: o dispositivo PODE não ser capaz de fazer a reversão para versões anteriores mesmo depois de a política ser redefinida para um valor maior. As possibilidades de reversão reais também podem depender dos patches de vulnerabilidade críticos e do modelo.</translation> +<translation id="3565284547329101236">Pré-carregar imagens da <ph name="ARC_VM" /> no Flex</translation> <translation id="35668690622495904"> As chamadas não são recusadas por se originarem em contextos fora da lista de permissões. Elas ainda podem ser recusadas por outros motivos.</translation> @@ -3886,6 +3970,19 @@ Os usuários não podem remover um gerenciador de protocolo registrado pela política. No entanto, ao instalar um novo gerenciador padrão, eles podem mudar os gerenciadores de protocolo instalados pela política.</translation> <translation id="3842619997238271109">Não permite que o host de acesso remoto use autenticações com PIN e pareamento ao aceitar conexões de clientes</translation> +<translation id="3844931982362586388">A definição da política configura o URL padrão da página Nova guia e impede que os usuários o modifiquem. + +Essa página será aberta em novas guias e janelas. + +Esta política não decide quais páginas serão abertas na inicialização. Isso é controlado pelas políticas <ph name="RESTORE_ON_STARTUP_POLICY_NAME" />. Esta política afetará a página inicial e de inicialização se elas estiverem configuradas para abrir a página Nova guia. + +A prática recomendada é fornecer o URL totalmente canonizado. Se isso não ocorrer, o <ph name="PRODUCT_NAME" /> completará com https:// por padrão. + +Se a política não for configurada ou for deixada em branco, a página Nova guia padrão será usada. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="3845318141474759319">Permitir plano de fundo de IA generativa sem melhorar os modelos de IA</translation> <translation id="3851443303439635700">Controla o limite de aninhamento antes que a função setTimeout() do JavaScript comece a ser ajustada.</translation> <translation id="3854609566862485607">Esta política controla um rótulo personalizado usado para identificar perfis gerenciados. Para perfis gerenciados, esse rótulo vai aparecer ao lado do avatar na barra de ferramentas. O rótulo personalizado não será traduzido. @@ -3958,6 +4055,13 @@ Se a política for deixada sem definição ou tiver um valor vazio ou inválido, nenhum <ph name="CLIENT_INFO_IPP_ATTRIBUTE" /> extra vai ser adicionado às solicitações de trabalho de impressão. </translation> <translation id="3896591584655529057">Ativar o salvamento de chaves de acesso no gerenciador de senhas</translation> +<translation id="3896751141670591496">Se a política for definida como "Ativada" ou não for definida, os avisos de segurança vão aparecer apenas quando flags de linha de comando potencialmente perigosas forem usadas para iniciar o Chrome. + +Se a política for definida como "Desativada", os avisos de segurança não vão aparecer quando o Chrome for iniciado com flags de linha de comando potencialmente perigosas. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="3897218615484393758">Limitar o tempo em que um usuário autenticado via SAML pode fazer login off-line na tela de bloqueio</translation> <translation id="3897860452756794695">Um novo comportamento de offsetParent vai ser usado.</translation> <translation id="3898345958122666461">Desativar NTLMv2</translation> @@ -4489,6 +4593,11 @@ <translation id="4278656834593750050">Ativar sons de carregamento</translation> <translation id="4282243913059705499">Sempre mostrar o ícone do <ph name="PRODUCT_NAME" /> na barra de ferramentas</translation> <translation id="4285674129118156176">Permitir que usuários sem afiliação utilizem o ARC</translation> +<translation id="4287004822156577027">Se a política for definida como "Ativada" ou não for definida, a Varredura do Chrome verificará o sistema periodicamente em busca de softwares indesejados e, caso algum seja encontrado, perguntará ao usuário se quer removê-lo. O usuário poderá acionar a Varredura do Chrome manualmente em chrome://settings. + +Se a política for definida como "Desativada", a Varredura do Chrome não fará verificações periódicas e o acionamento manual será desativado. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="428948795004445932">Frequência de amostragem e coleta de dados de rede. O mínimo permitido é de um minuto. Se deixada sem definição, a frequência padrão de 10 minutos será aplicada.</translation> @@ -4887,6 +4996,13 @@ Se a política for deixada sem definição, todas as origens vão exigir um gesto anterior do usuário para chamar essas APIs.</translation> +<translation id="4584427961967778141">Se definida, a política controlará as configurações de gerenciamento de extensões do <ph name="PRODUCT_NAME" />, inclusive aquelas controladas pelas políticas atuais relacionadas a extensões. A política substitui todas as políticas legadas que possam estar definidas. + +Esta política mapeia um ID de extensão ou um URL de atualização apenas para a própria configuração específica. Uma configuração padrão pode ser definida para o ID especial <ph name="DEFAULT_SCOPE" />, que será aplicada a todas as extensões que não tiverem uma configuração personalizada definida nesta política. Com um URL de atualização, a configuração será aplicada a todas as extensões com o URL de atualização exato indicado no manifesto da extensão (http://support.google.com/chrome/a?p=Configure_ExtensionSettings_policy). Se a flag "override_update_url" for definida como verdadeira, a extensão será instalada e atualizada usando o URL de atualização especificado na política <ph name="EXTENSION_INSTALL_FORCELIST_POLICY_NAME" /> ou no campo "update_url" desta política. A flag "override_update_url" será ignorada se o campo "update_url" for um URL da Chrome Web Store. + +Em instâncias do <ph name="MS_WIN_NAME" />, apps e extensões de fora da Chrome Web Store só poderão ter a instalação forçada se a instância for associada a um domínio do <ph name="MS_AD_NAME" />, associada ao <ph name="MS_AAD_NAME" /> ou estiver registrada em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +Em instâncias do <ph name="MAC_OS_NAME" />, apps e extensões de fora da Chrome Web Store só poderão ter a instalação forçada se a instância for gerenciada por MDM, associada a um domínio via MCX ou registrada em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="4591366717022345234">Oferecer Quick Fix Build a usuários</translation> <translation id="4593391169954484940">Hash SHA-256 do arquivo.</translation> <translation id="4594027034164195984">Permitir que imagens de terceiros enviem um prompt de autenticação</translation> @@ -4908,6 +5024,13 @@ <translation id="4599810650416623373">Bloquear as otimizações do JavaScript nestes sites</translation> <translation id="4600786265870346112">Ativar cursor grande</translation> <translation id="4602988345256038309">Permitir conexões de suporte remoto a esta máquina</translation> +<translation id="4605677392792989397">Se a política for definida, será possível definir uma lista de URLs de login corporativos (apenas protocolos HTTP e HTTPS). O serviço de proteção de senhas capturará hashes com sal de senhas nesses URLs e os usará para detectar a reutilização. Para que o <ph name="PRODUCT_NAME" /> capture hashes com sal de senhas corretamente, confira se a página de login segue as diretrizes apresentadas em https://www.chromium.org/developers/design-documents/create-amazing-password-forms (link em inglês). + +Se você desativar ou não definir essa configuração, o serviço de proteção de senhas vai capturar apenas os hashes com sal em https://accounts.google.com. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="4607416370554533118">Se a política for definida, você poderá fazer uma lista de padrões de URL que especificam sites para que o Chrome possa selecionar um certificado do cliente automaticamente. O valor é uma matriz de dicionários JSON convertidos em strings, cada um com o formato <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_EXAMPLE" />, em que <ph name="URL_PATTERN_PLACEHOLDER" /> é um padrão de configuração de conteúdo. <ph name="FILTER_PLACEHOLDER" /> restringe quais certificados do cliente podem ser selecionados automaticamente pelo navegador. Seja qual for o filtro utilizado, apenas os certificados correspondentes à solicitação do servidor serão selecionados. Exemplos de uso da seção <ph name="FILTER_PLACEHOLDER" />: @@ -5499,6 +5622,17 @@ <translation id="5033070732967197381">Permitir solicitações da API WebAuthn em sites com certificados TLS corrompidos.</translation> <translation id="5034504101537897433">Ativar relatórios de erros do dispositivo</translation> <translation id="5036013147560568855">Versão do protocolo de provisionamento de certificado. O valor padrão é 1, que é o protocolo "estático". 2 é o protocolo "dinâmico".</translation> +<translation id="5036559232677914717">A definição desta política permite especificar o comportamento do sistema na inicialização. Desativar essa configuração é o mesmo que não defini-la, já que o <ph name="PRODUCT_NAME" /> precisa ter um comportamento de inicialização especificado. + +Se você definir a política, ela não poderá ser mudada pelos usuários no <ph name="PRODUCT_NAME" />. Se não for definida, ela poderá ser alterada. + +A definição da política como <ph name="POLICY_ENUM_RESTOREONSTARTUP_RESTOREONSTARTUPISLASTSESSION" /> ou <ph name="POLICY_ENUM_RESTOREONSTARTUP_RESTOREONSTARTUPISLASTSESSIONANDURLS" /> desativa algumas configurações que dependem de sessões ou que realizam ações ao sair, como a limpeza dos dados de navegação ou dos cookies de sessão. + +Se essa política for definida como <ph name="POLICY_ENUM_RESTOREONSTARTUP_RESTOREONSTARTUPISLASTSESSIONANDURLS" />, o navegador vai restaurar a sessão anterior e abrir uma janela separada para mostrar URLs definidos em <ph name="RESTORE_ON_STARTUP_URLS_POLICY_NAME" />. Além disso, os usuários podem optar por manter esses URLs abertos. Assim, eles também serão restaurados na próxima sessão. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="5037749623252479780">As configurações Page Up/Page Down estão desativadas</translation> <translation id="5039110755072335605">Suporte a cabeçalhos de solicitação de CORS sem caractere curinga</translation> <translation id="504116558738617678">Mostrar alertas de pouco espaço no disco apenas quando o dispositivo não tiver gerenciamento ou quando houver apenas um usuário</translation> @@ -5823,6 +5957,7 @@ <translation id="5258651513421638932">Permitir a conexão de cartões inteligentes por Apps Isolados</translation> <translation id="5262320080678421295">Desativar confiança em certificados emitidos pela ICP legada da Symantec Corporation</translation> <translation id="5265613843467285323">Mostrar um botão da interface para excluir uma tela do modo espelho.</translation> +<translation id="5270408671043421978">Desativar o pré-carregamento de imagens da <ph name="ARC_VM" /></translation> <translation id="5272332743749468542">Disponibilizar a opção "Excluir esta tela do modo espelho" para o usuário</translation> <translation id="5273744932022326215">Ativar o recurso de acessibilidade de destaque de cursor na tela de login. @@ -6012,6 +6147,25 @@ Se ela for definida como falsa, o <ph name="PRODUCT_NAME" /> e o <ph name="LACROS_NAME" /> não vão permitir que uma nova pessoa seja adicionada pelo gerenciador de usuários.</translation> <translation id="5377606826822211923">Controla, no lugar do usuário, o uso de apps Android de fontes não confiáveis</translation> +<translation id="5377826248281933035">Esta política oferece uma lista de sites em que o usuário pode pesquisar rapidamente usando atalhos na barra de endereço. É possível iniciar uma pesquisa digitando o atalho ou @atalho (por exemplo, @trabalho) seguido da barra de espaço ou tecla Tab na barra de endereço. + +Os campos a seguir são obrigatórios para cada site: <ph name="NAME_SITE_SEARCH_SETTINGS_FIELD" />, <ph name="SHORTCUT_SITE_SEARCH_SETTINGS_FIELD" /> e <ph name="URL_SITE_SEARCH_SETTINGS_FIELD" />. + +O campo <ph name="NAME_SITE_SEARCH_SETTINGS_FIELD" /> corresponde ao nome do site ou do mecanismo de pesquisa que será mostrado ao usuário na barra de endereço. + +O <ph name="SHORTCUT_SITE_SEARCH_SETTINGS_FIELD" /> pode incluir palavras e caracteres simples, mas não pode incluir espaços nem começar com o símbolo @. Os atalhos também precisam ser exclusivos. + +Para cada entrada, o campo <ph name="URL_SITE_SEARCH_SETTINGS_FIELD" /> especifica o URL do mecanismo de pesquisa usado durante uma pesquisa com a palavra-chave correspondente. O URL precisa incluir a string <ph name="SEARCH_TERM_MARKER" />, que é substituída na consulta pelos termos de pesquisa do usuário. Entradas inválidas e com atalhos duplicados são ignoradas. + +As entradas da pesquisa no site configuradas como em destaque aparecem na barra de endereço quando o usuário digita "@". Até três entradas podem ser selecionadas para ficar em destaque. + +Não é possível editar ou desativar entradas de pesquisa no site definidas pela política, mas o usuário pode adicionar novos atalhos para o mesmo URL. Além disso, não é possível criar novas entradas de pesquisa no site com um atalho criado anteriormente por esta política. + +Em caso de conflito com um atalho criado anteriormente pelo usuário, a configuração do usuário tem prioridade. No entanto, ainda é possível acionar a opção criada pela política digitando "@" na barra de pesquisa. Por exemplo, se o usuário já definiu "trabalho" como um atalho para URL1, e a política define "trabalho" como um atalho para URL2, digitar "trabalho" na barra de pesquisa aciona uma pesquisa para URL1, mas digitar "@trabalho" aciona uma pesquisa para URL2. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="537786648513450280">Controla, no lugar do dispositivo, o uso de apps Android de fontes não confiáveis</translation> <translation id="5378885577701865339">Desativar a área de transferência compartilhada</translation> <translation id="538108065117008131">Permitir que o <ph name="PRODUCT_FRAME_NAME" /> lide com os seguintes tipos de conteúdo.</translation> @@ -6171,6 +6325,17 @@ <translation id="5480380613778757009">Se a política for desativada ou deixada sem definição, todas as configurações de tela que foram definidas em Sessões de visitante gerenciadas serão redefinidas assim que a sessão for encerrada. Se a política for definida como "Verdadeira", as propriedades de tela permanecerão após a Sessão de visitante gerenciada ser encerrada.</translation> <translation id="5483012943408894695">Origens ou padrões de nome do host aos quais as restrições sobre origens não seguras não se aplicam</translation> <translation id="5483065054530244863">Permitir certificados SHA-1 assinados emitidos pelas âncoras de confiança locais</translation> +<translation id="5486352219019836984">Se essa política for ativada, será recomendado habilitar o envio de relatórios anônimos de uso e dados de falha do <ph name="PRODUCT_NAME" /> ao Google por padrão. Os usuários ainda poderão mudar essa configuração. + +Se a política for definida como "Desativada", os relatórios anônimos também serão desativados e nenhum dado de uso ou falha será enviado ao Google. Os usuários não poderão mudar essa configuração. + +Se a polícia for deixada sem definição, será possível escolher o comportamento dos relatórios anônimos durante a instalação ou a primeira execução. Além disso, será possível mudar essa configuração mais tarde. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +Para o <ph name="PRODUCT_OS_NAME" />, consulte <ph name="DEVICE_METRICS_REPORTING_ENABLED_POLICY_NAME" />.</translation> <translation id="5486917900445838803">Se a política for ativada ou deixada sem definição, a aceleração gráfica também será ativada, se disponível. Se ela for desativada, a aceleração gráfica também será.</translation> @@ -6527,6 +6692,11 @@ <translation id="5708969689202733975">Configurar os modos de desbloqueio rápido permitidos</translation> <translation id="5714563837055244378">Ativar o compartilhamento do Android para apps da Web.</translation> <translation id="5715739768416614900">Ativar as ferramentas de solução de problemas em quiosques.</translation> +<translation id="5716156630400143265">Se a <ph name="RESTORE_ON_STARTUP_POLICY_NAME" /> for definida como RestoreOnStartupIsURLs, definir <ph name="RESTORE_ON_STARTUP_URLS_POLICY_NAME" /> como uma lista de URLs especifica quais serão abertos. + +Se ela não for definida, a página Nova guia será aberta na inicialização. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="5717973246079053225">Desativar os relatórios de nuvem do perfil gerenciado</translation> <translation id="572155275267014074">Configurações do Android</translation> <translation id="5722577409367087850">Carregar a extensão</translation> @@ -6767,6 +6937,15 @@ <translation id="5899751601113377553">Evitar que os usuários usem o <ph name="LACROS_NAME" /></translation> <translation id="5900919753933009463">Informar configuração da rede</translation> <translation id="5901427587865226597">Apenas impressão duplex</translation> +<translation id="5903484826174648217">Se a política for definida como "Ativada", a Navegação segura confiará nos domínios designados. Ela não verificará a presença de recursos perigosos como phishing, malware ou software indesejado. O serviço de proteção de downloads da Navegação segura não verificará downloads hospedados nesses domínios. O serviço de proteção de senhas não verificará a reutilização de senhas. + +Se a política não for definida, as proteções padrão da Navegação segura serão aplicadas a todos os recursos. + +Esta política não aceita o uso de expressões regulares. No entanto, os subdomínios de um determinado domínio estão na lista de permissões. Nomes de domínio totalmente qualificados (FQDNs, na sigla em inglês) não são obrigatórios. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="5905114360004248993">Permitir pop-ups nesses sites</translation> <translation id="5905473632148429217">Ativar verificações OCSP/CRL on-line</translation> <translation id="5908808391744484238">Quando esta política é ativada ou não definida, o filtro do parâmetro de URL pode remover alguns parâmetros quando o usuário seleciona a opção "Abrir link em janela anônima" no menu de contexto. @@ -6992,6 +7171,19 @@ <translation id="6099853574908182288">Modo de cor de impressão padrão</translation> <translation id="6102342563050263313">Permitir rolagem para texto especificado em fragmentos de URL</translation> <translation id="6102449843040973938">Não evitar que a <ph name="BOREALIS_NAME" /> seja executada em um dispositivo</translation> +<translation id="6103130052818694000">Esta política foi descontinuada no <ph name="PRODUCT_NAME" /> 83. Use a <ph name="SAFE_BROWSING_PROTECTION_LEVEL_POLICY_NAME" />. + +Se a política for definida como "Ativada", a Navegação segura do Chrome será ativada. Se a política for definida como "Desativada", a Navegação segura ficará desativada. + +Se você definir a política, os usuários não poderão mudá-la ou modificar a configuração "Ativar proteção contra phishing e malware" no Chrome. Se ela não for definida, a opção "Ativar proteção contra phishing e malware" será definida como verdadeira e os usuários não poderão mudá-la. + +Acesse mais informações sobre a Navegação segura (https://developers.google.com/safe-browsing). + +Se a <ph name="SAFE_BROWSING_PROTECTION_LEVEL_POLICY_NAME" /> for definida, o valor da política <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> será ignorado. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="610892566190435199">Ativar relatórios de status de energia do dispositivo</translation> <translation id="6111936128861357925">Permitir jogo easter egg de dinossauro</translation> <translation id="6118226055960302400">Restaurar o comportamento de permissões.</translation> @@ -7276,6 +7468,13 @@ <translation id="627672037430076089">Impedir conexões de suporte remoto a esta máquina</translation> <translation id="6277314550042130537">Usar a aprovação da política de KDC durante a autenticação do HTTP</translation> <translation id="6278428485366576908">Tema</translation> +<translation id="6279010879606347019">Se a política for definida como "Ativada", a página Nova guia será a página inicial do usuário. Qualquer local de URL de página inicial será ignorado. Se a política for definida como "Desativada", a página Nova guia não será a página inicial, a não ser que o URL dela seja definido como chrome://newtab. + +Se você definir a política, os usuários não poderão mudar a página inicial no <ph name="PRODUCT_NAME" />. Se a política não for definida, o usuário poderá escolher se a página Nova guia será a inicial. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="628084107912717806">Especifica se módulos WebAssembly podem ser enviados em origem cruzada</translation> <translation id="6280973140313576289">Seletor de perfil forçado na inicialização</translation> <translation id="6282524907402492171">Exibir avisos de suspensão de uso de <ph name="CLOUD_PRINT_NAME" /></translation> @@ -8089,6 +8288,13 @@ <translation id="6766216162565713893">Permitir que os sites peçam ao usuário para conceder acesso a um dispositivo Bluetooth próximo</translation> <translation id="6770454900105963262">Denunciar informações sobre sessões de quiosque ativas</translation> <translation id="6774132787348495175">Não permitir o uso de máquinas virtuais necessárias para apps Linux</translation> +<translation id="678121785914414680">Lista de tipos de arquivo que serão abertos automaticamente após o download. O separador à esquerda não pode ser incluído ao listar os tipos de arquivo. Então, liste "txt" em vez de ".txt". + +Os arquivos dos tipos que devem ser automaticamente abertos ainda estarão sujeitos às verificações ativadas da Navegação segura e não serão abertos se forem reprovados nessas verificações. + +Se essa política não for configurada, apenas os tipos de arquivo que o usuário já especificou para abrir automaticamente serão abertos após o download. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="6782331708811245959">Ativar relatórios sobre o modo de inicialização do dispositivo</translation> <translation id="6783578496154221347">Use WeeklyTimeIntervalChecked no novo código.</translation> <translation id="6785201942412171878">Controla o atalho usado para acionar as teclas PageUp/PageDown</translation> @@ -9756,6 +9962,13 @@ <translation id="8089200718228084417">Ativar a impressão com o protocolo Privet suspenso</translation> <translation id="8091982561085048989">Flag booleana indicando se o IPP Everywhere deve ser usado ou não para configurar a impressora. Essa sinalização é compatível com o <ph name="PRODUCT_OS_NAME" /> 76 ou versão mais recente.</translation> <translation id="8094095107731619070">Ativar a correção automática do teclado físico quando os usuários digitarem</translation> +<translation id="8098760437853291958">Se a política for definida como "Ativada" ou não for definida, os arquivos transferidos por download serão enviados para análise pela Navegação segura, mesmo que sejam de uma fonte confiável. + +Se a política for definida como "Desativada", os arquivos transferidos por download não serão enviados para análise pela Navegação segura quando forem de uma fonte confiável. + +Essas restrições são aplicadas a downloads acionados em conteúdos de páginas da Web e na opção do menu "Baixar o link". Essas restrições não se aplicam às opções de salvar ou fazer o download da página atualmente em exibição nem de salvar como PDF nas opções de impressão. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="8099833343914898016">Uma lista predeterminada de atalhos com a tecla de acesso rápido nunca vai realizar uma ação em tela cheia.</translation> <translation id="8099880303030573137">Intervalo de inatividade no funcionamento com energia da bateria</translation> <translation id="8101381354936029836">Grupo atômico de políticas:</translation> @@ -9889,6 +10102,43 @@ Leia mais sobre o "Navegação segura" (https://developers.google.com/safe-browsing).</translation> <translation id="8199823751103472868">Se a política for definida, o layout de teclado Inscript hindi vai ser ativado no <ph name="PRODUCT_OS_NAME" />. Se ela for "false" ou não for definida, o layout não estará disponível.</translation> <translation id="8202834945144737726">Ativar o fluxo de atestado <ph name="CHROME_ENTERPRISE_DEVICE_TRUST_CONNECTOR" /> para uma lista de URLs na tela de login</translation> +<translation id="8210117014924235250">Esta política oferece uma maneira de substituir a lista de conjuntos que o navegador usa para recursos de conjuntos de sites relacionados. + +Esta política substitui a <ph name="FIRST_PARTY_SETS_OVERRIDES_POLICY_NAME" />. + +Cada item na lista do navegador precisa atender aos requisitos de um conjunto de sites relacionados. +O conjunto de sites relacionados precisa conter um site primário e um ou mais sites membros. +Um conjunto também pode conter uma lista de sites de serviços próprios, assim como um mapa de um site para todas as respectivas variantes do ccTLD. +Consulte https://github.com/WICG/first-party-sets (link em inglês) para mais informações sobre como o <ph name="PRODUCT_NAME" /> usa conjuntos de sites relacionados. + + +Todos os sites em um conjunto de sites relacionados precisam ser um domínio registrável disponibilizado por HTTPS. Cada site em um conjunto também precisa ser único, +ou seja, um site não pode ser listado mais de uma vez em um conjunto de sites relacionados. + +Quando esta política recebe um dicionário vazio, o navegador usa a lista pública de conjuntos de sites relacionados. + +Para todos os sites em um conjunto de sites relacionados da lista <ph name="REPLACEMENTS" />, se o site também estiver presente +em um desses conjuntos na lista do navegador, ele será removido desse conjunto. +Em seguida, o conjunto de sites relacionados da política será adicionado à lista de conjuntos de sites relacionados do navegador. + +Para todos os sites de um conjunto de sites relacionados na lista <ph name="ADDITIONS" />, se o site também estiver presente +em um conjunto na lista do navegador, esse conjunto será atualizado para que o +novo conjunto de sites relacionados possa ser adicionado à lista do navegador. Depois que a lista do navegador for atualizada, +o conjunto de sites relacionados da política será adicionado à lista de conjuntos de sites relacionados do navegador. + +A lista de conjuntos de sites relacionados do navegador exige que nenhum dos sites na lista esteja em +mais de um conjunto. Isso também é necessário para as listas de <ph name="REPLACEMENTS" /> +e <ph name="ADDITIONS" />. Da mesma forma, um site não pode estar na lista de +<ph name="REPLACEMENTS" /> e na de <ph name="ADDITIONS" /> ao mesmo tempo. + +Caracteres curinga (*) não podem ser usados como valor da política, nem dentro de qualquer conjunto de sites relacionados nessas listas. + +Todos os conjuntos fornecidos pela política precisam ser conjuntos de sites relacionados válidos. Se não forem, +um erro será gerado. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +No <ph name="MAC_OS_NAME" />, essa política só está disponível em instâncias gerenciadas por MDM, associadas a um domínio via MCX ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="8213475033260328041">Escolha se quer armazenar os dados cobertos do <ph name="PRODUCT_NAME" /> em uma localização geográfica específica. Se a política não for definida ou for definida como <ph name="DATA_REGION_SETTING_NO_PREFERENCE_OPTION_NAME" /> (valor 0), os dados cobertos poderão ser armazenados em qualquer localização geográfica. @@ -9988,6 +10238,23 @@ Se não for definida, os sites terão permissão para solicitar acesso, mas os usuários poderão mudar essa configuração.</translation> <translation id="8267520984570984190">O comportamento padrão de redimensionamento do teclado virtual não é modificado</translation> <translation id="8269238942896230153">Uma conta gerenciada precisa ser a principal. A importação de dados de navegação existentes é permitida no momento da criação do perfil</translation> +<translation id="827020625039819798">A definição da política especifica uma lista de apps e extensões com instalação silenciosa, sem interação do usuário, e que não podem ser desinstalados nem desativados pela interface do <ph name="PRODUCT_NAME" />. As permissões são concedidas implicitamente, inclusive para as APIs de extensão enterprise.deviceAttributes e enterprise.platformKeys. Essas duas APIs não estão disponíveis para apps e extensões que não sejam de instalação forçada. + +Embora o <ph name="PRODUCT_NAME" /> tenha como objetivo impedir que os usuários desinstalem essas extensões, alguns sistemas operacionais não permitem que o <ph name="PRODUCT_NAME" /> proteja as extensões de modificações externas. Portanto, essa prevenção é uma tentativa de mitigação. + +Se a política não for definida, nenhum app ou extensão será instalado automaticamente e o usuário poderá desinstalar qualquer app ou extensão no <ph name="PRODUCT_NAME" />. + +Esta política substitui a <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" />. Se um app ou extensão de instalação forçada for removido da lista, será automaticamente desinstalado pelo <ph name="PRODUCT_NAME" />. + +O código-fonte de qualquer extensão pode ser alterado pelos usuários com as ferramentas para desenvolvedores, possivelmente prejudicando a funcionalidade da extensão. Se isso for uma preocupação, defina a política <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />. + +Cada item da lista da política é uma string que contém um ID de extensão e, opcionalmente, um URL de atualização separados por ponto e vírgula (;). O ID da extensão é a string de 32 letras encontrada, por exemplo, em chrome://extensions no modo de desenvolvedor. Se especificado, o URL de atualização vai apontar para um documento XML de manifesto de atualização (https://developer.chrome.com/extensions/autoupdate). O URL de atualização vai usar um destes esquemas: <ph name="HTTP_SCHEME" />, <ph name="HTTPS_SCHEME" /> ou <ph name="FILE_SCHEME" />. Por padrão, o URL de atualização da Chrome Web Store é usado. O URL de atualização definido nesta política só é usado na instalação inicial. As atualizações subsequentes da extensão empregam o URL indicado no manifesto da extensão. O URL para atualizações subsequentes pode ser substituído usando a política <ph name="EXTENSION_SETTINGS_POLICY_NAME" />. Consulte http://support.google.com/chrome/a?p=Configure_ExtensionSettings_policy. + +Em instâncias do <ph name="MS_WIN_NAME" />, apps e extensões de fora da Chrome Web Store só poderão ter a instalação forçada se a instância for associada a um domínio do <ph name="MS_AD_NAME" />, associada ao <ph name="MS_AAD_NAME" /> ou estiver registrada em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +Em instâncias do <ph name="MAC_OS_NAME" />, apps e extensões de fora da Chrome Web Store só poderão ter a instalação forçada se a instância for gerenciada por MDM, associada a um domínio via MCX ou registrada em <ph name="CHROME_ENTERPRISE_CORE_NAME" />. + +Observação: esta política não se aplica ao modo de navegação anônima. Leia sobre hospedagem de extensões (https://developer.chrome.com/extensions/hosting).</translation> <translation id="8270320981823560179">Drive</translation> <translation id="827054846390793641">Ativar IUs relacionadas à conexão no computador host quando uma conexão estiver ativa</translation> <translation id="8272422063636310696">Controla se uma página que usa tecnologias legadas será informada com base no URL dela. @@ -10236,6 +10503,13 @@ <translation id="8452787853105404870">Enviar dados de hardware ao Google para apoiar as melhorias no ChromeOS Flex</translation> <translation id="8453218444172088993">Desativar a configuração do <ph name="PRIVACY_SANDBOX_NAME" /> de temas de anúncios para os usuários.</translation> <translation id="8455529558077979314">Configurações da tela de privacidade</translation> +<translation id="8459662059679040042">Quando a política for definida como "Ativada", se a <ph name="CHROME_CLEANUP_NAME" /> detectar softwares indesejados, ela poderá enviar o registro da varredura ao Google, de acordo com a política definida por <ph name="SAFE_BROWSING_EXTENDED_REPORTING_ENABLED_POLICY_NAME" />. A <ph name="CHROME_CLEANUP_NAME" /> perguntará aos usuários se querem realizar a varredura. Os resultados serão enviados ao Google. + +Quando a política for definida como "Desativada", se a <ph name="CHROME_CLEANUP_NAME" /> detectar software indesejado, os resultados não serão enviados ao Google, independente do valor de <ph name="SAFE_BROWSING_EXTENDED_REPORTING_ENABLED_POLICY_NAME" />. A <ph name="CHROME_CLEANUP_NAME" /> perguntará aos usuários se querem realizar a varredura. Os resultados não serão enviados ao Google. + +Se a política não for definida, a <ph name="CHROME_CLEANUP_NAME" /> poderá enviar os resultados da varredura de software indesejado ao Google de acordo com a política definida por <ph name="SAFE_BROWSING_EXTENDED_REPORTING_ENABLED_POLICY_NAME" />. A <ph name="CHROME_CLEANUP_NAME" /> perguntará aos usuários se querem fazer a varredura e compartilhar os resultados com o Google para ajudar na detecção de software indesejado no futuro. Esses resultados contêm metadados de arquivos, extensões instaladas automaticamente e chaves de registro, conforme descrito no artigo de Privacidade do Chrome. + +No <ph name="MS_WIN_NAME" />, essa política só está disponível em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, associadas ao <ph name="MS_AAD_NAME" /> ou registradas em <ph name="CHROME_ENTERPRISE_CORE_NAME" />.</translation> <translation id="8461914792118322307">Proxy</translation> <translation id="8465065632133292531">Parâmetros para URL de instantâneos que usa POST</translation> <translation id="8466326735698755782">Permitir o uso da Tabela de comparação sem melhorar os modelos de IA.</translation> @@ -10706,6 +10980,13 @@ <translation id="8801680448782904838">Notifica um usuário de que a reinicialização do navegador ou do dispositivo é recomendada ou obrigatória</translation> <translation id="8802800226877198994">Ativar o suporte a GIFs.</translation> <translation id="8804685015028424497">Desativar o modo de navegação anônima</translation> +<translation id="8806417793261941339">Esta política foi descontinuada. Use a <ph name="SAFE_BROWSING_ALLOWLIST_DOMAINS_POLICY_NAME" />. + + Se a política for definida como "Ativada", a Navegação segura confiará nos domínios designados. Ela não verificará a presença de recursos perigosos como phishing, malware ou software indesejado. O serviço de proteção de downloads da Navegação segura não verificará downloads hospedados nesses domínios. O serviço de proteção de senhas não verificará a reutilização de senhas. + + Se a política for definida como "Desativada" ou não for definida, as proteções padrão da Navegação segura serão aplicadas a todos os recursos. + + No <ph name="MS_WIN_NAME" />, essa funcionalidade está disponível apenas em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, executadas no Windows 10 Pro ou registradas no <ph name="CHROME_ENTERPRISE_CORE_NAME" />. No <ph name="MAC_OS_NAME" />, essa funcionalidade está disponível apenas em instâncias gerenciadas por MDM ou associadas a um domínio via MCX.</translation> <translation id="8806478127647484805">Impedir que usuários encerrem processos no gerenciador de tarefas do Chrome</translation> <translation id="8807274441692477185">Não mostrar a tela de direção de rolagem do touchpad durante o login</translation> <translation id="8807313206348471682">Exibir a caixa de diálogo para confirmação de saída</translation> @@ -10854,6 +11135,15 @@ <translation id="8897796778265450949">Limitar o tempo em que um usuário autenticado via GAIA sem SAML pode fazer login off-line</translation> <translation id="889814528399907891">Permitir que os usuários ativem o <ph name="LACROS_NAME" /> e torná-lo o navegador principal</translation> <translation id="8900312706328930425">Frequência em horas dos relatórios de nuvem</translation> +<translation id="8902938589482529940">Esta política permite o pré-carregamento de imagens da <ph name="ARC_VM" /> no dispositivo com o <ph name="PRODUCT_OS_FLEX_NAME" /> instalado. + +Se a política for ativada, as imagens da <ph name="ARC_VM" /> serão pré-carregadas no <ph name="PRODUCT_OS_FLEX_NAME" /> separadamente. + +Se ela for desativada ou deixada sem definição, as imagens da <ph name="ARC_VM" /> não serão pré-carregadas no <ph name="PRODUCT_OS_FLEX_NAME" /> separadamente. + +Se uma imagem já tiver sido baixada e a política for atualizada posteriormente, essa imagem só será removida depois que o usuário sair ou reiniciar o dispositivo. + +Esta política só controla a <ph name="ARC_VM" /> no <ph name="PRODUCT_OS_FLEX_NAME" />. No <ph name="PRODUCT_NAME" />, consulte a política <ph name="ARC_ENABLED_POLICY_NAME" /> para mais detalhes.</translation> <translation id="8903283771634816230">Se a política for definida como "Ativada", o <ph name="PRODUCT_NAME" /> usará impressão padrão do SO como o destino padrão para a visualização de impressão. Se a política for definida como "Desativada" ou deixada sem definição, o <ph name="PRODUCT_NAME" /> usará a impressora usada mais recentemente como o destino padrão para a visualização de impressão.</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 4eb64c4..3d186d6 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -8925,7 +8925,7 @@ Trường hợp ngoại lệ: Thông tin TPM do <ph name="REPORT_DEVICE_HARDWARE_STATUS" /> kiểm soát trong M95 trở xuống.</translation> <translation id="739556497251174388">Cho phép sử dụng lại thông tin đăng nhập <ph name="PRODUCT_OS_NAME" /> để xác thực mạng</translation> <translation id="7395790871181951311">Không cho phép Ứng dụng tách biệt kết nối với Thẻ thông minh</translation> -<translation id="7400208209734208176">Mở đường liên kết trong trình duyệt Chrome theo mặc định</translation> +<translation id="7400208209734208176">Mở đường liên kết bằng trình duyệt Chrome theo mặc định</translation> <translation id="7402257017733669351">Ngăn quy trình của trình duyệt tạo mã động</translation> <translation id="7406039009275722824">Việc tắt <ph name="CHROME_SYNC_NAME" /> sẽ khiến tính năng Sao lưu và khôi phục trên Android hoạt động không bình thường.</translation> <translation id="7406276857470642718">Kiểm soát các chế độ cài đặt của người dùng được xác thực qua SAML bằng IdP bên ngoài</translation>
diff --git a/components/privacy_sandbox/privacy_sandbox_features.cc b/components/privacy_sandbox/privacy_sandbox_features.cc index 485f52f..0cf8826 100644 --- a/components/privacy_sandbox/privacy_sandbox_features.cc +++ b/components/privacy_sandbox/privacy_sandbox_features.cc
@@ -283,4 +283,7 @@ "PrivacySandboxAllowPromptForBlocked3PCookies", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kPrivacySandboxEqualizedPromptButtons, + "PrivacySandboxEqualizedPromptButtons", + base::FEATURE_DISABLED_BY_DEFAULT); } // namespace privacy_sandbox
diff --git a/components/privacy_sandbox/privacy_sandbox_features.h b/components/privacy_sandbox/privacy_sandbox_features.h index 1c8e077..d4ee451 100644 --- a/components/privacy_sandbox/privacy_sandbox_features.h +++ b/components/privacy_sandbox/privacy_sandbox_features.h
@@ -316,6 +316,10 @@ COMPONENT_EXPORT(PRIVACY_SANDBOX_FEATURES) BASE_DECLARE_FEATURE(kPrivacySandboxAllowPromptForBlocked3PCookies); +// If true, the Privacy Sandbox prompt will show dismissal buttons with +// equalized styling. +COMPONENT_EXPORT(PRIVACY_SANDBOX_FEATURES) +BASE_DECLARE_FEATURE(kPrivacySandboxEqualizedPromptButtons); } // namespace privacy_sandbox #endif // COMPONENTS_PRIVACY_SANDBOX_PRIVACY_SANDBOX_FEATURES_H_
diff --git a/components/privacy_sandbox/privacy_sandbox_notice_storage.cc b/components/privacy_sandbox/privacy_sandbox_notice_storage.cc index 549c0b7..7f690d1 100644 --- a/components/privacy_sandbox/privacy_sandbox_notice_storage.cc +++ b/components/privacy_sandbox/privacy_sandbox_notice_storage.cc
@@ -133,6 +133,7 @@ } else { // Notice has been shown, action handling below. switch (notice_data->notice_action_taken) { case NoticeActionTaken::kNotSet: + case NoticeActionTaken::kLearnMore: startup_state = NoticeStartupState::kPromptWaiting; break; case NoticeActionTaken::kOptIn: @@ -153,7 +154,6 @@ case NoticeActionTaken::kAck: case NoticeActionTaken::kClosed: case NoticeActionTaken::kSettings: - case NoticeActionTaken::kLearnMore: startup_state = NoticeStartupState::kFlowCompleted; break; }
diff --git a/components/resources/BUILD.gn b/components/resources/BUILD.gn index 99eb89c..2529aa7 100644 --- a/components/resources/BUILD.gn +++ b/components/resources/BUILD.gn
@@ -35,6 +35,7 @@ "../crash/core/browser/resources:resources", "../flags_ui/resources:resources", "../signin/core/browser/resources", + "../user_actions_ui/resources:resources", "../version_ui/resources:resources", ] }
diff --git a/components/resources/dev_ui_components_resources.grd b/components/resources/dev_ui_components_resources.grd index c41207ad..02d133f 100644 --- a/components/resources/dev_ui_components_resources.grd +++ b/components/resources/dev_ui_components_resources.grd
@@ -21,7 +21,6 @@ <part file="local_state.grdp" /> <part file="net_log_resources.grdp" /> <part file="security_interstitials_dev_ui_resources.grdp" /> - <part file="user_actions_ui_resources.grdp" /> </includes> </release> </grit>
diff --git a/components/resources/user_actions_ui_resources.grdp b/components/resources/user_actions_ui_resources.grdp deleted file mode 100644 index 94724ef..0000000 --- a/components/resources/user_actions_ui_resources.grdp +++ /dev/null
@@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<grit-part> - <include name="IDR_USER_ACTIONS_CSS" file="../user_actions_ui/resources/user_actions.css" type="BINDATA" /> - <include name="IDR_USER_ACTIONS_HTML" file="../user_actions_ui/resources/user_actions.html" type="BINDATA" /> - <include name="IDR_USER_ACTIONS_JS" file="../user_actions_ui/resources/user_actions.js" preprocess="true" type="BINDATA" /> -</grit-part> - -
diff --git a/components/safe_browsing/content/resources/real_time_url_checks_allowlist/real_time_url_allowlist.asciipb b/components/safe_browsing/content/resources/real_time_url_checks_allowlist/real_time_url_allowlist.asciipb index b712d0a..8307bef 100644 --- a/components/safe_browsing/content/resources/real_time_url_checks_allowlist/real_time_url_allowlist.asciipb +++ b/components/safe_browsing/content/resources/real_time_url_checks_allowlist/real_time_url_allowlist.asciipb
@@ -1,3 +1,3 @@ -version_id: 9 +version_id: 10 scheme_id: 0 -url_hashes: '\x00\x05\xc3t"\xde\xfcV\x9b\xbf\x839\x81\xb7G\xc8\x00\t\xb6\x80&\xf4(\\r<+_4\xe5S\xa0\x00\x0c\xa4\x11Nt\xed\x84\x99*HO5\x88\xcf*\x00G|j\xd5\xb1\x9e\n\xd1_\x01\\\xe4\xbb\xd8\xf8\x00Z\x8e\xdaD\x86\x8d&\xf4\xab\xbf\xaa\xb7\xf6}u\x00g\xc7x\x17\xde\xc1LQ\x87\xa3\xb6\xb0@@\xde\x00\x88\xc6\xecq\x88\xf3*\xb0\xac\xf6`@\xc4\x81\x19\x01\x01\xa5#/q\x8f`\x1dI\xd4u\x08C#f\x01\x1b\x97\xdd\x04\x96\x1c\xdb\xf8\x82\x9f\xd1F\'\xf8\xb1\x011u\xd0q\x97\xb3)\xcas\\`\xad\x80\xaf\xc4\x01K\x02\xdd>\x81!\x97\xa8e\x1dm_\x7f\xda\xf4\x01rr\x0e@\x8e\x9aw\x06\xc9\x81F\xf7\x06\x82\xe5\x01v\x11\x0f\xd0\xfc\x93\xb6\xe3\xba\x08a\xf8\x0f\x08X\x01\x8e\xc4|=\xf5\xee\'\xc0\x96\x18\xc7}\xc1\xe9\x92\x01\xa8^\x7f#\xeb"\x02\xd0\xc3\x08|\'+\xe6\xd3\x01\xd6\xea\xdd|-\xf6\x9a}\xa6?\xd7\xd4X\xab\x97\x01\xea\x87\xc4\xa7N`\x00n \xb6\x16!\x85U\xe9\x01\xf6=\x9e\xa0\x85zio\x0bC\xb9-1\xaf\xc1\x02\x13\xfc\x17o\xaa9 \x9b\xda\\\'\x0c\xb3\x94\xfb\x02*\xe6\xe9z\x07s\x0b\x18\x15\x94\xa8h;`\xe3\x02J\xd6\x00@!t=\xf8\xdab\xc6\x8f\xf0Q\xf4\x02Sx\x1a\xb6W\x07\xf8\x8a\x87\xfe\xacv\xe4>7\x02\x9c\xeb\xfa\xc7\x94\x85y\x9b\xdd\xafd%\x93\x15\n\x02\xa1\x16@\xb4\xa0)\x81eC\xae(\xd5\xda\xe1q\x02\xee\xf2\xa5\xd4\x88\x16%,\xa6\x10\x9b\x1dYw\xec\x02\xf0]\x06\x0fC\x16!\xc7\x86\xa1?\x03Ob\xe2\x039\x91\x9bC\xa6\x8b\xa1\xb3\xf7\xf3r\xb3\'\x9c \x03:\x05!(\x84`\xbbtk\x9a\xe5TO(\xe9\x03I)\x11\xc0\x01v\xfe\x95Ox>\x12\xd3\x85\xdf\x03\x9e\x96\x15K\xf4\x91\x9ai\x87\xd9\xa9\xcdVH\xce\x03\xad\x96\x9b\xcd\x12j\x16\x08\x85\xa1\xceX\xe5K\x92\x03\xc20\xa1\x9c\'\x90\xa0Pi)W\xaaa\x84e\x03\xc9\xf7\xde\x97\x87\xdaR\x17\x89\xc3\xd2\x86\x8du\x99\x03\xd3\x8dVl\xee\x17=\xb6\x9e]P\xbde\xbb\xce\x03\xeb+\xb2\xbc<\xc6(\xe36\xbd\xcfFI\xbb\x1f\x04\tr\x02\xa0`\xd1\x8b\x18/\xda\xafE\xdbk\x14\x04\x0b\xd8-\xd7|\x1e\x06\xff\xd5\xa9\x06I\x13\x935\x04\x1f\xd7`\xb9I\x17\x99\x8ff\xf6\x01\x86\xd9\xd6\xcb\x04*F\x0b\xdcS\xc0\xc1\x05\xc0\xd1]\xb2m1a\x04/\xde\xe6w!\xcd\xd0\xfamk\xad\xe9\x1f\xee\xf3\x04BuI\x9d\xe5\x80\x83\xdeF@\x10J@\xff]\x04e\x95\x8d4\xb4\x16\xc9fs\xec\xdahD\x8b.\x04\xdcb\x8acQ\xeaiJ]\x01\x12\x14\xc0\xe4\xbe\x04\xff\xa7g\xe8\x02\x0f\xc0\xa5\x0bO\xb7\xdb\x02W\xd1\x05!\x1c\x13\x17\xa97O{\x11\x12\x10\x98\xa4^\n\x05)p0\xf4\x17\x92\xc7mX\x88\x92\xa0\xdc\xb6\xd9\x050\x93\xde\x97r\x7f\x19d6Q\xcf\r\xd7E\xe5\x05\x89\\\xffj\xf9\xc1\xa2\xc5\x845x\x07\x02zw\x05\xcd\xe0\xc3P\xf4\x9f*\x97\x92\xfc\xb2g\x1f}\x8f\x06n\x83\xa3tpKq\xec\xa4\xf6N\xb1\xd8\xb4\x9d\x06\xc1\x88\xf0\'\xca\xac\xc8\x04\x81\x90\xe5`\x9b\xc0\xd9\x06\xd0y\xada\x9f\xb1\xae1\xdd1\xc7\x91\x1d\x88u\x06\xd5P$\x85\xd6\xcf\xec\xc5Y\xc7\x99jShV\x07\x00\xc0\x15&.\x89(\x02\x9c\x884\xebp\xd1q\x076\xb9\xa5w@\x1fV\xfc\xffp>\xc4\xdd\x1fS\x07GB\xe9.\x0f6i\\\xb4N\xcf\xc1=\xf5\xbd\x07RU\xf9\x13\x17J#r\x10\xec\xfeU4Z,\x07g;\x8a\x99\xd1\x8a`\xc7`,\xddf\xdb\xde\xc4\x07q_=\x9e4\xafTDI2\x17i\x11Mx\x07|\x18(\x06\xe1R\x18\x02\x0f\x9cX\xb2\t\x0c\xe3\x07}\xa0z\x1f\x9d\xbc\xf1\xceB\xdc\xec\xcd)\xc3\x80\x07\x89\xcb\xc6\x92\x8f\xeeK}O2\xae\xafF\xf1$\x07\xa2|\xdb\x8f$9\xb6\xca\xef\xa1^vl5\x87\x08\x07\x84\x81U\xb3\xec\xb0B\x15\xb7\xa0[\x17\xda\x11\x08\n\xd8\x11e$\x8ba\xd9j\x984\xa9\x0ey"\x084.\xa2\x18r\xf2\x04\xeb\xd1\x83\x99Q\xb6\xc1j\x08P&B\xe6\xf4\x8a\x91\x16\x16q\xef\xbf\xbdA\xf5\x08\x9f\x05\xb9\xe9\x92\x9bSV\xc1\xf8\x13\xc4\x88\xa2K\x08\xc2\xb6\x1f\xc4\xeeCN7\xcd2\x17\xa6\xc0f\xad\t\x1c\x82qY\x972o\xed\x15\xfe\xf6Tt\xc6&\t-7\xda\xfb\x8b?\xc2\xf2S1\xd1\x11\\KD\teC~a\x94$\xd3\xdfJ=C\xb2\xed\xa1}\ti\xa4\xf3{Nq\xba\x88\xd3\xc8\x8dg\x98{\xde\t\xa0\xa9)\xaf}\xcf!0\xd6AO\x033)\x8d\t\xe7\xbfOTK\x10\xfe\xbb\xa7%\xd5\x1fS\xbe\xda\n8\xb6\xad\xc3\xd5\xbf?\xdc\x16>\xfe9F\xd8^\n:\xf6M\x07|*l%&\xe5I\x11\x8c;%\nb\xf4g=\x92\xa1p\xe1n\xc7\x8cz\x91\x86q\n\x89\\\xfe\x0f\xf6\\\xec\xbd\xc5O\xbb$b!\xd8\n\xa9\xc4\xba=\x99\xf4\xfc{5S\xd4k\xb9wg\n\xb4G`\x8e\xe2k\x87\xeb+z\xb6\xb2.\x0fw\n\xe1\xb4Zx\xf4\x0e\x8b~\x89(D\xe5\x81\xc8\x80\n\xf3\xba\x94<\xc1\xbe[\xa9\x9d\x98\x05Q\xd4\x1e\xec\x0b\x0e\xe7\x0b\xdds\x1ci\xd5j\xe9\xe10\x86\x1cU\x0b.\xa5\xed\x18\xb5\xd6\xa4-NTG\xc2\x08\xc9\xab\x0bD\xce\x15\xc4\x0b\x18j\n\xd5kfL\xa5\xaec\x0bR\xad\xbf\xd3\x9f\xd6\x12}\x92M\xce\x84\x9f\x94T\x0bV\xd8agHIT\xa9\xb6\xed\x03]\x1a\x1e\xeb\x0b\x91\x9em\xe3\x1c$]\xb8\xadx|t\xd2\xc8\x02\x0b\x91\xa3\xbd\x96\xa5uY\x9b\xe4\xc7Iu\xd4&\x7f\x0b\x9d\x14\xc7\xd6t0>;:|:\xbeL\x9f\xe2\x0b\xd3\xa1zE!U\x83B]u\x99\x94V\x13\xda\x0b\xd9\x8a\xf7w\x82T\xaf\x9f\r\x95\xe0\xf9\x0c$\x02\x0c\x07\xe5n\xd2I/!/I\xc5\t\x0f\x13E-\x0c\x81\x87\x8fOP\xe6\xd5,MKsBM_\xba\x0c\x88\x86\x80\x01\n2 Q\xce\xa0\x996\xddm\x9c\x0c\x96f\xfeB\xbb\x03\xe8\x90f\xa2N\xfa\xa3\x1a\x80\x0c\xc40`g\xee\xbe\x84\x81\xdaZJ\xde5P\xa6\x0c\xd2\xc1\x9d&A\x81\x17\tL!\xee\xfb\x02,0\x0c\xd8v\x93{^\xde\n\x1b\xb72\xf9Q\x9f\xfbF\r\x18\xfb\xa4\xa52Y3\x07>;\n\xf7*\xe8$\r!\xff\x0c\x10\xe4\xeaEOq\x86^G\xd2E\x1a\r(F\xe5}r]\xad\xdc\xa7\xa1\x933n\x811\r:T\x8b\xa0O\xd9\xc7\xf3\xd1\xf3\xda4T\x84Q\rM\xcd\xc5|\xb9\x12\xe7\\\x90\xd7\xa9\x96\x1a\xee\xc1\rS\xc8\xb9\xea\x1d\xac\x92U"G\xa7\xfe_\xee\x98\rt#\x92\x12R\x1eHD\xa5\x87\xbf\x90\xb6\xa9\x1e\r\x82\xe3\xe7s<\xc1\x9d\x0c\xa2\xea\xd7\\\x0b%\xa4\r\xd5w\xc2\xb8\x82$:\xcd\xaa8;\x1a\xf4J\xa9\r\xe3|\xfc\x95\xa8\x10\x93A\x92,a\xa3\x95\x0cp\x0e\x04E\xda\x0f\xe5&ph\nJ\x9cs8@\xff\x0e\x15\xc5\x97\x99\x01e\xf4K\x13\x8f\x08\t\x0f\xe4\xa7\x0e/-qVM\xe0\xeeRmC@Ys]7\x0er\xc8z\xb9\xc3|\xc9\xf1\xd1\xdb/5\xac\x98\xca\x0es\x97"HE>@\xea\x10\x96Z#\xfd\x0b\xda\x0e~\x91\xb2g\xed\xb5\xdaq)\xe2E\x12\xfe\xfb\xd8\x0e\x84\xe4\xc7\x1f\xcb\x9e\x8c<\x0c\x10WPo\xabk\x0e\xc8\xba\x89\x91o\x0e\xf60A(\xd3\x1a\x83\x0fJ\x0e\xd4\x0e\xda\xb6\xd9O\x99\xc5\xe1\x8f\x01\xdc\x03\t\x84\x0e\xde\x05\xba\xdf\r]t\xd2\xe239\xf9\x06\x9e\xe6\x0e\xf1\x1fK\xd2;\xc3&\x9b\x02\xc4] \xad\xafk\x0f\x01\x83=\x0f\x01\xb1\xf4\xcf\xc5\x80\x00\xba\xe2\x0bw\x0f\x13\x02\xe4\xf8\x18\xe8=\x1c\x17\xe8\x9d{\x9d-\r\x0f\'\xc1\xef4j\x0c\x1a\xe2]\xd3\xe4L\xd1#9\x0fU\x81\x18 \x0c\xc2\x02#\xcaY\x8e\xc9\xbf\xd4|\x0f\x93\xbc\x8e\xe2\x12\x9fV\xef.Z\xe4N\x00k?\x0f\xd7\xbc\x13Td\xd3\x18\xfahF(D5\xc0\x88\x0f\xdf\r\xc0\xeb\xf3\xe6\xe5.|\xf7\x1calB\xe1\x0f\xf8\x92\x8846@{\xdc\xce\x03!Vp\\\x1d\x10*\xb2n\xdd\x9f\xcd\x82\x81\x04\x19\x04\xff\xe0\x9f\xf9\x1072\xf2\xe1\x9d \xf25\xa5\x8b\xd1y_\\\x01\x10?o \x81YF\x8d\\%\xb0sCq\xac\x1d\x10R\x9f\xd9\xab\xf1\'\x1d\xe5\xa72\xe9\x91\x95m\xee\x10TX\x9a\xc0\xd11\xc5\x9bW\xac\xfc\xcb\x9d\xd5\xa7\x10\x80]W\xeb\x0eP9_\xfe\tKV\xe5v\xf6\x10\xa2\x1b\xac\n\xe0\xf6\xc6$\x94\xff&^*\x11\xa0\x10\xcf\xa6\xe7\xd5\x95\xfe%\x05\xa5zeRK\x0c\xb8\x10\xd3\xca\x81K\x9c\xec\\\xf0hSgBz\x94\xb2\x10\xde\x1dJ\x01\xf5\x0c\x1e\xbe\x8b\xcb\xc9\xa1g{\x9c\x10\xef\xa1C\x13z\xe8\r\x04\xcd50\rE&l\x10\xf4:\xf53:\x81z,\xe5 z\x12\xf7\x9e\x90\x11\x16\xccb\xcc\xe3\xe6i\xe4"\x17\x89\xfbVD\t\x11\x17\xd6-\xc5\xb6\x85\'\xec\x06[nI\xa5c6\x11B)R\xa8\x06\xacU[{\xbc\xd5I\xe2H\xec\x11D\xab\xa9T\xec\x13i\xd3T\xa1s\xd7\x97\xe1\xe6\x11PP\xec3l>J\xca\xf62\t\xbf\xc2^s\x11Z\x8d\xc2\x0b\xd4\x94\xfav\xd4(5\x81;\xbd\xa3\x11\xa7-8\x18\x80\xc9}\x97[1\x18\n\x9d\x84P\x12\x0f\xdf\xd3z\xc3\x8a\x0e,\xad\xac \x9b[di\x12\x10\xdd\xd4C}\x03\x15\xd2\xaf:%Q:\xea\xea\x12\x1e\x86\xe1=J*\xb9\x9a[\xee\xc9\xcf\x9evh\x12=\xa7\x8c\xf72)r\xc4\x82\x90\r\xf6\xfb\xc8\x99\x12B&\x1c\xd1\x9a\xa9Tc0\xa6\x964\xe7\xe7\xdd\x12\\l\xd1\x1e3\xc1\x19&/GP/d\xb9\xf7\x12\x9e\xc6,r\x96m\xcay~\xc8\xd9\xad)n\x9a\x12\xa0\xf0&\x83\xfb\xc0\xdf\xaa\x15\xec=\xc6\xd4\x9b\x13\x12\xaf\x1c\xcf\xf8E\xc0\xe7\xf0v\xc0Qj\xa6\x19\xdf\x12\xb1q\x9c\xc9\x99\xbe\x9d2\x8c\x01\x19&\xfac;\x12\xb9~\x98\xa0g)g\x152c\x1cb\x8b\xf5r\x12\xbf\xef\xb6\xfb5\xe5\xce\x8b\xafA\xcf\xb9\x82~\x1a\x12\xedS\xa9o\x0e\xaa+\xb1\x9a\xca\x9aIfz\xf3\x13\x07\xd0\x03\xd1\x95\x1b\x8a?\xe0x\x14\xf74\xe6\xd3\x13\n\xb1+\xf7\x7f$\xe5\xdf\x08\\`\x96\x18\xea\x02\x13L\xddd\x1f\xa2\xac\xde\xf9&\xce\xf3\xed\xe0K\x1a\x13g\x1f\xe2\x1c\xeb3\x8e\xbd\xb9\xc1\x0c\xa4\xa8\xf6s\x13z\x15\xc5\x907\x18\xd9\x7f\xf9\xeb\x92~i9i\x13\x80\x06\x8dk&\xf9\xdf\x963\xd7fw@k\xf3\x13\xa4\xbd\x1a)\x81\x9d\x19\xe9\xf3\\0\x8d\xa3\x8d\xf1\x13\xd1\xa3]\x90g\xf3t\xcf\x88~\xb6\xadn\xb7"\x13\xff*\xc9nX\xdd9\x90-+\x95\x84\xa8p\xaa\x14\x1f\xac\xec\xba#\xdb\xcd\xca\xa4\xdc\xf6\xcfd\xd89\x14:\xa9\xd9A\x06$\xfb\x80\xe7\x87^4\x02\xc2\x93\x14K\x8c*\xed\xaf\x9ae\x97\xe6W\xf2\rv+<\x14Wm\xeb\xb3\xf6\x92\xd0ip\x96\x12=\x84\x8d\x0f\x14v2\x0b2\x1bu\x9c X\x0c\x0fx\xd8\x91\xcc\x14\x8b\xaa\xf5\xa7\xe6\xadj Z\xf6\xcc\xf0]\x00&\x14\xae;\xfeb\xbc\xa2\x08\xca\x05\xb5[\xca\x06\x91\x06\x14\xaf\x14\xf0w\xc26t\xa8T\xc9z$\xdb\xde\xc5\x14\xb1\x195\xe3:\x81*\xb2w\xb3\x01k\xec\xec\xda\x14\xc6\x06\xc4\x19\xf3c\x0b1\xa0\x11\x1e\xbd\x9d\xcf\xdf\x14\xd29\xed\xb6\xfe2\x9e\xfd\x1b\x80\xad\x9e\t\xae\x1e\x14\xd5\xd5\x8c\xe6\xe7\xfdo\xf4*\xdd\r\xddY\xb3\x17\x14\xff,\xdc;I}\xd7d\x9e\xa6.X/\x83\xef\x15\x14\xe2\xc7\xa2z\xbeGmh\xe3\x97/\xe4\xcd\x1f\x15\x18[\xb5z\xeaW\xb3\xce\x0b\n\xfe\x82.\xf8j\x15\x18\x94\x04\x11yY#\x81]\xc4\x96\x8e\x01\x17t\x15s\xb9\xeeh0\x97\x90!GI#\x90\x13M\xa8\x15\xb7\xeaF\x8d\xea\xb1\xf9\x99\xde"B\xd9\xed\x11\x9b\x16\x08Q\xc1h\rB\xcc\xd7q\xac\xbf\x0c\x94\xbb"\x16\x1a\xd8A\xe0RU\xbc\xdc\xe6{\r\xa7\x18 _\x16St\xe7i\xfd\x9e\x96\xf75\x13\x95\x92\xe3B\xd5\x16m\xaf\x9f\x95&\xd2P\xa0\xdb!\xcdl_u\xb4\x16\x7f\xf0[\x10\xd2;\xb5>D\x92Mw\x82O\xc1\x16\x83\x87\x93&\x8a\x08\x9c\xb1z\'\x85n\xd6A\x13\x16\xe0\xf9\x17-\t\xf5\xfb\xe9\x92\xc5\xad\xbeb\x05S\x17\x05\xc1}\xeb\xe9:\x15kd\xebtl\xa9z\xd7\x17\x14\xb1\xfc\x9a\x9c\xdf^\xf4\xb6T?\xa5M ]\x17\x17}\x12\x93\x10\x1f\xf2\xf7z\xb3\x13\xe2\xcdt\xe2\x17!U8\x062\x85;\x0bq\x7f&=.\ra\x17<\x95\x98D\x14j\x029\x98\xe2\xfe\x96\xc9Z\xf2\x17R7#\xe4\xa0\xd3X\xdd\xec7\x03r\x7f\x98\n\x17\x95y\xa9i\xc8\xfd\xa9[\xaa\xe7\xcb\x07d\xb9\x9d\x17\x98\x9bk\xcb\x0e\x1f\xf7N\xc6\xe8\x0f\xc8\x06\r\x17\x17\xb8#(3\x9b\x19\xe7\xa7\xebT\xe1\xf2\xda\xe2\xeb\x17\xc8iU\x1d\xa8\x8c\x95\xf8\xa9\x11\n\x02\x92\x17S\x18(\xe8\x1ep\x93K\x80\xfbM\x1dE\xfeg\x8f\xd1\x18\x92g`\x90p\xf0\x9b\r\xe0\xa8_%Q\xc7-\x18\xa55\n\xde\x95\nv\x9c\x1d?S\xba\x11\xf1D\x18\xe5\xbd\t\x0e\x04hj_\x03\x01\xcb\x82\x19\xff\xd9\x19\x1dM&\xeaC\xda\x84[Q\xd1;Q\xecce\x19P\xa0E2!_e\xe3MJ\xe6\xf9_"\x99\x19g\xbc\xfaK\xea\xf3\x0e\x8d\xb4\x86\xc5O\x1c\x10\x06\x19h_\xb2\x1a3\xac:\xc0-c7\xfaa\x872\x19\x81\xde\x0f\'_\xa9\xe0jI\x16\xcf\x86\xc6\xdf{\x19\xbd\xd8%\xa8*;\x13\x80\xd6\xf2:\xbd\xdb\xa5\xcf\x19\xcb \xe5*P[R\xae\xbb\xa55\xa5^\xa8\r\x19\xd3.\x82\xf9\xafu\xee~4h:\xd2\xa6T\xaa\x1a\x0e\x9c\xb9\xc5}v\n\xb7i\xe6PM\xa2\xdc\xd1\x1aS-\x11y*\xe3\xd8\xfe\xf4\x16x\xbb\x87\xdb\x94\x1a\x98`\x85\x1bc\xae5\x0c\xb6\x98\x1eN\xff\xefm\x1a\xce\x05\x19j\xdb\x9eg\xf30\x00[\xe9\xaa\xa1\x00\x1a\xcee\xf0Y\x00.[\xf9s\x96\xb5e\x82\xb0\xfd\x1a\xe0\x97S\xc7\xed*DUw%\x9b\x95,\x9f\xb8\x1a\xe0\xa1\xe5\xb19\x1f\x85\x9a\xf6\xf3#\x1e\xfaSR\x1a\xff\xf3\x00\x12\xf2\x0fEUt2M3}vc\x1b\x18\xb4B\x15\xc7\xf2\x9e\xe8Pg\xacK\x8eGz\x1b(\x94\xbc|h\x88\xce\x0fnr\x8f\xc7tE\xd8\x1bY_\xfd\xc9!1^\xe5H\x8e<\xbd\x0e\x80\xef\x1bd\xad\xba\x84\x15\xf5\xd3\x84\x8e\x98\x1f\x05\xee\xe5\xc5\x1b\x82s5\xa5^\xfb\x9f\xf3\x97\xecV_\xf5\x05i\x1b\xb3\x84\x8d\xaa\xe1\x8e\xea\x08-\x08X\xe9la\x00\x1b\xd8r\xa2]\xb8{\xfd\xf7\xf1-\x94\x96\xa2/\xc4\x1b\xda\x15+3\xeaI\xc8w\xe0\xc8\xc2jN\xbb\x17\x1b\xdf\x0bX\xf6r\x80K\xa0B\x9b8\x91\x88O\xf0\x1c\x13\x14\x97/%dD\x10Kql\x0f\xc1d\x9a\x1c,\x12\x15_Jg\x9b\xea@\x06\x03e\x16\xa3-\x1c=\x85n\xa5v?\x98\xa7\xfau\xb5I\xf0\x87\x16\x1cV~YMU\xa6`/\xcao-\xf0\xb7\'\x9c\x1c[\xe9\xd9\x97\xd4\x05\x9e\xfd\x97l71\xc35U\x1c\x84\xe3G\xe9\xf6<\x19M\xe8\xdd\xc1\xe3\x83\xbe\xbc\x1c\x8d\xe6\xcc\xb9\xf1\xf7\xb9\x1d\xd2\x92v\x14n\x07]\x1c\x9e#G\xca\xbcj\x9d\xcc\xf6m\xd8\xb4\xc0r\x8f\x1c\xb8\x1c\xad~\xcb\xeb\xa6\x81\xed#\'\x94\xaab\xc1\x1c\xc4x>\xe3>J5N\xda\xb07h\x0e\x0fj\x1c\xe9\xa8\xb7\x0e\xf1d\xddgz\x81/\x9a\x08\x83\xa6\x1d"5\xdd\xb7\xd8y\rv\xd8\xeb\xd0\xff\xca\xd6\xb5\x1d:\xad\x98kFP#\x83d\xb5x^\r=\x86\x1dAm\xae\xf69\xeb\xa5\x18\xd0|\xe4\x07\x9c\x12x\x1dX\xa7N\xf1A\x7f\n\xdb#y\\\x10\xb6\x16K\x1dY^t\xca\x81q\xf2\xf0\xe3@G\xa7\xce\xf9\x10\x1df)F\x16\x0e1\xcfPu\xccv\xf6\x16:\xf9\x1dt{\xab\xae\x19XQ\xf3Q\n\xab\xe3\xea\xdc\xd5\x1d\x98\x88.\xe1\x1f\x81\xc2\xb6/\xa7\xc5I%\xf6\xaf\x1d\xa9\xf8\xf8~v\xced\xe5\xc2\x11\xd1\xc3\x08w\x86\x1d\xf6\xeb;\x99\r\xbcc\x9fz\xc9\xe7|\xd1\xdb\x18\x1e\x1f\xfd\xf24\x13\xf4]\xb1\xc1\xa2\xab~f:)\x1e?C\xfc\xcd\xd4\xcf\x9cG\xc1\xfe\x19\x1f\x07\x18\xf3\x1ey*8\x99\xcez\xb4\xbb,\xbe\x1c\xb92w\xb9\x1e\x8f\xc6te\xa4\xf6C\x04\xa18\x83v\xb1\xebl\x1e\x95\x8d\xc6uQ\xcd\x9bf\xfcbv5R]:\x1e\xdf\xee\x7f\xc4\x12\xf0\x18h\x07\x8d!>tD\x1b\x1f\x0c\xa6\x01\x98\xeb\xa0\xa4\xebSk\xf8\xa1\x0f\xe4\x8c\x1fA\xacr\xa7\xb4\xe1\xbb-\x8c\x8dynKy1\x1fp\x82\x08\xad\xadYF\xd8(\xbcB\x9d\x03\x0c\x8d\x1f\x87\xf2\xcb\x9d\xc1\xf4(\xa9\xd3\x147\x8fFGz\x1f\x8cSR8HdA\xb4\xd5\xb0\x15\xcc\xa30\xe6\x1f\xad\tC\x80\xfd\x08p\xaev\xf3\xf6,\xe4\xc7\xaf\x1f\xb0W\xff\xc0\x03\xc5/U\xecV\x8bxz\xf0\xbf \x05\x9b\xf1~\x0f\xcf^\xc5\xe5\xf6|e}{\x8c \r\xacX\xc9\xcbN@A44\x0e\xf0\x9cah \x1b\xd6,B\x07\xbd8\xd0_\x803\xed\x18\xe4\x98 66\xcb\xf9w\xe1W\x9e\xcf\x1fN\xd9X/\x82 H\xfb\x05\x8d\xbd{\xa6h\xc1\xdb\x10\x1d\xe0n\xdb s-\xfdq+R\xf3z\x12Z1\xd23H\x10 |\x8a\x86\xaaG\xc2>\x86\x96M\xc2VWO\x84 \xaeT\x84T\x92]\x12\xaek\x1d\xefe8\xc6L \xae\xc9\x88\xdf\n,\x0c\xc1\xeap\x88|\x8b<\xbe \xbb\xe3\xe5k\xcfT\x01-\xd3\x99\x9fpe\xb0\x19 \xbc\xff\x98\xbd\xd0\x0c\xa7%\xa8\x87\xb0\x13#\xd4R \xbf\xe7\x8cv\xb65+|\xe4\xe6\x84\xd3@\xe7\xc6 \xe4\x00\xcbq\x85\xc9\x18\x88%\x1c=Q\x00\xac\xde!d\x85}NW6\xc4@\xdak\xd6{F\x82$!mz\xf5sFq\x05\\\xd0\xd0r\xd3\xb7\xa7\x86!\xc5{A\xfd|*_],\x9d\x06\x8d\xd7jN!\xd7Z\xf0\x84\xe6\x9e\x17\xae\xc6 N\x106\xda\xc9!\xdf\xd5\x93\xfdf\xd9g\xe2\xb3\xf7P\xdcu;\xc9!\xf0\x99\xe2\xb47\x96J\x7fn\x87\x9ac\x85\x07\xc6"\x05\xda\xee\xe6d\x16\x1ba\xcdk\x8e?\xa5\x9a\x86",\xdd\x06\x97\xf5\x10\x9b|\x95()h\xcbi\x7f"w\xb4Q\xcagH\xbd\xb8\x0e\x92\xb8\x03\x17.\xa8"\x94q\xacx[\xea\xef\xc9\x0e`BT\xc2|\xe9"\x9a\xd5\x97+\x9b\x90\xf4c7\xfb5uS~u"\xa5\xae\xfa]2\xdaC\x87os\xf5\x03\xbd\xfd\x07"\xbf\x0eV\xeaPt+S\xb2\x90\xaa\x1b\x02$N"\xf6P\x02}\xb8(\x81\xcb\x92\x83x\x1b\x0fI\x0c#\x1b\xfc\xf7\xf1=:!LG\n\xb0\x10\x01c\x8f#=\xb0\xbaN\x05\xde\xafj79\xf6\x98&(\n#m\xa19\x13\xa0M\xcaB\'-\x84_\xa6\x93W#o.\x04\xcc\x8e&\xec\xa0\xe2\xbf\'x\x07H\xb9#\x83\x8e\x1f\xcb\x1f\xc4d\xee\x05=\x1a\xa1\xf5\xd2\x03#\xc4 tF\xc2$&,\x8a\x92~\n\xd5\x97\x16#\xcb\xadA\x156O\x82\x9b\x001\xe7:\xa0\xb9C$! 9\xec^\xe8\xad\xd2\x8a>\x00\xc1~J\xb8$U\xa8(\xf0i\xe3X\xe7X}\xb6s&\x00\xf1$\xffA\xd9\xb1\x96\xc5\xf7\xfa\x14M\xde\xa7I\xecJ%2\xae\xa3\x19?\x0ff\xdcx\xf3?\x99\xab\x18J%zH\xf5\x9d\xd44\x1f\xa4\xe5\xbb=\xfc\xe3)\x99%\x7f\x8e\xdaD&\xc4\xb7\xdc\xefMc\xfeq>|%\x8d\xb5\xc6\xb5X*\\\x0b\xf6E\xdb\x12\xc4|j%\xb98\xc8jI\xae<\x04N-\xc5\x01\xf8n\x8e%\xc82\x05\x92\xc8PK\xa2\xe3)\x1e\xbf\xed`\x08%\xf4\xcax\xfc\x06;\xe2\xe8\x816\x8a\xf78*\xe9&\x80,U;\x0e\xcb\x1fV\xe7\x97h\x81K\xc9A&\xd9\xb2\x88\xe6\x84\x17\xbd\xefQ\xe8j\xcd<\x89\xd0&\xde\xd7\xf5\x967\xb3\xd3\xd6@J\x92\xc1\x8c\xa6\xbe\'\x02\x9c\xf1\x14F\xb4\xc1H\x8f}\xd2\xb7\xcd\x01A\'.\xf2\x92c\xd8q\xaa\xc4\x16\x97\x07b\x88Q\xcc\'S\x1f\x81\xbf\xbb\xcb\x9b\x19j"D"\xa3]\xd9\'mpA\xdd\x1a\xbc{\xa2\x12u\x0f\x87\x1a\xfb\x9c\'\x81\x9c\x97\x1b\x06`rW\xd3\x19JB\xf5\x1b\xe7\'\xae\x83\xc4\xeb\xa1\xc0\xc4\x14\xe2/D\n\x01\x05\xb0\'\xbe\xb40\x8c\x00\x07?\x9a\xdbnO4\xca\xe3\x95\'\xef\xa5L\xc0M\x9f\x85\xba\xaa\xf6h\x8e\x83\x08{(\x00GJ\xf2\x83\xcf\x8c\x02~xV\x16\x9c\t\xd4(\n\x03\xdc%\xfb\xac\xec\xfa~\xbd@\xad$\x96W(,\xb8\xfe\x04\xbf\xe28\x1d\xad\xc0\x88\xa9w\x14\xf0(\xa68\xfd\x7f\xd6\xfc\\\xa2\xce"r\xf9:03(\xb1m"\x9e\x1d3\xe4\x90\x18Au\x11\xe5m\xb3(\xc4IGm\x01?+\r\x01z\x88p4B\x1d(\xc5\xbc\x95Z\xa0\x05o\xe7\x0e\xe5\xb4\xf9\xb5\x80@(\xca\xdal\xdd\xb236\x96\x8a*\xf9\x1d\xbc\xdb\xf2(\xd6\x14KR%\xf0\xef\x8d(\xf7>Ok\xa4\xe9(\xf8\xcc.\x1f\xea\x8b\x93\xe2V\x1e6U\xb1\xb7Q)\x07Vv*\x13\x82i\xc7(p\xa9\xae3u\x86)\x12\xec\x0b\x17\x91B\xf0\x94\xcc\xa0$0\x039\xb2)\x14\xff;a\xe3G\xf0\xe6(1\xbd\xf4\x90\x1fK)\x15\x88\xb3\x97o\x97d\x01@C\n\xac\xe5\xb7\xbf)\'\xb3\x9bI\xda-B\xceO\x86\x9b\xfa6\x9b\x9f).\xa7\x93\x0c\x16\x8c\x80\xa9XB\xc2\x1c\x19\xb8\xa6)9\xed\xd3j\x03Q\xbf\\\xcc\x00\xbd\x93\x07Y\x04)vV\xe9\xa5\xbf\xcc\xd7\x8a&<\x1fFu\x88\xb5)w\x10\xbd\x00\xd7\x10\x14%\xa9\xa3\x87\xdc\xd6\xe3\x0e)\xd0B\xf9\xf6[\xbd\x9a9Z\x0e\xef \x98\xf3\xea)\xd0r\xaf\x83|\xfc\xc7Mp\xf2s;\x02\xcd\xe6)\xfcE~n94\xedd/\xa6t\x9d3\xd3`*\x00\x8d\x85\xe7\xdb\xc6\xdd$\xc9\x1d\xd9%\xd0\x9c\x92*!\x9f\x98\xe1\x10LId_\x84/\xfes\xc6\xcd*|\x11\x07F\xca\x16p\x13\x8c\xa0\xdc\xe8\x94\x96B*\x9b\xe1\xe3qK.\x84U\xadVkj\x0c\xe6)*\xe6*1Z_\xbf\x9d9\x7f\xb2\x13\xad\xdd\xe9\x96*\xf2R\x0c\xff\xf4!\xafB(a\x8c\x07(b +\x0c\n{\'\x02LM\x00\xec\xa9\'2D\xc1\x00+!U\xb3:\n\xc2\x80\x0baP\x9eR\x10\xf3\x13+qS\xee\x81\xc7\x86\x99SA\x99\xe1%\x92*\xca+u\xd4 ]\xa9\xe4\x9bwd\xdb\x08\x0bJ\xaa\x11+\xb8m0\x8f\xb5\x10\xed\xa3\xf5\x0ex\x1b\x89?\xa1+\xcbw\xce\r\x95\x03\x89\xeef\x1d\xf9\x91\xec\xfef,K\xcc\x8c\xcf4\x8c2\x88\xb0\xb7\xcf\xe6\xd0\xeb\x97,NFQ\x01\xbe1\x12-\xf1\xfb\xe8\xb7H20,y$/\t4\xd3o\x1dD\xfaBH@[P,\xcb\x94\xc6\xd3\xd2%\xdbq\x81\xe2\x0b\xf7&!\xc5,\xee\n\xfe\xe2]\n\xbb\xc0ywbK=g&,\xff\x8a\xef\xa9nl2\x9dt\x00\xdf\x08\xc4\xc7\xe0-NH\x12{\x1e\x9b\xe2bc.\xfb\x97U\xeb\x9c-S\xf9\x19\xc8k}\x87\xeeQ\xbd<\xf4\xac\x04o-\x892\xfcvu\xbf#d\x9d\xd2\x80q\x0f\xff\xb1-\x93m\x16@\xd3\xb14\x9fV-|\xc5ky#-\xaa\xf6@6N/\xd0\xf3\xf7\xc0\xeb8\x8cfr-\xad\x10]\x02\xcak\x93f\xf2\xfe\xf5\x11\x03\x0c\xa3-\xfa\x9f\xf0\xd9\xd5\xc9%}G0;\x89q\xfcw.AB\xaaDx\xc8\xd0\xad\x87\xfd\x08\x98\xf8\xb9\xd5.LC\xc9F\x84\xae@5\xfaq5\xc1\x0ei\x07.\x91\xaeq2\x13\x8c\x08\xc2\xc6\\\xcc\xdf\xa2\xd3l.\x96M\xa1\xdb\xef\n\xcc\xc7\xeb\x8b\xa0Lg8\xd9.\xb7\xf3]\xe3y\xb3v|\x18N\xdf\xee\x91|h.\xbb4=\xe0\xfa\xa5\xa6kX_\xc6\xda\xe9{1.\xc6\x04\xcb$\x1a\xf3*\xf7\xe2\xb0\xd2j\xbb\xfc\x7f.\xc8\xbc\x00\xd5=\x1a\x04X\xf6@\t\xa7Z\xf0\xef.\xf3\x99\xa8\xcfT\xdd\xc2\xbdWZ\xf4\xe7\xfe%\xaf/?\x80\x9c+,b\xef5\x0f\x06\xfb\x91\x19\xf2\xbe/x\x9d\xc2\r\xc2N\'\x06V\xd6\xf9\x8f)*,/\x89\rC\xe0\xa6\x19\xb0"\xd1\xe2\xe8S\xf9\x00\xf7/\x8a\xee\x98\x8e\xbcI\xc3\xf7\xeb\xbe\xfd\x93\xd5\x8d\xf3/\x95\x96&\x07\x08\xdc\xec\xc2*\xa3\x08\x85x\xa6\xae/\xf2\xfa\x83\xe5\xe4\t\xf0\xe9`\xe1dR\x85G\xeb0\x06p\xc0u\xf6\xb0\x98\x9f\xa3(\xf0\xea%\xa5\xb30QT\x8dfw\x1b\xc0!_<\xdfo\x9a\x1b\xcc0kV\xa0\xf1\xaa\xb3qi\xc9\xe2m1\x1d\xdc\xfd0t\xe0!\x03\xad%9\x8bj\x80m:\xa7\xaa>0\x91\xe1\n\x84\xe8}!\xd8\xff\xf5\xd9u\xf3\x95\xef0\x9b\xed\xe0\x95u\x1au\xa4Z\x12\xf0\xdeb\xe0v1\x1b\x95\xa2\xe7\xc5\xb2\xdf5\x88tnII\x10\x8e12\xf4x\x99R\x8d\x80t@E\xca\xa3\x08\xd8j1:\x96,\xe1$\x16\xd9L\x89G\xe6\xe8P\xe8\xb31b\xff\xe6\x87\xf2\xd8g\x8f\x93#\xe8\xa0\x86\x83\xc01w\xd7:\xaf\x99\x9am\xb5mi\xf5\xde\x0b\xee-1\xa6\xa4,S+\x80\xe4|\xfb>\xa23)>\xf71\xd5\xd9\xb8RQ?5\x0c>h\xd6\xe6q\x8e\xca1\xe3\\C\xfc\xf1\xc7\x922\xe8\x8e\x86&\xf1a(1\xfd\x04\r-E702PV4\xfdJ\xdb\x0c2 \xa0]\xba\xfa\xdc)\xf2>\x03PdnRr2+\xf8\xb0\xae;*\xc9~3k\x8a\xb9\xff\xabe2-}\xa6\x9a\x01\xa1^\xc1\xaa\xa8?\x82\xdcus2e\xaez\xb8\xba\x10U!\xd8\x81\xb3u\xf6<22\x88YW\xab\xd5\x84\xfe\xff\xdce\xf62\xc7\x8b\x9a2\x96\xf3\xfb\x1eTV\xd5\x1c\xb7\xf7\x8do;z\xc03\x0f\x11r\xdb\x92d\xacE\x00\xafi\x13Z\x1f 3\x11"\xd9X\xa3\xc5~\xb0;\x9d\x88\xc2\xf9{\xf43\xaa\xc5\x17j\xf1\xd1\xb3\xc9\xbb1!c\x8d\x87/3\xf9\xc7\x1f\xfd\x17\x95\n\x05\xc7\xe8+}]&A45\xec\xa8\x0f|\xab\xcd\x05Q6`\xc43\xf4\x1a4\xa5\xdd8m\x19gaB\x16\xb9\xc8\xf8\xca_\t4\xbe\xd1\xe8\xae\xb1\x872\xc9N\n\xd6\xe3\x8bv\x105\x1a\xf8\xacA&\xd4z\x9e\xc1\xe9Y^\xb3\xe4\xd15[M\x07\x02\xac\xe2\t.!\xd6\xccR#+\x145a\xc8\xceo\xb1\xf3\x7f\xda%\xd4\xbc\x06\x98\x9c\xcf5e\xfd\x98\xdc\xf2\x92\xaf\xb1j\x86\xba\xf5L\x84\xc85\x8d\xb08\x8f)\xbe\xfb\x97\xb9\'js{\x8ab5\x96lf\xc3\x03g\xd5\xd1m<\xb2\xa4\xb4b\x865\x97\x069cO\xfe)K$DZ\')\xf9P5\xb3\x1fk\xfb\x10\x94\xb5C\xaa\xc7@\x1f\xb7\x0105\xbe\xe1\x0c\xd3\xa0\xb7\x19\x1c\xae\x97Pk\xd5uV5\xceq?r\x19\x83\x14b\xef\xab\xdcs\xb4\xda\x965\xe02f\x0e\xdb\x92\x1c\x0c\x0c\xe5\x9b\xfa(\x9d\xc55\xfc\xdb\xeeC\xcd]p\xa2\x1e\xae\x9c\x18\x11\x15\xcd6Oj\xe5c| \x9d\x8bM\x83+\xe6\xea\x1e&6a\xa3\x14\x8b\xb4|\xa6\x12\xd4\xfc\xc6%\xc2\xd4:6f=,\xce\r\xda~\xad\xa0`\xe8\x99?\xe0\x856\x8f<XB\xb4m\xb7\xbe\x87;\xc1\x88\x9c\xa7U6\xa4\xa2\x17\xe0\x15\x98\xe9X\x9b7\x0f>4\xd2\x166\xb9\xa5\xda)\x94r\xe3\xb9:K\x0e\x84\xf6\xb0\xe07\'q{\xbe\xf4\xf0\xe6\x8b5\xcc\xd71Y\x91\xe97+l\x9dA\xd8\xc2hg<\x08L\xbf\xd9\x92\xca7@KG\\\x06\x89\x91\x06\xa7\x98\xa1g$P\xe37`\xdcX$a\x9av\x05\x15x\x8cTK\\\xa07\x9e\xf0\xb8\x86z\xb5\x84\\\xa07%\xab\x18\x9e\xd37\xbd\xd5\xfb!\xd6\xa2\x00|\xf0\xd1\x05\x16,6v8\x1f\xe0\x95)\xbdBDQ\xaa\xeeD04\xcf\xf386.\x8d\x9e\xd5\xbc\x17\xa7\x84%\xc5\xd85\xd0\xa78N<\xe27\xfa\xcc\xb7V]\x1c_\xc2\xc6_\xc68Q\xe0\x1a\xff9a=\x0b\xe5\xda\x99\xc9_\xf5\x188h\xee\\\x0f\x0f\xce\xcf\xae\x84\x0e\xa5\\\x01\xe0\xd18x\xae\x8e$\x92(\xa9\xa3\x99h\xaa\x15,\xb3\xc48\xa27L\xeeR~Z\x10\x12\xaa[\xda80\x928\xa69\xf8\xb2\x13h\xfa\xf8\xfe\x18\xbc\xc3o\xd0\xf18\xcf\x8f\xec%\xa1\xc4\x85\xfa\r\x85WN&v\xdf9\x0f!\x00-\xc3\xdd\xb8\x90\xbc\xc4\xb8T\xff6\x0597\x83\x15(\\f\x81\xfc\x132\x0b\xb5\xcf\'\x919Y\xe7\xb5\\\xb6(\xc8z\xf2\x18\xb0\x17$\xa2\xbe9\x86\x03\x97<\xbeZ)\xd0\xb1\xc3\xb5\r\x85\xaf\xc49\x9f\x8e^\xde\x93\x1e>Ef\x94k[\x9e\xb8-9\xb9"\xdc-\xe9\x80\xce\x9a\xf8w\x8a\x93$\x18\x899\xb9H\xe4\xb8?\xc8fu\x185\xebW?\xa6\x0e9\xf51\x87)fT&\xbb\xdd&g-\x8c7\x1b9\xf9\xfd7\xcd\x1b \xe6N\xfd\x08U\xd7_\xd5Q:\x05s3b\xcdT\xbe\x0e\xa9\xf1=^ \x90\xba:SDp\x06\xd7\xa94\xde\xe7\xefk\'\xae\xae\xfe:\xa8\xc5\x1f\x04\xbd\xab\x95\x83?\xe8G\xef\x10>(:\xb6\xb87\xd26\xc6\xf2`\xeebk\xbe9\x97>:\xcb\xb7N\xe5k\xfcO\x8c\xf8\xcb\xd81\xf3\xb9\xc6;\x14\x00],\x91\xa73\x00\x14\x15\x9a*\x14\xaf\xeb;O!\xf7\xe9\xbc\x0c\xce\xc6v\x8d\x898}\x81\xd2;_M\xb0\xc5\x1c\xe2\xc3\x816\x06\\\xb4\xd6of;}?\xb0z#\r\xb3\xb5\x93\xfbB\'\xb5\xed1;\x83\xf2\xb2\xd1\xa5\xcd\xb5=U\xb5\x9bG\xb5\xec\x80;\xc4\xa5n\xab\x172\x03\x92\xa7\x94\x05\xd5\xc0y\xfa;\xf5\x01\xf0\x10\xa3\x92)\x1a\xbd\xf84\x7f\xcc\xe8h;\xf9\xf0\x8dk\x11l\xc8\x9bR\xf3\x10a\x8eHm<\tq\xbc\x05\x1a\xcf\xd5\xf3\xb2:<\xf1\x87z\xa5<\x0e3\xb1>$8\xaa\x17\x82\xc6V\xd1\xf6\xe8K<2\xb26\x9c\x16&\xbe\xec\xd5\x9d\x03\xf0}\xb6\xe0<Or\x8f\x1d)Q\xb6B\xb5\xd5_.\x7f%\x90<T\xe7\x1d\x00\xd6\xa4G\x08a\xe5*~\xa9\xe9L<s\x04\x84>\x15\x19\x91\xa8\xdb\x03r\xe0\x003\xdf<\x8bdBz\x81\xe0)U(\xa2\x1f\x04\x1c.\x96<\x96\x8bD\xbe\xbc\xa2\xea\x92\xcbJ\n|\xd1\xba\x93=\x93\xc3\xb8\xb8n\xdf\x8e<\x9a\x18i\x1ew \x80=\x9c\x1b^\xc8\xd3\x19\xdc@\xfen\xb2(\xf7\xb4\xf5=\xef\xb0\x90\xbc\x13\x94\xe4\xdd\xe4\x07HO\xd9\xb1\xe8>\x16\x959$\xee#\xde\xe5U\xfb\xdf\xfa\xd8[\x14>+\x9f\xa8\xe4\x8a\x8b\xc3\x9d.\t\xb2\xaf\xef\xe9\xb0>\xd3\xba6\x87T8\x0f{\'V\xd4\xd9<0\xa2?$HM\x12\x93m\xd6\xbf\xa59\x8e4^W\xb8?=\xea\x88J\x8c\xf1\x80O\x82\x92\xae\x0b\x93\xeb9?K\xd2\xeb\xe9\xe5G\xbc\x15f\x85j,\x89^\x12?S\x0b\xac\x0b\xfeK\xc3\x06)\x89R\x1f\x10\x0b\xb4?\\UH\xe3\xf5m\x10f\xb1\xf0\x80\xa5~\x95\xe7?p\xcc\x0e\x0c/\xdb\x88\xfc\x9c\xd4\xa8\xbd1\x8a\x8a?s\xa6\x08\xb8.\x0fH\x83\xfc\x93<\xb0\xd3A\xf9?\x84%\x10\xed\xc3|\xfa>\x01\xf4\xa3\xd6\x86D\xb9?\xa4Md\x8e*\x8aN\xa1\xa3\xcf\x00\n\x97\x86\x88?\xa9\'\xf4\xad8\x9a$\x03\x97\xdd\xe0^\x01T\x11?\xb2b\xf7\x8dy\xe2\xe2\x9d\xc4\xabq\xd1\xabIH?\xbc9\r#\xaf&\xe7@\xe0P\x80ekg\xac?\xf8D.H\x85pj&_\xf2wu\xfe\xc9\xf2?\xfa\x1c`\r!\x99\xf9\x14,\xad\x95B\x15\x0f\xd1@P\xa8Aa\xe3zh\x95\xe6\x1b\x15D\xb5\x1b\x1a@\x93\x1c\xe0\x06\x89\xfb\x14;9\xac\xbb\x9c\xe5\xeb\xde@\xa8\x7f\xc6\xb9\xaea\x82\x8b&R)W\xc0v\xc0@\xbf\x07\x03\xae\xefJ~\xbe\xcdo\xa2\x02\xc3d9@\xef\xb7Vg\xd59\xdc\x81\x94\xe5\x92;Y<c@\xf7E-\x11wR\tR|\x8a\x1dyw\xd9\xa3@\xf8vf\xc9\xbb\x0b\x000\x03\xafl8R\x1f\x1b@\xfa\xda\xd2\xfe\x7f\r\x0e(\x91\x87h\x0fbE:A!B\x11,\x18V\xa4t\xacr\xf9r\x82_\x80ABs~\x87\x0f\x03\x84?/\xb6\xd5\xf0\x9c\x87AAB\x94\xb5\x00\x1a0g\x1e\xf2\x91k\xd3\xba\x9aZAS\xca\xbe\xdb\xadO\x16U~/\x8f\xa09\xad\xf9A~\x879F\xd4\xc0(i\x18_G\xe9Si\xc6B^\xd5\xc9\xc3f\x16\xa7\x02\x8fpl\xcfL\xd5\x97B`\xae\x01\xa0\x89\xa5\x02h\xc3\x1en x}\xe4B{4;\x99\xf7w\xa7\xd7\xe8\x96\xb1\x9d]*\x1fB\xc3\xab[\x82M~\x8a\xed\x1f\x84\xf7\x1c>C\xa3B\xe3\xd9m\r\x87V\x05\x9c\x81oE;OAVC\x17$\x05\x85\x1fB\xb0\xc3\x91\x05\x8f \xa6=\xe3C?\xde\x1a\xa6\xb9\xae@\xef\x1d\xa6\x90[]u?C\x8d\xe3d\x18\xc9\xaa\x8c27\\\x13)\xc0\xd0\xa5C\xa5\xfe\x0f\x00m\xc4\x89\xb0\x07\\\xe8$\xc9\x02\xadC\xc7j"\x9d\xf6\x19n\x15a\xfa\xab\xfe\x08)\x08C\xd7TK\x07\xf1-\x96\xe3\xc8\xdf6\x04\xf0X\x0fC\xfe\x08\x95&[A\xcdM\xdc\xd3\xe0\xffj\xae\xd3D\x106J\xff\nK\xa1\xc7\x9fO_I}\xba\xa9D\x12\x05\xd6\x14iu\xbeD\xafx\xcf%\xce\xb4DD!^\xdf1\xd2\xe2\xafd\xa6\x88q\xafk\xea8D!\xb53d\xfd\xecN\x8cOB\xeb\x0e\x94\x81BD+\x84-\xeaN\xde1i!}p\xf1a\xb7VDw{\xb2-\xc6\x8e\x0b\xb2\xe7\xbc-An\xf4\xd7D|\xed\x03\x9d\xb8\x1e\xc5\x9e\xe9\xc3\xc0\x18SG\xa1D\x80{\xf0\x83\x16\xa9\xa7\x11~\xe5\xcbH\x0c\x03aE,fd\xe45z\x8feX\xbb|%\xb2\x0e+E/m\r1I\x19\xb8\xf4jp\xc0\x9e\x1b\xde\x12E4Jc\xea\x92\xfe\xddM=\x16\x06H\xa6oTE?\x08H^\xd9\xban\x01\xea\x90\xe1\xf0\x00\x95\x13E\x95}\x1e\xb7b\xb8]6k\xdaO\x83\x0b\xf6OE\xb9\xa1\xd1f,\xc8\x18\xd5\xc1\xe8\x14*`\xa18E\xcc/\xe8!\xd4\x89;\xc6\x1f\xa4\xbcs(\xbe4E\xe5[l\x02&\xe2\xcf\xad\xfb\xb4\x90\xd3\xc3\xa1\xcfE\xe8f8]\xf4d\xc8\x94\xb6 \xfa\x94\xa5\xefUF\x1e\x9b\xe1N \nP\x9a\xf7\xeb\x16\x143\xcc\xfbF \xfb\xbf\xbc\xedG\x94\xa2\xb6\xceE*5\xa8\xc3FB\x0f\xc0\xed\x93\x80\x87\xc8%\xf8\xac\x80yg+FO\x02\x87\x9b\xd0\xe1\xfc,\xf0x\xe8\xf3\xac\x99GF\xd9\xae\xfbX\x87\x7f\x03~!\xa1 \x8bo]VF\xe44\xf9{\xd8-Z\x84\xc1KsP\xdc)\x98G&\xe1\x08\xed\xe4\x06\xa6\x9a\xabQ\x92+\xcePxG_\x8d\xe1\xcc(W\xb5\x14$\xf4\x1c\x08\x06\xad\xcdG\x8a\xc4\xbd\xfaP\x0c\x1b\xd7U\xfa\x90\x93\xfb$gG\x8d8}k\xf8|\x95\x87q{\r;\xdb1CG\x91:kV\x1e\xd6\x80r\xb2f\x14/\x8a\x12\x87G\xa7\xc0\x80\xe4yN#\t\x86\x15?\xb0I:\x9bG\xbd)\x01\x89\'5$\xeb:\xb4\x1b\x85\xc3q\xfaG\xc1\xc0\x95z\x8a\x05\xdc\x06G\xd0\x8d\xa7U\xc1\xd7G\xd5f;p\xae1\x0f6\xa0\xe1\xdd\xe2\xe9\x84\xe6H\x10\xf9\x19\xda\x17@<\x17\x8b\x9b\xdaX\x84\x14_H\x1a:\n\xd27V@\xbd\r>\xa7\x80\x05\xfdMHK\x12\xd8\xae8\xb5\xb5\xd2W\xcd\x92\xff\xa8\xdffHf\xb6V\x8e\xc9\x12\x17\x99\xbd\xec\x0e5\\\x08\xf6H|\xeaZ\x03c\xaeuZ\x04\xa6\x8d\xe7=\x80hH\x80h-\x8a\xdd\x19J\x17\xd4\xe1\xa5\xe2[\x93\xadH\x9d2\xa1\xa97\x84>\xb9\x9e\xfa\x88\xb7S\xc1\x04H\xa7\xac\xbf\xe8\x93\x0f\x90\x17\xb5\x03\x01A\xbc?wIu\xca\xd3#\xd1m\xe9\'$\xca\xf5zQ\x8d\xaaIy\x97L\xaf\xa0\xd55\x8a\x99\x18N\x05\x9f\xa7\xe7I\xa0\xdfL\xd9\xc2\xcb\r\x98Z\xf4>_\x06\x80\xabI\xcb\'(\xb6\xd9\xe9\xe6\xa4\xce\x87\x87\xcdN\x8f\x85J\x19\xf8\xdd\xa1\x9a\xe1\xb1\xfb\xb6\xe4\xaaF\x06\t*JS\xd2\xe2\xaci$\xa5\xddJx\x02\xd4NS\xeeJr\x1f\xd5k\xe0\x8b{\xc2\\Q\xe0-\xb5\xdb\xe1Jtr\x13\xd1\xd0\xc3\x0e7\x19w\xf4\xaf\x12I(Jw\x12\x17\xae~\x9d~K\x0ePl\x1f\xa8\x8c2J\x8b.\x1e~i\x9b\x96]\xe4\xee\xabG\xa1K\x10J\xdc\x890\xc1/?\xc9\xac\xe7\xb8m\x87@\xe1\xffK\x03\x96\x1f\xa1>\x14\xc9}\xddGG\xceJ\xbd\x01Kp\x9b3\xbaR\n\xb4RY\x80\x92&\xa0^\xfaKq\xfe\x17\xc2r\x7f\x9c;\x15\x00\x19\xbd(\\\xb5K\xad\xf3D\xdeE\'^7\x86\x08H\x06\x11\xc2\x03K\xbd\x84\x96So"A\x93\xa0D\x7fj\xd7,\xc2K\xc7\xf9\xd6\xc6\x97\xcc%\xff\x90d\xecQ\xea\x82\x0cK\xc9*;\x85\xcc\x8c\x04?|\xea(Q\x86\x0e,LF.7^\x16S\x98\x9fs:\xc4\xc5\xa0>xLhwS\xdf\x03\xe4\xf8\x1d\xe8`\x88\xcd\x0e\xaaRLzY\xbf\x17\x97\xe6@h\xfa\r\xc6\xe3\xb1\xa2\xcdL\x8e\xc1\xd3\xe3g]dE\x00\xecS\xb6\x02D\x9dL\xf0$\xce\x84\xf7\x1eDl{ML\xd8\xc0\xc4\x8eM\\\xa9x\xf9\xd01\xa5O\\:\xf5#&\xca\xbdMe\xd8\x9e-\x81\x04\xe4}\xac\xc4\x96\xc7\xde\xc1\x98M\x9bk2\xef\xcc\xa0\xb6\xb9wu\x9c\x06\xbbE\x99M\xbe\xf2N\xca\x01\xa4\x97\xfd ^\x17S\xa6#\x99M\xcd\xa9 8\x7f\xaa>t\xd2[[\xebB\x99\xedM\xfc\xcc<\xcf\x08\xa5s\x05\x14\xbb\x15!\xdaC\xe1N\x11\xfd\xf2\xf5\xfc\xf8\xcaM\x8f3\xec\xeb\xa0\'bN\xacTG\xae(\x8c\x93\x05\x18\xe8\xbc|\xab\xe8\xe1N\xcc\x0f\xcb2\x05\xe5\xc8\x94\x88vj\xb7\x97/\rN\xd0\xf2\xa2W\xef\xc5~\xde\xf0AEsuVxOg\xc0U\x90\xe3\xa1\x84\xd5:\x8d\xfe\xd2l\xe7\xe9Ok8\xbf\xdecX5;\xf8V\xea\x0c\x8f\x1c?O\xc6\xf5R\x04\xd9\xe2\xc2\xc7\x94\n\x9e\x1b\xc9\xb5\xe0O\xcd\x1f\x16\x98\xa1\x9f\xe2\x12\xc7\x91q\xa8\xaat\x99O\xf1]GL\xbb\xfbn\x13\xb4\xc1_\x00\x98>\xc1O\xf7<\xd4\xdf;"I\x90\xbcU\xed\x10d\x1b\xf0P\x11_la\x9b\x90I\x1b\x9d\x8eG\x05|<%P\x11\xf0\x8c\xf4C\x19\x01\x12`_\x14=\xbe\xb1\x90Pz\x18\xe6\x9e\x13\xa4Q\xa7|\x89$\xe0\xd9\xa1\xabP\x98\xe4\xc3\xdd\xeaR\x91m6xLqT\t\x95P\xad{\xd4q\xe9\xc7\x95V\xabRl\x93\xb7C\xf1P\xb8\x96\x8c\xfe\xdaP\xd6\xcb\xc5@g"\xc7\xb3\x1aP\xc2s\xda&<OMIH\xa8\x04\x19h\x95\xa7P\xc9|\xc9\xc3\xb2\xcfA\xc34rl\xc0#m\x16P\xcd\xa9es\x8c<\x07b\xed\x95\xae\x86\xfff\xb3P\xe7\x16\xbd[,\x89m\xd3\xe0F\x89\x0f\x94!AQ\x1bIa\x1f\xb0\xc9\xdcv\xf39\x94\xe3;\xa3\xe0QX\xb9\x89\x9fL\x04\xef\'\xcez\x1ej\xa0\xdb\xacQ\x93\x87\x81a\xdb\xa2\x10F>5\x0ef\x7f\xcd\xbeQ\x94U\xd6}\xc7\x83\xd3\x88\x83\xe9\x10\x12y\xc9\xd2Q\xe4\x92\xe32Vi4z\xc0\xe3\xe89\x81}\x06Q\xf3\x87C\x94\x89\xf3p~\xc8\x88\xbb<\x1e7\x88R\x04\x1c\x0cg\xd8\xcd\xef\x04\xc7(\x1fR\x1e\xbe\x18R"\xe2a"\xc1\x93\x12\x13\xeb\xab\x9c\x06\xf81\x0fR5S$\x17:\xe1\x03u\x1c]\x95 \x8c\xc6QRZ\xc9#\xcf\x1cs\xc1\xf5)\xfeO\x80\xcaTiR\xad\xc9\xde\x9e\xab\xe6,\xc9\xc2\xec\xb8\xce\x80\x18\xa0S\x06\xe6\xe0\x8c\xa9\xa3d\xb2=\xa9I\xf0{2\xd5S\x1e\xba\x9e\xf3\t\x1f\xcf\xca\x0b\xd09\x8c\t\xb3\xa7S \xb8\n\xff\x8a\x18\xdc\x7f>\xe5\xb2\xaf-\xc3\x83S9c\xb3\xac\xfb\x08\xe3\x17\x8fS\x90p[@8S@\xbf]K\x03\xd3=\xbc\x95w\x00\x05\xb0^\xb4Sj\x8d7\xd0\xc6mw\x1bN\xa0d\xff\xa2\xa8FS\xbd\xb5|K\x99\x17Q\x86Mn\xb7kv\xa4\xacS\xc5\xc2m\x10\x16\xa0%\x89\x90\xf6\xf1d\x159\x16S\xda:\xb0\xe5R\xc8\xd4\x04VU\x9b\x9d5s\x84S\xf5\x1b69:A\x19\xce\xdc\xa4\x11\x89[\x1agT>\x01=\xb5\xa8q\xb8\xbbAH\x8ag\xa8\x80:TY\xdadCN\n9\x04\x9dLQ@"Z{Tf\xf6\\\xd5\x93\x01\xce{\xea\x82\xe1\xcb\xe2M\xcbTps\xf5g\xc4]\xf9\xbbubw\xe1^~)TwJ\xd4\xef\x1eIi\xe3V\xc6{t\x9d\x88\xe5T\x81\xe6\xce\xbc\xff\x07$.5\x97\x90\x16\x1e\x0b.T\xc9i\xa9\xb8\x81r\xc33\xa5\xfdD\x10\xee\x16\x9dUM(\x14\n\x98\x87kB\xf7\xce\xfd\xf0Jl\xaeU\x91\n\xbcx\x91\xfb[\xb3\xedf\x9az+\x87\x1aU\xb4j\x84O\x0c\xec\xbfp\xbb\xfd\xa0\r\x90z\xffU\xc8\x1f6\x17o\x12\xc7\xdb\xf8\xfaA(\xb2 5V%^`\x08G\xbaW\xb6\xc6\xf5Ync\xc0hV3\x11\xef\xd59^\x18\x8a\xc1Z\x98\xa5Hz\x81VlY\x80#\x8b\xd8\xfd\x01B\x06\x034\xb5\x8a\x18V\x93\x13\xfd\x10\xc5S\nP\xfe^\xbb\x0f\x90J\x8dV\x93\xeb\xb5\\>\xd6\x1b\xd7#\xba\xceS\xb2\xbf\x8bV\xa1\xb4\xefQ\xb1\x9feQ\x80\xb0\x12\x83\x9f\xaf4V\xf1\xa3\xa6j\x05\xb4\xbd\xde\xbc\xd6ZDS\x88\xa9W\x1fYVE\xe8\x14\x97EO\xe0\x0b\xfe"16Wh\xb4\xa9F\xb1\x0c\xc5\xbd\xd9L\xa6o~\xf0eW|>\x89Cs\xf3\xb3\xa9\xe1\x18t\x9c\x98\x07WW\x85\xb2\xe7\xca\t\x1eJK\x97E\x1b\xbf\xc0\xfb\xedW\xa3\x15\xc8\xacO\x13\x1aG\xfd@\xb6\x9b\xc1\x8c\xa7Xd\x03\xd3[\x198\x1cr8\x06w\xc9\xe6\xb4\x12Xv\xa2\xe4#\xf6\x94f;A\x83\xf8w\\T\x8aX\x8c2\x80\xf1\xcb\x15\xa4\xb8\x96\x8a\xc7\x1a\xederX\x94\x95ke\xd4\xeab-P\x8b\xd3\xd8;\x8evX\xbf\x87D\xbeg\x8a\xbd\x8d\xff4\x8c\xc8M\xe3\x05X\xd7)\xc5\x7f\xc5\xe5\x1dgd\x99x\x9czg\x0cX\xe6d\xb9\xb8\x1d\xba\xda\';\xa4A\xa8z\xf6\x89Y=]\x0eI\xc4\xad\x96\x82\xfd\x93\xbc\xa8\\\x11\xe4Y\x8c\x80\xd0\xe1F\xd9\xc7\x1bO\xf1\xbe\xbcw\xf1OY\x8d9\x1a\xde~+\x94\xe4\xc1\xd7j\x9c/0\x07Z5\xadd\xe6z\x88\x1a\xca\xaa\x1b`\xf8\xb5piZel\x18\xd6pk$s\xa7rU\x0c\xed\xe9oZ\x848\xd0iP\xb3r\xd9\xf5\x96\xc3P\x8e\xc4uZ\xa3\xf84\xca\xd71\x07\xf0\xd6\xdaI\x88\xb7\tmZ\xae\x03\xbc\xf6\xa3#+\x93\xda\xe3\x16\xa5\xda\xe8\xe9Z\xc3\xbf+\xf9\xb6\xdd\n7\x91\x04\xeaf\xc3A\xd4Z\xd5\xf2\xfely\x89r\xaf\x0f\xa4_\xba\xf7\xcdEZ\xd9\x9f)-\x93M\xfc\x93N\x9b\xd2\x93\xb5\x109[\x06\x95\xa0}\x02\x0f\xd2\x087\xf4\xcb\x8f\x04\x99X[NViZT\xff\xe4\x80n3\xf9q\xab\xa8\x05[](\x14!\xd9H&r\xac\xc6^\x05\x1e\x05L[\x8aB!\xd4\x8fh!\x88\x84\xd0\xae,\xdd\x19\xab[\x92U\x88\xf3\xad\xcf!gP\xd4\xd3\xe9C\x9f\xa7[\x93vG\x16\x8e\xc9\x8f\x1a/n\xa4v"\xb5\x8c[\xe1\x93)/`\xc0$\xec}\xbf\x86\xd7\x88\xda [\xe9iV\x02\xbbbT#\x9d\xc6\xe75nU\xd8[\xff~\xf9>\\O\x8f\xca%\xb5\xa3\x19N\xccc\\\x12\xdbq\x95\x16\xe1\xb8\x11\xf1\xed\xc0B\xc4"X\\\x17Af\t\xb1\x16\xfb!\x1ef\xdch\xa8=\x91\\I\xa4\xc5r\xe7B\xdc\xc4u.\xb0\x96\xba\\\x0b\\i\xb1\x9b\xdcu\xe0\xa0\xbf\x02\xacA\x00\\\xb8\xe0\\pP\xbc\xabB\xa7r\xa3\x0e\xba>dH\x08R\\t\x1eU\xa4\xdc\xfff\xaf2\'\x862\xbbA\xd6\\yJ\xc9q^i\xe5\x8a`\xf2i\x1f\xb8M\xdd\\\x8a8\xda=\x05\xeeJ`\xa1:\xea\xf5\x08\xd14\\\xafv\n\xa3\xa2\xb34\xfcY\xb5CXA\xc5\xbf\\\xc9\x90\xfb\xb7FJ\xe3\xe2\x12\xa0\xf1\xf1\xf3u\xe9\\\xf7r\xe1\x0f\xc5\xd01R\r\xa6Q\xda\xc3A\xb2]bn\xb9-\xa2\xf4\x93%4\xd36\xfe,1@]y-\xadt\x84\x85\xbc\x18n5\xa9\x14\xc4 \x94]\x92\x12M\xefc\xb4\xedC\xb0\x11\xc5Q@&\x95]\xac]\xe5\xf2JHAN\xd4\x88\xb7\xdfv\x16j]\xb2}\x8f\xa6^\x11\xba\xe2\x89\x1c\xf1\x19q\xc5\xf1]\xf1\xb3m\xd3\xbd]\x02\xf1\xeb\xf7\x96\xce0\xec*^\x1f\xd32\xaa\x18d"\xee\xf7\x19K\x99Q\xe3.^-W\xdcw/W\x96"\x08Bo\xec\xe2u;^:W2\xddO\xdb\x11a\x9fwGVp2\xff^IW\xca+\x10\x91\xb2\xaa\xda\x96\xff\x04^\x90\x14^hi\xac\x86v\xe6\t=\x95\x8b\xe4j\xb9\x0b\xb4^n\xb7i\x94\x83\x17[\xa4e\x89\x1a\x8e\xaf\xf1\xde^|\x14r\x99H\xfd\xaa"t\x02v\x8a[;\x00^\xa1\xfb\x12\xaea\xfe\x08\x15\xa5a\xb7!\x86\x19\xb1^\xc7\x91\xc3\xc6\xef8\xa0S\x96>@\xeb\x1d\xa0\x0c^\xfb\xd5\x00\xd7\xe94\xe14\x0b\x14\xa9\x1e2c\x1e_\x81\x0b\xac\xf6\xf0qIF\xce\x00\xc7J+@\xaf_\x8d4\xe1\xe8\x11\x8a\xf7\xdb\xccg\x85E\xeaO\xf5_\x8e5\x9ew\x8d\xf8\x0b\xb8\x08db\x97\xe23\xd5_\xe9S\x97-Y\xf8\xc2X|\xc9\xe0\x11\x8d\x01\xbd`\x02\xc62[\r\x04U\x02`\xf8\x0c\xd1\x8c\x0fC`\x15\xbc\xfd\x1f}R\xf0@\x90\x88)\x82\xad\xab\x7f`4\xc13\xe2P\\}\x1cz&\xe4Xo[\xab`Bw-\x8a\xf2\xbf\x84\xe8GK\x949\xb8\xbe\xb3`L\x8c\x0c]\x87\xfco\xc6\x8bE\x83\xc1p\xb0b`Z\xbf\xb9\x15\xa2;>\x14~\\EY^d,`c\xf8J\x84w\x8a\xec\x8d\xc3\xf0\x86\xcf(\x8by`f\xf8\xc5c\xe3\xfa\xf6RLp\xbfz\x85x8`\x9a\xb7&\xb2m\xe1\xf9\xd3R\xec\x86\xb3\x15\xd8F`\xd8Fl\xc5\x87\xe7[\x0e[O\xfeP?~\xd3`\xe8\x9cZ\xe7N\x8a\x06C<\x8e\xc8,D;\r`\xf6\x82E\xad\xa7\xc2\xb5\xb9\xebt\xe8\xb3w\x1e\xfea\x10\x87L\xeb\xe6\xb1\x92\xd3N\xf01\x08\xe9\xb1\xa7a%\x93\x02\xc4\xa7\xbb}\xb9\x05\x9em\x0b\xa8x\x82a/\x94]o)\xaa\xf9\x93\x1f\xed\xd6\xc0\xd9\xe5\xcaa5\xbf\xbe\xda\x93*\xc1\x9a\xd2\xfbY\x16\xe3\xe0\xc4aHG\x1e\x89a\xd6\x05\xa2\xccY\'\xff\xb9\xf6\xc5aJ\xe8W\x93^\x00en\x95\xe4\x9c0\x9a\xfb\x86aP2M\x17\xc1\'4!\x86\xaf\x82z\xe1\x8b\xfdai\xd5&\xa8\x1cQ\x94\x17E\x80\xc3]hH\x0ba\xbf\xb9\x89\x0f\x84\x1e\'U\xc0U\x9e\xa3\x01\xd0Nb\x07p\xdc=J\xb9\x19}\x17\xdf\xfbK\xf2\x0f\xd8b\x13\x83s\x98/\x82\xbeF\x98\xf1\xc4F\xc16?b\x1b\xeeG\x94\xe3\xa4\nu\x90\x12\x92\xe2T\x80\xcab$zy7u\x19\x93\xd6\x81\x9f\x8863\xe4\xb8bR\xf0\xd8\xf7\x1d\xad\xb73\r/\xe9\xcd\xfc\xc1*br\x94\x8ca\xfeu3X.\xb7<6\x16\xc5Hb|a-%\xd4\xc8\xeb\xcf\xbe<\xa2r\x9a\xe0\xa9b\x85\x8dA4S_VP\x83u\xed8X\x8cRb\x8d\x98\xab\xa8\xe3\xb2\x07bu\xe3\x9c\x91a\x7f\x01b\x93\xfdG\xdf\x1c\x1a9\xdc\xae-\xf2_\xd8\x1d\xcbb\xd0\xa7\xda\x17l-\xb2?j\x87G\xdd\xc1c\x84c\x19\xb1\x9dvD\x9a\xbb4\x0bI38\x9f\xceic=]\x8eS\xac\x967WS\xbblB\xf7\x1f\xc0cD\x00,\x1e\x16\x8a\xf8\xedK\xbd!\xcc\xb4v#c\x81\xd5=8LH\x17^\xd4G;\xd1\xbb\x1d\xbac\x8ck\x1bk\xcba\x85~e\x85=\xba\xb7\xbfPc\x8c\xfb\xf0t\xb7j\xca\xaa\xb9\xad\x14,\xac1\x02c\xaa\xee\'\'\xee#\xfe\xf7\xc40\x08"\xb5\xc5 c\xb8\xcf\xcd\xc8~\'U\x06\xaa\x1c=\xaa\xff\x06\xd1c\xc3`\xd3\xf852\xf2\xfb\xb0\x96x\x9e\xbf\xee c\xce\x0b\x1eqh\xf52~\xa2c\xb6\xc8\xee\xef\xa3c\xde\xae\x1d\x07%\xe8L~\x9c\xcc\xe35\x8f\xd4[d9\x94S\x81&X\x99\xb9\x80\xee\xbaie\x99&dS\x987l\xdf\x1f\xa4LFT\x1bML\x85\x98do`\xbe\xed\xda\x05\x00WAN\xb1\xb5\x94"\x81d\x85H~\x8ceW\x86\xb1\xd5\xd0F\xbe\x08\xfa\xdad\x8e\xa7\xa8\x01\xbf\xbdh\xdf=~F\xf6\xd9 \x06d\x93\xfaX\xa8\x99\r\xf7g&\x1b/6[\xb0\xc9d\x95\xffe*]\x96v"\xb2^/j\x8d\xf5\xe1d\xa7@,k6\x89II$L\x80\x0f\xb5\xec<d\xbb)xBw\xe7Fe\x1b\x8ej\x01\x10\xaegd\xd2\xd1O\x82\x00\xc2\x05W\x86\x15\xd71\x10=cd\xdfR\xe5\xaa\xb9\x87\r3\xf3\x95J\xba)\x00Jd\xef\xbf\xedC<BO\x04\x84\x99\xabe\xb8\xf4\xa4d\xf5\x042: \x17\xfc\x05Tw\xdd\xc7\xbbv\xc0e\t][`\x11c{@\xc6Ek\x978\xc6ie\x0e\x15C\xeb\xe5\xd8\xe0\x14:\xb6\xe7\xf9\xc1\x11@eKh\xb0}k\x9178\x8cB\xb3\xf7\xf2*\xebe\x87\xab\x03\xbe\x1eG\x1703\x98\xebALS\xbde\x91\xfc\x99\xbb\xdfn\x1d\xb6\xee(1\xd4\x11mie\x99M\xf0\\[o\xef\xdd\xd9\xc3\x02\xf2/]\x7fe\xb3\xc5\x1a\xe8\xd3\xb2\xca\xdaK\x8eP\x01\x1c\x0e\xbde\xfb&\xddC\xcb\xdf\x05\xc4\xf1Z\xd3\xea[\x8f\x0ce\xfbN\r\xa2\xcf\x1a\xcf\r?Q.\xf2\xc1\xee\xd5f\'\xa95\xdb\xe2\xdf\x1cw\x183\xb3\xc9\xebD\xdbfoZD\x95\x1f\x19l\xb4\x7f$\t\xf0\xb0\xfb\xf1f\xa3\t-\x16\x9bw\x97\xe5\x81\xf1\xda\xeb\xf3jHf\xc7\xef\x89\x1dM1NS\x0c\xc4#\xe1\xea\x0e\xcef\xe7-]<r\x87\xee\xf1\xf7\xebe\xd1\xfa\xfa*g\x0cJ\x04\xb3\x7f\x11\xd6\xe32\xce n(#2g+|\xc1v\xd8^\x03h\xf2\x08W\xdc\x05\x01HgT\t\xb4\xb9\xe8zU%\x15\xef\n\'&\x03\x19gwC*M\xa2X\x89\xcdfy\xc7\xdf<\x1a\xb7gzA\x0ck9\xc40\x10\xd77\xc6\x88\xaf\xac\x8cg\xad\xa4\x14\x9f5\xb7\x80\x10\xd4w\xdd\xcbMKQg\xc8v[\x99\xa0Y\xa6N\xa0\xd7B\x15y;\x04h+5\xceFfEDb\xe0\x8d\xc5\xa56\x9b\x9bh0\x9a\xa1\xc0\x92\xa4\xcc\xdd\x86\x88G"\x97\x93\x89h\x94\xb5\xb7\x86\xf3b\xb5\x9c(\x8a\xcb:\xdd\xe9\xf1h\xe1)A\x8d\xe5R\x99V\xef\xbfx;\x89gDh\xfe\xe9\x94z\xe5Kx.\x8fg;}#F\x13i\x02a\x99!\xba:\x1fb\x01])d\x18]\xf8i\x04k\x93\x03{\xf4\x18\xd7\x15\xff}\xdb?;\x8bi\x12/\x0b\xd7D:8\xc1\xc1\xde\xd7(,\xf5\x1ei!\x98\x97\x00\xf7\x80e\xfdI\xca\xfb\x8f\xac\xc77i{h\x1ff2\xa4\x18\xf1\x80\xd0\xa0\xc5\xc8b\xc8i}\xac\'\xcc2\x93\xce\xef=\xf9+h\xad\xf1\x9ei\x94\x02\x994\xda\xbb[\xfd\xa2\'\xa7\xc9N\x15\xa9i\xc4\xed=\xed\x01\xa6\x9a\xa5\xb1\xfb\x9ax=\x98ei\xe3\xbfH.\r\xe0\xf3BV\xaePAE\x88 i\xfb\xdd7\xff:/UaOm\x084a\x99\xa6j\x04.\x89(\xd6\xfc\xbe}=\xabR\xbdY\xa0\x85jv\t}\xc3\xa3J\xa3\x108\x10\xc0\xd5\xbe\xcftj\x87~.;F\x04\xc1\xff4\xcc\x17\x05\xbf\x98\x17j\xa3\xe8\x0f\xba\x10C@3\xe2A\x80\x92\x90\xa1\xb8j\xb4=y\x1cPo\x9a\xce\x96\x8eIO\x8d/\xf5j\xe2;\x9b\x99K\xd9\xb8R(\xfe\x0b\x165[\xe6k<R\x95\xcf\xa1\xf1;v\xd8\x15\x8a\xef\xc0N\xf0k>\x9c:\xd9{&\xacHi\x07\xa2\xad\x0c\xaf\x98kV\xe5\x0c~\x96.\x04\xfah"\xf7\xf5;\xf3\x81k\xc5\x85\x1a^\xe1\xe2U\xfa\x8d\x91a\xa2\xe3Ngl\x1e\xbd~\xf0x\xe4\x89\xc1x\x06Bc\x86\xe5\xd3l?\xdb\xc3\xb2U\xa4\xdeb0\x99\xd1,>\x00PlAC\xa7v&`\x92\x8c\xef\x15\xd1\x7f\x0f\x17\xealY\x8dwA\xbb*!Q\x14\xffa\xbe\xee\x11gl\xa1;>\xc0\xfd\x08\xcc\xce:\xd4\x84JY\xe4\x86l\xb5\x7f\xe6\xb0`:\x96\xdb\x88B\'\x85\xd4\xf4\x7fl\xe3x\r\x17\xf7\x8f\xa8|\xe8\\\x9e\x99\xc2\xad\xc5l\xe4\xd3\x98\xfc\x8d\xee\xb7Zv\x17|\xb1\xba(\x15m\'\xa1+]\xaf\x01\xbb\xac\x86d\xb0y\xa2\x7f6m=\xb80=y\xdbj\x9b\xbe\x8d\xfe\x85MBDmD.g.w\xf0\x8ex\xe4\xc7N\x8b\xa8\x03smF\x1e\xd7\x8e\xce\xe4\xb0%Ve\x18y\xa9\x94\xfamQL\x0f"tVdv1S\x11=\x1c\xe6@m\x81\xad\x1d\xac\xfd\xf3\x1a\x18\xc4H\xc37\x1f\xa2\xc7m\x87\x0b\xca\x8a\x9b\xcek\xf67n\xce\x07\xe9\x9f\\m\xb1 Lbj,\xbf\x11\xd9\xceJ\x96YU\xd6m\xe1\'$\x12\xe6\xb8\xfa*\xe9X\xbc\xa7\xce\x8c\xc0m\xf2\x00\xe4\xc2\xf8\xaf\x15)\xeal\xd0q\xa6\xe1\xfen\x1d2\x1c\x14s\x87C\xab\xaa\x9b\xec\x04\xf7\x93\x03n,\r\rq\x9d\xa2\xb9\'Fe\x15\x97\xca\r~n\x8d\x99\x17\xa8T\xf4\xc7O\xc6Z\x1f\xde\xe6$>n\xa63V\xc5\x08\xcb"s\xdbND\xda\xcbfxn\xc4\xe1\xae\x94\x8f\x82V$\xc9\x0by\xed\xa0\xdc\xd4n\xd5\xf2\x89\x03\xd7\x933=\xf0\xe7\xba u2\xebo\x10j\xc9\xbcy\x01\x99\nZU\xed\xeaO\x01\x07o\x93\x11v$\r\x1c\xaey\x0b\xc3\x9c\xa9j\x15\xc0o\x93\xbe\xce^\r\xccV\xc8\xbf9,\x1c\x1f\x88Io\xaa$\xa4\'\x8a\x8a\xb0>9L!\xd9\xf4\x86\x80p\x05\x07y\x0e C\x00\xe7gG\xc0\xfb\xd2whp+\x1c\xd7\x01\x07{\x06\x1c\xb1*\xdc\x0b\x0b\xa8\xf0p\xf9$\x06\x8b\xcb\x8cE\x89\x12\x87GU\x90\xf0\x85qR\x01\x1av\xb0\xc3M\x18%\x920\xcfxM\xd4qi}\xa5\x83\xce,\xd5R?\x11\xb4AN*\x05q\x86\xc3g\xd6\xe7\xb0\xdc\x17\xf5\xae\x80\xc8_cMq\xf0\xcf\xfa\x84X\x07\x9a}\xd0uh\x92\xa0\xcfGr-\xca\x1b\xdd\xe8\xf2C\xfc\xbb\xe1\x00\xc1],\xb5ra\xf5\xacQL\xa5\x87\x93\x08\xce\xfe@m\xbc\x11r\x7fB\xc3\xb7\xa0\xe3\rR\x051@\x0f7\x88Hr\x9d\xc1\xa0\xf1\xcd!EHv\x1d\x18\xe0\xd5\xdf\xbfr\xd9\xae[T5?5\xa8\x8d\xba\x02n\xe49.s\x11t|\xea\xfc\xbeO\x05\xe1Zr\xf0dd\xe2sE\xd6\xa9\x9av\xe3V\xc0kE\xfa>\x87\x1e\x12sQ>\xb0\xb8Y\xd1pS\xed>3\x8c\xdfE\xb9sl\xd8\xe3\xfb\xe0o\xadh\x89z\x18:%\xd8\xbcs\x90S8\xad:\xf9\xb6L\xdf~\x18V\xfc^Rs\x90\xf1\xd2"d\x96\xa0N\xacQ\x1f\xc6 \xb0\x04s\xb5\x1d\x13wh\xa09\xbb\xb2\xf7\xff?"Jus\xe8\xc5\xe8\xd6\xb5\xae\x92r\xb4Ri\x1c+\xaets\xf8`\xc4\xea\x06\xaa\xe9`E\x80c\xf3\xfd\x057t\x0ckJw\xcfkC#\x8b\xaa^\xc0\x16H\xe6t \xd3\xdbPDQ\xf7\x8b\xed\x17l\xe7\x9aP\x85t)2\x8c\xfa\xce\xb1\x19\x0e\x1e\xbcReB\x03\xdct:\\\xf0\xfdl\xbe&\x92roR\xf9\xad\xbe\xb3t?\x02Z\xe0\xc4z\xba\xcf\x14\xba\xc24(\xdd\xccto\'\xc2-_B\xb5\x8b\x9f\x9d\x99\xfc\xa9\x080t|\x84\xb5<\xca\x1f\xf4\xed\xdd\xf3R~\xfbj/t\x86n\x1dd\xb4+\xfb\x1e\xf6[\x17\xef\x114\xa6t\xe0|#\x91\xc6J+27\x92\xbd\xdcb\xf1\xd3t\xecL\xe2i\xff\xc6\x84\xab@\xee\xf4\xed/^\x93u\x0e\x1f\x96eJ\xecP);\xa2\xba\x92\x10\x88\xddu\x10\xbd\xd3\xe51\x0e\xc7eZ\xc4\x89]\xc3\x9b\tu1\xc8\x9d5\x8e\x8a:8W\xf9\x16_\x02a?ut\xf5\xf25\x1d\x93x\x13\xe5\x12\x0e8E\xe3\x14u~\xae|z0Q\x9f\x9b[]\xaci(\xbb\x11u\xa4;\xc0\xa2.\xfaN\xc2\xe8\x85a\xc0\xa8k\xf7u\xbf\xfc\xf1vmu\x86\xf5\x99\x9c\x8f\xbc2\x14\x86u\xf5,\x17\xd1\xab\xee[n\xb8z\x84`\xd2g\xf5u\xfeb\xfdGLEm\x9a\x05\x8f\xd5$\x18\n\xfbvRD\x00ktLN\x1c\x89\xae\x03\xe3\xe6a/vd4\xf3"+\xc84\x81\xfcR\'\x80\x81\xe5\x9av\x9c\xf7\xc0\x80\xe0qW\xdcgQp0\xcb\x8f\x9cv\xb2\xbc\x90\x1f\x8c\xe7-\t\x91\tDK\x96\xe6\xadv\xd1\x16\x8a\xa6P1H\xf3,\xf05\xdb\xa5w\x99v\xff\x8d\x9c\xe9\xde\xe41q\x8c#\x84]\x98{\xd7w#\x9d\x12\xa2L[?Ab\xff\x0c\xed\xcb\xba\xa2wI\xc2e}\xfc\x1eM\xa5\xac\xb1,k\x9e\xc3\x8cwg>\xd0\xaf\xb8S\xc6a_\xd7E)e\x96Bw\x82}\xfc\xea\\\xb2\x86\x84J\xe9g\x1b/\x1e\x1cw\xa0\x9a\xabE>\xf0\x89<L;\x96\xa5\x82\xb2\xffw\xdb\xaf\xcd}\x03\x05b\x8e\x06\x86<\x7f\xfa9)xQ\x14\x8f\x19b\xb8\xf1\x94\x12\xd7f[m\xbe\xb4xX\x063\x87%yM\xbb\x7f\xae4k\xf0\n\xd7xl\x18\xde\xaf\x98\xda\xdb\xb5"G\x9d\x04\xcb\xabdx\xc5\x9d<<r\xcf@\xb7T.\xd2\xa2!\x06\xaex\xc9\xc4\xf2\x96\xd5\x13;\xbd\x11\xa6\x04\x03\x1csgx\xdc\x8f\\\xb6\xb8\x7f\xd6\x98\x0f\xe0\xb5ZU\x8a\x88x\xfct\x8fW\xf4\xb7\xdaJ6\xcb\xf9\x0f\xbb \xd3y%N\xe3\xef\xc6\x88u\x17\x91A\xf40\xe9\xcdWy6\x08Bf\xdc\xc5\x9b\x0b\x15DR\xd5\x17\x87\xddy@*\x10\xd5&T\xf2\x06\x9c\x12Jr\xb7\x8dyyP\xfdDB\x05\xd4`\x12\x1d\x18\x1d\x8dK#+yX\xa3\xacj\xdfQ\xac\xf5\x81=\x89\x19\xf2!Byo \x8a\x9a\x96CP\xe1\x8ez\nd^O\x17y\x81\x01J\x80:5\xe9l\xd7.Bj:.\x8ey\xa6\xd0\x9b\x99\x94\xafj\xe9\xbd\xbc\x93\xe5\x12\x1d+y\xe0R\xcd\x13Kf\xe1\xf0\xe1)7\xc0\xc5\x98\x82y\xfb\x949t\x12\\Sy\xc4;?\xf3R\xd4\x86z.|\xe8\xfa\xca\x7f\x05\x02\x9d\xb8\xf7PuD\xdbzR\xa64\xe4r[\xb4\xc4\x12Oy\xf6\x8f\x08\xdbz_\xbbT*}V\x01\xb6\xcb\x8e:\x8a\xad\xfdQz{\xbdz4.\xbb?`\x87?0\x9f0m\x04z\x85\x95/\x01W\x83\xae\xec\x98v\xa5^\x8codz\xa4\x7f\xdb\xfd\x88\xed\xf9\xf2\x11\xdf#*m7\xbcz\xb9\xc5\xd9(\x1cq\x11\xec\xe5\xd8\\2}C@z\xbbe\x83\r\xf6l\xf4\x85.\x15`R(g\x05z\xdd\xa8\xfd\xcc\x8by\x1b\xf7\rxX\xba\xa9\xa2\x89z\xf0\xb3\xbf\xa0p1\xb34ol\xa1\xb5\x84\xb4\xcaz\xf2\xda\xa4\xb0m\xaaOp\xfc\xc9\xc3\xc9\x89\xf1i{#\x90|\xe3f\x8aU\xe7\xbb\xe8\x164\xc8\xa3\xc8{%\xa3\x07\x88T\xc0\xd0\x94\xd0\x1c\x15Q<b\r{4I\x19\xae(\x0e\xbb\x17-\x8bn%\xd3~\xe9{\x84\x18;i\x8d\x90\xa6C\x05\xbe|\xaauu\xda{\x8ex\x02Y\xfc\xa4p\x82D\xce\xcc\n\xe0\x86\x0b{\x90\xa6\xb8\xb6}\x10\x8e\xb1\xf3ig\x9a\xa9\xbb\xe8{\xaam\xcc\x88\xd8b\x14\x91\xed\xca\xc6ht\\M{\xaau=\x1f%H\x8f\xb5d\x02\xeb\xf5\xe5\xcbl{\xb6X\xf5\re\x8c\xe2\xadE#\x1c\x11,\xf7D{\xc1*V\xe6X-\xc3\x13\x99\xa0\xb1i\xc1/\xc0{\xffz\xe7D\xbd\x17:uP\xea\xb8<\x19\xb2\x8f|\x03\xb8Bl\xf4<\x9e\x07e\xb2:\xd5\xf7;\x08|\x15\x08\xa8\x9d\xbc\x91q\x84W\xff\x8e\xf3\xbd=\x96|/{\xff\x9f\xe4\n\xd0\x93\xd2e\x03\xb1\xbc\xee\xbd|A\xb5?h-\xb1\xf6\xb5\x80\x15\x9c\x0e\x0e\xa5\x18|\x88N3\x9a\x95j\xad\xb7\xa5\xb7Z_\\\xa7\'|\xa5V)\xe5\x0e_\xa0\xed\xd2\xb1\xcbJ\x07\x98\xd2|\xcdh\xf1\xcd\xce$\xd4Do<\x83\x0c\\V"|\xdaN\xe1(\xaa\xb9\x80\x06\xb9L\x1c\x87\x98E\xd7}J\x0b\xf0\x19\xb8\x83Y\x9d=\x7fR\xfa\xfd\xef\xb2}Xg\xfc\x03\xf8\xf9\xfb\x07\x18`\x8c\x9f<\xf9\x9a}\x99\x1b61\x10\xc0\xe2!\xe5\r\xee\x87"\xeb\xc7}\xb3)d=\xc8\xf6\x05\xa9\xd6\xb1\xa5\x1a\n\x98j}\xdb\xe7\xaa`\x04\xcd\x13I#\\\xd1\xad\x06\xbb\xd5}\xdcc\x857V\xea\xf1D\xf9\x12\xa8\x98Qs\xa2}\xf0P\xc0\xfb0\xeexJ\xe1.Y\xf9%\x1a\xcd~\x04\x0f,6:\xda!\xf6`\x83\xf1\x86<\xd2\x94~\x17+\xb4>\xf3\x9e\xe4k?\x84\x1bGL\xff\x14~&U|\x1eb\xc1L\xdf\xed\xb5N\xa3Q\x92\x06~M\xe5\xf9\xe5\xa63\xcew@\x1e\xecv\xf4\x86\xdb~m\xd4\r\x10\x15\x86\xa0f\xd4\x08\\\xff\xa9/t~s\x18#\x06\x82e\xb4\xee\xce\xbe\xe2m\x9f4\xd3~\xc3M(\xf8\xcbi\x7fN^j@\xf6\x15\xad\x1d~\xefX?\xdf\xde\xb7\x86$\xab\xd2\x83\x9b\xc9ga~\xfe8\x95\xa1\xe9_%\x8e\xd1\xaf\x9e(\x9b\xac\x1d\x7f\x0e\xff/\x9a\xc6\xa5\x9a\x1cM\x97\x7f\x0c\x7fy\xf2\x7f/\xd1`\x08\xf9\xe5\xe0\x97\xaf\xded\xab\xa0k\xb3\x7fkG\x9e\x137*\x16\xbd\xdf<\x0e}{\xe0\xc3\x7f\x83=\x03\x105UEF{\xe7{\xbf]\xd9\xb6\x7f\x8dTg\xbf\xee\xa0\x98\xcd\xbb $0\xa2\x86\\\x7f\xcbh\xcf\x97\xa2\xa078\xad\xe9\xec\x19\x95\xa9\xe0\x80.I\x0e\xb4\xd0RzRK\xe2\xa2\x00\xf6 4\x80b\xe6\x1f\r\xba\xc2\xdf\xd2\xf7\xbb\xc16\xb3\xc5\xf8\x80h\xd3\x9f\x93\x95\xdd\xd6\xdaU\xac\xb4zo\xceh\x80\x7f\x8cY\x9e\x1c\xce\x19&\x17H\x13\x98\xaeM\xaf\x80\x9d\xbd\xd2<be\xac_\xb60\xeb\xb2%\x92)\x80\xb2*&\x8f\xc3>\x9e\x0eg\x80}\x80"W\x8f\x81T\rs\xd1&-\xb3\xfd\x89\x04\xb8\xc6\xfd\x99\xb4\x81^\xb8\x88\xde\xfd`\xf5\xa6\xeb\xba*\xbe\xe0\x97>\x81\x8d]a\xac\xc8\x02s*\xbc82\x04\xb4\xa9\xa7\x81\x96\xa8\xcf\xf7\x9a\x13\xb8\xd3\x81\xa2\xe8\xa52\x0e\xea\x81\xc7\xbc\x7f\xc8#\x84\xfd]\xedMW\xf8H\xaf\x1c\x81\xe4&\x81%H*\x89 \x949\xd2\x7f=$\xe6\x820k\nG\xfb~\xaa>\x94*\xfe\r\xc5\xe5P\x82\\\xb4\xe7y\x1e\xcat\x9f}\xba\xdfJ\x11JX\x82o\xce\x05\xc2!\xda\xd8\x02<\x94\xefJ\xf3\xf2\xd7\x82\xca\x94\xd4\xa8\x15\xff\xf7\x8e\x7fW\x8a#\xc8\xa7\xc2\x82\xef\xc4\xff\xf6\x9c\xda2h\xb3\xea\x1b\x9e\xd9\xd3\xe0\x83\x1f\x9c(\xe8\t\xaa\xe5\x0e@\x92\xac[\x7f\xb9\x15\x83\xa7SQ=v\xceA_v\xc4*\x13\xfbFQ\x83\xd1\xc2I9\xb0\xa2\xb1V\xda\xa0\x11p\xb2\xd2\x9d\x84\x02\xb2\xc8\xffQ\xaa\xaf\x1a[g\x07\x1a\xf8\x9d\xf4\x84*h\xd8\xa2v~\xef\xb6\x04\xdb5\x01\x98(Q\x843\\[\xf3\xaa[,"*\x81\x1a\xa0j\x1a\xd3\x84<\x1e\xfb;S\x96\xe5\xff\xfe\x85Y\x7f\xc3[g\x84O(u\xd0\xeb\x00e\x94\'\xf1\xce{r\xe0\xca\x84P\x8c\xc1\xa4\x16j\x1a\xe2\xc2[\x92P\xb9\xa6\x08\x84Y.\xbe\xa4\x9e\xb8\x11G\x10\xb5\x0c\x9a\x1e\x9a3\x84\x8fX<\x0b\x1a\xc9k\x07\xe0\xa2!(\x84\xd7`\x84\xa2O:\x1d#\x8b\xd1\xe1\xb0\xc4\xec\\\xc1\xb7\xe7\x84\xbc0\xb7\xdfd\xd3]\xd7\xf4\xfd\x9c\x02\xc6\xf2t\x84\xd3\xdd\xefn\xf6\xca\x85\xb73\xee\x19\xef:\x00\xe5\x84\xe6hK\xf9\xf4$\xe4\xb5\x9f&{$\x184k\x84\xfd\x9e\xa6\xc1\xa1\x9d\x9d\xb8k\xf3\x89\x15\x11O\x13\x84\xff\xdf\x1d\xd5\xad\\\x0c\xc6\x8d\xeb\x13\x86\x94\xb1\xf5\x85\x04\n\xe1\xaa\xd9\xce4\xa0T\x84z\xd1`YC\x850\xe8P\xf6<>@\x1f\x04\xbe\xedf\xa4\x9bb\x85oO&\xad2\xd2R\xf5\x831\x90\xe8\xf9\x06U\x85\x82\xfe\x1a\xf4\xdd\x8bGh=\x8c-\xc2\x9e6x\x85\xd0\xfei\xd0O\x9aGg\xd7\xcf!\xe2`Iz\x85\xf8Ph\xbd\xa1\xbe\x19\xbc\x9f\x8c)X\x0c*\xcd\x85\xfe\xd2\xfb>\xef\xbb\xcf\x8f\xe7H\xa2\xf9l\x0e\x93\x86&\xa1u\x92!\xcf\x13p}\xc1\r\x17\xe5\x8c\x8a\x86C\xa1\xc3\x1f~\xf4\xac\x97^\xe0[\xd5e\xf0\xe0\x86L0\xfa\xb2q\xae\xe5\x93\xe9\xdf\xa5\n\x88\x98\xec\x86Z\x89w\x01\x906V\x01\xad\xddE\xe5\xff\xbf\xab\x86[;Ka7\xf5\xb5\x1dm\xc5wj\xb4\x14\x97\x86c\xd3\xd5{\x18G\rT\xa8\xf9W\xb6\xd2\x8c[\x86g\xa5\xbe\x14\x867 \x03!;\xff\xb5\xf3\r\xc4\x86\x85m\x9d\\G\x95\x03`ma>:z\xe8\xca\x86\xcc\xc0\xc4(\xf3\x18?\x8b~#\x8b\xaa\xde/]\x87+\xd1X\xd6H\xa1\x1a\xdbZ\xd6A)\xbbY\xd3\x877\x80\xbf\xd1\x90w%Yz\x19\x93\xe3\x97)\x03\x87t\x1d\xfe\xe4\x8aW\xb6\x8b\xe0\x90$\x1a\xfbx\xa7\x87\x86\xb5:\xfb\xe5\tX\xef\x8a\xec\x83\xd70\xac`\x87\x95n\xaa(8\x08\x90\xe7\xda\xd8\xfc\x84\xa4\xa9\xc8\x87\xa1J5\xba\xe1\r\xaf\xedF\xfd\x8a\xc0\xe6\x89,\x87\xaf"9\xfc\xf7\x9f/#D\xa7\xce\xcf\xc7oe\x87\xbd8g\xe4S1\xe2\xe7\xc0\x17\xf8\xf8M\x05\xd3\x87\xbe&s\xd2K\xc6\x80\x8ci\xfa%?F`%\x87\xc8\x96S\x1d\xd7\xc5sM\x86\x1f\x8e\x82\x8e\x8b\xde\x87\xdd\x03\xb6\x05\xd7\xbbGi\xeb\xa5\x82&\xbb\xea\xbf\x880\xc8\xba\xd9)!\x10\xa6\xcd\n\x9a\x83\x80\xa7\xc1\x88d\xbcCg\x0f\x90\xe0<Ka\xe0\xda\xba\xd8\x89\x88j\xca}\x8a\xbe=m\xc6V\t\xe8\xff\x8c\xcd|\x88\xb1\x82R\x90J\x9c}\x04\xe7\x91\xb4\xa5\xee\x85\xdc\x88\xe2\xe7\xebV"\x0bnx\xb4\xd5\x1c\xd2D\xc6+\x89\x04\x9dD4M\xa48\x03 \x86\xc9\xfc\xc4)\xaf\x89"\x9eEEJ\x9d{\x10\x10\xef+v\xfa\x81h\x89q\xb0\r\x1bc\x9c\xb2\x1a\xb0\xc4\x17\n\xd1rt\x89\xc58P\xe6\x9f\x9d\x17\xc2\x10`\xf6:\xa0x{\x89\xdf\xafO\x1dc\x86\xc9=gf\xd6\xaf\x93\x93\xbb\x8a(<s\x9a\xf0\xa1>\xb2*@\xd7\xf8\xe3\x17\xa1\x8aWXdx\x9a\xe5\x1e.y\x98\xd7\x963D=\x8ax\xb3\xf2ux\x87\t\x14\xda\xbb\x85a\x95\xe1\x91\x8a\xc4\xd5_\x96\xd8j\x92\xba\xe0\xbb\x19\xf0\x80\xf9\x1a\x8b)t\x03\xe6\x0f\xcf\xd2<\xa2\xbd/G\x84\xdd\xc7\x8b/p,\x9b;Q\xc4x\xe8\xba\x05\x85\xbf\x1b\xbc\x8b=s\xf0\xdaO\xf8z\xbd\n\x91\xc2Pp\x88\xae\x8bQ\x96mbZ\xe8\xdc\xc4\xa2\x80\xc3\xbe\xa42\xf4\x8bX\x18u[e\xc9\xa9\xf2\x18\x15e\x98\xbd\xf2\xf6\x8btwTz\xf1\xd9\x99\x8b\x0e\x1d\xb8\xa9~>\xe4\x8b\x81\xc1\xc8\x11\xda\xb5G\xb3\xff{\xa1\xfdbd\xaa\x8b\xb1\xf3l\xb8\x06w\x8b\xbd\x00Lf\x01\x86\xfd\xf2\x8b\xbcEV\xe6\xa6\xfeII\xcf[.\x04\xab\xceS\x8b\xdd\xea\xf2Z\xb7\xa2r\x90\xf8\xbe\x91}\xad}z\x8b\xe5\xee\x95\xd7!F\xad\xd5\xf0\x17\xa1(q\x81r\x8b\xf4\x01\x96\xacqo\xfb\xe0<\xa1c\xec\x9c\x98\t\x8c \x00\\\xd3\x15\xb5\xd9Mg|\x9f\xcfynI\x8c&!\x0bo\x0b\xc6\xf4\x92\x1e\x99\xa9\xc4\'\xa3\xd5\x8cfM\xf9(\xec\xf4B\xb6\xe2\xaa\n\xe2\xc5\xb0\xf9\x8c\x8d\xa6\xcb\x91nM\x07N\xb7y\x0e\xe3\xe6\xa0F\x8c\xc0\x00Z\xde)0\x96\xd6v\x83\x05\x05\xa2\xaar\x8c\xc7\x1c\xb9p\x9a.\xb0o\xf8\xd5\xd9\xbc"\xbe\xc1\x8c\xee\x98\x12u\xeej\xca\xcf&T\x80\xac\x98\xaf]\x8dS\xa1\xcd\xaaE\x8b\xb6z\xeb\x07A\x99\xbb\xa9\xd3\x8dYl\xd1\x83\xad\xbcE\x1d\x86oK\xf2\xe0\x0e\x07\x8dnY\xbb\xec\xe6\xe0\xe1+\xc9\xcb7\xad\x8a\xd8\xcc\x8d\x8b\x990b\xe3{\xdc/\x8dV\xd2Z]\xbc\xb8\x8d\xf3\xcb\xeb!"\xd0\x9c\r\xae\xdam\x974 w\x8eG\xd9*\x90\x89\x19\x05\xa4y3\xd4\xf3\x01\x84\xfc\x8ec\xb8\xf5\x8a\x1c\x1d\x8a\xc7\x9a*2&\x9fm\xf1\x8e\x93k]tx\xd9}!\x02\x86\x08\x847m\x8d\x8e\x9a5{*\x1d@\xcf-\x94\x9b\xa3Wf\xae\xb3\x8e\xb7\xe8yL%"\xa5va\xd8(\xc0\x8f\xf6b\x8e\xdf\xdc\x9fF\xb6\xb0u\xb2\xebB\xa2\xa3\x87\x13\xd5\x8e\xe0@\x9c\x81\xfeW\xf0jG!t9\x1c\xc2\x02\x8f\x16F\xf8kf(^x\xdb\xc23GfY\x80\x8f3/\xee\xfc)l\xe1\xdf\xd8\xd3\xe8\x9au\\\x02\x8fpjO\x9f\xba+y\xc8e\xc0w\x05o\xeaT\x8f\x9a\xe5\xed|`\xebd\x19r\x1c\x96w\x14\xe7$\x8f\xa77\x8bk\xb8\x1a\xdfRL\xbe\xf6\x1c\xf5F\x17\x8f\xcf\xb2{\x9c\x13\xf8\xabe.d\x16\x99r\x86P\x90\x04\x84+q\xf6J\x98\x17L\xbc\x18)7s)\x90\x13\xff_\xe2\xb4\x924\x03\xd4\xfd\x96[\xc9q\x15\x90c\xeb6\xcc|\xb3y\xda\xdd\x84AP4\xaf+\x90\x88)Ew\xb7\xc38e\x96W\xd7\xe8\x04v\xe6\x90\xc6\x8dxr\xfa\xa8\xd8\x87j-5+\x1a\x7f\xd0\x90\xeeX\x83{\x95+\xc8\x9b\x19\x8f~\x13\xf0\xb7\xb7\x91\x16\x97\x82L~\xb2TO\xf8\xf7\xf8\xc2\x03\x80X\x91\x17\xb4\xe4\x881\xf1\xbc\x10g4\xfbh\x1a\xa3a\x91;\xb9\xabz\xd7\xe8\x94\xd2<\xa1\xcfFP\xb1\xd8\x91\\\x99\x92\xf0\xd68\xa8\x0b\x96#\xbb\xa5/\xa0\xa8\x91\xb5Ns(\x9e\xad\x8b\x99}\x9f{l`Hz\x91\xdc\x98\x877T\xb8\xc4#\\\xb8\x90\x16\n-e\x91\xf1\xeb\x8f\x9d\x14\x94\xd5\xc6\xb4r\xc7\x04K\xddz\x92\x18+\xbcQJ\x0b\r0\xfe\xd1\x8e\xa0%\x8b=\x92\x1b)\xcd\xc1\xd3%\\\xbb\x05+\xfa\x1fo~V\x92@m@\xea\x1c\x8f\xbc\x04\x97\x1eU\xd6\xfa\x90K\x92q\xe9e\x1a=\xd9\xb2\xb0\x14\xdb\x8b\xc5\x95\x95-\x932y\xfe=\xb1S\x89\x7f\xb3\xc8\xb7\xc9=l7\x93a\xb5c\xd0V\xb2\xfe\x90\xc3\x00$ \xbbUw\x93j\x1fGC\xb7\x1c\x8d\x93\xba\xfd\x9e\x1dNc\xab\x93~\r\xe8o\x7f2\xce!f\xf3\xd8s\x03|\xd0\x93\xb9\xbaS\xc7\xf3\xf9l\xd1\x7f\xc0;\xe3\x8dw\xbd\x93\xeffj=\xb2F\x1d{\xc6A\xf5\x1c\xee\x9eI\x94ef\xc8\x1a\xe4\xc4\xd9\xab>\xcb\x7f\xe1!w\xea\x94r\xb8\xd6\xdb\xf5v9I\xe1\xb3\t\xe5\xdb\x15W\x94\xb0%\x8ekG\x18>\x838\x9f\xe1#\x94\'#\x94\xe2\xe68\xb2\xb5\xc7\x99\xdb4o\xf8MU\xbf\xc8\x94\xfb.\x1a\xc7\xc8\x89:v]\x06u\x9e\xb5\x8e\xb5\x957\xec0\x10<\xcd^<|NW4M\xb6J\x95\x89\x9d\xb2\xf6jdj\xf7\x00\x94\x05\x95\x8f\x12\xbc\x95\x8a\xe0?\xdd\x1a%\xbc\xe62\xafS\'_8q\x95\xc0\x0fS\xd8\x9c\xd55L\x06\xb8\xa3\xca\x0c3\xca\x95\xd0\xd1\xf1\x87\x97\x1f\xe3\x87@#\xb8e\x84\xde\x92\x96\x1f\x93|\xbd[\x85\x0b \xc8J\xa5\x91?\xcd5\x96&n\x8d7\x01\xfb\x8f\xe9\xd1h\x0c\x0c\xea\nQ\x96.\x84\xe9\xd7\xdb\xc3\x92\x141\x95\x84\xa8pjx\x96\x8c]\xd5,ren\xacF\xaf3\x88\xd5\xc7J\x96\xec\xcf\x8cu\xdeb]\xb8c\xe80@CH\'\x96\xf8}\x14\xc5\x00\nT\x97b\xf1v\xbb\x1bm(\x97C\x9a\xa9?\x88\'\x84w\x85\\0$\x81d\xc9\x97G\\\xab\x0bw\xe0|VoR\x99\xe1\xb6\xfd\xc0\x97n\x97dI\x0cw\x14\xc3c2\t\x05\x1c\xd1G\x97|\xac\xfbmt\xd6k\xe5D\xf6~]u,\xa9\x97\xa2\x084\x9cG\xeb0\xe3\xe7\xd1\xb6\x1d\xb1V\x96\x97\xff\xf9\xf2\x8e\xf3\x9d\xc4@(o!\x92\\\x8d\xeb\x98\x00\xa4\x1b\x1c\x04\x98\xf5\xbc\x19\xe6{\xd5\xb9\xbcm\x98\x1a\xcc\x0f"\x13t}\x0b\x9b\x1f\x1b\x97t\x88\x01\x98\'\x81by\x9b\xcf\xa8,\x1bO#\x14\xaeFK\x98G\x9c*\xb3.\xdd&\nijs\x949\x0f\xe2\x98\x7f8h\xd6N\x1fb,S\x9f[\xea~\xacA\x98\xa4\xef\x90\x99;\x96\xb7\x0b\x04\xcbU@m\xd1q\x98\xc8OEx\xae\xed\xa2\xb0\xc9\x14\xdb\x0c7]\x81\x98\xd7\x17.\xd7;V\xeb\xb1@\xf8\x9b\x05\xfd^\x8b\x98\xdf\xf7\xdb\x81\x03\x9e\x87\xa3(\x85\xab`Q;\xcd\x98\xe2KQ\xd6\xd9\x88\x1b\x08\xfe\xd9\x1c\xc8\xe5;\xac\x99\x0f0\xeeb\xe0p\x83\xac\xf1E\xf0\xa7\xb0\xf8\x81\x99\x0f\xed_R\x05\x1ah\x81\x0f\xab\xdecTP(\x99\x10\x87\xd7\xdc\xd2<\x19c\x97x`&\xa9\x93\xbe\x99k\xd3~t\x1c\x1bq\xb2\xe8\x9d\x95\xb2\xb3\x16}\x99\xf5j\x80\xde\x1d\xb1\xe1\xea\xbc:\xafE"\x0c\x14\x99\xf8\x90\x91\t8\xf0k_\x8aO\xb2zD8\xd4\x99\xfb\x9d;\x02&e\xb9\xc1\xa9\xe7\xaa\xacH\x89\xfd\x9a\x17X8\xf4\xca\x89\xc2\xa8O\xee|\\\x07\xb9\xa8\x9a<\xb90\xdb\xc7\x16l>^\xc3H\x9d/\x92|\x9aY\x7f\xf6 aU\x81;\x94\xde\x13x\x1c\x120\x9a`\x85\xf6\xa2\xc9\xb9\x94\x9b\x82\xd7\xda\x9d\xbb\x1a\xf0\x9a\x9f\xbb\x8do\x1f\x08\xf9&0\x15\xe7Y8r\x0e\x9a\xa9\xd4Yji[\xa6JR\xf1G\xc2i\x87\x99\x9a\xaf\xb9ns\xe2\xec\'\xe9p"\xba\xe5\x1a\n\x93\x9a\xd0\xd2!\xa3\xa0\xa0H\x06\xa1do\xda\x84R;\x9a\xe8\xa0\x85=\xfe\xfbQZ\xb4DV=2L\x1f\x9a\xfa\x85nlc\xda\xe1\x06\xd3[\xb2\x7f/\xc7s\x9b\x0e\x18[\xb4\xfc\x1b\x9a\xc4L\x8a,\xed\xe4w\xee\x9bA\x92\xd9\\\x9a\x94\xf6\xd3\xbb\x84WzT\xbc\x11\x9bPwR@\x0bB\xb65\xab\xc4x7Mf\x90\x9b\xa3x\xcc\x02\x9f\xa7\x9f\xee7\xbc\x99P\xb1\xf5\xe6\x9c\x00<\x8c~wkY\xa0\xc0\xa9V\xd9\xdd\x1c\xe6\x9c\x0644\x0bT\x07\xa5\xef\xaf\xff\xf5\xa5\x92\x82\xc0\x9c\x08\x9e\xed\xee\xc9\xff\xfeLx\xf4\xce\xbc\x17E\x15\x9c!\xbdP\xdf\x08\xe2/\x98\xf9\x8b\x02\xe6\xc4\xe7\x18\x9c%\x12\x8a\xeb\x0bS\xef\xb9z\x90\xad\xa5\xe9\xe2_\x9cTTN3\xb8V8\xe5C\xd6\xc7\xf2\x84\xfeE\x9c^\x7f\x07\x088\xf9k\xd3y\x1a\x07\'\x98\xaa\xcc\x9c\xb9\x9c\xedA\xbd\xa4\x11x\xe6\rU@\xe1m\xc1\x9c\xd6\xb8\xad\x02\xb2\xa1\x9d\x90\x9c[F\x0fl\xc9\x92\x9c\xe1{<vm\xcem\'\xec\x82\'\xb0$ \xdd\x9c\xe9|\xaa)\xc3z\xab|\xc9\xa1C\x9e\x826V\x9dVJ\xc1\xc2\xa8\n\x15\xaa%\xc9F\xd6\xbb\xf7\xc8\x9d\xbf\x92\xbf\x8c\x9b$^\xcfQ\x1d\xb4R))b\x9d\xd9\xcc<a\xe3Z\xe8\xb9:\x95\xab\x91\'c\x89\x9e\x1fZ-:\x8b\xc9\x99\xfa<\xe20\x86\x06\x1c\x9a\x9e3qsL\xc7\x90\n\xce\xb1\xea\x19\xa2\xb60\x1e\x9e7\xa5Y\xf3\x93\xa0X`\x8c\xb7\x88\x89\x11\x9dU\x9e\x8d\xa6\x0b\t\xd3<^\xc0\x7f\x908\xff\xa6\x9e\x92\x9e\xab\x97y\xd8\xce\xef\xe7{d\xcc]\xf7\xb3t\xad\x9e\xb6=\x8f\xd9\xd9\xa3\xf1\xdd\xaa\x1f\x95c\x17*\xe7\x9e\xb8\xf95\x9b\x9a\xff\xbc\xccL\xd99@\x89\xff\xff\x9e\xce\xbe\xd5\t \xc2<4E\xcf1\xc2\xed\xd5\x89\x9e\xdb\x02\x84\xc8Z#$5\xdd\xd46\xf8\xdc>\xe4\x9f\x0ctifl\x8c<\xc5\xea\xaa\x15\xe7\xeaj\x9e\x9f&jL\xaf\xe3\xd3q\xe5\x111\x80GU1\xbf\x9fN\xa2(\x01\xf9\xf9\r\xdb^\'\xbf\xb1\x1a\x18[\x9f\xb6m~c\x0c\xa1\x84\x9fq\x8bVZgZ2\x9f\xbe\x98\xad\xe2\xf6\xe9/\xf6\xf2\x07\xd0:\xf3\xb2B\xa0\x17\xb9\x98L\xd3+\x08\x95F\xba\x93\xef~\xe5\x18\xa0\x17\xd1D\x93\x1c\xf1\xb89r\xe5\'\xd0^F\xfa\xa0A\xa6\tT\xd3\x8b(Y9\x97E_2\x88\xa4\xa0S;s\xd6\xabC\xf9\x17\xeeB\xab\x83\xe4\xc9\xdd\xa0a\x06\xb9\xbf4T\x9e\xa8{3\x97SK\x89*\xa0{\xf5 k\x12d\xe7U\xc3\xe6;\x8c\xc8*\xbf\xa0\x93^\xc4\x1cI}=\x0c\x16\x1d>\xcc\x1c\x15\x0b\xa0\xae\xc3\x97=\xd5\x1b\x0c\xeb\xe3\xca\x01\x04\xed\xa5X\xa0\xc0\xaf\xbd\xbdB\x047\x88Xm\xd7\x9e\x8f\x05\x19\xa0\xcc\x9d#\xbe\xd2`\\\xa2\x14\x94\x84cCK\xb8\xa0\xe3YD\x91\x93\x8e\xd3\xf7\x0c\xe6\xb3nU\xa82\xa1N\x99\xda\xc0K\xe4_\xea\x1bw\x9a\x9fVz\xa0\xa1U\xbc\x14(\xe8\x12\xf1#\xcbmP\x14\x8a\x89\x99\xa1\x85,\xb1 \x11K\xbb^\x04\x7f\x16D\x14vw\xa1\x99\xee\x97\x8bL\xcb\xd2\xdf5f\xfd\x1ee\xd7\xbe\xa1\xab\x1f,Z\x1c\xc1\x02b\xa9/6\xbc\xc4&\xfd\xa1\xae>\xc0\xbe\\\xa0\x12\xea:\x9f\xda\x98$\x9b\xe5\xa1\xaf!\x15\xa4_\x8dYO\xdc\xef\xceQ\x88~\x9c\xa1\xca\xa3\xcd\xc74\xd7\xcccR\xbc\xf5 \xc5\x08\xc9\xa1\xcbmZN\xabh\x8bn\x02_9\xef\xc0n\x87\xa1\xde$\xcb\xea(.\xe2\xb0\x88}\xbd\xf2\xf7\xcc\xd3\xa1\xe7\xdc\x91\x87g\xf0oh\r\x86\xc9W&\xcb\xb6\xa27Zc\xcd"){;\xaa\xbeB\xa1\n\xc7M\xa2CW\x9dk\xdb`n\xec\xa8\xba\xdd\x0e\xa5\xbaj\xa2\x80\x19\xc57\xa5\xe8\xdf\xd7:)\x08\xb2\x10=V\xa2\x95\xf4\xc8M\xc0K\xf7O\xf4\xbfQ\xfe\xb6\xd91\xa2\xad\xe6R\xefj\xb0\xdc\xf7\x86\x1a\xeb\\\xe4i\x11\xa2\xf2O\x02!\xc1*\xebY\x8e\n\x02p\xac\xca\xf3\xa3X\xbal\x9e|\x98\x18\x1eoYu7b=\xc4\xa3Y\xf32g]H\xb9X\xda\xcf\x82\xdf\x9b\xd6%\xa3l\x0b\x14+A\xf1\x93\xf2\xda\xff }1\xbeK\xa3}_\x98A\xfcw\x89\xd4\xcc\xf4\xd5\x1f\xff\xa5\xe4\xa3\xb14:tIf\xc2vw\xbb\x10\xda\xd6\xa98\xa3\xbd:K\xeflmB\xb4\x120<\xa7Q\xce\xf3\xa3\xde\xa2c\x12N\xba8\x9db\xa5\xdb\x91\xf5J4\xa3\xe1p.\xf6\x83\\\x00\xd8\xbd\xbe\x9f{|\x83\xa3\xa4&S\xda!\nT\xb6\x87O7\xf0\xd4\xa1-\xa5\xa44\xf5\xb6\xd7;\x99\x84\x96\x03U\x82\x18N\xaf\xf6\xa4<\x94%\x81\x98\x9c}D\xbf\xf0y\xc2\xac\xd7.\xa4n\xaf\xa3\x11\xc8&\xb9o\xe1\x18fU\xf4\xbeL\xa4\xc7Vv\x049\xa0\x96\x9b\x16\x02)\x17\x04\xfc\x03\xa4\xf7"\xbcL\xaf\xd6\xf2\x03\x85\xf3\xed!\xf6@\xfb\xa5\tKh\xc7\xd9\xcdL\xac\xf8\x1cx\xb1\x97\x0f-\xa5\x1c\x11\xa9-\x81F\xff\xb1\xca\xda}\xc0i\x97\x9e\xa5!\x94fE\xbc}\xd1\\\x13[\x8bk\x11 \x10\xa5D\x9d\xf6\xaf\xc6a9i\x08V-\x8a\x99\x18z\xa5c\xff3\x15\xf9i\xea\xea\x8d\x89\x80\x98\x86\xa5b\xa5f3\xc3\xc49-:\xab\'=\xf3kS\r \xa5q;\xe4\x00\xc1<\xb4\xf1;\xbc\xdb\x0c\x05\x93\xd2\xa5\x8d\xff\xfeR\x13\x9f92\x06;\xd9\xf1\xbb\xb8M\xa5\x93Im\x14\x88\xca\xe9J\x85\xe3o\xd0\xff\x802\xa5\xb1\x9f({s)\x15\xbc\x96\xcdv\xdc\x87\xf5\xa8\xa5\xcb\x1fw\x85\xd5\x1c\'\xa4\xac\x11\x8c,0\xd4\x91\xa5\xf2\x98\t\\\x88\x04\xe4\x8e\xb6bJ\xbe<\xad\xa5\xa5\xf3y\x8d\xc5\x98C\x04\'\x04\xb2-\xd5\xfd\x83\x96\xa6\x11.\x05tV\xa4\xd5F\x912F\xe8P\x91\x8e\xa6\x13{\xc7\x85~\xcf\xa6\xb6\x11\xc3\xca\xe8v6\xfa\xa6 \xba\xac\x99\x0c\xd9\xf1u8D\x85\xa7P0\xf9\xa6P1\xfa\x90ef~U`\xb0n\x02\x07\xa7k\xa6p\xa8M\x04\x10\x99\xa2\xa68j\xbbz\x81\xabY\xa6{\xe1J\xc8LB\x12]\xca/0F\xe6#\\\xa6~\x9f\xc7^z0$r\x867O\x8chD}\xa6\xbd\x88\x17fy\xa0\x81<O\x8c\xbc\x18\xb58\xd8\xa7"\xa4\xb0\xc7G\x89\xb8\x1a\xd8D\x9f\xe9\x8c\x8ff\xa7F\x92\x1d\xdd\xd9\x0f\x1f\xd3Z\x88\xf0J4\xc5\xb5\xa7hA\xdf\xf5\x95\xe4\x04d;\xfe\xa2j\xf6F+\xa7{\x86c\xef\x88\xb6\xf9R\xbcd{w\xb8,+\xa7\x99G]H{\xbe\x05\xf3\xf3\x84\xd49oSg\xa7\xb8V\xd3\xd3\xd2\xf0J^\xca&\xcc\x93\xafT\x8d\xa7\xc8^\x0e\xf3\x17k\xa4\xb8\xf1\x95i[\x9d<!\xa7\xe4^\xd1K\xb9\x12\xee\xf5\xea!\xce\xd8\xad@T\xa8\x1e\xe0Y#QE\xc8H\x99\xb1\xf8\xf1h|\xd3\xa89\xd8\x18\x18\xbd\xba\xd1\xfe\xf9\xcf\xd9$z\xc0\x11\xa8\xad\xc6\xccl\x81\x9c\x10\xc83\xca\x07F\x1b\xe3#\xa8\xd0\x9cpW\xa2\x12\xa5Y\xe6\x81\xf0y_R!\xa8\xd5\xda\xd8\x8d\x7f\xf5\xcd.\x8b\n\xf3^q\x16\xa4\xa8\xdf\x91\x93gw\xdd%%\x8bU\r\xc2*#\x0f\xa8\xeb\xda\xea\xc1\xcc\x1b\x9f\xd0\x9e\xcb4\x85lQ\x11\xa8\xf5\xe0\x90h\xb3\xb8\xbd\xed\xf7\xf6\xaaX\x87u \xa9\x06\x05\xf7\xd9\xad\xbd\x89\x0ct\xfc\xceJR9\x01\xa9\x15a\x81\xe9\xe7\xea\xd5aC\x87"\x1c\x03y\x10\xa9\x1c\x8d5p1\x9b\xc2\xa4X\xbf\xe2YU\xd9\xff\xa9N\n\xb3\xdd9\x9a,\xfa\xe6{\xe4\xb7\xc0\xad\xe9\xa9Q\xdf\x07.\xc1B\xdf\x16V\xb0\t\x84\xaa\x033\xa9X9f}&\xda\xca\xdcW\x9e\xdc}lA\x02\xa9v\xdez\xe2\x11\xfeR\xe7\xd6\xeb\xab\xd4\xb9\x9a\x9d\xa9\x85n \x19\xf4\xd90y\xf3\x18+b\xc8\xec\xe7\xa9\x88\x80\xc8\x9d\x10\'\x8b6\x90\x08\t\xa1\xd8]n\xa9\xe7L\xf5$\xda\xca-`,\xc8|\xcb\xd9L\x0b\xaa\x00IK\xe59\xa3\x11W\xf7\xc74\xf1\xb3^\xa2\xaa:\xe5Y@;\x80\x10\xa9\x90Q\xacSf\xea\x92\xaaC\x17V5<\x15r\x1d\x8aYe\xed\x1a\xe8;\xaaL_\xeb\xf5\x96\xbe\xb6\x1aVW\x98<i\x81m\xaay\xdb\xbe\x0e\xe2\xe0;\xacB\xa1\x8e\xfc=v5\xaa{\x01k\x95\xa2_\x86\x11\xba\\\x1c\xdem\xbe\x8b\xaa\x9fx\xd3\xc3AM(\xeeQw\xa6\xf3\x16 \xe5\xaa\xd2-\x10\x99R\xc3f\xe9\xba\rR\xba\x9b\xdb\x86\xaa\xdeJ\xe3\xf9\xda\xe0\x80>vGK/\xb2\xd8\x13\xaa\xfbi{4\x93\xfdC\\\x84\x1f\xbc\xdf\x92O\xee\xaa\xfc\xa4[O#i\x8f\xb4%\xd7\xc5Q\xbbv+\xab*\t\x9d\x93Z|\'\r\xfb\x1c"\x80\x88\xb7\x81\xab,\xa4yp\x82\xa4\'\x9a\x1f\xf7_v.\x86\xe1\xab4\x0b\xfb\xc7\x1fON\x1b\x9a\x01\xdax\xf9\xb2\x98\xabB\x90bd$\xacq\xb5\x946B\xac\x82WT\xabp,\xf8\x7f\xa0+?=]\t\t\xcd#i\x98\xab\xbb\x8e\x810\xf1\xb3\xf6\xa6)\x9e!C\xbc\x02\x9b\xab\xca$\xe5\xcd\xbf\xa4MA\xf4d\x7fkq}\xed\xab\xda\xec/\x84\x94\xfb~\xb3\xa9T\xa9\xa2\xff\xe8W\xac@YX~n\xb9\xa8\x98X\xdf\x85Dv\xf6\xcd\xacF\xa7\x16\x1d\xa3\xf8\x86A\xaf\xed\x11I\xba(\xd6\xac\xb9\xfbY#98\xe1\xc4\x19\xdc\x83\xb4\xf9\xfb\xed\xac\xe6\x1e4\xac\xafH\x16\xa8\x060\x91\x03\r\x9a\xee\xac\xf1\xc4\x00u1\x9a\xd0\xc2\xd9\xc7\x08\x9e4\xc7\xc1\xadsT1\xdb=I\xda\x90\x87i\xf2\x83\xe8}B\xad\x8e\xf7\xe1\x81\xc1\x7f\x16e|\xf3\xa4\x11\x9b6\xac\xad\xaa\x8a,\xf3\x9c\xe3j\t\x18Vl\x0f\xfe\x82s\xad\xb5\x18\xf0\x020Fn\xd3\xdd6\x9c\x15\x0e\xce\xcd\xaeD\x05\'\xe0u\xec\xbc\xcd\xbc]\xa9\x18\xd9\x0b3\xaeK\xb2\'L\xc62\x1b\xa8\x82\xd7~\x1f\xf4B\x03\xaej_\xbd\xab\xcdC\xffG\xcad\xff>\xa7v\xbb\xaete+}\'\x98`\xd0F\x82Q\x8f\xe0\xef2\xaex\x06\x043\xcaAss\x0f\x1a\xbd\x91\xe6\x11X\xae\x8b\xe5\xaaT\xf6G(\x9e\x0f\xddd\xb2]\x04g\xae\x99\x1d\xd6\xe8\xaf\x1f\xbf#G\xa3\x05k\xfd\x99\xcb\xae\xa6\x19z\x8d\xb7\x1cv\xe5\x110\xe7b\xf8\xbdr\xae\xc0\xb6\xbf\xb4\xa8zi\x99\xc1\xefn\xdb\x8f{q\xae\xc0\xdd\x97\x01\xe3Sp\x8a\x0c}o\xb5\xd5\x00(\xae\xdeV\nq\xf8\xc1]\xa8\x9e\xad\xc9\x9df\xe5_\xae\xe0T\xc3!\xe5\xb5h\xd67+\x85}\xb5BI\xae\xeb\xce\x7f\xc7\x98\x9b\xd8\x9d\x95\x99\xcf\xf1js}\xae\xec\x9bq}\xa9\xbcc\n\xc4$V\xa4\x87\xba~\xaf\x0fvqX\x1e\x06\xde\xcc\x91KA\xa2\x87\x89\x0e\xaf1\x13|\xf6\x01\x1e\x19\x7f\x9eW\x9a\xf9r\r\xcb\xaf5\xaa\xe8\xea@)\xa7tX\xaf\x19\xafg}"\xaf5\xde*\xdf\x94\xf3SF\xcb\xee0!\xba\xcdL\xafBI\xbd\x91y\xed\xcdY\xf4\xa1\x80\x9d\x00\xcax\xafO\xcc{.3\xfc(4\x803\xb0\xfd\x98\xa7\xb4\xaf\xc1\xad\xe5H1\x89\n\xc8\xd5T\xea\xe3\x16\r\x99\xaf\xda\x9a\xca\t9\xbb\x02\xc9\xc4nbV\xfd\x1d\xcb\xaf\xe1<m\xab\xdb;\x92uk\x83\x91\xea\x83b\x19\xb0\x07\x03\xc5{\xe0G,\xe0\xc9J\x06\xb9N\xa4]\xb0z\x19\xb6\x83\xf7\x97o(\x7f\x01\xfaDc\xaf\xb6\xb0\xc8\xff\xa7j\xff\x9fY;\xce\xf9\xfe\xafg\xff\x90\xb0\xdc8\x15\x12\x1e\xb7I\xf8\xf3\\\xef\x9f %\xe1\xb0\xe5\xd1\xee\xdc\x9d\x10[\xf1\x8fK\xcdxV=\x7f\xb0\xf9\xcd\xf4U\x99+E\xcam\x9f\xca\xd3\xc0\x9e,\xb1-\xba\xa7\x82u>\x9f\xcc\x83\x91>E\xa1S\x07\xb1;`r\xd5^\xaa\xcf\xf9y5&+\xf9\xa1\x9a\xb1`\xd3\xc6\x90\x8f\xc5\xf1\xa9\xe8\xa7\x1f\xf7&\xab\xd2\xb1~[7\x93\x06\xdb\x0b\x1b\xe6J#\xc7t\x85\xe9\xb1\xac\x16\x9de\xd64\xf15\x18\xeb\xca\x93w)%\xb1\xb2\xa3G\xf8sL\x9a\x86\x82\x92z\x9b\xdc\xdeb\xb2e\x0f\x15N\xc6\xf3P\xffb_\x1e\x92\x86\xd6\x97\xb2\x8f\x18\xa6\xc3)\x0e##`\x83\x15\xd4\xdf<\xd2\xb2\x97\xff\xb0Y\xd6\x11\xbe\xe2U\xf8\xbb\x1d\xa9\xec\xe0\xb2\x9c\x8b\xaa\xef\x9aa2I"\x1f\x9fQ.\t%\xb2\x9c\xb1\xd9d\xc4\xa3\xfch7\xb8\x91\xa31\xf7z\xb2\xea!s\xfb{C#\x16\xe1\xb5}o\xa7\x02.\xb3\x1b8,\x95\xa0\x98\xa5e\xca\xa2T\xbeG\xf8\x04\xb3+\xec\xcf\x05-+\xb5R\x90\x1d\x02\x85\xb5\x8eq\xb30\x8eF`\xa2U\xc9"[\x81\xa9\x85S5\xb9\xb33\xd7pC\xc9\x80\xc8\x96\xa8Q46b\r\xb8\xb3F#\xe4\xa2\x05\xc3x\xbb\x9f\xdd/2u\xff\x98\xb3F\xe5\xc7W\x86uFG[\xb3"\x9e\x82\xd4\xfd\xb3G\xfb2\xdd\xf8d\x19#\x887&\xa5(\x88@\xb3e\x7fD\x9e\x9du\xd4\xd6\x13%\xf8\xe3\\M\xa9\xb3v\x84,<\xf1\x95\xeb5\xfc\xe9\xc8\x1ah\x8c\x9b\xb3\x8f\xbf\x93\xa5_k\x07\xf4\xa7\xb0\x08\xf4\x11A\xb8\xb3\xa3>q\xd5\xabK\x85\x12\xa9\th\xeb1\x8b\xe7\xb4\xa7\xdaP\x118\xf7\'R\xca\xbf\x1f\x83\xd1\xf4\xf1\xb4\xbc^3\x04\xe7\xed\x10\x00\x94\xd5C\xdf\xc9\xb0=\xb4\xf1\x80\x8d\xe2Q$\xc2\x13\xc5\x05\xca\x0e3-\x0e\xb5(\x8a\xda\x19W\xc6\x07t\x1e\xb8\xbc^\x06:\xb9\xb5=v\xf1\xdf^\xd7%i\x1a\x8eq\x85\xd8B9\xb5JT\x06\xb7\x1b\xdf\xd1_\x83\x85\xe9\x02&\xb2\xfd\xb5g\xdf\x07\x97\xfcp2\xe0>\xac\xff\xec\xf1C\xa7\xb5r\xac\xf4\xdc;\x07\x16\x9d&\xed\x83O d\xe2\xb5t\xadx\ttev\xf5~\xeb\xd1n\x0b\xd9\x7f\xb5\xb4\xe5f\x15\n\x1a\x0e\x92\xb7\'\x94\xe9\xe9\xd3\x9f\xb5\xdd\x13\xc0\x00iW\xd2\x0ct\x0e\xf4s\xa2\x9b\xfb\xb5\xf8<D)\xc1\xb0\xff\x9aP\x802\xa9^\xc8\xfa\xb6\x16\xf91\xeak$X\x942E\xc6N_4\xc5\xb6\x1f\xd3\x06\xb0\xf0\xf3\x04\xa1{\x83\xc4\xb2#z\x90\xb6j%\xe7\xa7.C/\xc1i]\xacZ\x92w)\xb6\xb8v\xe0\xd3\x1d^\xff\xd0\xf1\xf6\xcb;\xaap\xdf\xb6\xe5^~\xc66\xa7\x10\x0f\xe7\xbff\x8f\x1f\xe7b\xb7\'/\xa03\xfd\xdd_\xcb\xa6X\x1bp\xfem\x9c\xb75i\x86l\x87\xa5\xfa\\\xbc\xa2\xb5\xac\xfcF+\xb7:\xd6\x1e=\xdbG\xc9[\xd8l\xb9\xcfm\xb5\x1b\xb7`$\x10f\x89v\x94/\x9a2\xb8\x9f\x9e\xc1x\xb7g\x98U~\x87\xc2\xdf\x111\x80\xd5\xf4\xac5\xd9\xb7\x87\x00\xc1_~z\x95\xe7\xf2\x94b1\xdbW\xf6\xb7\xce\xf2\x82\xbeD=\xcc$\xef\xae\xa8\xb1\nMo\xb8\x02\xe6\x91\xddk\xfb\xe6\xd8\xa8p_p!\xbd7\xb8$\xa7\xc5\x9d\x92e\xe9\x8c9A\xea\xb7\x01\xfe\x08\xb8LE\x08\x0b\xbaY\xee\xee\xf1 I\x03|R\x91\xb8g\x0fB\xb4^\xeb\xc5\'\xe9\xb5N\\\xa5y{\xb8\x93\x19\x87\xbe\xa3\x1d\x1eU\x0b~\xd5\xe9\x81\x94\x11\xb8\x97\xe2$)y\x9f\x83X\xcd\x97\x92\xd5\x0e=\xc7\xb8\x9b\x87<\x83\xa5\xc1\x14\n\x9b@\x93\xcb;\xeb\x19\xb8\xdd\x0e\xd5.ZD\xe9{{\xeb\x14\xf1\xcf\xc3\x9d\xb8\xdf\xa8\xc7\xf4lm\x8b\xcf\xbf\x8eC\x80\xcbX\x9f\xb9\n\x12\xbcU\xd4p\xa3\x0c\xe5c\xddCWD\xfb\xb9\x1f<\xc1@w\xe4;\x99\xdaA\x11s$]+\xb91t\xb0qp\xf2</\xe8t\x96\xfb=\x05E\xb9I\x1f\xec\x11 \x1f\x9c\x19\n\x90\x937\x84\xee\xdd\xb9k\xf8\x89\x95\x00\x9eb\xa8\x12*!\xd5\xcb[\x1e\xb9sS\xd4\xfc\xe3\x01V\xae\xf1\xbe4\xd8\xe3\x00 \xb9\xdbl\xa3\xbf\xe9,\xab\xd7\x97\xc3H\xe0\xd94\xde\xba\x08~\xeb\x86\x8e\x8a\x14\x08\x05\x9a\x15\x11~\xeap\xba=\xf6\xab\xb8f\x02@\xe2F\xb4,B\xf1A)\xba\xbaR\xd5\xe10H\xb4;\x06\xa6\xb7\xb9\xfb\x04\x18\xba\xbf"\x8f0rM%\x91\xc7du\xbf\x86\n\x02\xba\xc4{r\n\xee@v\x84\xbepG#v\xf3\x89\xba\xe6\x0b\x08\x8b\x13\x0c\xc6Dn\x97\xa2MO\xa56\xba\xed\xf3\xfb\x8b\xf4\\\x07>]<$\xd8\x04u\xec\xbby\xf6\xe4\x82|\x89s5\x8e\x12D\xcf\xf0\x93s\xbb\x8e\xe4\x02\x11\x85)mX~A\r\xfbC\xee\x8e\xbb\xcb\x9cf\xcc6\xb0:\xbd\xeb\xa7=\xf2\xd3#\x86\xbb\xd4a\xf2t\xc9\xe4\xa84\xee\xdc\x98QJ\x17\xe3\xbb\xd6d\xba\x9eb\xe8\x87\xab\xe2VQ\xf8d\x98\xfe\xbb\xe4v\xacz\xb1\xea\x9b\x06\x1ai\xbb\x8e\x81q4\xbc\x9a\x8f+o\xff\xd5\x85q\xe1\x88\xbb\x11\x05E\xf8\xbc\x9d_\x06\x1f\xc6\xb7RG\xaa\xe8\x85\xd0\xf1\xbd\xe4\xbc\xafn/\x0b\x86\xea\xa8d\xd3~\x8095\x13\xd7\xbc\xb8.\xa7\xd6\rj\x9a\'u<\x86\x1f\xcfQ\xb4\xbc\xc9L\xd5\xa5\x93\xd7"H\xe3:\xb5s\xcb\x14h\xbc\xd0\xee\t\xeeRu\x1d/\xaf8\xd7\xc2\x11L\xc0\xbd\x1d\xd7\xe6t\x14\x06\xc8\x0c\x8f\x8es\x1c\x04\xdf\xfa\xbd \x8a\xcb\x8d\x13\x95:\x1a\xda_\x9c~;\x81\xb0\xbdc\xa6<~\xd3\'5\x97\xfd\xcf<$n\x8a\xfc\xbdn\x1e\x04\xf5\xf9\xc0\x96\xfb\xa1Fs\x96\xec\xb3W\xbd\x7fW\x80Q\x1c\xa5\x07\xcd\x9c\xfd\x9a8\x0fqp\xbd\xc41n\x06\xb1A|WW\x0fI\x15Je\xba\xbd\xd2d\xf0\xd6\xcf\xf9\x07\x02\xab\x15b\xa3\xe0\xf8\xc0\xbd\xd4\x949\x96\xb0J\xc9\xe5\x99o\x80\x07Q\xa0\x15\xbd\xed\x0bcD\xe1\x08\r\xe8\xc2i\xbf\x8ahw\x94\xbd\xf1l\xa8\xe1\xfb\xde\xae\xf9\xcb<3(Tb\x10\xbd\xf5\xb4Q\xecM\xee>\xf6\x9d=K\xbdD\xa2\x1a\xbe\x01R\x8b\x1a\xa2"7`\xb8!>?%\xa0\xab\xbeb\xe7"\xa5\xc1v&\xb4\x92Tz]\x12V\xe2\xbex(\xdc\xe3\x9a*\x81|\x18\xcf\x11\x01x\x19\xc8\xbe\x84\xa9\xcd\xd7`\\+\xa2\x9f\xb0NJ\xc3\r\x06\xbe\x86(\x16\xe1NN\xe2m\xc3Q\xf8"\xbe\xf3\xf2\xbe\x8e\xb82F\xe9\x96}\x02+\xfa\xb3\x98\xe5\x88\\\xbe\xb0\xbc\xeb\x0bF\xd6[\xb1ID\x86-@P\xd2\xbe\xd2g\xe4\xa9m\x8d\'\x05L\x9f}\x14\xf2 \x7f\xbe\xdc\x16+ux!>\x861r=\x87\xd7\x04<\xbe\xf2\x8c\xab\xea\xa9\xedN\xfc8\xb7\xed\x16@&G\xbf\x02gf\xd5XTR\xd3?\xe3.\xf6|gT\xbf9WP\xc18\xa3\xd3b\'\xa8\xa7J1>$\xbf=\xcc\x03\xdc\x12\xda|\xfc\xf1:\xdfD\xf7\xd0\x96\xbfL}\x07\x85\x86\x00N\xefs\xa2\xb2\x8c\x88\xac\xc9\xbfU\x07\x91@x\xd3M\x9f\xbcm\x92\x14w~\xea\xbf\\xH\x122\xe4\xf4\xf3-\x9e\x13p\xc4\x99\xe6\xbf_\x98\x9b\xcd\x99\xec\xe4\x99T\xf9Z\xa4D\x9a@\xbfj\x93\x96\x859\x06Y\x8c\x14\xf7yy\xc6\xdaD\xbf\x8bKN,\x83 d],\xa5g\xc7!\x9e\xf9\xbf\x8e\xe5\xf8\x9a\xbb`7\xe45\xef\x9cTx\x87\xdd\xbf\xa8"\xe6o\x9f\xb5\xc5\xac\x94\x80\xd1\xdca5Y\xbf\xca\x13v\xbf\'\xbe\xb7\xae\x1c\xe3\xc5Id\xf2N\xc0@\x1f\xd2U\xf9\x9d\x92\xc1\x08\xcd\xbf\x9cz\xd2p\xc0B\xfeB\xae\xfc\x86\xe4\x9d\xc8\xab&\x81\xf6e\xf2\xc0\xf4\xde_\xf6\xf1K\x10c\x9a\xfd\xef$\x18\xef\xd5\xc0\xf82\xce\x98\xf8\x03\x0fB\xc0q\xab\xf3\x06\xda\xc2\xc1\x10\x17\xceb\xd5\xe2\xc7)\xcd;\xb3v\xa9*o\xc1E]\xc0\xec\x96\xd6r\xd8\x1a!\x90X\x17\x04>\xc1J\x1c\xdb\x97\x92*\xd9\xf9\x107\xeeB\xf1\x8ar\xc1\x9cy\xb1A\xc8T\x95\x10\xc4b\x0f\xdc\x08Dl\xc1\xa6W\x9a\x17s\xfe\x15\xfd\x8fn)\x00\xd5{\xa9\xc1\xfc\xaf\xd4\xfecS\x7f\xea>M\xc8\x9dQ\x88\x8a\xc2"Hx(\xed\xf3\xc5\xdcp|\x16\xbf|(\x10\xc2$\xd5K\x0e\xd9v_K\xa0{\xe0\x14\xb4\xd4:\xc2\'\x81#\xec\xdd\xa6\n\xcd\xd0\xf5\xcd\xce\xcd\xe30\xc2.\xc2\x86r+\xc5\x83\x1f\x91\x93\xf5kv\x00h\xc2:\x0b,\x9f\xfd\xc0?HW\xfdZ\x90\xa72\x10\xc2?\xbeG{\xab\x0c\xee\x89\xe5Att\xea\xa1F\xc2r&4Al\xfa\xb7\x1a\xe7B\xbd@s\xf3\xb3\xc2y\x80\x90e\xb1!G\x18\xdd\x1b\x9c\x8b\x85\x11\xde\xc2|\x16}\xd8#drGu\xfe\xa7w\xeaR\xa1\xc2\xa2\x7f\xb9\x8bH\xf6[\tg.E\x90\xb8\xae\x07\xc2\xa6\xe6\x0e-\x12~\xfcK\xd6\xe8\x94\'\xe0\x08=\xc2\xc5%\x1f\xc2\xd1\xeb[\xde\x96l\x91?\x92\x01-\xc2\xd7u\x00$\xd1\x9a\x13=\x1ep\x04\xb6\x11\xec\x8c\xc3\x05\xeflG\xa4I\xa0\xdf\x0b\xdf}\xd9\x1f;\xf0\xc3\x10g^\x02\x82\xf23\xb2\xb6\xe6\xe6#\xb0\xbc)\xc3\x1dHu\xa5\xa6j\xd4n\x9a\x1a\xfd\xc2\xbf\x9cI\xc3a\x99[\x8a\xf9\x04\x8f/X\x7f4\x1bf1\xb3\xc3\xaan\xf4j\x90\x04\xa6\xeeU>/qPb\xa4\xc3\xaa\xd9\xf1\xa0\xe4\\\xfe\x8e\'(\x84$\xbd\xf3\x0f\xc4\x14\x0b\x0e\xee\xd2\x88\xe4\x9a\xff\x1d\x7f\xfa\x95}\xb0\xc4\x1e\x85,k8\xb6\xf0\x0c\xa2$\x8f\xd6\xbf\xf5\x0b\xc4@\xed5gm\x8e\xf2\xdc\x04\xbc\xbdj\x15\rO\xc4B\xb9\x07\xe3w\xda1\x8c\xa7\x1a7\x89\x85\xea>\xc4Z\x94(]\xae\x89\xe3U#D*\x9f\xa4\\\xe8\xc4c\x03\r\x7f\x1f\xf9\xc9h{&\xc8\xc9K\'\x84\xc4\xd2W\xa1H\xa3C\x96]\x88\x97\x81\xb8\xe8\x1e\xb9\xc4\xeb\x1b\xcff\xf8&\xef\x86O.\xc9\x11\xff\x1c\x16\xc5\x16\r\x8a\x93\x8dn\xc6\x847\xdc\xe3 \xbcU\x97\xc52*W\xca\'\xf8\x03U\xee\x84\xa5\x8f\xb2-I\xc5I\x0f`\xcf\xe4\xafm^\xef1\x8bC\xaa\xfdQ\xc5xfp\\\x96~b4\xcc\xc1\xa0n\x0e\x92\x13\xc5\x7fh\x11`\x8dh1\x1f\x90\xc7x26\xfct\xc5\x9cK\xc0@\xa2\xfdY\x8d\xf3\x97Y\x93\x9c\x862\xc5\xac\'\x90]\x7fU\x01"J\xden\xcb\xc6\x00\xe9\xc5\xe1)\xf4-\xe6\x7f\xee\xe2\x0e\x1eKZ\xc8\xb2s\xc5\xfb\t;\xea\x122p\xb3\x99\xd3[\xd9\x14\xb7a\xc64^\xb2CT\xf0\xf5k\x99\x04"cR4V\xc6R\xa4\xb9\xadV\x9f|\x18/yOr\x97\xa4\xed\xc6f\xab\xc1iU\x15\x96\xb5\n=\t\x1f\x17\x81y\xc6k\x18\x93P#\xb4\xf9B\xb8\x0e\xd7\xe3\x8a\x85&\xc6\x85;E;\xc8\xf4\xbbyhi\xceQ\xb1\xb7\x0e\xc6\xb56\x85\xcc\x99\x1ed\x82bH\x92\xd6\x12w$\xc6\xccgv\xd36:\x9e\\\x08\xc1\xcf\n\x1b{\x83\xc7HW\xc8>\xf9\x81\x9aJ)\xd1\x15\x146\x97\xff\xc7w\x8e\xf2tX\x03\x97V"1\'\xc2\x13\xf9D\xc7~\x98\x8b\x90[\x8enB\xfd`xq\xd9i\x7f\xc7\xac\'O\xd99\xee7n\x87W\xdc\x9d\xc6\t\x08\xc7\xb3(G\x87P\xf3\xf0\xfb*Y+\xa1\x06i\xe7\xc7\xda\xbc\xe4}}\xbbR>\xae\x82\xf4\x8du\xab\t\xc8\x06\xf9f\r\x17.\xe8\xbdc\x87S\x81\xef\x89\x8c\xc8\x0f\xe4r\xd9^\xb6\xb3\x05\xa7+\xac\x85D\x89_\xc8%\x84\x854u\xb9\x02yit\xfd\x12e\xe5\xbe\xc8eh\x95\xb2\'\x82p0\xd7\xf1\x08\xb9\x114\xd5\xc8vT\xfd3d\x1de\xd5\xc6\xbf4\x1b\xe3}\xea\xc8\x86\x8a\x82\xd3h\xdd\xc0*\xc8\xf9:\xf4\xea\x95\xaa\xc8\xd5\n\xfd\xed\xa3\xc3\xfbkMsi1\xbe\x8c)\xc9\tp}\xbb/\xa9/\x10\x9b\xf6\xe8e\xf1\xef\xf5\xc91\x98\x9c\xe4\xb7\x0c\x02\xedi\x94bf\xf5\xc7M\xc9\xaa \r\x83\xc9\x95C\xe3\xa3?\xd1\xf9e?f\xc9\xb1\xaf\x9aD\xd4\xac+\xf9\xf3\xbc\x8d\x8e\x85$\xed\xc9\xcd\xf8\xf7\xc6\xffR\xddWy\xc9W\xa6Z\xba\xcd\xc9\xd0\x8e\x86!V\xf4@`\x1aM\x01\xa4iCm\xc9\xe5\xd4\xb5)/\xca\xd5\x15g\xd3\xabD\x94m\xea\xca\t\xea\x04p\x80A\xe5\x93\xb9\x8dVK\xa4)\xc6\xca)O\x8a\xf7X)\xc8\x03\x8c\x887\'~\xe2q\xca/\xee\xb3\x10\x80\x14shj%V\x93*!\xf3\xcau\xd0_\xa3\\c\xb2\xba86\xb1\xc3y\x06\xba\xca\xb5\xd4\x9a,`\x1bW\x8c\x9e\xedUA\x7f\xae\xf2\xca\xc0\xe2\xb0k\x03]\xba\xc6\x04\xd0\x93\xf4\x82\x0f\xcc\xca\xde\'\xaeGo\x8e\xb1\xd9\xf5\xd8\xa9E\x10\\C\xca\xee\xce\xb5"}\xb13\xae\xb4`\x1f\xe6\x0b\xc7\xac\xcb\x0fv\xa0q;` \xcb\xdd\xc6Z\xa87\xcc\x83\xcbYB\xa5\xf9\x87\xc8p\xb1p\x0bc\xb5;UG\xcbq$\xc7Z\xf9\x1c\xa0\x0f\xf6a\xeeh\xb6\xb1\xcc\xcb\x89\x08U\t\xfa\x05h\x16\xca\xc5\xf4Yg\x9d_\xcb\x94\x88*V\x07\xc0]\x1a\xfd\x17\x1f0\xb5\xfd_\xcb\xb7\x8e\x02\xb0\x01\x1c\x92?;\t\xd6|;*`\xcb\xc7A\xa5\x10\xd7\x91\xb3\xad\xb7e\xfa\xc0\x84\xba(\xcb\xc7\x9b\xa3&\xbe\xac\xffF5\xbb?z\x8e6\x8c\xcb\xd6^fkX\x0c\x7f\xc5\xad\xfd\xb4\x97\x10\xf7\xca\xcb\xd7/\xae\x07i\x846\x8d.\xb7\xa1.\xa8\x0f\xfb\xcb\xe0\x88(\x02\x93\x94\xb9l\xe8\xe4\xfa"\x07\x80\x0e\xcb\xe5\x82"8\xf9\xf9PW\x19Cv\n\x10\x92\xb9\xccA\x1b\x8d\xbeZ#|a\xb7\x17\xdf\xa6\xe2\x8ef\xccL9\x04\x17\xe7\x0bs\xdb\xafBC\x08b.\xec\xccon8C\x98\xd8M\xea\x07l$\x86J\x86\xfe\xccr\x15^\x10\xc5"\x8c\xc7\xdeoR\xc9\xfc\xea\xaa\xcc\xc8\xd4k\xb2\xf8G\x06\xa9K\xa3\xc6\xa9\x90\xf6Y\xcc\xc8\xfb\xa3\xfe\x85\xd0;[\x8b\xe7\x18O\xe8/\xb9\xcc\xcez\xa7\xbft=/l\xc5\xb0B\xc0L\x99\xcc\xcc\xfe\xa5\xec\x96iw\xdf\xb0\xe7\x83\x02{k\xf8a\xcd%^\xd4\xac*I\x03\xce\xb9R\xac\x8e\xe4\x8a\xae\xcd%\xbf?\\\x14/\xea\xb3\xeetc\x85\x84!\xf3\xcd7O;,2@\xb0\xd0\x1b\xd8\xb9<\x9a\xd8\xa9\xcdL\xe5\x8f\xd3\xf1%\xdct\xee\x8f\xec\xe5\x90\xfdH\xcdP\x9b0[rzKHD\xd0\xe9\x04\\\xa2\xdf\xcdk\xe8a\xd6\x93\xe7a\xad\x17\xb3\x11\xc8\xaeda\xcdp\xc5\x96\xf1e\xec\\1>\xcc\xe2;)\x05\xf0\xcd~$\x18\xb5U\xec\xd3\x04\x90/l\x9fb\xd3\xa1\xcd\x83Tl6A\x18\x89\x8e2\x89=5\x98\xb1L\xcd\xc2F-qQ\x15+h\x88\xb4\x1fq\xb5\xd6\xa4\xcd\xfc\x80\xf2\xe1\x95\x1b\x7f\xcfF\xba\xfb\xe5CsN\xce\t\xeal\x07\xa1%\xad\x05\xb3\xbe\x13\x9eel.\xce\x8a\xf6S\xd8P\xca\xa2\'E\xec\xfdr\xd43`\xce\x98K\xd8\xaar\xeb\xa5\x8d\x81y\xbe\xc94\x1fk\xce\xbe:\'\xca\xed\xf7Bm\xbf\xf8l\x9d\xf7GC\xce\xc4\xdd\xb93\xd6)\x1d\xff\x9b\\Tka\x120\xce\xc98\xf7\xbd\xd15\xa78d\x9d\x05\x96\xa9?\x97\xce\xdc\xfez\xe3\x00w\x91v\x8c3i\r\xc7_\x08\xce\xe2\xce\xb0\xc8\xc3G\xcaD\xf3\xef5o\xa7_\xe9\xce\xf4\xdfh\xff\x8e\x8c\xbe\x07i\x98\xbf^|6&\xcf,\xde\xc1n\x03w\x85\xfd\xab=;\xe3\xd2\x9b\x17\xcf/\xff\x82\xc3\x93\x16\xb4\xed\xf3\xf8s\xda\xfb\x8f\x9c\xcf2t\xce@\xde\xa6n2\x85\x10lN\xde\x0f\xa5\xcfX\xa0\x1d\xccK\x11\xd7\x8fi\x13\x88Gd\xdfr\xcfgu.9.\xcc\t\xc8-\xd9\x83{\x89L\x10\xcft\xd8t\xfa\x86\x8bP\xa552\x0e`\xd34m\xcf\x8a\xd1-!\xf2\xfe\x19\x05\x8b\x83\x97\xc2K\x8d\xc3\xcf\xc3\xb7\x8f\'\x17\xee\xddV\x95d\x01\x90\x04/\xc3\xcf\xd5\x81.-\xccA?6\xcf\xfdE\x90\xbb\xb4\x81\xd0\x0b2\xab\xabP\xce\r\x97\x91&\x89\x88J\xd6\xd7\xd0OHY\xde\xad\x12\xdb\xf0\x8e;\xd5P\xf7!\x8f\xd0a\x188N\x8aw{\x95\x01M2L\n\xec\xd0\xd0\xa7m\xad9o\x9aa[4\xca\xbcv\x9a\x16\x08\xd0\xd83@\xc1\xea\xfbf\xdcV\xf0\xf7j\xe5O\xad\xd0\xd8dJV\xa3#\xe2\x88\x8b\xfbh\xcdg\xe3/\xd0\xfe\xa5\xc7\xb6ka\xde\x12\x0f\x9fr\x83(^\xe1\xd1\x0e\xfbD\x92\xf6\xc9\x8d\xb1\x08\xd5\x08\xd1\xf5\xb6\x92\xd11\xb6\xe3L\x9e\x7f\xc3\xf2\xe2\xd4X\\C\xa9A\xd1tG\xef\xff\xcc\xdb\x11Otw\x86\xd8q\t\x0b\xd1v\x7f\xfb.\xe7\x11\x0e\xd7a\x80\xa6\xd2\xff\xb8Q\xd1\xa7\xea\x95S#)\xbet\xc3\xcd\xe3\xbe\xd83\x14\xd1\xb9\x8a\xcf\xb8\xcb\xc4@(\xcdp\x16\xdd\xe1\x19\xdf\xd1\xbb\x13\xde\x05\xf5\x1e\x94\x04U\xd8\x12\xd4\xa0 \xb2\xd1\xbf\xee\xefm\xdd0\x8e\xcc-%\xe3|\xa9A\xf7\xd1\xeeu\x92\xa5\xb1\x83!y\xea\xb0\x89\x9f*9\xa8\xd1\xf4o\x89\xe5\x85\xe5\xd7\xbe\x1d\xd8\xbb\xd4\x85u\xc1\xd2\x12\xf3\r\xa83\x94\x93%\r \xb5\xc1-\xf7\x0b\xd2\'\xb7\xb4\x96\x9bG\x1f\xedP\x95\x96\x9316\xe0\xd2R\xac\x0c\xd2\x85\xf7O\x1eu\xf5\x1bx\x02H\x11\xd2[\x90\xf6\x15Y\x1f\x10\x0b\x1a\x7f\x02\xeedr\xd7\xd2\\\xa5\x0b#\x98\xb2\x17\xc5\xd8\xaa\xa3\x1c\x83\xbb\x98\xd2o>\xc3\xfdyL\x80%\x19\x00.\x86\n_\x1a\xd2v\x11[\xd4\x9b\x81\x89\xf9\xdc\xc8\xfe\x94\x9cTi\xd2\x8d>\xa3}\xa6\x1a\x158\x91\x1an6\xd6\xbcI\xd2\xbb)^\x91.`\xe5\x00\x91.5\xce|\x92I\xd2\xc6T\xf00S3\xf16\xb8\xddt9\x90\xf7\xa9\xd2\xe3\'\xff\xbe\xa5m\xef\xa5\xc2\xd7\xec\'\x1cH\xa4\xd3\x1b\xdb>}\x05#\x13\xfd\x86PJ\xb0GNO\xd3\x1c]\x1e5\xae\x8c\xbc\x11K\x98II\x94C\xfa\xd3\x1f\xf63\xf8\xcb\xc5\xd8^9\xbd\x1c\x9c\xe2\xb0\'\xd3`\x9eiME4w\xcc?0V\xae\xaai\\\xd3enlp\xc7e\x84\xbb1\x1fB\xc8\x8a3\x08\xd3\xad0o\x87\\,9\x17\x19u\xcd\xa3\x19\xba\x8e\xd3\xe1}\xef\xa9\xd8c\xbd\xed\xf4\xde\xa7A\x1f}H\xd3\xe2\x1b\xd3wkA\x18\xdc\x07W\xf6\n\xfb\xc7i\xd4\t\xfb\xcd\x83\n\xf6\x15\\\x80F\x00)d\xfc\xd4\xd4\x1f\x93,\xc3V#\xa3\xc8\x1en\xc6\x87\x93\xf6\x0e\xd4(\xe8\xbbs/\x8e\xb3\xb4\xd4W+\xea\x1a\x0c\xd0\xd4]\x15qz}\x86\xf4\x05\x9d!O\x8bo\x12b\xd4_\xe4\xfe\xa3Q\x12V~\xb3*\xba\xa3G\xfe\xeb\xd4f\xf1\xe6\xe1\xa8\xc3\x90^\x05\x95\xa4\x0f\x1f6\xcd\xd4h=\xa2\x02=\x9a\xca\xdd*V.\xe8\xa2\xc9P\xd4\xb7\xb5wGS\x19\xc8x\x1f\x9a\xdc\x99\x7f\xf8\xfb\xd4\xbc\x8b\xae\xc5&\xcf\xf3\x1b\x9aYZ>\\\xdf*\xd4\xc0!\x9f\x15Yw\xf2K\xaf\xda\xab\xd9\xb0=\x1c\xd4\xf8\x97\x16 \x82\xc4\xb9\xb4Ne`\xb6\'\xf6Q\xd5\x1b\x80\x1e\xd5\xa4(H#\x8b\xb4\xbc\x13\xe7\x80\x93\xd5.c\xf5\xdf\x1b8Y\x12}x\xbfp\x17\xb9?\xd5k\x0bm\x06\xb5>\x81\x0e\x0f!\xa5\xdf\xd6tX\xd5r"\xb9\x98\n\x87ku\xa5\x91\x19\xfaW\xdb\x80\xd5\x96\xac~\x92I\x93\xca\x93\x01\x95Xtg\xca\x0f\xd5\x9e\x18%\xc7\xbd[~\x0bv\xf8LF\xbf,\xd9\xd5\xac\xb3\xdf\xd6\xd98\x8d\xbe\x99Y\x12\xf0g\'n\xd5\xfc\xcb\xed@\x85\x15V\x19\xd1\xe6I\x01\xf3\t\\\xd6\x06\xce,Qa\xaaYB\xb8\xc1lvI\x0eJ\xd6\x0c\x85\x85\x95\xb3\xc3\x96k\xcd\xa61\xf2ZER\xd6\x13\xc0\xb8\x1c qm{\xa6l^\xfa\xbd7\xd3\xd6 -\x82\xe4\xc4\xe6\x8b\x04\x85\xf3\xefvM&a\xd69\xf3]@)\xb8\xcb:\x08t\xb8\xddr\x0e\x8d\xd6E\x03B\x1d\xc2j>?x\x1akS\x1dX\xb0\xd6]\x9e\xee\x9dz\x12\xde!V4\x0fUo\xcf\xd4\xd6c\xe8w\xdd-\x93t)\xa95\xd0g5\xa8p\xd6\x87\x80:\xe6\xb3F\xad\xe2\xa0as\x8c\xec\x89\x8f\xd6\xb3\xc6l\x96\x9d\xe9Kb6}\xe3\xaa\xd6o\xa6\xd6\xf1\xf1\xe1`k\xa0\xb4q\x84/\xf5\x00\xea\xc4\x04\xd6\xf4\xadzu\x8d\xaf\xe2\xd8\x94\x94\xb3(x\x1b\xdb\xd7\x01U~f\'h\x9eX\xae\x92\xfe\xe5/\x01T\xd7O\xc8\xae-\x88\x835&\xcdu\xa9I\xc0\xdfi\xd7\xc7@\x00\xfb\xd3\xb8,\xa2\xcf\xd92\xf6\x87X.\xd7\xd6\x98\xceL\x9a\x19N\x95\x8a\x00\x08\xce\xde#r\xd84ju\xebQDe\xb6\xe7\x07\xb7e{y\xd2\xd8R7\x9aek\xe0!\x8f.\t\x98\x140\xc1\xcf\xd8U\xac\xd6dk\x943\x8a\xc0\xa9ZD\xd7h\xca\xd8Z,\xcb\x96\x8b\xc1\x19Y\xb6\x07\x0fi,\xed8\xd8{\xe6i\x04i\x02pB!\xfdp\xa2\xac\xf0?\xd8\x9a\x05c\xa1\x00\x08\x0f\x02\x16<K\xa8\x1cA\x0f\xd8\x9c\x0e\xb6\x00%\xa0\x03\xc16\xa7\xa1\x93U\x1f\xff\xd8\xc1"HV\x07`ZNM[\x81\x86\x9b\x9a\x02\xd8\xe1\xf9E\xf4`\xb7hAiL\xaa\xf5\xf2F}\xd8\xe5\x02r\xc1\xc69\x9ey\xa7\xde\xe8R\x0f\xc4~\xd8\xeeu\x05\xea\xfam;m\xbc\xfb\xd8\x1a\x08\xfey\xd8\xf0*\xe3\xa4+\xf3XO\x0e\x91\xf1H9Ia\xd9\x13A\x88,|\xa2\xfc\xc3\xe3\xd1\x99!Loo\xd9\x18\x1e\x00\xca#F\x9fe\xac\xbd\x86\\\x9c\xba,\xd9-\x162\x00\xa4v\xb1\xd6\xe0\xa3\xbeF\xd42\xb9\xd9:\x15a\xee\x94\xd75`\xeb#<\xe0\xba\xf9\x9c\xd9J\xc1\xfb\x82v\xbem\xe4x\xbb\xd7\xf8?\xa2\xa8\xd9P\xda7C\xe0\xae\xf7A\x03\xcc/\xef\xaa\x80\xa1\xd9\xba\xfc\x97T\x82\xa1C\xb2\xe2|\xa6\xc1\xeaP#\xd9\xc5a\x90*|\xb9\x90\x14\x80<2+\xd6:\x8c\xd9\xe2\xb5\xd7\x8e\xe2\xa3\x94\xf6\xad\xf4\xb3\x00\xe5T9\xda\x15\xa8\x07\xe9\xddh\xb0\x10\xa5\xa5\xa3u\n\x1b\x0f\xda:\\B\xf0\x06`a\xe8\xba]\x0c\t/x \xdaJ\x13\x0b!\xde\x03I\x02\xb1\xe0\xac\x99\xe8G\xb3\xdafZ\xf3\x05sq\xa7K\x1b\xb4\xa6bcq\x8b\xda\xe1,\x8ev@H\x88\xed\xbf\xb2\xe6\\\xe8\x83\x8c\xda\xe9\xa2\xb6mX\xd5K"H\xa9\xcd\x05\xf2\x1c\x1b\xda\xf4<H}$=Y\xd8\xab;\xfbfEy\xec\xdb\x10h\xcfZ\xa7|\x0f\xbeg\xc7\xa69\xa9>\xc9\xdb)\x10:\xec\x1a\xe0\x03-\xf86\nsp\x8c\xfa\xdb)L~\xb5\xf5\xc5\xa8{\x95g\x80\xa0\xee\x17\xc7\xdb9m\xe7\xa4\x1d\xbd\xa7\x06\xa4\x08\xbb3\xee\xadX\xdbT\xb4\xaa!W\xd7\x81!\xc1\xf5\xca\\\xa5\x9e\x18\xdb\x80P\xfb\xab\xc9\x02\xbd**jbxc\xc6\xd4\xdb\x9f\x91\x9d\xbaV;\xa1\xeb\x10E\x94\x92\xd0&u\xdb\xa1Q\\\xd9\x82\xe9\xe0\x1a\xdd\x85CF\xa2\xde\xaf\xdb\xa2\x902\xd9\x0f\x9a\x01\xdb\x02\x9d\xa9/\xb41\xcc\xdb\xae{\xc0\x86\x13\xe8\xfe\xa1\x90t\xcb\x82\x91\xaa>\xdb\xd5Z\xcdv\xdc\xd6\xe6\xaf\xb0e\xachK\x16\x9b\xdb\xe1+IZ\x9e=]\xb0\x00[\xb6\x97\x90\xbf\xa5\xdc\x03\xa7\xc6\n\x82\x986\xa6\xc8t\xe6\x039\r~\xdc\x06\x0e\xaaM^\xa1t\x18\xd9\xa2\x17\x03^\xa7u\xdc\x19\x1dg\xa6\n/\x0b\xb6R\x96E\xf1\x11\x8f\x12\xdc\\o\xed\x83\xefOh<6\xeb\x97\xd1\xcbt\x00\xdc\x8c\xf9\xb9\xcf\x8d\xe9\x15I\xd9R\xf9\xde\x07?\xea\xdc\x8d0]\xb9@\xc5\xf0\xd3f\xaa/eq\xd8]\xdc\x902I\xa6\xc0\x07q\x98wn[\xf7P\xe7\xa0\xdc\xdf\x11\xec\x1d\xce \x8fn\xa6D\x1dJ\x8b\x80\xf1\xdc\xff\xa5\xe5\x84\x1c\x03\xcd\x06\xba\xa7\xbc\x87\n\xd5M\xdd\x1d\x01\x98K\xc11\x8e\x86\xebCZb\xe4\xd78\xdd\'\x8fm\x15Kqt}@D \x15\xf0\xc66\xddEa\xc6\x00\xdct\x17(~\x87\xd0\xd4\xcd\xa8\xeb\xdd\x91\x10Gz\xfe&\x87 V\xa8\x99\x06{\x07\x88\xdd\x96\xd6\x10\x95.C\xd0W\xb7e-\x84\\\xcah\xdd\xb0\x06\x99\xdf\x9c\xaa\xaeh\x80\xd2\x85C\x81\x95\x1e\xdd\xb8\x1a\x01o.\xc5\x99\n\xb6\xdc\xf1\x9f9|\xb7\xdd\xd8\xaf[\xbf\xc68\xbb\xb0\xf7~\xf97G\x18\xab\xde\x023\x1a\nd\xdb\x9a\x8a\x1b\xbf\x0e\xf3z\xc8\xd6\xdeL{Gu\xf0aYac\xd8yw\x8e\xcd4\xdej\xa4\xda\xb0\xe1m\x88\tY\x8e\x18\xff\x81k\xc0\xdeq-S\x83h\xaf\xbb\xc9)\x997\xbf\x82V\xe5\xde\xa9\x8f*\xa9{a\xbe^\xaemO\xa51\xf8q\xde\xcb\xf8`\x8c\x96\xcc\xde\x08\xc0of\xd7\xd4!\x99\xde\xcev%\x94\xd4@h\xac\xc0 6\xc6\xa9\xdc^\xde\xeb\xc0\x93@\x97\xa7\xc2b5B\x1f\x1c\xdfx\xe3\xdf\t^\xcb\xde/!\xac\x85/\xc1\x82\x83\x85C\xc4\xdf\x0e\x98\xba^\xc0\x84!/u\xf6m|C\xb0\x92\xdf{-V2u\x18\xa2\xc1\x1a0\x85c\xc9\x10\x85\xdf\x8c\xc81\xbda\xa1\xb2N\xaa*\xde\xd1K\x1d\xdb\xdf\x90-J\x86\x82A\xfb\x82\xcc\xc6\xcff\x95Vi\xdf\xcf\x94\x01U\x05k<c\xa3\xed\xe4C\xa8\xde\xa1\xdf\xdd\xe7\xeag\x1d\xd3\x83\xc2\x91\x17B\xdd\xd0\xf4\xbe\xdf\xdf\'\xfd\x8a\xf7\xe4\x9c\x8et\xb5.\xca\x16\x8dN\xdf\xf3\xa7#qZ\x02\xef b\x92\x94G\x1aJ\x9a\xdf\xf7\xa7\xc7\xf6\x8d\xec\x92\xb5\xe2v\x97<|:\x1c\xe0\x01\'x]Q\xe8;\x8a\xb7\x0bZ\xb6nn\x8a\xe0O\x00\xf6\xbf\xc1\x0c\x08_W\x0f<\x1dmE\xee\xe0b\xbd1\x89V \xc1\x06\\\xba\xbe\\87\x1d\xe0}\x9b\xf3wY52\xfcdFb\xea]V\x0c\xe0\x97\x92\xce\xda(;k\xef\xfc\x07W;\xb3\xab\x8d\xe0\xa7\xb7\x87\xc4\xdc(i{\xcbi,\xa1Qt\xde\xe1?2\xc1\xcc\x19t@\x87V\xf6\xe4OF\xd0)\xe1\x89\xc3X^#\xdf@\xa8\xc2\'\xa5>}\x87\xd7\xe1\xa9\x0fV\xf7\xcc%L\xb2Q\x96\x96`\xc7\x95\xcb\xe2\x12\x13N\x17\xce\x03\xe6[\xc6m<\xcd\xf0(\xf4\xe2\'z\xef\x92\x1b\x97b!\xaa\xbf\xc7zZ\xac\xd0\xe2F\xfb\x8fs8\x15\xca\xfb\xd3\xec7hw\x8f\x9b\xe2l\x81\xaf\xb3X\xa0\x9f\x9f\x0c\x98\x96\xc7\xcf\x8b\x9b\xe2\x81\xac\xcf\xe8\xeb\xdc\x14\xde\x99\xf7\xbd\xb5\x8fap\xe2\xb1\xa3\xae\xf9\x83@\x86\x89\x17\x17\xe8\x9a\xe3\xc6\xff\xe2\xb2\xa9\x05\xd2Ef\xeb\xa1\xe4=\x03\x02\xa2\x9a\x8e\xe2\xc9A\xf2"\n\xa6j\xdb\x15D\xbbs&;\xbc\xe2\xd8\x91,\xba@\xda\xf9Gw\x0eW1o\xc1\x10\xe2\xe2\x83\xa9*k\xaa\x90\xfd\x8c\xcb\x12\xee\x7f\xc4\xa0\xe3\x1d\xb9\xe4\xd5F\x93\xf99\xac\n\xc40\x8a7\xb4\xe3\x1e\xf1o\x97\x14\xbf\x97`n$d\xf9\xae\x08\xa0\xe3?\xf8\xf9\x94\xb4\xdc\x06\x07\xca\xd1&\x92\x82\x1fv\xe3E5{\xe5\x7f\x92W\xd8E-}k\xaf<\x80\xe3\x9f\xc1H\xad\xd5\xddR\x08\x03\xbef\xe3\xed\xa1\xed\xe3\xa4}\xb3\x95V\xaf\xd1\x92\xd1\xf2\xa5\xca\xf9T\xe2\xe3\xc05[k\xe35\x04\x13;e\x18\xff\xccc\xa1\xe3\xc7r\x12f<\xe7\xfe\xd5\xd2\x0e?\xd2\x0e\xdd\x03\xe3\xd8s\xf5\\\x02LU\xda_S\x0b\xae\x87Ts\xe3\xdb\xf4JlH\xf8\xd8x\x1f\x05\xc4 \xcb\xfbC\xe4\x05\xfc\xeb\xba\xaa|Sy\xc8\x95\xd7\xb4\x9a\xea\xf3\xe4=\xfe\x06U{\xf3\xd1\xac~2sl\x00d)\xe4D\xfdy\xd71\x1b\xa9\xad1f-\xea\x87\xe0\t\xe4O\x05\x00.\x06J\xfc\x8c*\xe1\x13g\xac\xa0#\xe4j\xc3~Q\x869\xeck\xde\x8f\xf9\xdf\xda\x19p\xe4\x87h\xb0\xceYV\x1e[\xc1A\xa5 a\xddE\xe4\x9ar\xa7X\xa6\xd8+\x12\xa8\xa0-DU\x17\x99\xe4\x9e\xe5\x90\x1b#\xbbJ\x0c\x17UR`\xeddC\xe4\xa8\x14\x0c\x0b\x00\x05\xd9\x99\xb7\xf1\x92\xb2\xb5\xc3\xc6\xe4\xc1WR\xcc\xd4V\xdf\xee\xcd\xdb\xc7\xa5\xa8\x1a\x11\xe4\xc3Y\x80\x01S\xfc\x01jW\xaf\xd4\xa8\xd6\xeeD\xe4\xee]\xcd]\xb1\x82\x85\xfd\n\x14\xa9\xc8\x80\x12<\xe5\x05\xd2\xf3\xd5\xe0\xcdOC\xbd\xb5ZQ\xd3M/\xe5*\x8f\x12[\xee\x9d6,\xb3A\x0b\xf6G\xb5)\xe5F\x17\xb1\x9e\xc9V<\xee\xc9\xaa\xef\xcc\xd4\x92\xa1\xe5\x7f7\x11h:2\xb71\xc8\xd3I\xf0^\x8eD\xe5\x80\x924\xa6\xd6`>\xd9S\xf7\xe4K\x98RN\xe5\x96\x91\xc6\xac\xf1\x00_\x14\x8f\xa0\n\xea\x99\xa4l\xe5\xa3\n\x8d\x19o\xc5\xef\xdf-\xefJv\xe1\x90\x15\xe5\xcaA1\x91\x80a\xe0\x01\xe6\x87\x94\xf8\x91pm\xe5\xde\x07\'\xfc\xc7I\x9c\xc2hr@,\xa53\x18\xe6\x04\x95~\x17\x89\xa0eA@]\x00\x08\xdc\xc4X\xe6\x11\xeb\xcb0\xb6*T\x03\\Z\xfe\x10\xb9n\x91\xe6\x16\x1eM\x10p\x90"\xb5\xab\xc1cE\xb9\xdeo\xe6/\xaa*z\xdd\x04\x1ad;\xec\x91\xab\x97\xab\xe4\xe6\x82\xe0\xee\r\xb0i\x01l+l\x9d\xaf\\\xeai\xe6\x84[\x15V\xf4\x06\xd8\xacU\xea?\x94\xa5\xadx\xe6\x95Z\xec\xc4eA\xca\xc1]2\x04\xbe\xc1Fs\xe6\x9c\x9e\xc0\xae\x88!z\x11\'>\xbb\x18.\xaf^\xe6\xbd;L3\xfdMi\xa3\xc9~\xba\xa4\xbfu=\xe6\xc89\xa4\x12\x86+\xc1\xc5=}\x0c\xe0\xfe\x10.\xe7;\xf2\x90\x1b\x9aAM\x87\xb9\xf4\x91\xb94\xe8x\xe7l\xc1^\x16\xcb\x06s\xd7l\xd4T\xaf\xd5|h\xe7\x92\xe3pq}]|\xf2_\x98`!\xe3\xe7\xc3\xe7\xcf\x11k\xb2D/)#\xa4Q\xa9\xdb\x1d2\xf8\xe7\xd7\xa4\xd1\x81\x92\xd67^\x82\xcem)\xa4\xd7c\xe8\x02\x0f\xa3\xa3\x87\xf2\xbc\xf3\xb2J\x9do\xdf\x99y\xe8\x18\xcb\x15L{#\x86u`v\xce<i\x19\n\xe8X\xbe:zDq\x9f\xef\x02p\x86W\xa2\xebz\xe8p%Z\x0b\xa5 \xeav\x01\xf0\xf91(\\-\xe8zjx\xd8S\x1e\x8e\xbd\x8e\x0e=\x8d.\x12\xcd\xe8\x8d\xe8;\x1aY\x19g\x1c!^M\xb3\xed\xcb\x0e\xe8\xc7\xb9\xfct~I(8FSKH5\x9d\x14\xe9\x0f\x8cw\xd6\xa83T1\xb0J\xd7&\x96L\x97\xe9-\x9a\x05\x17\x8b\xf9g\xc4\xe4\xc8\xa4o\xae\xc3}\xe9|\xc2\xd3\x1e\xf1\xd0\xc5\x10\x18\xcaZf\xb8\xfd\x16\xe9\x7f\xd9\xa4{\xefr\xe2\xce|\x95\xa8Jy\x9be\xe9\x9c\x0e\x8f/T\rW\xdd\xfcO\x8f\xf4\xad[\xf5\xe9\xc1\x1c\x10J\x8c\xbf\xf6H\r1\xd4\xf2\x06\xad\xf5\xea\x08\xc6\xcd\xf5I\xb2p\xbf\x9b\x9b\xc3\xfe\xfd\x01y\xea.\xd5S\xf4\x85t_0\xaa\xf6_\xb5\xf9\x07\xa2\xeaG\xd5d\xf1\xac=3t\xc5\x94\xd5\x18y\xf7.\xea\xa0\xa3\x1bW/\x8d>N\xab\xfc\x80ek2\x1b\xea\xa1\x1a\xa7K\x8ft\xa0\x05\xb7(\x87\xb8N\x91\xb9\xea\xce\xc0M\x97ZF\xa3\xfd\xb4\x8f\xd6dj\xa4\x97\xea\xe2\xb7yr\x12HXvO\xea\xdd3uj\xeb\xea\xfc\x9e&(9\x8f\xccv\x8b\xbdu\x91\xe4b\xc3\xeb\x1b\xb7\xf7\xcf\n\x08hK2\x85\x0c)\xb6\xb0\xf0\xeb%\xd2\xd0\x1b\x16\x8e\xb8\xe2\x93\xafJ\xdf"]\x86\xeb0\x04\xe7\xf8~\x9e7\xf8\x1eKm7K\xb6\xcd\xebL@n\x05\xe2\x12~V\xbe\xed\x96\xfcg\xc3\x7f\xebU\xf5V\xed\xfe\xb1j\r\xc2\xca\xf7Y+9\x0c\xebh\x85hj\xde\x8c4\x12_\xef[\xb6\x94O\x11\xeb\x7fk\xe6\xcba\xc0_\xb2\xe4}\x8e\x99\x94%T\xeb\x96\x9b\xdd\xcaq\xab\x14\xd4\xd2j?\xcf\n\xe9\xbe\xeb\x99\xa6,\xe9\xe1\x1d\xd4\x93\x80\xea\xcb\xde*)g\xeb\xa1\xf0x`\x7f\x07\xf3\xac\x9c\xef\xa1l!\xad\xa0\xeb\xad$\xbex\x06\x84\xe4~\xe6\x04\xe6\xf6i\xfb\xfe\xeb\xb4\xa5\x9b\xee\x13v\x86f\x10\xec\x02\xbej&=\xeb\xd4\x1b\x1f\xeb\xdcXo\xeb\xb8\xb5\xcdX(\xbda\xeb\xf1\x15<\r\x86\\\xd2\x80\r|\xfb\x94\'\x82h\xeb\xfcrI\xd9p\xd2Le\x82\xf3\xc9\xe4\x1bO\xb8\xec\x04\xcf-\t*\x90@\x85\xed\x06\x0b\xba\x82\xe2\xda\xec\x12\xb7\xad\xfc\xbb\xd0\xdf\x84\x11\x04D?\xcey\xb3\xec_\xcb\x97\xa6C>6\xedg{\x8e\x16\x12re\xecf5\xbe\x883A\x93j\x96\xfd\xcb\xc3)\xbd\x1f\xecq\t\xb9\xa2&g`U\xa8\x96\xcf}"(\x11\xec\x8e\xd8~|4m\x8a\xa3"\x97#\x1b\xe3\xf8$\xec\x9f\xe9\x03\xdf\x03\x15\xfe\xe7\xb76\xf7\xa8\xb2\xdc\xe1\xec\xa8\x8e=\x923L\x91e\x82o}\x02\x84\xf1H\xec\xcd?\xaf\xb5#9\xd3\xf9L\xa0E\xbd\xb7\x83\xc1\xec\xe6\xa6\x1f\xcf\x1f\x8e\\\x10\x81O/\xcb\xcf\x18\x0c\xec\xf3\xd2\xc6p\xfe\xd0\x03t\xaf\\{\x80MYY\xed*\x0c3\x810\xba\x9e=\x9b\xbe\x14\xa3\x19\xb1\x8c\xedB2\x9c\xeb\xac\x18\x9f\xf9\xa2\xad\x80[\xa6As\xedZ\x92n\x04\x1fk_\xb1\xbf6EVGt8\xedj \x187\xc0k\xf4A\xcf\x9ew\xf8\x05\xe9\xa2\xedz\x151\xed\xd1\xe9a\t\x1b\xb7\xcf\xa0/C\xe0\xed}\x16D\x03\xf7\x87?\xf1D\t\xac\x11\xbd\xa9\xff\xed\x8a\xbb6\xa8.\xe0\x9c~Y\xda[\xff`\x90\xf6\xed\xaf\x18\xe6|\x96x\xe5w\x15O\x7f\xd85\\(\xed\xbcKA\xb3\xe0\x1a\xad\xda\xb2W\xd7np\x0c\x87\xed\xe0N\x0f\xdd\xaf\x1d\x0b\x83\xe2\x8dj\x913~-\xed\xf9%\xbf6\x99\x12\x8d\xd8\x16\xd6\x85\xbd\x882f\xee\x04\xceNB\x04*\xaf-\x85\x98-u2\x979\xee\x0e\xe4\xc6\xd8\xf6\x99\xffN\x89\xf1I\xcd\xce\xfeK\xee!\xeb\xa8$m\xb4\xc5V;\xddae{H(\xee\'\xc0P\x9f\xd5\x17\xb3\xf3\x0cs\xe7\x02_\xb3\x81\xeeu\xf9\x98\xb5\xc3r\'Di\xba\x10\xc1]U\'\xee\x87\xf7\xbd\x99|(\xec\xcc\xa1\xcf6\xc2\xe8_\x83\xee\x99~K\xd9UH:l\xe6E\x04@O&\x89\xee\xc7"\x8c\xac\xbcn\xb1\x8c*5h\xd7UL\x94\xee\xebu\xe3\x18/\x1f\xe0\xaf8\x05/\x91\x06\xa5\x7f\xef\x05\x03L\xd4l\x85\xb8\x1f\xe5\x133\xfcf+\xf1\xef\x1e\xde8\xa4\x94W\xb9\xda\x94\xfd\x0e\xf7\xd2p\xcb\xef\xa7\x9d\xb4\x82\x8bQ\x83\xe1\xba\x804If\x9a\xe8\xef\xb1y\x16 \x8bz\xf6\xf0z\xf7\xca\xe5\x87\xc4\xf9\xef\xe5\xd2F\xea\xe9Z\x0bq\xfa\xdb\xd2\x0f\x94\xb8R\xf0\x0f\xff\xfa\xb5\xfc\x07\xc6\xac\xba\x94\xa5\x98\xe0\x0c0\xf0\x13D!z!`\x01\xc1qm-8\x7f\x93\xb4\xf0\x15s:\x06)K\xdb\xa7\x0b2\xb54Z\x05\xd5\xf0\x15\xff\x87\xcc\xc4\xa5\x16\xf8\xe2\x0c\xe2\xc9\xe1\x8eA\xf0+`1\x007J\x8e\xcd\xefP7Y\xfe\xb7W\xf0H\xea\xa5\xd9\x9a\xeeX\t\xab\'d\xa9\x9a\rx\xf0R\xdcG!\xcc\x19\x7f\xb3/\x18\x90\xa4\x9f\xae\'\xf0_\xd4]F\xed#\xf3.\x9dD\xeaG\x0b\xf2\xfc\xf0jo`\x1c\xf3\x8f?\x11\xd4\xa1\x067\'\xbc_\xf0o=8\x01\x8e6\xcdn\xf7\x811Q-=\x9c\xf0\xbb\x18S#\x00\x1dOG*7\x07\xf3[-\x8e\xf0\xc1\rM\xa5\x8e\x1d2\xce\xe8X*5\x1fc\xd4\xf1\x01rD:3\xa5\x95\x9b\xe0\xadB)\xe4\x10c\xf1\x168\xabr\x08\xfc\xf2\xf7\xfd\xdc\xb22\xb1\xf4m\xf1N\x18Q\xfeK!\x96\xec\xfb+3I=`\xe3\xf1V\xab-\xaf\x03B9\x16\t\xaf\xb0\xd1H\xec\x95\xf1f!~\xa2\xfd\x96?O\x91\x8c\x8d#\x8e\xf9\xf5\xf1\x8d\x0f\x9dD(E\x9e\x17H\xf4\x18\xb9\x9c\xc9\xf1\xf1\x99\xf8\xe3\t\'\xc3\xb8A\xb0d\xdf\x9b\x16<\xde\xf1\xce\xd2\xa2\xb4\xc4U\xed\xa3\xd9l\xfe\xadD\x17\xa9\xf1\xf5\x89\xd6k\x9c)\xd9U\xcap\x86\xe2\x9bb\xed\xf2KN7\xd1\x0f*\xd8\xac\x84\xa3\x8cS\xc9\xb3\xfa\xf2s\xa2\xb9*\x04\x80\xe8\xab}\\\xf4\x85\xfe{C\xf2\xa1\x8a\xb4N\x18E\xfd\xd0\xa5\xad\xe0O\xce\x9eH\xf3x\xec\x036\x8fq\xd4\xdd\xf8i\xe4H\xe0\xfc\xd5\xf3\xa7\xc5P\xbd\xaa\xacm^\x94\x17\xc9Z{\x98\xbb\xf3\xac\x04;\xd1\xd0\x83\xc1s\x1e\t\xda\xab\x8c\xed\xa7\xf3\xb3\rm\xff\xda\xb4C\xbf\xc7asi\xc5\x97{\xf3\xbbv)\xb7_\xc5\xd7u\x043\xf5\xd7\xc208\xf3\xbd$\xac\xa6\x110d\x1b\xf2=\xa3S\xe9Q\xd9\xf3\xe3\xc9*y;je\xa9\xe9\xaf\xb8\xbb*\xeb\x16\xf4\x07i]\x15\x8a\x8d\x8fm\xdez\x10\xb1\x9e\x83\xb5\xf4\x14P\x04\x92\x0b%\x8cK,\xfe \xe6\xc5\xdc\x9d\xf4,\xd9<\xda*kp\x0bF\xeb\x9c\xf7t\xdf\xef\xf4.]b}\x00\xdc\xd2\xed\xc8\x83vV\'\xb9\'\xf4.\xd0@frjP\x8b`\x16^.\x8d\x80\xb7\xf46\xa9)\x95\xd9i\x00\xe23\xcc0\xc9\xdbi\x84\xf47\xa7\xa2\xd0u\xff\xf4\x87\xa7]\x8a\xe8^\xfbE\xf4>\xfc\xe2P\xf7\x86T\xb2\xdfNZKO\x92\xbe\xf4M\xfc\xdc@\x8a\x17_\xac\xa6\xa6\xe1\x9c\xa7sq\xf4x\xf9\xca\x00\xc7\xbe\xb8:\xba\nD\xa1\xb5[\xfd\xf4\x96C\x8f\x03&\xdf7\x98\x94&\xe2\xb9\xb9i(\xf4\xaeW\x176\x01\xdf\xd4$=\xc3\xe2\xd5$.\x07\xf4\xdc\xdc\x12K\xc7\x7f\x9d\xe5\xd7\xe7\x0c\x7f\xa9u\x8f\xf5\x15".\x10\xda\xbf\xb3O\xc9\xee\xad\xcd\xf8\xadH\xf5\xad\x95\xc1\t\x91\xc7\xd77I\xf5a\xcat\xaa\xe4\xf5\xc2\xffT\x95\xdf\x15\xb2\x86-\x87\xb4/=\xf1\xba\xf6#\xef\xe8\xbe\xbf|\xfbIW\x0b\xd5\xefD"\xc5\xf6.\xe2\xdcDp\x10ez\x12]\t\x18\x96p\x92\xf6B|\xef\x9d/\\!\x1dW\x88\xc9E\xd8\xf9o\xf6s\xc5^M9\xb7|\x05\xac\xb6\xe8\xbeS\x92\xe6\xf6\x97%\xc0ZFm\x02\nZ\x9a\x1d\xaf@\x06\xdc\xf6\x9f\x81\xee\xc2j\xb5\xf1!\xf7\'\xf0\x02N\xf9\x8e\xf6\xac\xa3ip\xdb\x0f\x7f\x84\x1d\x1bCKg\x0b\x9c\xf7\x0fL%\xbb&Q\xb1\xb1\xe8\xd9\x1bV\x86\xb9\xa0\xf7P\x03\xee\xf7,\xb3\xc6\xe5\xd9\xd5K\x8d}5\x05\xf7f\xe7\x0c\x19A&^\x05\xfc"*\xe2\xb5H\x19\xf7\x89\xe2\xe3V\xf5\xb8\x05}\x10\xe8\xfaKJp/\xf8\x031P\xf8y\xa5t q\xfa)\x94\x13\nH\xf8\x08\xf8y\xc1\x0c2\n\x03%\xa8\xae\x8f\xca\xcc:\xf88>O_\x168\xbf\xb8\x89+\'\x17O\xa7,\xf8\x91\x1a\x0b\x07\x13Ne\x8fy>\xc1\xb02f\x0c\xf8\xa5\x13\xdc\xc0\xdb\x82\x1f\xc9\xba\x08{\x9d{\xea\xc7\xf9$l\x0b;\x9e\x14x\x94\x08\x14\xed\x1c\x1e\x89q\xf94\xa1\x8aY\x1f\x05\xa1\xb7\x11\x9e\x1e\xd6\xdc0\xc6\xf9M\x16\xc7\xb5OI\x8a\x87\x18Q>\xf1\xda\x16\x86\xf9o7\xb2\xd8\xf9\x96\x80l\xfb\xfc\xc2aB\xbb\x1c\xf9{L,B\x951\xf0g\x0f@aU\x80R\x1b\xf9\x7fB\x85\xce\x1f\xee\x12]!TR\x12\x03\xaa\xaf\xf9\x8b\x19\x18e:4\x1e\x8d@\x89\x03Y\x1fCW\xf9\xd9z\x00\x94\x87\xba\xa8\xd3\x9c\x9flv\n\xb5\x90\xf9\xe7@\xed\xe7EM\xa6\xd6\xc0\xe6\xac\xef\xc7MY\xf9\xf41\x7f\xc8T\x0fk\xf0\xbep\xa4\x8e\xa2\xac\xc3\xfa\x05\x13ko/f%\x00\x18t4\xdc|\xbb\xbb\xfa\x1e\xa2\x89\x0bP(>Ej\x01%\x11[YO\xfaB}\xeca\x89\xf4+3\xf0\x0e\xc8\xads\x11\x93\xfa\x8b\xa3K\x817c\xba7\xd3\x9f\xf54\xf6\x8b\xee\xfa\xa1c\xcb\x0fv@<\xf5\x04\xf8\xc9,f\x05Q\xfa\xc5p\xa4U\xfcuD\x8b6\x06#\t\xb3N>\xfa\xd7\t\x9c\x18\x83\xbf\x90\xbf\x13E\xe9\xd2\x14u\x99\xfa\xec\xd9\x13F\xc3I\x88.\x91z\xd8\xa21,$\xfa\xf34h\x8c\x1c\xd5\x0f\xee\xd4\xa4\xb4\x84\xf3)q\xfb#\x10\xb4\xf8\xe1*\x1e\xc9\xce 2/%\xaaE\xfbi\xdc\xeez\xcd\xe4\x07\xc5U\x96\xf0D\x13j\xa8\xfb|\xa4V\xde\n/\x05)\xd1\xb4\xa2o\x12O\x88\xfb\x9c\x19L\xe2d7\xedf;\x849c\x95\x06q\xfb\xc5>M\x88\xdb\xdc2\xd9\xfd4\xef\x0c\xd5\xd2\xce\xfb\xdc\xacG\x95\x10\x10O/\x05o\x1e\x1b\xdb\x9a8\xfc(\x8a\xe6\x07\xde\x144\xacmyd1\xb6W\x8b\xfc]\xae\xdc(\x16\x1b\xb1\xec\x17\x82g\x14\xacT\xb7\xfc\xaf\xaf_)\xe8\xde\x95\x0c\xad=u\x94p3\xad\xfc\xca$\xc9a\xa1\xad\xdc\xaf\x1c\x8e8\xf9\xd9P\xac\xfc\xe6bG\x88\x1d0\x8dE\xcd\xab\xbe\xe7\xbb,\xfa\xfd\'\xf4O\xb08#\xf43\xed\x1e\x19g\x11\x86\xca\xfd\x7f0K\xe1\xc5C\x05\x8dmT\xa0\x98\x0e(\xb5\xfd\x7f^o\xe3\x1e\xd3\x08\xde\x8fLP\x95\x9f\x1f"\xfd\xa3\x1et\x02\xf6\xe0ne\xc7>\x10v;\xd6J\xfd\xaa-\xde\xac\xa4\x1a"\x83@\xf7\x96\x9fFy\x8b\xfd\xdf\x1c\x9c\xd9e\x01J\xfc\xe5\xff\xb9JZ\xdf\x13\xfe#\xd9\xccl\x0b\x7f\x0b\xaf\x0e\xf5\xb3\x81\x10\xa8\xcd\xfe0\xad\xde\x13\xd6\xef\xb1l\xa1p\xb2\x9a\x00\xa0\xf4\xfe4&\xc6\t\x06\xd4"7\x97+>_8Mt\xfej\x84U\x02q\x12\x16\x1b7\xa6\xa4\xca\n\xfa\x1e\xfeu\xc6P!9\x98X\xc8\xd7i\xacVv\xba<\xfe\xbf\x86\xc9\xfe\x0f\xa4\xe2aP\xf2\x81\xb0\xba\xd0\xa9\xfe\xc1\x1d\x17\x17\xbd\xad\xc9@\t\xc3\xa2\xd9\x91iv\xfe\xc6\xb5\x0b\xc1L\xc9\x90\xdb\x9ff\x00\x10\x14[\x1c\xfe\xce \xfa\x85\xa2\x98\x1d*\xbd\xa9\xa4\x10=\x1d\x81\xfe\xd4&|\xd3\xe2\x948\xf1\xfb)\xe3\xb9\x91\xcbQ\xfe\xe8\x98\xbaT\xb0\xa9\'\xf9R\xadUNe"\xa8\xff$\x07\xc9,\x81m*m+\xe8\xdb1\x06\xf6\x97\xff?\xaa{\x998\xf0D\xf2{\xbf0\xc7u\xec\xb1\xffP$\xe2Dq\x069$`\xe8\xff2Y\x06\xd8\xffU\xca\x96\x8dz2\x02\x87\xb8\x9f\xa0x\\M\xb9\xffn\xcbb\xf0[\xca\xd2\xcc\xab\x11\x05\xe0J\x92\xb9\xffwC\xfaH\x8a\x06\x7ft\x88\x7f}X\xbe\xe9=\xff\xa7(P\x07\x96\xe8n\x13R}\x81\x7f\x87m\xf9\xff\xbf\xf7\xfa\xb9c\x97\x1f\xf1\x07\xcc\xd9\x98p \xec\xff\xe1\xcf\xb6\xd2\xa2\xf5\xd9\xf5\xdeCX,\xbe^\x9b' \ No newline at end of file +url_hashes: '\x00\x0c\xa4\x11Nt\xed\x84\x99*HO5\x88\xcf*\x00\x13\x90\x9f\xb2\x19:\xeb\x85\xbcI\xf5\xc9^\xc8\xb7\x00g\xc7x\x17\xde\xc1LQ\x87\xa3\xb6\xb0@@\xde\x00~\xe3\xb7\xdb\x9e\xd8H {U#Q?y\xa8\x00\x8e\xc4#i\xd9{t\xc3\xcf<f\xef\x04XI\x00\xb34,\x1a\x1b\x8d\x848]1\x94Z7gN\x00\xce*\xa3\x80\xbb*\x19\x86e\xb42\xcc\xbb\x86\xe1\x00\xd7E\xbdCm0\x13\xa3\xee\xbf\xb7H\xf1@\xcc\x00\xfc\x9eH\x1e\xe2n\x18\xfd\xa8!/}q\xb9\xdd\x01<&\xd6\xb8\xa6\xd4\x17\x89\x9d\x86\x17\xa7\x99\xb9y\x01A\xfb\xe1\xd1\xe3C\xe2\r,\x18SK\x15\xbe\x01\x01\x97\x9eS\xe7\xcb\xfd\xd8\x1b0\x13\xc4\xf1L\xb3\xfd\x01\xad\xabC\x97\x17\x9f\xecl/\x0b\x8eY\xd1\xe8\xfb\x01\xaf\x9d\xebA\xff\xfd\xd1|\xb7D\x9e\x03\x1c\x04\xb2\x01\xe2\xe0\xd4\xa7\xc9\xdb\xf0r\xd1:\x02\xb8\xb8k\xb2\x01\xed\xbf^\xfbG[\xfc\xb4\x08\x8641>Pu\x01\xf6=\x9e\xa0\x85zio\x0bC\xb9-1\xaf\xc1\x02\x13\xfc\x17o\xaa9 \x9b\xda\\\'\x0c\xb3\x94\xfb\x02Ih\xfe\xcbW\xffD\xa8\x98\x04Y\x9c&\x99\x9a\x02J\xd6\x00@!t=\xf8\xdab\xc6\x8f\xf0Q\xf4\x02Sx\x1a\xb6W\x07\xf8\x8a\x87\xfe\xacv\xe4>7\x02\xc2P(\x07\xa8\xaa\xa2\xdf\x98\x1b\xbc\x9aufg\x02\xca$u(\x17\xc43z\xad\xde\\\xc8\xca\xb6l\x02\xcb\x93\xbf\xa5\x83l\xa1\xe7\xe4\xdbLc\xec\xed\x1d\x02\xcc\x9a\xc71}I\xafaE0Q=Z\xee\xd5\x02\xf0]\x06\x0fC\x16!\xc7\x86\xa1?\x03Ob\xe2\x02\xff\x13e\xe7\xaf5\x8bZ\x17\x0c\x117\xf2\xac\xe3\x03I)\x11\xc0\x01v\xfe\x95Ox>\x12\xd3\x85\xdf\x03y\xd1q\xae\x1ar\xedPkv\xb6\xa6\xb2\xb17\x03\x87J\x97uz\x1c)&\xaf\x9b\x94\'lH\xdc\x03\xc20\xa1\x9c\'\x90\xa0Pi)W\xaaa\x84e\x03\xeb+\xb2\xbc<\xc6(\xe36\xbd\xcfFI\xbb\x1f\x03\xfa\x1b\xc0j\xbd\x82\x9eF\xceE5+s\x977\x04\x1f\xd7`\xb9I\x17\x99\x8ff\xf6\x01\x86\xd9\xd6\xcb\x04/\xcbc\xf2Ew\xd1\xbb\xb6%3)\xc4\x18Z\x04BuI\x9d\xe5\x80\x83\xdeF@\x10J@\xff]\x04e\x95\x8d4\xb4\x16\xc9fs\xec\xdahD\x8b.\x04\x82\x16a2e{\xe3|*}\xfe=&{\x87\x04\xdcb\x8acQ\xeaiJ]\x01\x12\x14\xc0\xe4\xbe\x04\xf8\x9f\xee\xce\x90\xde\x08\xa1\xa5\x10\xef\x07\xc2\x04\x82\x05!\x1c\x13\x17\xa97O{\x11\x12\x10\x98\xa4^\n\x05+\x07\x93\xa8l\x1e\x8d:\t\x82\x00\x96[\xc7\xb8\x050\x93\xde\x97r\x7f\x19d6Q\xcf\r\xd7E\xe5\x05\xaaWg\xad;W1\xb4\xf8LHks\xfa)\x06\x0f\x92^\xe1{h\xa1\x83\x9f\x00\xf0\xb1N\xb2^\x06n\x83\xa3tpKq\xec\xa4\xf6N\xb1\xd8\xb4\x9d\x06z\x9f\x8c\xcbEJ\xf1\x91jNc\xe8\x12\x0c\x01\x06\x8c\x8fc\xf05\xf8\xc5\xd2\x1e\xd5\xab\xcc\x1a!\xbb\x06\xc1\x88\xf0\'\xca\xac\xc8\x04\x81\x90\xe5`\x9b\xc0\xd9\x06\xe2\x00o,\xb4\xfc\xc6\njb\xa4"\x1c#\xd9\x07-,$\xce\x8c\x92\xbf\x14m\x87\xc3\xb2\x7f\x10\x0f\x076\xb9\xa5w@\x1fV\xfc\xffp>\xc4\xdd\x1fS\x07M\xba\xdd\xd3\xfdQ\x0c\x95d\xd4\xc1\xaa\xa1@\xe3\x07\\\xd0\rga\x9d\xd9\x9c\xc6C\x03\xabl\x93\xf6\x07ex\xac\x99\xcd\xf3\x11,\xc0\xd2Dn\xcd\xea\xfb\x07}\xa0z\x1f\x9d\xbc\xf1\xceB\xdc\xec\xcd)\xc3\x80\x07\xa2|\xdb\x8f$9\xb6\xca\xef\xa1^vl5\x87\x07\xb8\x13\x9e%\xe9\xd7\xb6V3\xac\x8bQ\xd9*\xd7\x07\xcf$\xc6Z\xf7\xb2\x0f\xe6\xe9:`\x145\rZ\x08\nwr\xc84\xb2\x0b\xef\x99\xc00 H\x89\x08\x08\x13hm\x1fs\xd2#\xc5\x07\xdcY\xb6\x85\x94 \x08\x17\xdf\x19\xc4K\x99\x90\x0cD\xed\x10\xce\xea\xcd\x04\x08J^\x03\xf1\xa9\xb9B\xae$\x87\xf4Ht\xc0\xe6\x08L\xacG\xdf\xdc\x87\x84\xdf\xa5\xc3\xc4N\xe4(\xbb\x08_\x16\xf77\n\x1d j\xa5/\xddy\xc4h@\x08p\n&\xeam\xa5d_\x19\x04\xbd\x8280\xeb\x08\x86\x0b\x00\xe2\xa3\t0\xaeyt\x8d\xf9\xe9k\xfb\x08\xc2\xb6\x1f\xc4\xeeCN7\xcd2\x17\xa6\xc0f\xad\t\x17mB\x19\xd7;\xde.\xf6\xf2q\xb0+\xf3\xeb\t\x1c\x82qY\x972o\xed\x15\xfe\xf6Tt\xc6&\t-7\xda\xfb\x8b?\xc2\xf2S1\xd1\x11\\KD\ti\xa4\xf3{Nq\xba\x88\xd3\xc8\x8dg\x98{\xde\t{|\xf24<m\xfc4R\xa8\xe0\\\xd6\xd7 \t\xa0\xa9)\xaf}\xcf!0\xd6AO\x033)\x8d\t\xaa\x03%\xcf\xdd\xe3.+\xeb\xb3x\xea\x94%u\t\xb6E\xcdu\x94\xa1\xa3eH\xf2\xec\xb36\x07\x8e\t\xb8u$.V\xc0OQ.\xbd\xe3\xc6N\x82\xfb\t\xee\xe5\xe9\xf2jY>a\xad\x00\xa6>\xb9+H\n\x1d\xae\x16\xb0\xef\xab\x97\x0c&\x88\x0f\xa5S\xban\n\x1ei\xff\x1b\r\xb6\xe1\x11\x98\xc5\xcc\x18E\xe1\xda\n:\xf6M\x07|*l%&\xe5I\x11\x8c;%\nl\x17\x11z\xfd\x1c&\xa5\xa5\xf9\xfc\x9b\xf4\x86w\n\xe1\xb4Zx\xf4\x0e\x8b~\x89(D\xe5\x81\xc8\x80\n\xe8\n\x82.Y\xbf\xc7\xa9\xeb\xba\x90\x1f\x1f\xe1\xf3\n\xf3\xba\x94<\xc1\xbe[\xa9\x9d\x98\x05Q\xd4\x1e\xec\x0bR\xad\xbf\xd3\x9f\xd6\x12}\x92M\xce\x84\x9f\x94T\x0b\x91\x9em\xe3\x1c$]\xb8\xadx|t\xd2\xc8\x02\x0b\x9d\x14\xc7\xd6t0>;:|:\xbeL\x9f\xe2\x0b\xd3\xa1zE!U\x83B]u\x99\x94V\x13\xda\x0b\xd7RJ\xebbu\xe0HE\xcb\x9d\xc6m\xf27\x0b\xf6G\xe5r\x80v`pey\xf6\xffB\xe3:\x0c\x07\xe5n\xd2I/!/I\xc5\t\x0f\x13E-\x0c@\xdb\xa2!\xe5\xf0\xffz\xea\xfe.\x06\xe8;\xb5\x0c\x88\x86\x80\x01\n2 Q\xce\xa0\x996\xddm\x9c\x0c\xc40`g\xee\xbe\x84\x81\xdaZJ\xde5P\xa6\x0c\xd2\xc1\x9d&A\x81\x17\tL!\xee\xfb\x02,0\x0c\xd8v\x93{^\xde\n\x1b\xb72\xf9Q\x9f\xfbF\x0c\xeb\x91\xbb\x00\xa7\tf1\xd0R\xd1/?\xb46\x0c\xff,\xf02\x8c\xa6\x02\nxi\xfeD\xaf\xbf{\r\x0ep\xa1\xcaGP_Wo\x8d\xfa7\xe7\xc8)\r\x18\xfb\xa4\xa52Y3\x07>;\n\xf7*\xe8$\r(F\xe5}r]\xad\xdc\xa7\xa1\x933n\x811\r:T\x8b\xa0O\xd9\xc7\xf3\xd1\xf3\xda4T\x84Q\r_;aB\xecP2\xc7d!\xe1\xb2@\x1c\xb0\rt#\x92\x12R\x1eHD\xa5\x87\xbf\x90\xb6\xa9\x1e\r\x8f\x01k\xcf\x15\x9b\xb6\x9e\xd4\xc0[\xfaT\xe3\xaa\r\x94\xd1)\xc3\x93a\x9fjfD\x14\x06,L\xfa\r\xdc\xf1O)\x0cd\xf1\xe1\xd6\xa4\xf4\xf4E/;\x0e\x15\xc5\x97\x99\x01e\xf4K\x13\x8f\x08\t\x0f\xe4\xa7\x0e\x16M\xa8\xfbE\xa5 ~\xc5\xa2F\xaf\x82\xe1e\x0eb;B\xd3\xdb\xbe\x81c\x10so\x11\x82\x15\x07\x0er\xc8z\xb9\xc3|\xc9\xf1\xd1\xdb/5\xac\x98\xca\x0e\xcd_\xcc\xae\xe8\x9bE\x01\x1b\xf5)\x9a"\xdc\xda\x0e\xf1\x1fK\xd2;\xc3&\x9b\x02\xc4] \xad\xafk\x0f\x0859I4\xd4\x9e\xc2\xd9\xab\xce\x91,Q\xc5\x0f%(\xbf\xd8MZ\xc8\x81\x03\xde\xe4\\\x05\x8d\xe4\x0f%\xa0\\P\xd4?}\xd2\x19W\x10\xff\x85\xc3\x90\x0f\'\xc1\xef4j\x0c\x1a\xe2]\xd3\xe4L\xd1#9\x0f*\xf6D\x86%\xf9\xa3\xfd/\x81JnR\xc4H\x0fU\x81\x18 \x0c\xc2\x02#\xcaY\x8e\xc9\xbf\xd4|\x0fc\x1b\x1d\xbd^\x05\xaf9U\x10\xeb\x9b\xa1\x8d-\x0fd\xf2.\x87yz2M\xa8\xfa\x86\x82LC\x7f\x0f\x92mzN20\x948\xeaO>\x9d\xa9J\t\x0f\x93\xbc\x8e\xe2\x12\x9fV\xef.Z\xe4N\x00k?\x0f\xba[6^A\x14&\xbb\xe8\xde\xf6dVg\n\x0f\xdf\r\xc0\xeb\xf3\xe6\xe5.|\xf7\x1calB\xe1\x0f\xe9\xcc\xffn\xc4\xaaa0\x92\x1c\xfb\xcc\x13\x03X\x10\x1d\x11\xa7\xa7\x83\n\x80#t\xf3\x83\x0f#\xa0F\x1072\xf2\xe1\x9d \xf25\xa5\x8b\xd1y_\\\x01\x10\x80]W\xeb\x0eP9_\xfe\tKV\xe5v\xf6\x10\x83?tCA\x1a\xc9/\xcb\xd3\xdb\xae+\x7f\x03\x10\xa2\x1b\xac\n\xe0\xf6\xc6$\x94\xff&^*\x11\xa0\x10\xef\xa1C\x13z\xe8\r\x04\xcd50\rE&l\x10\xf4:\xf53:\x81z,\xe5 z\x12\xf7\x9e\x90\x10\xf5\x13\xbb\xf8NDR\xb6\x113\xf3\xd5\x06\xdeF\x11\x16\xccb\xcc\xe3\xe6i\xe4"\x17\x89\xfbVD\t\x11\x17\xd6-\xc5\xb6\x85\'\xec\x06[nI\xa5c6\x11D\xab\xa9T\xec\x13i\xd3T\xa1s\xd7\x97\xe1\xe6\x11PP\xec3l>J\xca\xf62\t\xbf\xc2^s\x11Z\x8d\xc2\x0b\xd4\x94\xfav\xd4(5\x81;\xbd\xa3\x11n"\x11lq^]\x12Fs\xd6)\xc8LT\x11\xa7-8\x18\x80\xc9}\x97[1\x18\n\x9d\x84P\x11\xbb\xff7\x03\x12\x0b\xc90\x8c\xfd\xd6\xbe\x11\xaf\xc8\x11\xc4qo\x18\xab+\x1d\x02g\xe7\xb1\x85J:2\x11\xd8`\x91\x1e\xa5Cb\xa9aO\x8aD\xcc\xea\xa9\x11\xdb(A\xaf\x84\x80\xeeb\xdepG\xa9\n\xf5\xb4\x12\x0f\xdf\xd3z\xc3\x8a\x0e,\xad\xac \x9b[di\x12\x1e\x0b\x15\x16\x81\xc9\x91\x04\xdf@\xb2b\xfd\xd1\xe2\x12=\xa7\x8c\xf72)r\xc4\x82\x90\r\xf6\xfb\xc8\x99\x12E\xe23{\xfd[\xbdX\xff>\xd0\'\xbf\xb7\x00\x12\x9e\xc6,r\x96m\xcay~\xc8\xd9\xad)n\x9a\x12\xa0\xf0&\x83\xfb\xc0\xdf\xaa\x15\xec=\xc6\xd4\x9b\x13\x12\xb9>UQ\x8a\xbfGm\xf3\t0\xb9m5\xac\x12\xc7+(\rtk\xb1\xfe\xa2\xe2\xd3\xaf\rR0\x12\xedS\xa9o\x0e\xaa+\xb1\x9a\xca\x9aIfz\xf3\x13\n\xb1+\xf7\x7f$\xe5\xdf\x08\\`\x96\x18\xea\x02\x13\x11\xf2\xda\x08\x938\xf0,\xce\x03"e\xd9\x10\xdf\x13"=\x8a\xe3\xcb\x11YA\x03\xa0\x13k\x1f=j\x13L\xddd\x1f\xa2\xac\xde\xf9&\xce\xf3\xed\xe0K\x1a\x13SZT\xb2\x04\xac\xd7\x9a\xa5Pe\xfc\xfbl\x86\x13g\x1f\xe2\x1c\xeb3\x8e\xbd\xb9\xc1\x0c\xa4\xa8\xf6s\x13heV\x13\xa8o4\xa7\x91"F\xc9\xd7y\xa7\x13\x81\x83\x96\xe7\x02}\xd1\x82\'d\x91=\x0bB\xa2\x13\x9c\xe2\x9f\xf2\x9b\xf9E\xec\xfd%\x98\x06-o\xf8\x13\xa4\xbd\x1a)\x81\x9d\x19\xe9\xf3\\0\x8d\xa3\x8d\xf1\x13\xd1\xa3]\x90g\xf3t\xcf\x88~\xb6\xadn\xb7"\x13\xff*\xc9nX\xdd9\x90-+\x95\x84\xa8p\xaa\x14\x1d\xd8\xfd\xbce\xc0\x12\x9cX,!\nH\xd26\x14:\xa9\xd9A\x06$\xfb\x80\xe7\x87^4\x02\xc2\x93\x14<\xf2.\xb5\xf9:G\xeb\x82\xe4J\x02\xc3\xc2\x9c\x14d\xf3\xfa\xe6Q\xd5\x1b\'\xefz\xf9Ao\xf7\xe0\x14\x88U\x07{Z\xe6\'\xceU\x0c\xf9\xa5?G\x13\x14\x89$%X\x1c+\\\xb7\x87\xe2:\xe1\x11k\t\x14\x8b\xaa\xf5\xa7\xe6\xadj Z\xf6\xcc\xf0]\x00&\x14\xac\xb3\xb7{pA\xe8\x81>c\xear|m\xe2\x14\xb1\x195\xe3:\x81*\xb2w\xb3\x01k\xec\xec\xda\x14\xe9\x7f%Z\xab\xe1R\xaeL\xea\xf4a,\xe1\x17\x14\xfe$\xa6\x9a[\xbf\x00\x96\xc6i\xbc\x1d\xbe9z\x14\xff,\xdc;I}\xd7d\x9e\xa6.X/\x83\xef\x15\x1d\x0e"\x7f\xdd\x85\xefz\x1fm\x9fI\xaa\x99\xd5\x15&\xd7\x07\xb4\t\x841\xe3j\x13\x04H\xb1} \x15XF\xb6\x14Pu*\xfc\xd7\x98g\xca.>\x06\x15rm7w\xbe\xcf=#N\x7f[\xf4\xef\x153\x15\xb7\xeaF\x8d\xea\xb1\xf9\x99\xde"B\xd9\xed\x11\x9b\x15\xcc\x12c\xfd;\xe1\xc7V\xfd\xebp- \x8e\xf5\x15\xecQ\xfa+%\xcc\xb4\xf0\x868\xecd\x85W\xf2\x16\x1a\xd8A\xe0RU\xbc\xdc\xe6{\r\xa7\x18 _\x16*\xbf\x03\xb03\n\x08\xf7\\\x12\x92\xf2uqc\x16St\xe7i\xfd\x9e\x96\xf75\x13\x95\x92\xe3B\xd5\x16m\xaf\x9f\x95&\xd2P\xa0\xdb!\xcdl_u\xb4\x16\x83\x87\x93&\x8a\x08\x9c\xb1z\'\x85n\xd6A\x13\x16\xcc\xee\xab\xc1\xfc\x8c@<r\xc9\xd7\xf3\xca\x9d1\x16\xfb!M\x08\xd0\xf3a\xc6.\xf60\x16LY\x9a\x17\x05\xc1}\xeb\xe9:\x15kd\xebtl\xa9z\xd7\x17\x17}\x12\x93\x10\x1f\xf2\xf7z\xb3\x13\xe2\xcdt\xe2\x17R7#\xe4\xa0\xd3X\xdd\xec7\x03r\x7f\x98\n\x17f\xb6o=\x8e\xba\xe1\xe9pZ\xb4-\x17N7\x17\x8f\xcd)\xe8\xc7^&\x97\xdc\x1dX\xbc\xd0\x9f\x92\x17\x9fe\x0e\xe0\xa9\x99\xe77\xed\xcf~\x0c(\x0b\xe4\x17\xc8iU\x1d\xa8\x8c\x95\xf8\xa9\x11\n\x02\x92\x17S\x17\xc9q\x1a\x87\x1fd\x94\r\xb6q6\xfb\xf8G2\x17\xd4o=;\x06\x8c\xf2\x00\x12MG\xaf\xcc\x00\x84\x17\xfb/\xa1X>\xa0P\xe1\xb2G\xd1\x0c>8\x00\x18\x062X\xd6\xce\xd5\xa3\x88G\x91\xa9\xf2\x1f\xdb\x8d\x18\xa55\n\xde\x95\nv\x9c\x1d?S\xba\x11\xf1D\x18\xc3$\xe6\x84\x0fA\xec\xc9\x94\xa2\xe1\xff\xc7\xc5\x8a\x18\xd7G\xab\xf2\x87\x1c\xe6\xdf\xdd\xb9>g\x02\xf0\xb9\x18\xe5\xbd\t\x0e\x04hj_\x03\x01\xcb\x82\x19\xff\xd9\x19D\xa6\xc4\x11\xb6&\xec\x81\xab<fPC\x04\x1f\x19\x80k\x9f\xad#rU,\x91\x00\x8e\r\x16\xc3\xa9\x19\x81\xde\x0f\'_\xa9\xe0jI\x16\xcf\x86\xc6\xdf{\x19\xb3\xd2\xaa*\x89\xde\xbf\x02d\x0c^\xe7T&y\x19\xbd\xd8%\xa8*;\x13\x80\xd6\xf2:\xbd\xdb\xa5\xcf\x19\xcb \xe5*P[R\xae\xbb\xa55\xa5^\xa8\r\x19\xd3.\x82\xf9\xafu\xee~4h:\xd2\xa6T\xaa\x19\xde\xff\xd6k\xa5f\x83"mv\x06\xf1\xcd\xcd\'\x19\xf2\xc4\x9eX3\x82Y\xb9\x19\xdb\xb4@\x07=\\\x1a\x07\x9c\xe5\x898\x0e\x8e]\xd6\xfd\xb5\x9e\xddY0\x1aLjPE\x90\x11Zq\xc7:S^\xaa\xe2g\x1aS-\x11y*\xe3\xd8\xfe\xf4\x16x\xbb\x87\xdb\x94\x1a\x89\x10\x9c\xe33O\xc7S)\x8a\xf4\xd1X\xaeq\x1a\xff\xf3\x00\x12\xf2\x0fEUt2M3}vc\x1b\x18\xb4B\x15\xc7\xf2\x9e\xe8Pg\xacK\x8eGz\x1b(\x94\xbc|h\x88\xce\x0fnr\x8f\xc7tE\xd8\x1bZy\xe9T\xf2\x04\xb9q\xd9\xfbu\x05\xdb\xf5\xb3\x1b\x9d F\xa2<\xa2\x91\x8e\x84\x10c\xe7\x02G<\x1b\xa3\x07\x07\x088x\x13\xe8~L$\x025\x07K\x1b\xaf\xa1! \xd5\xcdC;\xd2,\x1c"m\xd5\xd1\x1b\xc7\xbc\xea\xa4\xcb;\x03\x9e\x01\x8bp\x01\xa1z\xea\x1b\xd8r\xa2]\xb8{\xfd\xf7\xf1-\x94\x96\xa2/\xc4\x1b\xf5\x00\xa2^\xd3h\xff\xd2m\x92mB\\#.\x1c\x05%\x0e!\x85\xc9\xbc\xe1.\xbf\x96\xb7,\xaf^\x1c\x0c\x17\x8f\x05}U\x02\xf0\xfa\xbe\x1b0\x81{/\x1c\x13\x14\x97/%dD\x10Kql\x0f\xc1d\x9a\x1c<\x97ue\xdc\x98L\x95.\xb1\x9fdh\x8c\x1a\x1cV~YMU\xa6`/\xcao-\xf0\xb7\'\x9c\x1c|\xeb\x1c\xe9\x040\xd4*\x93\x9d\xfbDk\x8du\x1c\x8d\xe6\xcc\xb9\xf1\xf7\xb9\x1d\xd2\x92v\x14n\x07]\x1c\x9e#G\xca\xbcj\x9d\xcc\xf6m\xd8\xb4\xc0r\x8f\x1c\x9f\xaa\xb1\xe7\xc8\x01\xca\xc8i\xe2\xcc\xfar\xaf\x8f\x1c\xaf\xfcg\x06:\x15a\x89\n\x0ea^v\xb0\x06\x1c\xb8\x1c\xad~\xcb\xeb\xa6\x81\xed#\'\x94\xaab\xc1\x1c\xf0hh\xaaL\xda\xedk*4\xc3\xaa\x87\xa4i\x1d\x04\x9b\x83\\\x97+\xeb\x88\x98xk\x9a\x91W\x92\x1dG++2\xeeD\xf1\xfad\xefT7\x00\xe8q\x1dY^t\xca\x81q\xf2\xf0\xe3@G\xa7\xce\xf9\x10\x1d\xa9\xf8\xf8~v\xced\xe5\xc2\x11\xd1\xc3\x08w\x86\x1d\xaa\xf8\xb7\xf2\xe5WZ~\xfc\xd6\xa4\x9a\x96\x9f\x9d\x1d\xbf\xca7o?\x1e\xbf\xb6}\x15\xac\x9a\x86Z\xe4\x1e)\xaf\x9d^_\x11\xab\xca\xda\xf1\x00\x0c\xc6~B\x1e?C\xfc\xcd\xd4\xcf\x9cG\xc1\xfe\x19\x1f\x07\x18\xf3\x1eN\xf9ICzzc\x01\x89zO\x8f\x96\xac)\x1eO+\xe7\xb9g\xa1\x9b\xb0.\xd3A\x8e:\xf3\xa8\x1ey*8\x99\xcez\xb4\xbb,\xbe\x1c\xb92w\xb9\x1e\x89\x19-\xe2\xef\xa0L3+SP_\x1ape\x1e\x95\x8d\xc6uQ\xcd\x9bf\xfcbv5R]:\x1e\x9d\xeaE&t\x04\x83\xf6\xc1\xf5R\r\xccSR\x1e\xd7\x0c\x81\x86\xdd.\x1c\xd3\x96\x0f\xe2\xea|.\xe2\x1f\x03\xcb\x95\x95*\xb0j\x12x\xfb\xbc1\x80\xa4\xbb\x1f\x0c\xa6\x01\x98\xeb\xa0\xa4\xebSk\xf8\xa1\x0f\xe4\x8c\x1f4S\x08m\x04\x07I\xc46\x8b\xc0:\x9a\\A\x1fA\xacr\xa7\xb4\xe1\xbb-\x8c\x8dynKy1\x1f\\+\x05\xadn\xce\xaa!\x01\x83Y\x8b7\x93\xfc\x1fp\x82\x08\xad\xadYF\xd8(\xbcB\x9d\x03\x0c\x8d \r\xacX\xc9\xcbN@A44\x0e\xf0\x9cah \x1b\xd6,B\x07\xbd8\xd0_\x803\xed\x18\xe4\x98 \x95p1\xc6\xf9\xb4\xe6\xaaQ\r\x81"\xcf\xe1 66\xcb\xf9w\xe1W\x9e\xcf\x1fN\xd9X/\x82 ec\xd6\x9a\x07\x0e\xb5w0\xaa\x05\xcb\xdc\xae3 \xaeT\x84T\x92]\x12\xaek\x1d\xefe8\xc6L \xae\xc9\x88\xdf\n,\x0c\xc1\xeap\x88|\x8b<\xbe \xcbz{\xd3\xb0)ur\xf8\x9d\xfe\x03\xd5*| \xda\x01|\xdf$\xfc\\\x9f\xed&\xc9\x0e\xcaX\x0e \xe4\x00\xcbq\x85\xc9\x18\x88%\x1c=Q\x00\xac\xde!]\xe3*\xddL\xb4\xef\x9cJ\xa1\xfc\xf6\x1f\x80\\!m+\x90m\xc5U\xed0t\xb1\x89\xdb=\xab\xf7!mz\xf5sFq\x05\\\xd0\xd0r\xd3\xb7\xa7\x86!\xc6\xf6+U\xa7\x94\xf3\xff\xb5{\x8e\xc7O\x84[!\xcc\xae&\xc3!\xcb\x96\xee<J\xed\xc4\x90U\xfe!\xd7Z\xf0\x84\xe6\x9e\x17\xae\xc6 N\x106\xda\xc9!\xdb\xd9p\t\xeaWk\xde\xb2so\xc1\x00@\xea!\xdf\xd5\x93\xfdf\xd9g\xe2\xb3\xf7P\xdcu;\xc9!\xf0\x99\xe2\xb47\x96J\x7fn\x87\x9ac\x85\x07\xc6"\x05\xda\xee\xe6d\x16\x1ba\xcdk\x8e?\xa5\x9a\x86",\xdd\x06\x97\xf5\x10\x9b|\x95()h\xcbi\x7f".iq\xf8\x03\n\xa4\xe6\xb0\xc9P1\xfe\x9f\xd0"\x86\xc2\xe9xH\x91\x86\x13\x1e\r\x151\x80\xd1\xf2"\x9f\xe9\xf9,-\xe2\x8amX\xe8?\xfdG\xcb\x13"\xa5\xae\xfa]2\xdaC\x87os\xf5\x03\xbd\xfd\x07"\xae\xd7\x86\xdec,\x85=%@<RW\xe5J"\xbf\x0eV\xeaPt+S\xb2\x90\xaa\x1b\x02$N"\xf6P\x02}\xb8(\x81\xcb\x92\x83x\x1b\x0fI\x0c"\xff\x9b@\xb0N\xb0\xa3\xd3\x1d}O\xdf\xf2bg#\x07QH\x91\x8b\xa5\x93\x9a\xbe\x13\xb3S\x17!\x1a#P\x98\x7f\xd5\xad\'\xa0\xd6\xbf\x1a\xab\xdf1g\xcf#m\xa19\x13\xa0M\xcaB\'-\x84_\xa6\x93W#\xf5\x11 \xaf\xdcz\x91VZ\xf88\x99Za/$\x01H\x9a\xabK\x10\\\x9c\xce \xe7=>\xdc\x16%6\x88\x8d\x01\xe7U\xc7>\xb5\xe4yf\x19H\xb4%\x8d\xb5\xc6\xb5X*\\\x0b\xf6E\xdb\x12\xc4|j%\xb98\xc8jI\xae<\x04N-\xc5\x01\xf8n\x8e%\xf4\xcax\xfc\x06;\xe2\xe8\x816\x8a\xf78*\xe9&\x16[T\xfb\x8bI"\x8c7\xf5/9\xce\x93\xd8&H\xba%\xdb\t\x11\x13\x1cWaJ\xd7\'B\xfa&T\x00\x8b\xb0\x8e\x83\x19\xd8=\x9a;\x9a\xe3\x07~&\x80,U;\x0e\xcb\x1fV\xe7\x97h\x81K\xc9A&\xd9\xb2\x88\xe6\x84\x17\xbd\xefQ\xe8j\xcd<\x89\xd0\'\x02\x9c\xf1\x14F\xb4\xc1H\x8f}\xd2\xb7\xcd\x01A\'%f],}KV\x9a\xf1\xc5h\x85\xfe\x155\'/(\x93O]\n\x1b\xd1\x16\x0c\xf2\xd285y\'HF\x9f"\xe2T\xb4\xc0\x16\x14\xce[s\x99\xac\'S\x1f\x81\xbf\xbb\xcb\x9b\x19j"D"\xa3]\xd9\'\x7f\x1a\xf2\xd7\xb9\x86X2\xdc\\\t\x1c\xa2\xafW\'\x81\x9c\x97\x1b\x06`rW\xd3\x19JB\xf5\x1b\xe7\'\xae\x83\xc4\xeb\xa1\xc0\xc4\x14\xe2/D\n\x01\x05\xb0\'\xef\xa5L\xc0M\x9f\x85\xba\xaa\xf6h\x8e\x83\x08{\'\xfe)\x05^\xcf>\xd5|L\x00\xc1\x89yDd(\x00GJ\xf2\x83\xcf\x8c\x02~xV\x16\x9c\t\xd4(|\xe7?\x8e\xb6\xa9Z\x87\xfe\xd3N\x93\xf0#\x9f(\xb1m"\x9e\x1d3\xe4\x90\x18Au\x11\xe5m\xb3(\xc5\xbc\x95Z\xa0\x05o\xe7\x0e\xe5\xb4\xf9\xb5\x80@(\xc7\x84\xb6\xb0\xe5\xc6uH\x95\xe5\xa15J\x18\xeb(\xf8\xcc.\x1f\xea\x8b\x93\xe2V\x1e6U\xb1\xb7Q)\x15\x88\xb3\x97o\x97d\x01@C\n\xac\xe5\xb7\xbf)\'\xb3\x9bI\xda-B\xceO\x86\x9b\xfa6\x9b\x9f)vV\xe9\xa5\xbf\xcc\xd7\x8a&<\x1fFu\x88\xb5)\xb3\x8d\r\xb5\x85\x1e\xcfE\n-N\xecR\xe3\xc8)\xd0B\xf9\xf6[\xbd\x9a9Z\x0e\xef \x98\xf3\xea)\xe8\xd9\xe3\x91\x93%\xd1\xcav\x01\xbe3h\xcf\x9f)\xfcE~n94\xedd/\xa6t\x9d3\xd3`*\x00\x8d\x85\xe7\xdb\xc6\xdd$\xc9\x1d\xd9%\xd0\x9c\x92*M}B$\xbb\xd1m\x02\xb1\x92\xded\xd56\xba*\xf2R\x0c\xff\xf4!\xafB(a\x8c\x07(b +\x0c\n{\'\x02LM\x00\xec\xa9\'2D\xc1\x00+$b\x919\xe0\x05\xea\xd1\x1e{/\xa2\x19\x1e?+f\x98\x8c\x04\x03\xbe\xbb\xaa\xa3\x8a\xc5\xb4\x96\x07\xa1+qS\xee\x81\xc7\x86\x99SA\x99\xe1%\x92*\xca+qT*\xa3\xfe\t\x03\xa1\xf5\xcf%\x9f\xdd\x04\xac+u\xd4 ]\xa9\xe4\x9bwd\xdb\x08\x0bJ\xaa\x11+\xb19\xc2\xd03\x82h\x82Y\x11\x98tX;\xf2+\xb8m0\x8f\xb5\x10\xed\xa3\xf5\x0ex\x1b\x89?\xa1+\xbf\xa5Oh\xdf\xbc\xbb\xfc\xb9\x11\xd8r~\xd76+\xd5\xd7\xb5\x1ey6\xe89\xc0\xecFH:_\xf9+\xdcL\x15\x01\xc7\x15\xa5\x14\xc2Z\xa6A\xd2\x8c++\xe7\xa7\xa0\x07\xab\x87E\x82\xae\xb3\xce\'d\xb4\x15,K\xcc\x8c\xcf4\x8c2\x88\xb0\xb7\xcf\xe6\xd0\xeb\x97,\x85\xea\x9b\x94S\xfa\x15\xdd,\x87=4\xe2\xe5C,\x86\xb6\x9fx?\xa3%\x90g\xa64\xf5g\xa8(,\xa9\xa0\x9aJ\x9f\xff0) j\xe1]0\x8b\x9d,\xc1\xaa\xb7K\xef\xbb\x15\xf3\x06\xb5\xea!:\xed\xb4,\xdf\xcfp\xdb\x9aT\xb1\xb1V\x1fG\x9a\x81\xb5w,\xe7\xcbF\x80\xc7P\xec\xeetj\xfe\x84\x91Ye,\xef\x9b\x94w\x06\xa5\x95\x10\x11Np\xa8\xdf\xae\xe4-\x16\x1b\x16%\x12\x87D\xf9\xdd\xab\xe8\xad \xe1\xae-;\x12\xffUf\xd8\xef\xd9\x94\x8d%\x0e\xdbkm-NH\x12{\x1e\x9b\xe2bc.\xfb\x97U\xeb\x9c-\x93m\x16@\xd3\xb14\x9fV-|\xc5ky#-\xaa\xf6@6N/\xd0\xf3\xf7\xc0\xeb8\x8cfr-\xad\x10]\x02\xcak\x93f\xf2\xfe\xf5\x11\x03\x0c\xa3-\xc5ip\xf2\x9d$\x18\t\xfa2\x83w\xbeC\xa6-\xfa\x9f\xf0\xd9\xd5\xc9%}G0;\x89q\xfcw.Z\x9d\xe1\x96dk\x0fK\x1c<\xa82^r/.j\x84\xec29S\x97\x8cA~E\x18[\xe1D.\x91\xaeq2\x13\x8c\x08\xc2\xc6\\\xcc\xdf\xa2\xd3l.\xa3*>\x9c\xf0\x87&\x82\xe6|+\x0c\xae\xd2~.\xb7\xf3]\xe3y\xb3v|\x18N\xdf\xee\x91|h.\xf3\x99\xa8\xcfT\xdd\xc2\xbdWZ\xf4\xe7\xfe%\xaf.\xf5\x81[+K7\x18\x91\xe8\xb1\xe7l\xd8\xe1\\/\t#\xbc&\xa8\x05k\xdf\xa2\x83{\xa5/\xeb_/\x10\xf4\xa0V\xcf\xc19\x93]\xc3\xb0\x94\xc6\xe0\xa8/&q\xb7\x9b\x84\xab\xd5\x84\xcc\xf9\xf7\x8c\xf2\x11\xc5/B\xb0\xb2\xf2`M\xf82\xa2\xe8C:\xe1\xa5\xca/J\xe8]\x1aL\xa7\xf0\xcd\xb5\x90\xbd\x05tO\xd7/x\x9d\xc2\r\xc2N\'\x06V\xd6\xf9\x8f)*,/\x8a\xee\x98\x8e\xbcI\xc3\xf7\xeb\xbe\xfd\x93\xd5\x8d\xf3/\x8e\x15@<\xd2\x89\xf1\xc5\x97\nt\x07W:E/\x95\x96&\x07\x08\xdc\xec\xc2*\xa3\x08\x85x\xa6\xae04\x9a\xd1\xcc\xdf\xb0c\x01:\xcb\xd4\xdd)\xdb\xba0QT\x8dfw\x1b\xc0!_<\xdfo\x9a\x1b\xcc0t\xe0!\x03\xad%9\x8bj\x80m:\xa7\xaa>0\x8c\x95,\xb3\x85-\xd4\'\xe1\xd8\x8e9\xf1\xa0\x1f0\x91\xe1\n\x84\xe8}!\xd8\xff\xf5\xd9u\xf3\x95\xef0\xe5\xbc\xcc\x84#W\x01\xb3t\xd7mk\xa1\x18\xae0\xf7\xe18Mt\t\x89H\xbc\xe2m\xe8n\xd2\xae0\xfa\xa5\xbd\xf9~o>\xba\x90\xf8/p\x1fgg1\x0e\x873\x08\xffH*\xec!\x95x\x973\xc7\xcb1?v\x96\x93\x91#\xb5\xd5y\xa4{\x98\xafN?1G\xc6\x90.\xe0#B\x18\x1d{\xea\xdc\xf1\xabf1Y\xda\xf8\xba\x17\x16\xdb\xf6\nW\xc0{5XA1\x8fd;:\xf4}s8\xa4\x11\xba\x984\x94\xc81\xa6\xa4,S+\x80\xe4|\xfb>\xa23)>\xf71\xbf\xaf\x9b\x82\xba\xb3\xaf\xd6s\x96\xad\x989Hy1\xd3\x949\xd0\x96\xfc\x81Zy\x02\xf4Q\x19y;1\xfb\xe3r\xdb\x8e\xd4\xdb\xb9\x0fi\x16)B\x84L1\xfd\x04\r-E702PV4\xfdJ\xdb\x0c2+\xf8\xb0\xae;*\xc9~3k\x8a\xb9\xff\xabe2-}\xa6\x9a\x01\xa1^\xc1\xaa\xa8?\x82\xdcus2e\xaez\xb8\xba\x10U!\xd8\x81\xb3u\xf6<22u\xd5\x8e\xd5\x8dP@\x85|\xbd\xbc\xa9\x93\xf9\xf12\x96\xf3\xfb\x1eTV\xd5\x1c\xb7\xf7\x8do;z\xc02\xc5\xb3:\x8f`\x87\x8ei\t\x08\'B\x87s\xbc2\xd9\xd1\xbf\xcf\xd1+\xb3R\xab\x95\xb1\x10\xf3\x0c\xcb3\x0b\xcd\x81\x8a\r\xfevl\xea\xe5+\x14\x9d\x10\t3\x0f\x11r\xdb\x92d\xacE\x00\xafi\x13Z\x1f 3\x14N\x11\x93\xc9\x00\xd8CM\x98\r\xbd|W\xd13Ej{e\xef\xd3\xdeGR\x8e\xe4\xbd\xed1\x073W\xf0\xddqk\xa1\x1a\x11\xf1c\\\xfd\xff\xf3\xa13\xaa\xdb\xef\xeb\xf5&\t\xd3\x80\x89\xa1H^\xe9\x113\xb0|\xa9.\x85`.\x13\x99E\'\x9c#\x97\x033\xe5l\x1d^:UCJw\x92\xe3\xb6 Z\xba3\xf0\x19\x8b\x16\xb2bo\x16\x11\xde\xffA\xee^\xe84*Kr\x90\x8e\x08p\x8c\x16\xab\xce\xac@\x0c\x9a4D\x1c@\xfb\x91P8\x80f\xbe\x9fs\x95\xa9\xcb4\x869\x94v4\x03\xc0= 5\x8c\xa5\x86\xad\xd14\xa5\xdd8m\x19gaB\x16\xb9\xc8\xf8\xca_\t4\xbe\xd1\xe8\xae\xb1\x872\xc9N\n\xd6\xe3\x8bv\x104\xcf\xcc0\xe1\xb9(u\x1aB_\xd4fYe\x8e4\xf3\x0f+F}\x9c\xa6\xfa#\xcf\x1e \xe4*[5\x0f70+\xb9\xa9\xcc\xda*\x92\x81\xf8\xcdz\xb15:;\xf8\\\x08\xb0\x07X\xa5\x8f\x91I\xc7*P5J\xf9q\x04\xa7>\x1a\x9d\x9d\xa6\xf2\xda\x8a\x90)5X.b2\xbdW\x9b\xc2\x92_\x9a\xd7~\x97\xf05q@\xfd\xc8\xf4\x99\x1b\x02H\xf8\xfd\xd5\xcb{q5~0\x04B\t\x0fr\x89\xbf\xc3_"\x8a\xf3\xd95\x81~\x98\x92\xca\xdd\x8d-\xbb\xca1\x84\x91\x97\xdb5\x8b?YY1.";\xb9\xad\xea\x13\xc3`\xae5\x8d$\xbc\x134\xc1;^*\x13\xdf\xbb\xf0w\n5\x8d\xb08\x8f)\xbe\xfb\x97\xb9\'js{\x8ab5\x96lf\xc3\x03g\xd5\xd1m<\xb2\xa4\xb4b\x865\xac:k^\x0f\xd4\x9aq\xad\xfd\xc4\xbd\x0e\xa3\xf55\xbe\xe1\x0c\xd3\xa0\xb7\x19\x1c\xae\x97Pk\xd5uV5\xceq?r\x19\x83\x14b\xef\xab\xdcs\xb4\xda\x965\xdd<\x04\xb8\x0e\x00\x86d[V#0\xc9L:5\xe02f\x0e\xdb\x92\x1c\x0c\x0c\xe5\x9b\xfa(\x9d\xc55\xeb\xe8H\x94\x95\xda\x99\xcf\x04\xd8\xe4e\r"G6"\x93\xde\x9d\xab\x8c\x8b`\x0e\x87\xe6;\\\xfd\xd662}\xf3\xb5\xe8\xc0\xfcs\xcd\xfd\x82\x11%\x14\xd36Oj\xe5c| \x9d\x8bM\x83+\xe6\xea\x1e&6\x8f<XB\xb4m\xb7\xbe\x87;\xc1\x88\x9c\xa7U6\xa4\xa2\x17\xe0\x15\x98\xe9X\x9b7\x0f>4\xd2\x166\xa7\xe5\x08\xc6Y\t\xc2\xf1\xd1\xac\x068\xben\x076\xab\\\xa0\\\xe7\xe2\x00$u\xc1\t\x03\x97\'K6\xbf-Z\x9d\x98\xca\x83|\xb7\xb4\x13\x02\xa0\xb5\r6\xc1C-\x17\x8c\x1e&mYg\xcb\xf5v\xc2\x037\x03~&e\'\xd5\xdc\xad\x94`\xb4\x7fU\xbb\x1a7 L\n\x9d.k5R\x12\x9a\x10\x9be\xaa\xa17:\x19\xa4\xa4\xde\'\x8f\xf1\x1e%Ch\x0bJ\xb67\x9e\xf0\xb8\x86z\xb5\x84\\\xa07%\xab\x18\x9e\xd38\x07\x87y?\x8d.\x1c\x0f\xe3\x8b\x0f&v\x11\xf68\x11\x1b\xae\xc3<\xf8\xb6\x0b\xd0\tk\n \xb2\x1d8\x1f\xe0\x95)\xbdBDQ\xaa\xeeD04\xcf\xf382S\\\xce\xddz\xb8{\xb6e\x13\xc6\xd9\x9eF8N<\xe27\xfa\xcc\xb7V]\x1c_\xc2\xc6_\xc68x\xae\x8e$\x92(\xa9\xa3\x99h\xaa\x15,\xb3\xc48\xa27L\xeeR~Z\x10\x12\xaa[\xda80\x929\x0b\xa6\x9b\x8d\x15\xbbm"\xa5\x84\xe8Yl\xf3\x8b97\x83\x15(\\f\x81\xfc\x132\x0b\xb5\xcf\'\x9199\xbe\xc8\xa4c\xba\xc3M\x0bF:2\xc2\xcd\x8c9E\xb0V\xd7\xa5\x1bS\x94LT\xeb\x94\xe1u\t9K\xd0\xd4,\x02\x96\xcb\x11a\xb8\x8a\xcdQ\xcb-9\x86\x03\x97<\xbeZ)\xd0\xb1\xc3\xb5\r\x85\xaf\xc49\xa4\xf8\x12%\xdf\x14R\xeal_{\x1e\x0e\xe0\x7f9\xb9"\xdc-\xe9\x80\xce\x9a\xf8w\x8a\x93$\x18\x899\xdc\xd2\xf3\x90\xf7\x96\xda\x90\x9b\xa1\x9e\x149\xad\x199\xf1\xb5z1B$w:\xb4\xe9Eb\xd0\x11F9\xf9\xfd7\xcd\x1b \xe6N\xfd\x08U\xd7_\xd5Q:\x05s3b\xcdT\xbe\x0e\xa9\xf1=^ \x90\xba:SDp\x06\xd7\xa94\xde\xe7\xefk\'\xae\xae\xfe:e\xe0\xb7;\x8b\x87\x8e\xeb\xe9\\\xf1\x9e\x95\xf1e:\xa8\xc5\x1f\x04\xbd\xab\x95\x83?\xe8G\xef\x10>(:\xb6\xb87\xd26\xc6\xf2`\xeebk\xbe9\x97>:\xcb\xb7N\xe5k\xfcO\x8c\xf8\xcb\xd81\xf3\xb9\xc6:\xde\xcf\x08Ysr\xeb\xa6\x17\x8cL\xf7UA\x02:\xf5\xee\xc6 \t\xe8\xa1L\x89\xa4\x83\x83\x01nq;\x13r\x8e\xbc\xce\x19\x860\xea\xa0\x07\xf9\x07\x0b\x1f;L\x11\xde\xf4x\xfd^.Y@\x93u\xd2\x10\xfe;_M\xb0\xc5\x1c\xe2\xc3\x816\x06\\\xb4\xd6of;\x87(T\x03\xb9\xa57\x01r2k\xec\x8a\xa9\xfd;\xd8\xa2\t\xc4\x92\xc7\xb3\xa6\xc9\xb5\x19F\xd8+\xdd;\xf5\x01\xf0\x10\xa3\x92)\x1a\xbd\xf84\x7f\xcc\xe8h<\tq\xbc\x05\x1a\xcf\xd5\xf3\xb2:<\xf1\x87z\xa5<\x0e3\xb1>$8\xaa\x17\x82\xc6V\xd1\xf6\xe8K<2\xb26\x9c\x16&\xbe\xec\xd5\x9d\x03\xf0}\xb6\xe0<\x8bdBz\x81\xe0)U(\xa2\x1f\x04\x1c.\x96<\x8d\xe9_\xad\xb2\xd8\x86\xd0\x9d9W\x9f\xfc\xa0\xea=s\xa5\xc2g&\xbc\xf28K\x88.\xaf][==|\x0c\xbf2\x02[\x16v\xc8g\xb85\x90p\x1f=\x93\xc3\xb8\xb8n\xdf\x8e<\x9a\x18i\x1ew \x80=\xb9\xc0)7D<Z\xc0w\xd3\xe1\xa8\xe8^\xff=\xef\xb0\x90\xbc\x13\x94\xe4\xdd\xe4\x07HO\xd9\xb1\xe8=\xf4\r\xeewa\xdecDv\x8b\xe8\xc6)#\xe9>\x16\x959$\xee#\xde\xe5U\xfb\xdf\xfa\xd8[\x14>3aX\xeaO7\xd0MW.\xce\x9b\xa8n\x9a>xO\xf3\xbd\xb4\x96\xf4\xf1\xa6h\x909\xbf\x9f]>\xd3\x96\xc5\x87k"\x0cY\x89\x08\xd1\xf7C\xc0\x14>\xd3\xba6\x87T8\x0f{\'V\xd4\xd9<0\xa2?\x02O\xd2mJ\xd9+\x1b\xeb\xeb\xf4P0y\xa0?<\x84\x97K\xa1\xa3\x95\xad\xcb%\x8fYm\xfb\xe1?=\xea\x88J\x8c\xf1\x80O\x82\x92\xae\x0b\x93\xeb9?E\x88#\xb6<^\x9ac\x8b\xd1\x0c8\xc8\xa9c?K\xd2\xeb\xe9\xe5G\xbc\x15f\x85j,\x89^\x12?S\x0b\xac\x0b\xfeK\xc3\x06)\x89R\x1f\x10\x0b\xb4?p\xcc\x0e\x0c/\xdb\x88\xfc\x9c\xd4\xa8\xbd1\x8a\x8a?\xa4Md\x8e*\x8aN\xa1\xa3\xcf\x00\n\x97\x86\x88?\xa9\'\xf4\xad8\x9a$\x03\x97\xdd\xe0^\x01T\x11?\xb5C&\xbb\x14\xf2U\x1e\x04S\x89\'XH\x15?\xbc9\r#\xaf&\xe7@\xe0P\x80ekg\xac?\xcd\xbb\t.\xe8\xcbi7jY\xfciix\xc5@\nw\xe9\x11v\xbc\xa0G\xd0\xd7\xa8\x83%\xb6\x8b@P\xa8Aa\xe3zh\x95\xe6\x1b\x15D\xb5\x1b\x1a@vI\xfcX"u\x8f\x84BHE\x84\xba\xbfS@\x8f\xc5y\xe4w\nXZW\x9a}k\xbb~7@\x93\x1c\xe0\x06\x89\xfb\x14;9\xac\xbb\x9c\xe5\xeb\xde@\xbf\x07\x03\xae\xefJ~\xbe\xcdo\xa2\x02\xc3d9@\xd7w\xb0&B\xe9\xfb\xbb0X\xbd\x0bw\x88c@\xf8vf\xc9\xbb\x0b\x000\x03\xafl8R\x1f\x1bA\x04\xd5\x82\xca\xd6\xa4\x91\xf1\x847L\x87\xccr=ABs~\x87\x0f\x03\x84?/\xb6\xd5\xf0\x9c\x87AAS\xca\xbe\xdb\xadO\x16U~/\x8f\xa09\xad\xf9Ach\xedos\xa16Q\xf3VGR\xf5S,A~\x879F\xd4\xc0(i\x18_G\xe9Si\xc6A\x94\xd7\xac\xf5\x9c\x91d6\xea\x13\xa0JIj\xe5A\xab\x1e\xfe\x87\xe2f\x1at\x7f\x82HB\x11\x18KA\xe7\x0f\xea\x95?f\x92\xa9\xa4%~\x7f\xb4T\xeeA\xf8\xd6\xc3\x93\xa1`K@\xc5\x8dp\xa8\xc7h\xe2B\x1d7\x89\xef\xd1lq\x0b\xfc2\x9e\xcc*\xc9WBW\xf2g<\x01\t\xc3\x81K\x98\x16<\xb2\x9a\xf5B`\xae\x01\xa0\x89\xa5\x02h\xc3\x1en x}\xe4B{4;\x99\xf7w\xa7\xd7\xe8\x96\xb1\x9d]*\x1fB\xa0\xc3\x12\x0f\x83\xbdZ\x9b-\xb0\xbb\xf5-|\xd4B\xa6\xb1\x00\xc9\xfb\x10\x9f\xdf\xa8\xca\x0c\xfc{#\xb8B\xc1\xc5\xda\x81\xff[\x8d\xa5\xc3\x10\x08v\x93\xe9\xbbB\xdf\x1d\x0eQ\x17\xb4Kvc\xcc!\xcc\x14\\KB\xf1\xdc\xd6\x1e\xadQQ\xe0)*.\xe9\x0e\x01\x85C}N\x1f\n,\x0c\x7f\x14\x11\xa6o\xec\xfa\xd6pC\xa5\x9e\xfd\xaa\n\n\x9f\xdcL\xf0\x17 \x0e]KC\xc1M\xad\xe4L\x9c\xfd\xd0X\x1f\x95xp(ID\x106J\xff\nK\xa1\xc7\x9fO_I}\xba\xa9D\x12\x05\xd6\x14iu\xbeD\xafx\xcf%\xce\xb4DD!\xb53d\xfd\xecN\x8cOB\xeb\x0e\x94\x81BD#\xfe7\xceF\xe4\x81\xd2H\xa5\xa8\xdd\xef\x17|DU\x9dZV\xcb\x91\xd4:D;\x8bc\xc4\x8b\x9dDw{\xb2-\xc6\x8e\x0b\xb2\xe7\xbc-An\xf4\xd7D|\xed\x03\x9d\xb8\x1e\xc5\x9e\xe9\xc3\xc0\x18SG\xa1D\x91v\x8a\xae\x1e\xe4M\xf5\xb6\x9f\xc7\xb2G&\xfbD\xbd\xb81m\x03\xc8\xa4\xd6c>I\xb0DE\x1aD\xe5t\xf8\xf4\x0b\x10\xbb@\x90\x1f\xb0\x96\x84\xeb9D\xe6\x89\xbf\xddw^\xa9T\xda\x93?}\x9c\xebbD\xf1\x95k\x9a\xbc\xact\xd6\x89\xb6\xc3\xca6u3E?\x08H^\xd9\xban\x01\xea\x90\xe1\xf0\x00\x95\x13EL\x10F\xa1\xd3\xe0q\xfd\x91U\x82($\x00SEP\xa76\x08\xe4\x01\xcd\xae\xca\xf5\xac\x98b)\'Er\x82?\x8f\xe2(h,q,\xbb4#\x83ZE\xb9\xa1\xd1f,\xc8\x18\xd5\xc1\xe8\x14*`\xa18E\xd5$\xdcj\xb1\x01Z!:\xf4\xeaP#3\xabE\xe5\x9d\x96\xe9\x93t\xbb\xb9\xa4q\x9d\xf4\x8c\x89\x1eF\x1e\x9b\xe1N \nP\x9a\xf7\xeb\x16\x143\xcc\xfbF>,\x13\x079\xc8\xbe!\x82Z\x96\x85\xce\xb8\xb2F\xce\\\x88\xbd\x8f\x02Y\x96\xe0\x86\'\x16r9\xb9F\xd9\xae\xfbX\x87\x7f\x03~!\xa1 \x8bo]VF\xdftq\x1dG8\x80\xe1S{{:D\xaavF\xf4\xa7\xab\x00a\xb0(\xac\xd2\xfd\xb5?\x06\xf9\x15G\x8a\xc4\xbd\xfaP\x0c\x1b\xd7U\xfa\x90\x93\xfb$gG\x91:kV\x1e\xd6\x80r\xb2f\x14/\x8a\x12\x87G\x9d\xdb\xa8q\xf7\x996\xfaS\xde\x8d.k\xea\x05G\xc1\xc0\x95z\x8a\x05\xdc\x06G\xd0\x8d\xa7U\xc1\xd7G\xcc\xcc\x9e0/L\xb4^\\4\xeec,\x0cUG\xe8[\xa2\x92k_\xf1\x8arOG\xbe=\x7f>H\x1eF\x1e\xf3\xfdn\x0cS1\x8fR\xe3\xeb\xde\xb4Hf\xb6V\x8e\xc9\x12\x17\x99\xbd\xec\x0e5\\\x08\xf6Hj}\xb7gU\x05%\x88\x8a\xc7\x037\x8c\xb0\x1dH{\xe5\xc2\x8d\xbe\x83F\xc3\xef\x01\xe8\xb1\xda\xab\x15H\x9d2\xa1\xa97\x84>\xb9\x9e\xfa\x88\xb7S\xc1\x04H\xa1\xd0\x17~\xb5\x8b\xdc\xd6)\x85\xacy\xe1\x88\xf7H\xa7\xac\xbf\xe8\x93\x0f\x90\x17\xb5\x03\x01A\xbc?wH\xbf\xac\xb2=\xf93\xcd\xfdc\\c\xbf0\x86AIu\xca\xd3#\xd1m\xe9\'$\xca\xf5zQ\x8d\xaaJ\x17VRk\xc3U\\\x18\x80\xd3\xd5\\\xbc\xd6\xe2J\x19\xf8\xdd\xa1\x9a\xe1\xb1\xfb\xb6\xe4\xaaF\x06\t*J?V\xa5D\x1cn \xc3M\r\xb0\x01E\xa7\xafJr\x1f\xd5k\xe0\x8b{\xc2\\Q\xe0-\xb5\xdb\xe1J\x8b.\x1e~i\x9b\x96]\xe4\xee\xabG\xa1K\x10J\xa6\x87\x87\xf4kA\x8f\xf3\x1f\xe7D5\xaf\xcd~J\xb9\x98\xbd\x9db\xbc*z\xf2\x8fB\xdb\xeb\xab[J\xba\xf3\x91\x14\x01<\xa7d\xb9\x88"\t\x9bM\xfcKp\x9b3\xbaR\n\xb4RY\x80\x92&\xa0^\xfaKq\xfe\x17\xc2r\x7f\x9c;\x15\x00\x19\xbd(\\\xb5K\xa4,\x9eF\r<\xc09\xa0\xc9\\\x05\x85\xb9\xf5K\xad\xf3\xcf0\xfcFf\x11\xbeK\xf3\xcf!\x86fK\xae\x0c`\xba_\x00\xa75\xfeZhC\xec(\xf5K\xc7\xf9\xd6\xc6\x97\xcc%\xff\x90d\xecQ\xea\x82\x0cK\xc9*;\x85\xcc\x8c\x04?|\xea(Q\x86\x0e,K\xd4\x14\xafN\xdbBV\xf6\x02\xbe\x81,2\xad\xffL?\xb0\xcc\x9e\xabL\xab\xd4\x14\xd9\xa1\xe9Ri[L`eW\x85+\xda\n\xb6-gug\x16x\x1fL\x84\xb4\xc1\xe8\x1dG@\xf4(\xd4\x1f\x8d\x03^\'M\x1e\xce\xab+\n\xe7\'\'\xac\x81\x90\xbe\xd2\x85iM\'K\xe2\xb6c\xf3\x18=;1\xac\x81\x9cM\x12M3\r\xea\xc5\x8cg\x9cR\xf1\xbb\xd9\xeca\x93\x06Me\xd8\x9e-\x81\x04\xe4}\xac\xc4\x96\xc7\xde\xc1\x98M\x83\xa94\xde\xba\xf9P(M\xdb\xacU\xcd\x1c$M\x85G\x06U\xb2p\xdd\x86\x80\x01\xaa\xf1\xc2\xff\x06M\xbd\xf2Z\xdbN\xce\xe0j\xa1Yx\xce\xba\xa5\x1fM\xdd\xb8\xcb^l\xad\x0c\x11\x9d\xde\xa6\r\x0ef=M\xe06\x82#\xca>N{\xac\x13J\x0e-\x16yM\xfc\xcc<\xcf\x08\xa5s\x05\x14\xbb\x15!\xdaC\xe1M\xff\x9c}\xb7{\xfe-\x8b\xac\xa8a\xa3\r\x8b\xfbN\x0f\xd2*\x95\x08\xa5\r\x02\xb5\xbfkN\x8f\xcc\x10N\x15]J\xdc\xfc\x9cV\x05\xd7 \xfeo\x86\n\xaeN\x1d\x84caF6\xe3\xdf\xad\xc7a\xddwj\xdcN2\x85`\xf1\xba@\xb6\x90"\xd6|<V\xfe\x91N\xd0\xf2\xa2W\xef\xc5~\xde\xf0AEsuVxN\xd7{{\x81\xeb^\xc4\xda-\xcc\x197\xeb0\x89N\xd8\xa0\x99~\xe7\xf5\x96W\x86P\x08(\xe7\xbc\x8bO?\xc1!\xbdvd\xc0v\xfe\xf32:\xd3\xbf\xfaOU\xa7A*\x1d4\x8e\xa8T\x03G\x8bt\xd9\xf7OZo\x88Eb\xb6^\x96\xfa\xa0\x04\xdbm\xd4\xdcOk8\xbf\xdecX5;\xf8V\xea\x0c\x8f\x1c?P\x11_la\x9b\x90I\x1b\x9d\x8eG\x05|<%P\x11\xf0\x8c\xf4C\x19\x01\x12`_\x14=\xbe\xb1\x90P4d\x89\xc5:oT\x03\x86e \x0e\x9b\xa7\xc6P@\x9ex\x10\xa1$"\xa6\xaec\x19b[\xfcmPId\xb5\x94\x00\x02\t\x00\xc1\x18S\x1d\xb0\xbaBP\xcd\xa9es\x8c<\x07b\xed\x95\xae\x86\xfff\xb3P\xea\xfd\x05\x81\xb0yF\x9fO\x9e\xf9\x05\x8ac\x7fP\xf2,\xb3\x05\x89\x87\x93gX\xb4\x8b\x8b\t\x9e\xe7Q\x04\xb9u\xcf?n\xac\xc7?\x9e;\xf0\xd3\xd0\x00Q4\x97\xb9\xacg\xe4o\\56*\xb9\xc1\x06\x0bQ7B\xc4\x16\xba\xa7\x04\xf4\xb7j\x85\xd3\xf6)\xe0Qz\xe6\x86\xa9\x07$\x1eE}\x93a\x16I\xf7?Q\x94U\xd6}\xc7\x83\xd3\x88\x83\xe9\x10\x12y\xc9\xd2Q\xe4\x92\xe32Vi4z\xc0\xe3\xe89\x81}\x06Q\xf3\x87C\x94\x89\xf3p~\xc8\x88\xbb<\x1e7\x88R"\xe2a"\xc1\x93\x12\x13\xeb\xab\x9c\x06\xf81\x0fR.\xaeX\xc0\xd1\x87\x13\xb94v%\xd5\xaa\xc7~R5S$\x17:\xe1\x03u\x1c]\x95 \x8c\xc6QRR_\xf1XG\xf0\x0c\xf1\xea;\xd9UHs\xe0R\x98\x81\xbf\x7f\x86Oo\xe5\x18\xa9\xbcn\x1f\xef\x9aR\x9f\xb8\x18J}W\x9b\xa9\xd6\xc96q\xe0\xfdvR\xad\xc9\xde\x9e\xab\xe6,\xc9\xc2\xec\xb8\xce\x80\x18\xa0R\xc1\xd3\xea\xb7\xdf&\x00\xe1\xe0$\x92~\xd9*\xf5R\xd8\x9c\xc2C\x06Dv\xa5_tA\xc6\xb2\xdb\x9dR\xe1\xdb\x06\x9d\xfd\xbb\xfa\nY\xb3C\xa1\n\x13\xfcS\x19\xb2\xbb \xf1\xab?:\xdd\xb3\xdf\x8d\x12\xa13S\x1d\x0cI\xed\x8b"\xee\xf6\x83\x10T$\xe3\x8f\xe4S \xb8\n\xff\x8a\x18\xdc\x7f>\xe5\xb2\xaf-\xc3\x83S9c\xb3\xac\xfb\x08\xe3\x17\x8fS\x90p[@8Sj\x8d7\xd0\xc6mw\x1bN\xa0d\xff\xa2\xa8FS\xb2\x87\xc7\x88\x18ZE\x881\xb6T\xa0\xaf\x00\xf5S\xc2\xe3c\xf8\x92\xe1\xc2\xdbL)45\xb7\xf5\x0eS\xda:\xb0\xe5R\xc8\xd4\x04VU\x9b\x9d5s\x84S\xf4D\xb7\x12+L\xabi\xa5\xce\x91\xf6\xb9\x14\x89TY\xdadCN\n9\x04\x9dLQ@"Z{Tf\xf6\\\xd5\x93\x01\xce{\xea\x82\xe1\xcb\xe2M\xcbTps\xf5g\xc4]\xf9\xbbubw\xe1^~)T\x83[\xf5\'\'\xe0w\xd2\xba\xe6\x8b?4f\x19T\xd1a\x16P\x161\xa7\xe8\xc4<W\x81\x91\xff\x1fT\xf2\x07}\x1c\xb6\xfc\n_\xe7\xe3\xbeG\xb6.0UM(\x14\n\x98\x87kB\xf7\xce\xfd\xf0Jl\xaeUN\x80N\xe7\xe4A\xd2\x84L\xd9\xeb\xfc\x80)7U\x83\x93\xe9\xaa^\x1f\x9c\xdd\xb8\xd6c]\xa9P\x0fU\xa9\xfd\xc6\xccH2KdP\x97\xc2\xedR*8U\xb4j\x84O\x0c\xec\xbfp\xbb\xfd\xa0\r\x90z\xffU\xb9\x86>\xcae\xa7S\xdbe\xe40\xbb\'\x8d\x83U\xbc\xbf\xf4Bq\x08CM\xca\xb0@\x0c\xe4\xcd U\xc8\x1f6\x17o\x12\xc7\xdb\xf8\xfaA(\xb2 5V$\xcc\x06\\\xe2E\x04[\xe1\x9f\xc5Q%\xb4oVlY\x80#\x8b\xd8\xfd\x01B\x06\x034\xb5\x8a\x18V\x93\xeb\xb5\\>\xd6\x1b\xd7#\xba\xceS\xb2\xbf\x8bV\x95\xb3\xec\xa9\x8eRe\x99Sp\x10\xcc\xa4}\xb8V\x9f.a\xfd\xfaM.x\xd7\x9cj\x93Y\x11\xf7V\xf1\xa3\xa6j\x05\xb4\xbd\xde\xbc\xd6ZDS\x88\xa9W\x1fYVE\xe8\x14\x97EO\xe0\x0b\xfe"16Wg\xcc\xafka\xb4\xba\xc7-\x01\x7f\xc6\xc7+\xc8Wh\xb4\xa9F\xb1\x0c\xc5\xbd\xd9L\xa6o~\xf0eWx\xd5\xae\x9aX\xcfQ\xcf\xb2\xba\xe8\xb0\x97\xc52Wz|\x17\x01\x14\xe9\xd0\xc1~\xfcr&#\xa6\x88W|>\x89Cs\xf3\xb3\xa9\xe1\x18t\x9c\x98\x07WW\x85\xb2\xe7\xca\t\x1eJK\x97E\x1b\xbf\xc0\xfb\xedX\x1c?p\x94F\xc5\x8c\x1d\x1b\x19)zx?\x99Xv\xa2\xe4#\xf6\x94f;A\x83\xf8w\\T\x8aX\x87G\x08*>\x1dYA?\xbd\xd1\xeb\x8bB1X\x94\x95ke\xd4\xeab-P\x8b\xd3\xd8;\x8evX\xbf\x87D\xbeg\x8a\xbd\x8d\xff4\x8c\xc8M\xe3\x05X\xd7)\xc5\x7f\xc5\xe5\x1dgd\x99x\x9czg\x0cX\xe6d\xb9\xb8\x1d\xba\xda\';\xa4A\xa8z\xf6\x89X\xfe~\x19|,\xd5)\xe0B@\x04\xdf\xcfy\xe2Y%\x8b\x9bWw\x018\x8dp\xefe\xb5tE\x90Yg\x90\xf7\xc9\xa6\xd0\xb1\x13P\x03\xec\xa3\xfc#6YoixS\xdevv\xc4\x8a&!\xba\x13\xc1\x89Y}\x13c\x06<\x95\xe4\xc1\x90\x06\x1b\x19u0WY\x8a\x1b\x16h\x8d KI\xac\xbb\\\x963@\xaeY\x8c\x80\xd0\xe1F\xd9\xc7\x1bO\xf1\xbe\xbcw\xf1OY\x8d9\x1a\xde~+\x94\xe4\xc1\xd7j\x9c/0\x07Y\xd1\x98\x18Yy\x88?\xadt\xda\x7fhK\xf2\x10Z,\x91\x82\xcfO\xd7\x1c\xc2\xfa\x7fo\xfb\x83(\x0fZA\xab\xa5\xe4;\x1f\xd7\\T\x12+q\x0cJ\xb6Z~\xdf\n\xf6!L,\x7f\xf1~?,\xf0\x92\nZ\x7f!vY#H#_(\xfc)O\xae4\xa4Z\xa3\xf84\xca\xd71\x07\xf0\xd6\xdaI\x88\xb7\tmZ\xc9\x84fE\xfc\x90S\xb6H^"\xc7\xe1z:[\x06\x95\xa0}\x02\x0f\xd2\x087\xf4\xcb\x8f\x04\x99X[NViZT\xff\xe4\x80n3\xf9q\xab\xa8\x05[](\x14!\xd9H&r\xac\xc6^\x05\x1e\x05L[]8r\x93\x83W\x9a\x02\x00\x1f_\xd4\xf3#\'[{\xc0\x9b?\x03\xa5\xd1\x98\xc6\x99\xe74\x1f\xe50\\\x12\xdbq\x95\x16\xe1\xb8\x11\xf1\xed\xc0B\xc4"X\\)\x05\x031e\xe7\xfe\xeflj0\x08b\x9c*\\;\x00\x95\xfe*&\x98U\xb7\xb7\xf1\xb0L\x9a=\\i\xb1\x9b\xdcu\xe0\xa0\xbf\x02\xacA\x00\\\xb8\xe0\\pP\xbc\xabB\xa7r\xa3\x0e\xba>dH\x08R\\t\x1eU\xa4\xdc\xfff\xaf2\'\x862\xbbA\xd6\\u\xe0\xdb\xe1vs\x07\xa6\xfbh%\xd5\xfb\x80\x9a\\\xc9\x90\xfb\xb7FJ\xe3\xe2\x12\xa0\xf1\xf1\xf3u\xe9\\\xf7r\xe1\x0f\xc5\xd01R\r\xa6Q\xda\xc3A\xb2]0\x89\x86\\\xb7\xcdN\xef\x98oW\x88\x1b\xc2\x15]n\xc2-\xc1wyZ\x1e\xfai\xb2R\xfe.A]\xd2\xbdW\xf7\x9d\xca\xa52\xdb\xdd\xbc\xfbF\x8c\xbb]\xf1\xb3m\xd3\xbd]\x02\xf1\xeb\xf7\x96\xce0\xec*^\x07#\x0f\xf8\xce d\xb2P\x7fyX\xb5s\xb8^\x1e\xcb\x13\x08,n`%=n\xb0\xc1v]\xd6^IW\xca+\x10\x91\xb2\xaa\xda\x96\xff\x04^\x90\x14^n\xb7i\x94\x83\x17[\xa4e\x89\x1a\x8e\xaf\xf1\xde^z\xe10\xba\xc1\x97\xe2a\xbbt\xec\x860\x08\xbb^\x8dC\xf0@\xbf\x01\xffd\xfeH/\x17\xe6\x84E^\xaf\x94\'\x11SgX,\x8d\xa6,D6\xb2\x17^\xc7\x91\xc3\xc6\xef8\xa0S\x96>@\xeb\x1d\xa0\x0c^\xd2>\\\xc9/\xa1\xb1\xf2\x88\x17\xad\x94\xbf\xa5\x1e_M\x9fN\x16\xf5R\x9dHi\x9a\xc0\xa9\xddIi_O\x18\\\xb51\xb4\x8b\xc9\xaf\xc6~\x98\x8d\xce:_O\xd3)\x89\xd4\x131\xb6\x04L\xdc}\xcam\'_\x81\x0b\xac\xf6\xf0qIF\xce\x00\xc7J+@\xaf_\x8d4\xe1\xe8\x11\x8a\xf7\xdb\xccg\x85E\xeaO\xf5_\x8e5\x9ew\x8d\xf8\x0b\xb8\x08db\x97\xe23\xd5_\x92p\xfa\xa3#\xf1\xca\x9c\xa3\xb2]\xfe\x19$O_\x95\xec\xbfv\xc8\xfb\xb7\x931I&\xa7\xeaS\x0b`\x15\xbc\xfd\x1f}R\xf0@\x90\x88)\x82\xad\xab\x7f`4\xc13\xe2P\\}\x1cz&\xe4Xo[\xab`:\x1a\xec\xf7\xfe\x89\x03\x96 @?\xf3\x94Bc`Oi@\x8d\xf8\xbc1\x03\xbc\xb5-\xee\xa1\xc7\xff`Z\xbf\xb9\x15\xa2;>\x14~\\EY^d,`[\xaaz\xa5\xd5K8\x90\xabA\xf6\xa5\xc8Xm`c\xf8J\x84w\x8a\xec\x8d\xc3\xf0\x86\xcf(\x8by`f\xf8\xc5c\xe3\xfa\xf6RLp\xbfz\x85x8`j\xe9\xfa\xb1,\xb1\x9b9,\t)\x92}\x9c\xca`\x98[c\xc8\xbe\xf8\xb4C\xbag\xa5\xe33\xb3k`\xb6\xabZ \x1f\xc6\x86uss\xf3\x03\x00V;`\xdfN)\x07P\xde]\xb6\xbdY\xb6\xf1\x1d\xed `\xf6\x82E\xad\xa7\xc2\xb5\xb9\xebt\xe8\xb3w\x1e\xfea\x0fxrL\x91\xf0\x9e\x8d\xb2\x9b\xf7x\xf3\x922a\x11N\x95\x1c\x7f\xab\xc6\x07\xf3\x90 \n\x11\'\xd7a/\x94]o)\xaa\xf9\x93\x1f\xed\xd6\xc0\xd9\xe5\xcaaHG\x1e\x89a\xd6\x05\xa2\xccY\'\xff\xb9\xf6\xc5aJ\xe8W\x93^\x00en\x95\xe4\x9c0\x9a\xfb\x86ai\xd5&\xa8\x1cQ\x94\x17E\x80\xc3]hH\x0ba\xd8\x90\x83\xebt\x1faF\xc0K\xc6\xf5\x11\xa9\x16a\xdf4\xab\xc9\xa9\xc8N\xf4\x058\xa1m\xf4\x15Yb\x07p\xdc=J\xb9\x19}\x17\xdf\xfbK\xf2\x0f\xd8b\x1b\xeeG\x94\xe3\xa4\nu\x90\x12\x92\xe2T\x80\xcab$zy7u\x19\x93\xd6\x81\x9f\x8863\xe4\xb8b2\x8c\xf76W\xbf\x1d\xfdg:\xbb\xd0\xfd\xc5;bv\xd4\xb6\n\x04\x9d\'\xc5\xe9\xa3\x93\x8e\x95\xf9Nb\x85\x8dA4S_VP\x83u\xed8X\x8cRb\xd0\xa7\xda\x17l-\xb2?j\x87G\xdd\xc1c\x84b\xdc\xfc\xbc\x0bv(\x10K\x9e\xfe\xc3?\xc6(\x97c\x19\x966\x99\xb5FD\x86?\xbe\x81\x94\xa8\xbc.c\x19\xb1\x9dvD\x9a\xbb4\x0bI38\x9f\xceic\x1f\x97h\xbe\x08\x940(\xb9E-\x8c\x0cS:c*G&=\xec\xe1r\xfe\xeb\xbd\xc5\xd2\x08\xe6ocD\x00,\x1e\x16\x8a\xf8\xedK\xbd!\xcc\xb4v#coO\xbd\xb5\x8bX\xc7\x99\x8f@TI\x9d\xb5\x93c\x83J\xbf\x02p=f?\x00\xfe\xcb\xe4_`Zc\x98#GzK\x845\x92\xc0\xc1\xc3q\xf0\xd3Kc\xb8\xcf\xcd\xc8~\'U\x06\xaa\x1c=\xaa\xff\x06\xd1d9\x94S\x81&X\x99\xb9\x80\xee\xbaie\x99&dt\xaa\x98\xb6\x1b\x00\xeaH\x0e\x1e=\x1b\xf7\xd9rd\x85H~\x8ceW\x86\xb1\xd5\xd0F\xbe\x08\xfa\xdad\x8e\xa7\xa8\x01\xbf\xbdh\xdf=~F\xf6\xd9 \x06d\x9b\x80\x19\x8dc\xf7N\xde,Yd\x9cl\x88gd\xa7@,k6\x89II$L\x80\x0f\xb5\xec<d\xa7\xa4\x8cNcu\xae\'[\x88~>\xcc\xae\x1ed\xadK\xf3=\x1d\x1fp\x16F\x12&\x94S\xf7\xbcd\xd1\xed\xf8\xb2}\xd9\xd9:\x83\x9f\xe5\xab\x04\xf5\xc2d\xd2\xd1O\x82\x00\xc2\x05W\x86\x15\xd71\x10=cd\xf9\x00^]\xd8\xdeV\x0c+\xb3\xf0\xbaN\xd67e\t][`\x11c{@\xc6Ek\x978\xc6ieKh\xb0}k\x9178\x8cB\xb3\xf7\xf2*\xebe]\xb4[Gl\xc5\xa8\x99\xc5D\xe6\x95\x02\xc5Ye\x9dP\xf0\xe8\x0c\xb7A\x95\x8f\x81\x1eL\x9e\xe7\xdde\xb3\xc5\x1a\xe8\xd3\xb2\xca\xdaK\x8eP\x01\x1c\x0e\xbdf\'\xa95\xdb\xe2\xdf\x1cw\x183\xb3\xc9\xebD\xdbf6\x9av@\xd2\xb0\x19\x9c\t\xe5p\xd6\xc5m\xbbfoZD\x95\x1f\x19l\xb4\x7f$\t\xf0\xb0\xfb\xf1f\x93\x82\x03\xd0&M\xe3\xd7\xe91\xce\x8d\xa3\xef\xaef\xa3\t-\x16\x9bw\x97\xe5\x81\xf1\xda\xeb\xf3jHg\x04U\x0cV\xf15\x06\xad;\x04\x114\x9f\xa0\xccg%<\'\xde48X\x89\xcd\xd4D7\x98\xc5\xfcgzA\x0ck9\xc40\x10\xd77\xc6\x88\xaf\xac\x8cg\xa15\x8fjv\xd5\xd9\xcc\xbb\xbe\x03\xee\xfd=\xa7g\xae\x8a\x1a\xf9\xfd\xe4\x13\xb2\xe8\xca\x16\xa1\xfe-[g\xb7\xba\xfb\x8b\xab\xec\xf5\xe0\x98\xae\x0c\xe8\xe6\x96\xaeg\xbe\x91\x92\xa5;\x0e\xed\x02\xdd-g\xe7\x8a\xff\xf7g\xcf2\xc1+\x11\xe8{\xeao&\xa0\xf5#\xe8\x86h\x14\xd8\x97\xae\xcc\xbbQvN\x18\xe8\x06\xde}\x98h\x16E|\xb9\x1c\x9c]\xce\xb61Y\xa9:\t\x8eh0\x9a\xa1\xc0\x92\xa4\xcc\xdd\x86\x88G"\x97\x93\x89hs\xcd\xecf5\xaa\xc6A\x86z_|/\xf9vh\xe7\xe7\x01\xe27Cb\x1a\xb5\xe4\x04\xd4\xd1\xb1\xb8h\xf7\xc6\xc9\xa3\xb2z-t\xae\xe2\xfe?\x03\xfa0i\x12/\x0b\xd7D:8\xc1\xc1\xde\xd7(,\xf5\x1ei9\xe5t\xb4m\xd8\xd6\x16\xa8\x9f\xb6\xd1\xed\xbb\xe7i}\xac\'\xcc2\x93\xce\xef=\xf9+h\xad\xf1\x9ei\x94\x02\x994\xda\xbb[\xfd\xa2\'\xa7\xc9N\x15\xa9i\xa5\xb8\x9a4\xdf&\xafl\xda\x11a\xa5\x8e9\xb1i\xc4\xed=\xed\x01\xa6\x9a\xa5\xb1\xfb\x9ax=\x98ei\xfb\xdd7\xff:/UaOm\x084a\x99\xa6j\x04.\x89(\xd6\xfc\xbe}=\xabR\xbdY\xa0\x85j\x06\xabK\x1ap\x03\xb5\x0fT~\x921\x9b\xe3uj\n\x8d\x9e\x91\x1bp\x02\x81cn]8\xe1B\xb0j(\x0c\x1b\xc8\xbdm\xbf\t\xd3\xa2\xc1\xc8Gf\x05jT\x15\xcd\xdb\xbd\xeb\xefR\'\xf2f\xe0\xf6\x88(jv\t}\xc3\xa3J\xa3\x108\x10\xc0\xd5\xbe\xcftj\xb4=y\x1cPo\x9a\xce\x96\x8eIO\x8d/\xf5j\xf8\x8e\x83YVp\xd21\xf2^\xb16V\xda\xb8kU]\x8b\xc1s\x17\xf1C\xd6<\x9fP\x03V=ke\x10\xeax_\x7f\x06\x9a\xb4\x81\xc35\x19vDk\xd4[\x05\xe4\x8a\x91\xaa2\x92\xb7g\x03\xd1\x074k\xf4$\xd1\x96\xf3\xd2\x1a2\t\x89Av`.\x0cl\x18R\xc0\xf8\x9f\x98\xa7\x8a\xf9\xdf\x84\xacU\'ql\x1e\xbd~\xf0x\xe4\x89\xc1x\x06Bc\x86\xe5\xd3l&\xa4J\x04u\xd9\xce\x97\\g\xb1U\xf5\xe1nlAC\xa7v&`\x92\x8c\xef\x15\xd1\x7f\x0f\x17\xealY\x8dwA\xbb*!Q\x14\xffa\xbe\xee\x11gl^\x11@\xda\x82\x81{\x8b\x14\xaeC\xf6\x0ec\xe0l\xa1;>\xc0\xfd\x08\xcc\xce:\xd4\x84JY\xe4\x86l\xe3\x13(\xc9X\xb8\x19\xbbN+?\xd18\xfafl\xe3x\r\x17\xf7\x8f\xa8|\xe8\\\x9e\x99\xc2\xad\xc5m=\xb80=y\xdbj\x9b\xbe\x8d\xfe\x85MBDmQL\x0f"tVdv1S\x11=\x1c\xe6@ma\x98\x95x\xf5\x0c\x83M\xea1\xbf\xbb\xa7V\x99msm\x86(\xd4\xf6\xa2\xa3#\x832\xfa\xeb\xa9hm\x7fVW\xeeU%<;\xfb\xd9\xfeO\x1e\xe4Ym\x81\xad\x1d\xac\xfd\xf3\x1a\x18\xc4H\xc37\x1f\xa2\xc7m\x84\xd4B\xcc\xf9~\xc4\xee\xa7\xb1\xb9$L\xe3\xc0m\x87\x0b\xca\x8a\x9b\xcek\xf67n\xce\x07\xe9\x9f\\m\x9cN\xb1H\xc7,\x89/8`8\xea\\\x01;m\xb1 Lbj,\xbf\x11\xd9\xceJ\x96YU\xd6m\xf2\x00\xe4\xc2\xf8\xaf\x15)\xeal\xd0q\xa6\xe1\xfem\xffX\xdb-"\x1a\xef\x08\x89z\x99\xca1\x1c\x82n\x0b\xdbA 6\xfb\xec\x81\xb6U\xe4\x1d\xef\x83\xbbn,\r\rq\x9d\xa2\xb9\'Fe\x15\x97\xca\r~nd\xfeH\\gu\x14\xd9\x97v\xd1\x8cL\x902n\x8d\x99\x17\xa8T\xf4\xc7O\xc6Z\x1f\xde\xe6$>n\xee\x82u\rK\x85S\x80\xb0;\r\x8f\xf0\xde"n\xfa\xcbMcc\x9ag\xdd\xd0\xa8%~&K\xe5o\x04\x98\xba,\x0b\xca7hli\xa7\xbb\x97\xc9Vo\x10j\xc9\xbcy\x01\x99\nZU\xed\xeaO\x01\x07oF)bf\xae\x11\xfe\xb9\xdf\xd39&O]\'oKd\x14O\xe4M\xbeC\x0bK.\xbd\xb1^8oQO1\x9a\xb6!Er\x1b;7j\xce6ooR\x92\\\x97o\xb0\xfap\xe9\xdc\xe7\x1c0s|p\x05\x07y\x0e C\x00\xe7gG\xc0\xfb\xd2whpP\x9fy\xd5\xc0\xeb\xcf\x8cn\xfb\x12c\xbaUXp\xafs\xffI\xcd-\xab@\x12\xf6c\x87. \xa5p\xbb\xda95\xe1Q\xff4:=d6\xd3\xf5np\xc0\xe5\tK\r\xca\xff\xb0EYu\xf4#\xc7Zp\xf9$\x06\x8b\xcb\x8cE\x89\x12\x87GU\x90\xf0\x85q\x08L\xe0`\xdf\xa3qU\xaef\xc9\xa0\x8dbKq\x1e(\xef\xb0AQy\xb9P.1\xbd\x96\x81\x1eq!\xfb\xf6\x16\x0c\xf4\x996\xd5:\x9d\xed@\xd9\xa2qQ\xf4\xeb\n4\xa9>\xb0\x9c\x97K\xf7\x16\xbf)q_\xd3\x18\x0f+\x18\xe3\x80:#a\xd9\xf2\xf6Cqi}\xa5\x83\xce,\xd5R?\x11\xb4AN*\x05q\xd3A\x10\x9c\xd0\xe9p\x95\xe3\x8au\xc3\xf1ihq\xe4?6\x90\x91\x84\x02\x0c\xd5\xd9k\xf5\x87\x7f\xc2r!\x8f\x17\xf8\x03\xdd;\x03\xfc\x10:\x82\xc9\xe9Jr-\xca\x1b\xdd\xe8\xf2C\xfc\xbb\xe1\x00\xc1],\xb5r@o\xe7\xdf\xd0\x07\xe4T\x1b\xede/\xdbFgrM\xf16\xe7\xe8\xc6K\xf8\xe0\x91\xd7|\x94@urv\xe7hXIi\\\x81_1\x97\x82p/^r\xb9N\x9a#\x8f|A/\x9e\x96\xe4\x96\xa4\x87\xc5s\x11t|\xea\xfc\xbeO\x05\xe1Zr\xf0dd\xe2sE\xd6\xa9\x9av\xe3V\xc0kE\xfa>\x87\x1e\x12s_\xf3;\x92\xc9aW\xebS\xbai\x9f\xc8\x8ehs\x85*5\xa9P\xb4\x99\xab\xc5i\xd0\xec.Ags\x96l\xb2\xd8]\xe0\x18d\x03\xc0\x06\xe4\xec\x01Rs\xb5\x1d\x13wh\xa09\xbb\xb2\xf7\xff?"Jut\x0ckJw\xcfkC#\x8b\xaa^\xc0\x16H\xe6t)2\x8c\xfa\xce\xb1\x19\x0e\x1e\xbcReB\x03\xdcto\'\xc2-_B\xb5\x8b\x9f\x9d\x99\xfc\xa9\x080t\xcf\xc1\x11TZ\x16t$z\xca\xa0\x17`\xda\xa5t\xf4O\xdc\x07+\xd0s\t~\xe4\xe6_Y\xc7\x97u\x0e\x1f\x96eJ\xecP);\xa2\xba\x92\x10\x88\xdduA\x10\xf0\xc1\xbb}viUT\xee\xe1\\(DuV\x1b\xd0-Kc\xcf\xb5\x00\xcd\xda\xd8\xcc\x99\x9fuu\x17m\x0ei|\xd0\xdb\xe2\xd2ieh-Du\xf5,\x17\xd1\xab\xee[n\xb8z\x84`\xd2g\xf5u\xfb\xa2*D\x1a%\xd3\x0bj\xaa\xdb:\x81}tu\xfeb\xfdGLEm\x9a\x05\x8f\xd5$\x18\n\xfbvY\x9d\x8dLKm\x82\xdc\x0b\x1a=\x96\xaaC\xfav\x9c\xf7\xc0\x80\xe0qW\xdcgQp0\xcb\x8f\x9cv\xb2\xbc\x90\x1f\x8c\xe7-\t\x91\tDK\x96\xe6\xadv\xbf\x02\x05[\xdb\xe2\xd5&ti\xde\xa3Z[\xd5w\x0f\x0bf\xc3\x92\x15v\x05By?\xb4\xb0%tw\x110\xdd\x1d\x9c\xe5\xa6\x10\x88C3TQ\xce\xccw#\x9d\x12\xa2L[?Ab\xff\x0c\xed\xcb\xba\xa2w9\x10\xb4I\x96\xdd\xf8\xb9\xa1\xb8\xc1d\xd7j\xdcwI\xc2e}\xfc\x1eM\xa5\xac\xb1,k\x9e\xc3\x8cw[U\x1a5\xe6\x1c1q?\x9b\ng\x15;\xe5wg>\xd0\xaf\xb8S\xc6a_\xd7E)e\x96Bwp%.\xf2\xa3\x97\xfc\xd0z\xc0\xf5\xca\xfd\xce\x8dw\x82}\xfc\xea\\\xb2\x86\x84J\xe9g\x1b/\x1e\x1cw\x93h\xc6\x9547<YU\x98m\x88B\xd7dw\xbc\xa30\xcf\x11\xc84gh\xfa\xf2\xa4\xed\xf3\x81w\xdb\xaf\xcd}\x03\x05b\x8e\x06\x86<\x7f\xfa9)x7\xb5z\xa9\x82\xbd\xdd\xd56\xc9f\xbd\xe1\x1f\x00xD\x1a(\xca\xbcdv\xcbV\xdc\x99\xc6K\x1b\xbcxQ\x14\x8f\x19b\xb8\xf1\x94\x12\xd7f[m\xbe\xb4xX\x063\x87%yM\xbb\x7f\xae4k\xf0\n\xd7x_\xa2e\xc0v\x08\xdb\x17\xe1\xe1\x1bbW\xad\xddxi\x1bSI\x95\xf3\xe6S\xcf\xea\x06%\x9f\x8e1x\x89\x8f\x05\xc4,;\xad&\rp\x1e5\xa2\x8e\x99x\xc5\x9d<<r\xcf@\xb7T.\xd2\xa2!\x06\xaex\xde\t;\x1b\xef\x96G\xebO\xe8$Z\xbbz\xe5x\xfct\x8fW\xf4\xb7\xdaJ6\xcb\xf9\x0f\xbb \xd3y\x13YfqoXw)Q\xa9<\xf4\x8cV\x8by6\x08Bf\xdc\xc5\x9b\x0b\x15DR\xd5\x17\x87\xddy@*\x10\xd5&T\xf2\x06\x9c\x12Jr\xb7\x8dyyX\xa3\xacj\xdfQ\xac\xf5\x81=\x89\x19\xf2!By[\xf1\xba\x82\xd1@\'\x99\x0fRh\x06\xae\xe5\xady_\x0f\xd8\x93\x8ei\xb2\x8c\xd0n\x96\xb0\x13\xaa\xbdyr\x95\xb1O\x1047\xb6\xd7\x8c\x9b\xde\x9d\xff\xe2y\xdc\xaf\xc2\xee\xde\xda\x94e\xdb=\x9a\xdd0\xb1Ly\xfb\x949t\x12\\Sy\xc4;?\xf3R\xd4\x86z\x15\x7fO\x91\xf5\xd0gh\x97W-\x85\x00\x90\xcbz_\xbbT*}V\x01\xb6\xcb\x8e:\x8a\xad\xfdQza\xc100\xfeI+\x95]\x8d \xd8\x91\xb6<z\xb9\xc5\xd9(\x1cq\x11\xec\xe5\xd8\\2}C@z\xbbe\x83\r\xf6l\xf4\x85.\x15`R(g\x05z\xf0\xb3\xbf\xa0p1\xb34ol\xa1\xb5\x84\xb4\xca{\x1ak6m+\x03\xb8X`\xf0\xfb\x02\t\xc7;{#\x90|\xe3f\x8aU\xe7\xbb\xe8\x164\xc8\xa3\xc8{%\xa3\x07\x88T\xc0\xd0\x94\xd0\x1c\x15Q<b\r{x\xcd\n\xbb\'\xf5\xb8\xc3\xe6S\xbf\x829\xea\xb7{\x94\xb3\xf1\xa9\xcd\xc1\xe5\x16la\xa0\xf0\xc7\xd0\xd8{\xb6X\xf5\re\x8c\xe2\xadE#\x1c\x11,\xf7D|\x03\xb8Bl\xf4<\x9e\x07e\xb2:\xd5\xf7;\x08|%\x06\xae\x9e<^/\xb3\xee\xees\x1f\x90\xe8o|%h\x8dd\xcd\xc8\xe056u\xca6\xddC\x81|/{\xff\x9f\xe4\n\xd0\x93\xd2e\x03\xb1\xbc\xee\xbd|A\xb5?h-\xb1\xf6\xb5\x80\x15\x9c\x0e\x0e\xa5\x18|D\xb1\x9a\xfb\x0e\xa5\x18\xc7\xd3c\x01\x81^oB|Z$,\xc8\xfc\xce\x95\xdd\xce\x11_\r\xc11\xbc|z\xfd\xc0\xf8\x84\x105;p\xb7|\xef\xac\x0f3|\xaf=L\x9a\x1c\xc78=D\x96\xf4\x13*\x91\xac|\xb9b\xe2]\xbfc\xf6fd\x15-V-*"|\xcdh\xf1\xcd\xce$\xd4Do<\x83\x0c\\V"}\x14\xea\x14\xb1nw>DY\x9e\xba\x89\xea\x95]}Xg\xfc\x03\xf8\xf9\xfb\x07\x18`\x8c\x9f<\xf9\x9a}{\x17\xea\xae\x8by\x11\t1\x86~S\xf2|\x8d}\x7f0`By\xcb\xb1\x8e\xe4}\xfd-\xe5\xe9v}\x99\x1b61\x10\xc0\xe2!\xe5\r\xee\x87"\xeb\xc7}\xb3)d=\xc8\xf6\x05\xa9\xd6\xb1\xa5\x1a\n\x98j~\x1c\xbd.\xd6\xff~t!\xedG\xdc\xbd\x14\x03M~N\x8bX&z\x97\xc5\n\xad\xb9\x1a\xa8^\xfdx~T@\xe2jA\x84d\xe5\x8cl\xdf\xae\x92\xf4\x18~s\x18#\x06\x82e\xb4\xee\xce\xbe\xe2m\x9f4\xd3~\x89\x07\xc2\xe9$\x17\x92\x87\xfc\xfe\xcd\xee"E(~\xa6\x16\xb8\x10\x19\xa4\x88\xb2\x1ds\xc3\xe18`4~\xcb\xf3\x18\xf8\x04*0\x8f\xbat\xac\x13v\x1eN\x7f\x0bZ<\x86\xb3 @\x8cl\xcf>\xa0\x14y8\x7f\x10Xkf\xaf\xb3\x8f\n\xc4\xd0\xe5}!\x8b}\x7f0\xbce\x9b\xef\xe6\xbc\xb8\x160\x0f\xbd\xdf\xe2\x8e\x7fp\x90\xa0\xcd\xb5\x17l\x9d\xcee\xd6\xf5)\x83\xf0\x7f\x9ak|{\xf5<\xe9\xcf\xc0\x85\x07+\xa9\xf2^\x7f\xaec\x0cJ\xee\xfb\x0b\xde\xfa\x15Jh\x9e\x1f\x8b\x7f\xcbh\xcf\x97\xa2\xa078\xad\xe9\xec\x19\x95\xa9\xe0\x7f\xe8a\x9c.\xd0\xd9\xa9\xb4pg%\x18E\x8a\x8a\x80"\xa4z|N?\xf1\xf7\x04\x91U\x9b\nD\xdb\x80h\xd3\x9f\x93\x95\xdd\xd6\xdaU\xac\xb4zo\xceh\x80i\x1e\x1f\xb7\x9a?\xfc\x8f[\xbf\xce\xf0g\x8bN\x80\xb2*&\x8f\xc3>\x9e\x0eg\x80}\x80"W\x8f\x81"\x8d\xf2}\x9eI\x02;\x1b\xe6\xfa\xcd\xaf\x071\x81T\rs\xd1&-\xb3\xfd\x89\x04\xb8\xc6\xfd\x99\xb4\x81\xa3\x8b\xc9\x97U8WW\xd9\x1e=\x83\xc1ad\x81\xa3\xd5\xfd\xb2l\xac*\xb6@\x99\xf3l?\xed>\x81\xfev\x87\x16\x851\xf8\xb1\x14\xbc\xac\xf9`rq\x82#<\xb7\xa0$\xa1\xa5\xb2\x83-\r\xa4<d\xbe\x826O\xca"\xd8\xb9\x86\xa3\x1aV\x1d\x1fA\xa5\xcf\x82o\xce\x05\xc2!\xda\xd8\x02<\x94\xefJ\xf3\xf2\xd7\x82\x81(t$\x14;N\xc7H\xa8D4Q~\x85\x82\xa4\xb0\xe2\xc0\x13CM\x05\x1c\xfc\xe2m\xa8\x92Y\x82\xcb\xe4\x98\xe9\xf0{\xcb\'\xc4\xfd\xb5\xb1>j\xad\x82\xdf\xa1\x89yv\x92g\xf0\xb6\xd3\xa4\x9b\x80\x18\xce\x82\xec\x8fsOJ\xd2I\xfbKd-<%z\x96\x83e\\S*\x84\x05(\xd3\xdf+6\xc5\xe3NZ\x83m4S\x88\x01tOoK\xdc\xc8\xe82\x18d\x83\xa7SQ=v\xceA_v\xc4*\x13\xfbFQ\x83\xb8\x92\xcb\xe4\xd6q+\xf3\\\xe0\xe6\xf4&\xe7\xcc\x83\xeaa\xcf\xdf`\xb2\x1a\nw\xae\x8bU>M\x82\x83\xed\x05@KS\x89\xa0\x07\x12\xdfh&R\xad\xa3\x84*h\xd8\xa2v~\xef\xb6\x04\xdb5\x01\x98(Q\x84<\x1e\xfb;S\x96\xe5\xff\xfe\x85Y\x7f\xc3[g\x84O(u\xd0\xeb\x00e\x94\'\xf1\xce{r\xe0\xca\x84P\x8c\xc1\xa4\x16j\x1a\xe2\xc2[\x92P\xb9\xa6\x08\x84Y.\xbe\xa4\x9e\xb8\x11G\x10\xb5\x0c\x9a\x1e\x9a3\x84bY\'\xd6j\xb6H\np\x17\x89\x85L\xed\x9a\x84\x8fX<\x0b\x1a\xc9k\x07\xe0\xa2!(\x84\xd7`\x84\xa2O:\x1d#\x8b\xd1\xe1\xb0\xc4\xec\\\xc1\xb7\xe7\x84\xbf\xa3`s\x012\xbb\xe4\x1d\\\x15F\xb5\xe6\x00\x84\xdb[\xd0\x16\xc1\x85\x94d \xf4ng\xb0\x0bA\x84\xe9F\xb4\xa8\xed\x19R\xb2g\xdc\xec\xab\xd9\xf1\x97\x84\xfd\x9e\xa6\xc1\xa1\x9d\x9d\xb8k\xf3\x89\x15\x11O\x13\x84\xff\xdf\x1d\xd5\xad\\\x0c\xc6\x8d\xeb\x13\x86\x94\xb1\xf5\x85\x14\xd2\xb0i-\xb6/A[\x95\x17\xf4I\xdc&\x850\xe8P\xf6<>@\x1f\x04\xbe\xedf\xa4\x9bb\x85oO&\xad2\xd2R\xf5\x831\x90\xe8\xf9\x06U\x85\xd0\xfei\xd0O\x9aGg\xd7\xcf!\xe2`Iz\x86&\xa1u\x92!\xcf\x13p}\xc1\r\x17\xe5\x8c\x8a\x861P\xb1\x9fdd\x9b,\xf7\xe1\x98\x18\xd3\xd0\xd3\x86C\xcc\n\x92\xc1\x15\x90"\xb1\xac\x9bt\x0f\x85.\x86L0\xfa\xb2q\xae\xe5\x93\xe9\xdf\xa5\n\x88\x98\xec\x86c\xd3\xd5{\x18G\rT\xa8\xf9W\xb6\xd2\x8c[\x86\x85m\x9d\\G\x95\x03`ma>:z\xe8\xca\x86\xcc\xc0\xc4(\xf3\x18?\x8b~#\x8b\xaa\xde/]\x86\xda\xb1?v\x14\xb7L\x82l6A\xd1]\x0e\x89\x87\t\xe8\x15\x1a\x1a;\x81\xb1\x03Y\x0eV\x18N\x9b\x87\x1cu\x18\x83\xfe\xd1<\xa89>\x1d\x1b\n\xa9\x10\x87=\xc5w\xc9v\xc3\xcf\xadmA\xa3d\x85\xd5\x7f\x87F9\xa2\xe8\xb0$\'>N5\x8e\xcc\x0b\x02)\x87G\x06\x9a0p\x8eL\xddI\xb8)\x9cj\x14\xae\x87t\x1d\xfe\xe4\x8aW\xb6\x8b\xe0\x90$\x1a\xfbx\xa7\x87v\xb7DT\xba"\xc6,Vi\xaf\xb8,\xdaM\x87\x95n\xaa(8\x08\x90\xe7\xda\xd8\xfc\x84\xa4\xa9\xc8\x87\xa1J5\xba\xe1\r\xaf\xedF\xfd\x8a\xc0\xe6\x89,\x87\xbe&s\xd2K\xc6\x80\x8ci\xfa%?F`%\x87\xdd\x03\xb6\x05\xd7\xbbGi\xeb\xa5\x82&\xbb\xea\xbf\x88\x01U\x90m\xd47e\xe630K\xd4q\x9c\xa2\x88Nc\xe4J"\x17_\xb4.\xf9\xf7-\xf2\xee\xcf\x88Q\n\xc2\xb2\xaa2\'\xc0p\xdb3\xfc\x0f\xe2\xff\x88xZ\xc3\xf1R\xf3D\x90\x1f\x88\xc4.\x9e\xcd\xe1\x88\xe2\xe7\xebV"\x0bnx\xb4\xd5\x1c\xd2D\xc6+\x88\xff$gF\xc5\xf7\'f\x1f\xdaS\xdaU\xcbO\x89"\x9eEEJ\x9d{\x10\x10\xef+v\xfa\x81h\x89*y\xe3\xe7\r\x16\xc8#[\x01&\xf5\x06/\xee\x89q\xb0\r\x1bc\x9c\xb2\x1a\xb0\xc4\x17\n\xd1rt\x89\xb2\xbal\x91\x8a_R\xf8\xf0\xa8\xe4\xba\xa9:\x92\x89\xdf\xafO\x1dc\x86\xc9=gf\xd6\xaf\x93\x93\xbb\x8a6\\d+\xdc\xef\x1b\x90\xf6G=# \xdc\xe7\x8aWXdx\x9a\xe5\x1e.y\x98\xd7\x963D=\x8ax\xb3\xf2ux\x87\t\x14\xda\xbb\x85a\x95\xe1\x91\x8a\x8d\xff!bZ\x1e\x93.g\x1d~\x94\xc3\xc2\x1e\x8a\x94\xf3\xc8]\xdeY|0S\xc0\x96\x8d\x80\xc8\xf4\x8a\xb8g\x17\xfc=\xe1\xa0|\xbf\xb1\xf0p\xe7\x08\xe3\x8a\xe3\xe15\xad\xcf\xa6\xc7&1h\xb2\xbd\x81\x1a[\x8b\x02\x14\x11\x16A\xda=\x9d\xa0?&\x1e\xcd\xef\xcc\x8b()\xcb\xd1\xd7\xae\xda\xa4b\xf1~\xecl\n\x8e\x8bX\x18u[e\xc9\xa9\xf2\x18\x15e\x98\xbd\xf2\xf6\x8btwTz\xf1\xd9\x99\x8b\x0e\x1d\xb8\xa9~>\xe4\x8b\x89iiG\n\xd0\xb7H\x01\x1c\xb3V53\x9b\x8b\xbcEV\xe6\xa6\xfeII\xcf[.\x04\xab\xceS\x8b\xc5<4\x12\xccFr\x18i\xd1.J:\xea\xdb\x8b\xd8O\xf69GZ}\xab\xf5x\xd8.#3u\x8b\xe5\xee\x95\xd7!F\xad\xd5\xf0\x17\xa1(q\x81r\x8c\x14\x9aT$\xbev\x8b\xef\xf5\xa39\xb5\xec\x14\xe3\x8c&!\x0bo\x0b\xc6\xf4\x92\x1e\x99\xa9\xc4\'\xa3\xd5\x8c=\t\x86\xf8\n?5|\x1b\xe5D6\xeay\x1b\x8ce1\x1c\x18\x95\x9a\xbcn\xedP\xadHa\xb1\xa4\x8cfM\xf9(\xec\xf4B\xb6\xe2\xaa\n\xe2\xc5\xb0\xf9\x8c\xbf\xa6\xf5\xec\x04\xbc7d^QD\xc3^}\x1e\x8c\xc0\x00Z\xde)0\x96\xd6v\x83\x05\x05\xa2\xaar\x8d#\xf4\x9b\x81\xa2\x04\x9e~b/q\x95\x7f\x86\xc8\x8dYl\xd1\x83\xad\xbcE\x1d\x86oK\xf2\xe0\x0e\x07\x8de\xa1V\x88:z\xd5QA\x105\xc5\x94\x80*\x8dnY\xbb\xec\xe6\xe0\xe1+\xc9\xcb7\xad\x8a\xd8\xcc\x8dz\xb4\xad\xd0\xf8\xbb\xb21\xc8I\xe4\xb2\x8bqC\x8d\x8b\x990b\xe3{\xdc/\x8dV\xd2Z]\xbc\xb8\x8d\xe9{\x0cIln\xc2\xcdp)\'\xa5\xca\xf3\xe3\x8d\xf3\xcb\xeb!"\xd0\x9c\r\xae\xdam\x974 w\x8e\x07\xa1>\xdc\xc2\x9clv`\xb0\xb1\xb2\xf8\x86\x80\x8e\n\x8d\xf6<\tRq;\xb4\x82\xd5F\xc1@\xd9\x8e!\x03R\x02\x10\xbd`\xf5h\xf3a\x12\xf4\xa8\x06\x8eG\xd9*\x90\x89\x19\x05\xa4y3\xd4\xf3\x01\x84\xfc\x8eOyS\x81\xae\x0e\x00\xab\x93\xf7\x03\x86V\x83\xea\x8ec\xb8\xf5\x8a\x1c\x1d\x8a\xc7\x9a*2&\x9fm\xf1\x8e\x845\x052\xcb\xd5\xb2\xad\x87g\x9d\x9eQ]}\x8e\x8a\xd2`\x85\xcd\x81\x9b\xbf\xaa\x92\xcc\x7f\xac\xeb0\x8e\xdb\xc5\xc40\xbc^=fuD\xb5\xd4\xf1\xfa{\x8e\xed\x9e\xba\x0e\x9a\xce\xb3\xa0\xf6t\xd5\xd6\xd0\xb5\x9f\x8f(\xdc\x1f\xd7%\x1e \xce\td\xbe\xa3n\x98\xbf\x8f0\x00W\x02m\xe7\x9a\xe7y6\x8cQ\x03\xa4\xcf\x8f3/\xee\xfc)l\xe1\xdf\xd8\xd3\xe8\x9au\\\x02\x8f6\xa0y$\xbb\x15\x0e\xa3\xc4\xd2P\xc7\x16r\xfc\x8fI|\xa0\xe1\x10\xc8\xdf\xad\xce\x9f\xa5!g\x99\xbe\x8f\xfd\xb3D\xa9l\xce7\xf5\xe4\x98\xc5\x198\xddu\x90\x04\x84+q\xf6J\x98\x17L\xbc\x18)7s)\x90\x13\xff_\xe2\xb4\x924\x03\xd4\xfd\x96[\xc9q\x15\x90q;\xd6\x18\xff\xb0\xf9\t(\xb3\xf4\xdd\x8beh\x90\x86J\xa3\xa9\xa2\x02\x1c\xc6Mx\x86\xee\x99\xc1\xa3\x90\xa1u\x90}-\xae\x8c\xbc&\xd5]ukWy\x90\xd0\xdd\xdf!\xef\xf0/\xe5\xba\xcd\xebfg\xf4:\x91\x16\x97\x82L~\xb2TO\xf8\xf7\xf8\xc2\x03\x80X\x91\x17\xb4\xe4\x881\xf1\xbc\x10g4\xfbh\x1a\xa3a\x910~\xc5\xb8\xc1?\xf5M\xb4Nf\xf4\xf2\x13,\x91;\xb9\xabz\xd7\xe8\x94\xd2<\xa1\xcfFP\xb1\xd8\x91\\\x99\x92\xf0\xd68\xa8\x0b\x96#\xbb\xa5/\xa0\xa8\x91\xdc\x98\x877T\xb8\xc4#\\\xb8\x90\x16\n-e\x91\xe0\xaay\x85*\x05\xa2\xf3\x9d\xc9\xa2\x0c%\x1c\xc1\x92\x008\xfe\xa4{\xeb\x173\x02#\x98\x94z\xf8O\x92\x18+\xbcQJ\x0b\r0\xfe\xd1\x8e\xa0%\x8b=\x92@m@\xea\x1c\x8f\xbc\x04\x97\x1eU\xd6\xfa\x90K\x92FNq\xb2>\xd6\xa0\x1av!(\xfb\x80\\%\x92I\xd3\xcf 3Yg\xba\xc0\t[Ua\xe1\xaf\x92\x8f\tH\xd4\xbd\xd6\xfa\n\x81\x8d\x80\xa2\xb5UK\x93\x14 &\xf4\x86\xfa\xef\xc8\xb4\x8a\xf5s\x8aW"\x93G)6$\xf1\x8e\x81\xb7\x1d\x04\x90\x1b\x8f\xa1\xf7\x93j\x1fGC\xb7\x1c\x8d\x93\xba\xfd\x9e\x1dNc\xab\x93~\r\xe8o\x7f2\xce!f\xf3\xd8s\x03|\xd0\x93\x84j\xeb\x7f\xf6l\xcaf\x1e\xaa\xf5+\x14\xdc)\x93\x89.\xbc\\h\xcd\xd3\xe9\x98\x85\xd5O\xb6z=\x93\x94\xa3^`\x8f\xa6\r!A\xcc\x99fK_\xfe\x93\xb9\xbaS\xc7\xf3\xf9l\xd1\x7f\xc0;\xe3\x8dw\xbd\x94W\\\xbcf\n\xb5i\xa9;\xb2\x1d\xa4\xd5\x00[\x94c\x19\xc9\x99\x13\xed\xf1\xea\x1as\x06/\xc3\xc2\xca\x94ef\xc8\x1a\xe4\xc4\xd9\xab>\xcb\x7f\xe1!w\xea\x94f+(\x15.\xb6r6S\xd6\x9e\x9a\x1b\xd9a\x94r\xb8\xd6\xdb\xf5v9I\xe1\xb3\t\xe5\xdb\x15W\x94\xb0%\x8ekG\x18>\x838\x9f\xe1#\x94\'#\x94\xe6\xa5\xba\xd7{\xdd[\xa5G\xbf\xd3\xbe\x0b\x19\x15\x94\xfc\xb6\xb7\x07@\xfb\xad\xa8h\x91\x85nB\xe9Z\x957\xec0\x10<\xcd^<|NW4M\xb6J\x95C\xf6a\x88\xd9\xe6\x83Y\xe81\xdc\x9f\x9cN\'\x95O\x17\x97\x9e\xc5\x95\xad\x93k\n\x1e\xab\xa2\xacY\x95\x89\x9d\xb2\xf6jdj\xf7\x00\x94\x05\x95\x8f\x12\xbc\x95\x8a\xe0?\xdd\x1a%\xbc\xe62\xafS\'_8q\x95\xd0\xf5R\xb2\xee3\xb0\x91\x1ch\\\x7f\xfd6\xd7\x96\n\x7f9D\x84\x04=\xfb+\x93\xeb\xf0\x8f\xf2\xc1\x96\x10\x10q\x1e&\xb5h\xd0\xf1\t\x93d\x11\x01D\x96\x1c\xfc]\x99lf\x1d\xea\xca\'\xb5\xbf\xdan\xee\x96.\x84\xe9\xd7\xdb\xc3\x92\x141\x95\x84\xa8pjx\x960W\xa4\x8c\x1f\xd0\n\x91!\x9fd\x0e\xba\x80\xba\x96[\xe7*\x01\xe2\x08\xf3\xc6\x1d.\xf4\x99B\xb6\x7f\x96\xbbEN\xd7\x1b\x04\xa8\x96\xc0\x11-\xe4\xbe\x9e\xfb\x96\xf8}\x14\xc5\x00\nT\x97b\xf1v\xbb\x1bm(\x97\t\xd0\x15\x91[w\xc8\x05I\xbcY8E\xb7(\x97\x16\xa0\xe7e\xb7N\xc0\xbe,\x92\xc1=\xb1\xa9\xc1\x97G\\\xab\x0bw\xe0|VoR\x99\xe1\xb6\xfd\xc0\x97J\xb2\x0fA\x90\x90\xccO\x16\xa2\xce\xe7\x9f|\x1b\x97\xa2\x084\x9cG\xeb0\xe3\xe7\xd1\xb6\x1d\xb1V\x96\x97\xd4\xe4qs\xbctF\x00\xbam:~*Cg\x97\xd6&\xc7Czj2\xcbk\x93n\xcd\xa2_\x14\x97\xda\xb1^\xce@\x08\xa6\x9d\xc2\xef\xc8\xd8\xf0\xc5\xa9\x98G\x9c*\xb3.\xdd&\nijs\x949\x0f\xe2\x98\x9df\x84M\xba\xe4\x9a\xff@\xf2\x01\xf9\xe4$.\x98\x9f\xe5c\xea\xb2\xec6\xea\xbd\x95\\\xb5\'\xb5f\x98\xa5_C\xedc\xa3w0\x9c\xaa\xc8\xf9\xb3\xdf\xc2\x98\xc9\xa56\xea\xda\xd5r\x9d\xe8oUd\xed\x95\x89\x98\xe2KQ\xd6\xd9\x88\x1b\x08\xfe\xd9\x1c\xc8\xe5;\xac\x99\x0f0\xeeb\xe0p\x83\xac\xf1E\xf0\xa7\xb0\xf8\x81\x99\x0f\xed_R\x05\x1ah\x81\x0f\xab\xdecTP(\x99VH\xa3\xa5\r\xd1\x81\xe0\x89\x17@T!\xf2\xa0\x99bB\xad\xca?\xd6\xb4cX\xa3\xca_\x9a\x11i\x99h\x04\x06C\x88m4\xe0\x853mL\xd7Z\xcf\x99k\xd3~t\x1c\x1bq\xb2\xe8\x9d\x95\xb2\xb3\x16}\x99\xba\xd6\x98\xc4l\x06\xf6\xd7\x91\xf1\x0f\xb7\x8d\x07U\x99\xf5j\x80\xde\x1d\xb1\xe1\xea\xbc:\xafE"\x0c\x14\x99\xf7?\xd0T\xa2\xff\x16c\x04d8\xd8\xcb\x11\xe4\x99\xfb\x9d;\x02&e\xb9\xc1\xa9\xe7\xaa\xacH\x89\xfd\x99\xff\xf9%\x10\xd8\xc1\x10P\xd0\xca\xbd\xf6\xbb\xf9O\x9aY$\xe8\xe9\xe8\xaf\xdc\xe8\x873\xdc\xd9\x9f?q\x9aY\x7f\xf6 aU\x81;\x94\xde\x13x\x1c\x120\x9a`\x85\xf6\xa2\xc9\xb9\x94\x9b\x82\xd7\xda\x9d\xbb\x1a\xf0\x9a\x9f\xbb\x8do\x1f\x08\xf9&0\x15\xe7Y8r\x0e\x9a\xa9\xd4Yji[\xa6JR\xf1G\xc2i\x87\x99\x9a\xd0\xd2!\xa3\xa0\xa0H\x06\xa1do\xda\x84R;\x9a\xd3\x83\x1c\x99\x19\xf1\xdf\x81\x8f\xe9\x1c;\xc3\xda\xae\x9b\x0e\x18[\xb4\xfc\x1b\x9a\xc4L\x8a,\xed\xe4w\xee\x9bA\x92\xd9\\\x9a\x94\xf6\xd3\xbb\x84WzT\xbc\x11\x9bk\xf7\x9c\x99\x10\x13\xd7\x9c5\xa3\xbc\x8awI\x1a\x9b\xa3\x17\xb8m\xed\xc2\x1b\xfa\x0b"\xa1?Xw)\x9b\xa3x\xcc\x02\x9f\xa7\x9f\xee7\xbc\x99P\xb1\xf5\xe6\x9b\xe6#\xe3s\x03\xd5\x941\x82\x9a\x98@\xf3\xfa\xf5\x9c\x08\x9e\xed\xee\xc9\xff\xfeLx\xf4\xce\xbc\x17E\x15\x9c%\x12\x8a\xeb\x0bS\xef\xb9z\x90\xad\xa5\xe9\xe2_\x9c5\xdb\xbe\xad\xc14\xc3\x93D\xb8\xf2N\xf5\xc40\x9c;?\x86Od=\x04j\\\xc1\xf6\xe9\x18\x15z\x9cM\xe7\x0b&\xa8\xb5\x0bgV\xfd\xb6\x85%^\xd3\x9cTTN3\xb8V8\xe5C\xd6\xc7\xf2\x84\xfeE\x9c\x85!\x03s\xd3\xdfo7h,^\xb4\xbb4\xe2\x9c\x908c[\xd1\xa5\x13\xe1\xc3*\xbd\x93m\x18;\x9c\xab\xa93\x03 \xc1\xc8\xc21\x04b$\xa7\x93\x0b\x9c\xb9\x9c\xedA\xbd\xa4\x11x\xe6\rU@\xe1m\xc1\x9c\xba\xc0\xdb\x82\x06/\xdb\xcc\x84\x1a,\xe9\xe8\xf9T\x9d\x08\x1a`vF#\x917\x94;\xd6\t\xe0\xac\xe0\x9d]\xf2w\xd8\xfc"@\xd8Z\xb51\x8b\x87\x80.\x9d\xa2\x18\x01,8\x069_$\x92\xb1&`"\xe5\x9d\xbf\x92\xbf\x8c\x9b$^\xcfQ\x1d\xb4R))b\x9d\xd9\xcc<a\xe3Z\xe8\xb9:\x95\xab\x91\'c\x89\x9d\xef\xa9\xc4B\xcb\x18\xfam I\xa0\x0c\x9eN\xe5\x9d\xf2\x05\x9a\xa3e/=\xdcc\x05\xed\x9f\x81\xd7\x94\x9e\x13\x07\x0f\xfa\xf7\x06.\xf8\xddL\xf2$\xff\xb6F\x9e7\xa5Y\xf3\x93\xa0X`\x8c\xb7\x88\x89\x11\x9dU\x9e<O\x03\x95o+\x86\xe4\x87\x87\xf3\x86V\xc0\xf5\x9e\x8d\xa6\x0b\t\xd3<^\xc0\x7f\x908\xff\xa6\x9e\x92\x9e\xa4b7\xad \r\xfdSOa\xac8HMQ\x9e\xab\x97y\xd8\xce\xef\xe7{d\xcc]\xf7\xb3t\xad\x9e\xb1\xb9\xa1@\x1cau\x9f\x91\xb8\xaeq;\x92\r\x9e\xb8\xf95\x9b\x9a\xff\xbc\xccL\xd99@\x89\xff\xff\x9e\xce\xbe\xd5\t \xc2<4E\xcf1\xc2\xed\xd5\x89\x9e\xdb\x02\x84\xc8Z#$5\xdd\xd46\xf8\xdc>\xe4\x9f]y`\xcaQ\x9e \xea\x9e\x9e\xd3\xbb\x15i\x81\x9faqv\xa4\x12\xbc\xaedL\x07\xec\x16+0\xce\x9fc4^3,\x19\x92\x0ceeIK\xa3Z\x92\x9f\xa8fC\x88AW\xd6\x1f;c\xb0e\x14\xae7\x9f\xbe\xc1\xb0u\xd3\xe4\xa81l\xaa?-\xe1p\xa9\xa0\x00\xda\xf6\xa9~\xdcx\x8a\xef\x12\x89\xbaj\xd08\xa0\x17\xd1D\x93\x1c\xf1\xb89r\xe5\'\xd0^F\xfa\xa0A\xa6\tT\xd3\x8b(Y9\x97E_2\x88\xa4\xa0a\x06\xb9\xbf4T\x9e\xa8{3\x97SK\x89*\xa0\x93^\xc4\x1cI}=\x0c\x16\x1d>\xcc\x1c\x15\x0b\xa0\x94LL\xe0\xc0\xe3\xf5\xfb>#\x0bc\xde\xe5\xb0\xa0\xa7\xdeq\xb1P\xa9\xb7\x1e\x1b\xf6S\xdc\xe5<d\xa0\xb0\xb9\xaa\xd2\xcf&=\x85\\\x87\xa5\xf5y\x1be\xa0\xcc\x9d#\xbe\xd2`\\\xa2\x14\x94\x84cCK\xb8\xa0\xe3YD\x91\x93\x8e\xd3\xf7\x0c\xe6\xb3nU\xa82\xa0\xf1\xa9\xf8\xca\xf56\xa4\xb4\xadu\x91J\xc1\x9a\xe1\xa0\xf4\x00\xf1\xe6\x1e\xc1\x8a\x81\x18\nh\x0bJ\xcc-\xa1\x03\xd6\xf6\x1d\x99[\x98\xe7\xda\x05.fl<f\xa1(d\xdb\x9c\xd8\xdf\xe1\x80\xc9\xe8\xa5\x08\x14\xf8%\xa17\xb5\xafM\x1b*%\xa2\x1c\x15\x186#g\x12\xa1J\x81]\xbe\xbeGT\x1bA\x07EJ\xe7_\xe0\xa1N\x99\xda\xc0K\xe4_\xea\x1bw\x9a\x9fVz\xa0\xa1g\xab\xaeG\xc3\x03\x94\x93HW\xdd\xb8:\xeb\xd5\xa1s\xd9\x83.\x00\xd8\x0b\xe5\xa9_\x89\x89\x07\x92\xd5\xa1\x99\xee\x97\x8bL\xcb\xd2\xdf5f\xfd\x1ee\xd7\xbe\xa1\xae>\xc0\xbe\\\xa0\x12\xea:\x9f\xda\x98$\x9b\xe5\xa1\xc7\x8amV\x9a\xc5|\xc4q\xe54Y\x9fq\xb3\xa1\xde$\xcb\xea(.\xe2\xb0\x88}\xbd\xf2\xf7\xcc\xd3\xa1\xe7\xdc\x91\x87g\xf0oh\r\x86\xc9W&\xcb\xb6\xa27Zc\xcd"){;\xaa\xbeB\xa1\n\xc7M\xa2N\x08\xc1f\xbaI1\x08O\x9e\xde\xb6\xa8N\x8a\xa2\x8c\xa0~1V\x8a\x02\xa2/Vj\xfb\x9e\x8f0\xa2\xb5\xbf\xb4\xb2\x0e\xbe\xf5Z\xfa)mk"5\xb2\xa2\xf2O\x02!\xc1*\xebY\x8e\n\x02p\xac\xca\xf3\xa2\xfbA\x17%|\xbe\xd6\xe2\xea\xe1\x15\xd4\xe6i\xca\xa3X\xbal\x9e|\x98\x18\x1eoYu7b=\xc4\xa3Y\xf32g]H\xb9X\xda\xcf\x82\xdf\x9b\xd6%\xa3l \xb4\xec][\xdf\xfc\x14\xce\xcd\xf7\x7f\xd4\xb2\xa3\xa4I\xcb\xf282\x89IL\x8a\xa0Q\xe1p\x98\xa3\xa8\x90T\xdc+7f\x05b\xadi\x8d\xd7\xf7d\xa3\xb14:tIf\xc2vw\xbb\x10\xda\xd6\xa98\xa3\xb2\x9a\xe6\xe2\xd4B\xbb\xfdj\x13\xb4\x8e\xb6\x18)\xa3\xc8\x83\x97\xff%\xea\xf1\x1d\xc7\xf0\xc6vOv\xed\xa3\xde\xa2c\x12N\xba8\x9db\xa5\xdb\x91\xf5J4\xa3\xe1p.\xf6\x83\\\x00\xd8\xbd\xbe\x9f{|\x83\xa3\xa4&S\xda!\nT\xb6\x87O7\xf0\xd4\xa1-\xa5\xa4\'\x99\x9d\x9a\x0c\x1bC\xcc\x8e\xba~\xe4\xac\xca\x1a\xa4~\xe7\x8a|\xa2\x07\xc9\x94\xfcA\xf6\xce`\x1c\xf4\xa4\x94\x8ex\xc0/\xf6(\xe1\xf2-\xffx\x8a\xe2&\xa4\xe8\x01\x84\xfc\xb0_\xc0\x89\x10\x90\x041\x87X\x90\xa5\x12\x17\x93\x9a\xa7\x7fd\xbe\xee\x1a\xf4\xed\xd8O,\xa5+\x1f\xdb\x05}\x9c\xf6\x86\x0b\x16\x123\x8c\xca\xef\xa5.1M\x01\x19\xd7\xaeh\xbc\xb6\xe5\x8c\t\xce\x91\xa5q;\xe4\x00\xc1<\xb4\xf1;\xbc\xdb\x0c\x05\x93\xd2\xa5\x8d\xff\xfeR\x13\x9f92\x06;\xd9\xf1\xbb\xb8M\xa5\xab\xb1I\xd16\xff\xa1\xf1p\xac\x08\x9c;\x1fL\xa5\xb1\x9f({s)\x15\xbc\x96\xcdv\xdc\x87\xf5\xa8\xa5\xbd\x1f\xf3\xc9-\x1a\x9em\xdd\xcdON\xe8\n\xc6\xa6\x13{\xc7\x85~\xcf\xa6\xb6\x11\xc3\xca\xe8v6\xfa\xa6 \xba\xac\x99\x0c\xd9\xf1u8D\x85\xa7P0\xf9\xa6?\xfa\x8d)\xc6\x81]\xe4\xeclgY\x86\xd02\xa6\xbd\x88\x17fy\xa0\x81<O\x8c\xbc\x18\xb58\xd8\xa6\xc2\xb1\xb3\xe2\xd9\xdd\x9d0\xc3p\x9e\x0c\x0fc9\xa7@i\x10\xd1-\xcehz\xefXs=\x84\xfe\x07\xa7[R4\xc5-*\xc4\xa3\x99\xa7\xdf\xc3\x1c\x19#\xa7\x95\xdd~\xe7-\x86\xaf<\xbeO\xf5\x067\x8b\xec\xa7\xb8V\xd3\xd3\xd2\xf0J^\xca&\xcc\x93\xafT\x8d\xa7\xbc\x9aR\xe1\x16J\xd7\xbbG\x8c\xae\x07W\xfc&\xa7\xe4^\xd1K\xb9\x12\xee\xf5\xea!\xce\xd8\xad@T\xa8\t\xb2\xa3\xaf\x97\xf7\xb7\x87\xd8\xf3K\xcc*\x84y\xa8\x0fq\x9d\xae#9\xd8!\xa57H\xf9~\xe0a\xa8\x1e\xe0Y#QE\xc8H\x99\xb1\xf8\xf1h|\xd3\xa8\x7f2\xe7\x8em4&<\x93P\xb8\x9a!E\x0e\xa8\x99\x81\xf8\x83\x1d\x92<|\xa3\xe1\xa3mr\x1d\x99\xa8\xc5G\xae\xfd\xe8\xae\x80\xad\xeb\x91\x17\x19\x07\x15\xe3\xa8\xcamR\xe2\x13Y#zo\xfb(\xef\x112\x18\xa8\xf8\xf6F\xff \xa8O\x89\x99\xd6\xd1\xab\xa67\xdf\xa9\x06\x05\xf7\xd9\xad\xbd\x89\x0ct\xfc\xceJR9\x01\xa9*\x8a5R\xf9\xd0\x83K&\x02\x92\x9b\x84\x96\xa7\xa9N\n\xb3\xdd9\x9a,\xfa\xe6{\xe4\xb7\xc0\xad\xe9\xa9\x85n \x19\xf4\xd90y\xf3\x18+b\xc8\xec\xe7\xa9\x8c\xf4\x81(\x1a\xdfSo\xf2\xe1\x9c-\xaaz\xe3\xa9\xe3\xd6\xaa3nm\x82\x1e\xce\xe0\xd3\x86\xd6\xed\xdb\xa9\xe7L\xf5$\xda\xca-`,\xc8|\xcb\xd9L\x0b\xaa\x10V\xbcO\xae\x94B\xf0~\xda 6c\xc9\x88\xaa\x11_~BA\x84\x96\xa0\xfe8f\xb2u\xc8\x83\xaa:\xe5Y@;\x80\x10\xa9\x90Q\xacSf\xea\x92\xaaC\x17V5<\x15r\x1d\x8aYe\xed\x1a\xe8;\xaaL_\xeb\xf5\x96\xbe\xb6\x1aVW\x98<i\x81m\xaav\x0c0\xd2@3j\x90}\x99\xdd7\x8f\xf4d\xaay\xdb\xbe\x0e\xe2\xe0;\xacB\xa1\x8e\xfc=v5\xaa\x85\xf5at\x9a\x11\x8de\x14\x1d&\xf8dQ\x92\xaa\x9e\t\xb4\xc8\xc6\xda8\xcd\xe6\x94\x98!\x88d\xb7\xaa\xaf\xe7q\xbb\xd6\x0eD\x82\x0f\x04kQ\x01 A\xaa\xbeP\xc0\xe0\x13/\xcd)3\xa8\xcb\xb3/\xd1\x13\xaa\xebaKv\xb3+B\xd33u\x9eS\xd3\x96\xab\xab\x00oIp\x110\xcb\xc9\xfa\x947\xf2\x9f:F\xab\x0f\x00\x80/\x81\x9d\x18\x02\xeb\x91\x99\xdc\xac\xcc\xba\xab4\x0b\xfb\xc7\x1fON\x1b\x9a\x01\xdax\xf9\xb2\x98\xab?\xf6\xb6F5\x1eE\xf7\x11>L\x03\xbbY5\xabB\x90bd$\xacq\xb5\x946B\xac\x82WT\xab\x85\x8fQ\xc1ov\xee9\'\xd3\x01\xa7Q\xd0\xe1\xab\x93B\x14\n}\xa0\x06i\x89\xf4.\xa5%\xa4\xee\xab\xfb\xb2\xee\xd9\xac[\x8cM\xb8s\xdfv\n\xeb\x9c\xac\x18\xf9y\xf6xM\xd3e\xd2x\x15x\xfd\xffQ\xac@YX~n\xb9\xa8\x98X\xdf\x85Dv\xf6\xcd\xacp\xf6\xe9\xd5\x90v\xda\xc7{\'F\x1e\x17\xdb\xc8\xac\x9a\x9c-\x8fX\x1faA\xc4c9\xbeRk\x96\xac\xb9\xfbY#98\xe1\xc4\x19\xdc\x83\xb4\xf9\xfb\xed\xac\xe6\x1e4\xac\xafH\x16\xa8\x060\x91\x03\r\x9a\xee\xad\t\xcf7\xf6\x07\x85i\xa7k"\xbf\x91\xae\x95\xf3\xad\x1f\n\xf6\x9d7 .J\xff\xa0C\xa0/\x0b\xe0\xad!\x93\xd74PP\xe4\xeb\x82\xad\xc8\xd6:\x1a\xd1\xad-\xbe:h\xc0\xbfD\xdd;rQ+99\xb2\xad\x84@\x87w\xe6\xb2\xd9\xa7x\x83s}\x8bRj\xad\xa9\xe1L\xf9\xf9|\xdb\xa9D\x11\x8e\xad\\\xb4\x02\xaeD\x05\'\xe0u\xec\xbc\xcd\xbc]\xa9\x18\xd9\x0b3\xae\xa6\x19z\x8d\xb7\x1cv\xe5\x110\xe7b\xf8\xbdr\xae\xdeV\nq\xf8\xc1]\xa8\x9e\xad\xc9\x9df\xe5_\xae\xe0T\xc3!\xe5\xb5h\xd67+\x85}\xb5BI\xaf\xb6\x91G\x0f\x86_\x9d\xfe.\xbbsRz\xc9\x97\xaf\xe1<m\xab\xdb;\x92uk\x83\x91\xea\x83b\x19\xaf\xe6?m3\xb3\x82\xa3\x02\xf80\xcam7Us\xaf\xef\xb5\x8f\xfd0\x19\xe5\xc2\x15\x03\xa0_\xf4\xf5\xf9\xb0\xaa\xa9L]\x90d&\x15\xa5\xe6\x00\xb8\xadV*\xb0\xd4\x87\xbf\x08uv\xbegX\xa96\x9a\xad\xcb\t\xb0\xde\xd7a\x99\x8dR\xcb\x9aX_\x17\xb0e>y\xb0\xf6\xcaA\x04+\xe0|\x87pX\xdd\x0f\x1cOb\xb1-\xba\xa7\x82u>\x9f\xcc\x83\x91>E\xa1S\x07\xb1}\xbe\xb6\xc1Pl<W\xc3\xae\xb0\x17-\xcc\x07\xb1\x8bfT\t\xe3.D\xdb\xdd\x89\xe9\x1dJ\x04\xb4\xb1\xa7G\xf8\x7f\xa41\x1fc\x90y\xe0\xe0\x18 \x04\xb1\xac\x16\x9de\xd64\xf15\x18\xeb\xca\x93w)%\xb1\xb2\xa3G\xf8sL\x9a\x86\x82\x92z\x9b\xdc\xdeb\xb1\xdc\xe1j\x07\xe7\x0e\xf0J\x1eH4\xd4Q\xffN\xb1\xe3\x8e\xba\xafhA\x16\xa8g\x8d\x82\xce\x1a\xdds\xb2!\xd6\x84+\x93\xee\xc1}\x802\xd8\x11x\xb2\\\xb2Z\x84\x8b\x84\x08\xabu\x7f\x81\xd3\xdc\xd1]<\x06\xb2\\\xdb\x1d\xdc\xb0\xf6O\xe1n\xd0(`\x8c\x931\xb2e\x0f\x15N\xc6\xf3P\xffb_\x1e\x92\x86\xd6\x97\xb2\x8eO\x9f\x0b\x1d\x82\xf3\xb7E\r\xdeP\xe7\xf8[\xb2\x8f\x18\xa6\xc3)\x0e##`\x83\x15\xd4\xdf<\xd2\xb2\x97\xff\xb0Y\xd6\x11\xbe\xe2U\xf8\xbb\x1d\xa9\xec\xe0\xb2\xeb\xfe\xb6\x11\x8f(\x14\x16\xa4\xf3\xe8g\xc2-\xd1\xb3\x1b8,\x95\xa0\x98\xa5e\xca\xa2T\xbeG\xf8\x04\xb3+\xec\xcf\x05-+\xb5R\x90\x1d\x02\x85\xb5\x8eq\xb30\x8eF`\xa2U\xc9"[\x81\xa9\x85S5\xb9\xb33\xd7pC\xc9\x80\xc8\x96\xa8Q46b\r\xb8\xb3F\xe5\xc7W\x86uFG[\xb3"\x9e\x82\xd4\xfd\xb3G\xfb2\xdd\xf8d\x19#\x887&\xa5(\x88@\xb3J\x05\xe0!x\xc0\xd3S\x10\xa5\xc7=*VE\xb3ZtZ\xcb6"\tv=\x95<\xd9\xe1\x7f#\xb3e\x7fD\x9e\x9du\xd4\xd6\x13%\xf8\xe3\\M\xa9\xb3~bN\x17o\xa5F\x93\re\xb9p\x16K\x8a\xb3\x8f\xbf\x93\xa5_k\x07\xf4\xa7\xb0\x08\xf4\x11A\xb8\xb4\tF\x16d\x9e\xeec&p\xbd\x95PB\x9f\xff\xb4\'\x96\x8a\xdcw\xc4\xbb\xc0b\x89\x94\xb6\xbd\x98\xf8\xb4Qmo\x9f`\xea]:\xa5w\xd5\xb5\xc9\r\x1c\xb4\xa7\xdaP\x118\xf7\'R\xca\xbf\x1f\x83\xd1\xf4\xf1\xb4\xadv\x88\xfak\xf7X\xb5S\x94\x85\x99M\x84\xe3\xb4\xb2\xed\x9b\x88\x1f^A\x13w\xce\x18\xf1\xa5\xbd\xb8\xb4\xbc^3\x04\xe7\xed\x10\x00\x94\xd5C\xdf\xc9\xb0=\xb4\xf1\x80\x8d\xe2Q$\xc2\x13\xc5\x05\xca\x0e3-\x0e\xb5=v\xf1\xdf^\xd7%i\x1a\x8eq\x85\xd8B9\xb5H=\xc6j\x023\xb4\x00\xb8\xb1\xc0\xed?\xf73\xb5JT\x06\xb7\x1b\xdf\xd1_\x83\x85\xe9\x02&\xb2\xfd\xb5g\xdf\x07\x97\xfcp2\xe0>\xac\xff\xec\xf1C\xa7\xb5\x8b\xd6a\x86\xbb\x05\\\x03g\x9c#\xb7\t\xf3\x16\xb5\xb4\xe5f\x15\n\x1a\x0e\x92\xb7\'\x94\xe9\xe9\xd3\x9f\xb5\xf8<D)\xc1\xb0\xff\x9aP\x802\xa9^\xc8\xfa\xb6\x1f\xd3\x06\xb0\xf0\xf3\x04\xa1{\x83\xc4\xb2#z\x90\xb6G\x94~\xeb\xf4\x1a\x1c\xaf\x03>9\xa2\x8c\n\x99\xb6i\x7f|\xd4X8m\xa3l\x9eMJ3=\x08\xb6\xb8v\xe0\xd3\x1d^\xff\xd0\xf1\xf6\xcb;\xaap\xdf\xb6\xc2-\x0b\x8e\xa3G\xbb>\x91\xde\xcd)"\xc2\xda\xb6\xcc\xc30\xc3hA\x00@7Tao7\xc3\x87\xb6\xd2\xa7\xae\x1a\xa7L\xd4\xfb\xd7D\x00\xf4\xa4\x1bf\xb6\xfe\xdb*l\xdcG\xda\x8b\xbfa\xdd8*`\x97\xb75i\x86l\x87\xa5\xfa\\\xbc\xa2\xb5\xac\xfcF+\xb7:\xd6\x1e=\xdbG\xc9[\xd8l\xb9\xcfm\xb5\x1b\xb7q\x8c\x1d$6\xbbX:\xfc\x93\x1c\xf8\xe2\x80\xaf\xb7t\x8d\xac\x1e\x7f\xcb\x8d#@\x93"\xd9\t\xd6\xc3\xb7~\xeb\xa6\x05u\xe3\x0b\x07\xe5\xab\xec5\x98\xd00\xb7\x7f\xb0\xe5\xd9\x0f\x08\x037\xf7\xaf\xad~\xa88\xad\xb7\xba\xb4\xb5\xe8y|\x13\x1d\xf4\xca\xb6\x9ff\xad\x04\xb7\xc9\x0b~\xb0\x01\xf2\xfd\xa9\x16\x8avc\xc6c\x8e\xb7\xce\xf2\x82\xbeD=\xcc$\xef\xae\xa8\xb1\nMo\xb7\xdb\xc5#\xf5.\x1c;&\x855\xf6\xc23\x94\x1e\xb8^z}1\xeak\xda\xb6+\xb40\xc8=\x19\r\xb8\xa25\xffB\x87\x928\x8d|[\t\x00\xe3\x14\xe9\xb8\xb9\x80f|\xf7\xe7\x86\x84\x8b\x99\x04\x8c\x91\xf4\x8e\xb8\xff\x9dmX_\xc0h\xa1\x8c\xbaU\xe6\n\xd8\xe5\xb94v:Uu\xe8\x9e\xccoV&\x0b#d\xdb\xb9H}\xf5:\xea\xba\xfa\x10\xefls\xa3\x03~\xbd\xb9I\x1f\xec\x11 \x1f\x9c\x19\n\x90\x937\x84\xee\xdd\xb9k\xf8\x89\x95\x00\x9eb\xa8\x12*!\xd5\xcb[\x1e\xb9sS\xd4\xfc\xe3\x01V\xae\xf1\xbe4\xd8\xe3\x00 \xb9\xdbl\xa3\xbf\xe9,\xab\xd7\x97\xc3H\xe0\xd94\xde\xb9\xf1\x95m\xd3\xb9\xd1\x0f\x00\xaa7X\xfe\x1e\xab\xbf\xba\x08~\xeb\x86\x8e\x8a\x14\x08\x05\x9a\x15\x11~\xeap\xba;\x97,\x1f6\x11u\x16j\xc6\x14\xbc\xd5\x1a\x08\xba=\xf6\x87\xc0\xe3\xbf!\x06\x0b\xf0s\xb2\x813z\xba=\xf6\xab\xb8f\x02@\xe2F\xb4,B\xf1A)\xba?\x95\xf4{\x1a\xb4\x08\xffL\x9d\xdc\x14.\xb1\x8f\xbaJ\x11a\x06\xfc\xbe\xa1I\xb6\x12\xf1j\xfc\x01#\xba\x88\x1c0\x16\xa1s\x10\x81\x17\xc2\xd1\xa3m\x85\x07\xba\x9e\xe3\xffEF\x0e\xc9w\xa1j\xdb\xb5QSo\xba\xbaR\xd5\xe10H\xb4;\x06\xa6\xb7\xb9\xfb\x04\x18\xba\xbf"\x8f0rM%\x91\xc7du\xbf\x86\n\x02\xba\xed\xf3\xfb\x8b\xf4\\\x07>]<$\xd8\x04u\xec\xba\xef\xee\x99\x9e\xe8i\xb9\xd9\xda\xfd\x878\x97\xc3\n\xbb\x16\xd4?{\xf8\xfa\xad\x98\xd8\xc6\xe0c\xd6\xd1d\xbb<\x12\xa3\xff\xe2\xa9\x95\x97\xf0\x11}\xe3\xe6\xe6(\xbb]\xe7\xe7\xc6\x00\xa5w\xa5\xd0M1A\xa4\xafo\xbbf_\x80\x97\xd5\xf8\x1bH\x9f?\xfbo\xb5\x12\x83\xbb\x8e\xe4\x02\x11\x85)mX~A\r\xfbC\xee\x8e\xbb\xa9\x81B\xada\xf0\xd3\xd7\xcf\xef\xa7\xdf\x0f\x1aJ\xbb\xcb\x9cf\xcc6\xb0:\xbd\xeb\xa7=\xf2\xd3#\x86\xbb\xd6d\xba\x9eb\xe8\x87\xab\xe2VQ\xf8d\x98\xfe\xbc\x05\xf4~\xbd\x13xSK+*\xfahc\x95\x0f\xbc&\x90\x9cm\xa4J\xb2t\xa8d\xeaE\x97\x9e\xca\xbc\x84ICO\x8d\x9b\x92>\xebQ\x89\x02\x85\xc4\xcd\xbc\x9a\x8f+o\xff\xd5\x85q\xe1\x88\xbb\x11\x05E\xf8\xbc\xafn/\x0b\x86\xea\xa8d\xd3~\x8095\x13\xd7\xbd\x0f6:X\xe1\x98\xd6\x94\x19\xcc\xe2h\x96pv\xbd\x1d\xd7\xe6t\x14\x06\xc8\x0c\x8f\x8es\x1c\x04\xdf\xfa\xbd \x8a\xcb\x8d\x13\x95:\x1a\xda_\x9c~;\x81\xb0\xbdJ\xa9\xd1\xf8\xf5\xc3\xcdL\xda\x93\xa1#T\x86|\xbd\x86-n\x8c\xfe^HFk\x18ou\x87\xf8\xe2\xbd\xc0\xc5\x90V,\x80\xdehF\x9c\xd3B\x7f\x1dm\xbd\xc41n\x06\xb1A|WW\x0fI\x15Je\xba\xbd\xd2d\xf0\xd6\xcf\xf9\x07\x02\xab\x15b\xa3\xe0\xf8\xc0\xbd\xd4\x949\x96\xb0J\xc9\xe5\x99o\x80\x07Q\xa0\x15\xbd\xeb\x01Y*\x16\xd2oakp|\x1b\xe4\xa9_\xbe\x01R\x8b\x1a\xa2"7`\xb8!>?%\xa0\xab\xbe"\xe3.\xccM\xcdFA=9\xc5\x86\xd99S\xbel\n\xce3\xb2\xfd\x06\xfaIR\xee\xaf\xb5\x85\x1e\xbe\x8e\xb82F\xe9\x96}\x02+\xfa\xb3\x98\xe5\x88\\\xbe\xb0\xbc\xeb\x0bF\xd6[\xb1ID\x86-@P\xd2\xbe\xbcn\xa26\x15\x81\xc0\xe1\x03\x1c\x07\xcfwC\n\xbe\xd2g\xe4\xa9m\x8d\'\x05L\x9f}\x14\xf2 \x7f\xbe\xf2\x8c\xab\xea\xa9\xedN\xfc8\xb7\xed\x16@&G\xbf\x02gf\xd5XTR\xd3?\xe3.\xf6|gT\xbf v\x01\x16C\t\xdd\x11\xea\x98d\xacp\x8a\xc9\xbf9WP\xc18\xa3\xd3b\'\xa8\xa7J1>$\xbfL}\x07\x85\x86\x00N\xefs\xa2\xb2\x8c\x88\xac\xc9\xbf\\xH\x122\xe4\xf4\xf3-\x9e\x13p\xc4\x99\xe6\xbfy\x7f\xd4J\xd8\xcb\xdb\x16\xf3l\xd7\xb8\x9c\xc52\xbf\x8bKN,\x83 d],\xa5g\xc7!\x9e\xf9\xbf\x8e\xe5\xf8\x9a\xbb`7\xe45\xef\x9cTx\x87\xdd\xbf\x95\x7f+o\x80t4\xe7\xd8\xfaX\xcb\x90\x08\xdc\xbf\xb5wO\xd9\xe0\xb5\x9d\x90"\xdf\xb1\x99\xc7\x12s\xbf\xbee\x85\xb6\x0e\xbe\xbe\xae#\x1f\x9f\xa1s\x99\xda\xc0,\xdb\x94rk\xae\x82K\x01s\xf8\xb3\xbfm<\xc0@\x1f\xd2U\xf9\x9d\x92\xc1\x08\xcd\xbf\x9cz\xd2p\xc0TJ\xfbs\xc6\xbd\xd6X\xf3\xd1\x8c\x10\xe2\x81\x17\xc0y\x11\xfe\xa0U\x97\xa7`\xf5H\\\xfes\x86W\xc0\x90\x81\r+\xa5=\x8a\xa1L[\xbb93f\x99\xc0\xe3\xaf\xa1\x89\x05\xcb\xf0\xb3\xe0&\xd8/\xe4t\xc3\xc1\x10\x17\xceb\xd5\xe2\xc7)\xcd;\xb3v\xa9*o\xc1&\xf5r\xe6\xbe\xe9\x17\xd1\x03\xf0z\x10\xf3\x0b!\xc14\x17}\xb3\x176\xdaicH\xfc\xc0\xf9\n\xdb\xc1D\x05#\xfe)\\\xbf!\x8exf\x0c\x15gE\xc1E]\xc0\xec\x96\xd6r\xd8\x1a!\x90X\x17\x04>\xc1\x9b\xd5\x88\xb9q\xbe\xed\x1aQ\xcb\xe9\xbb\x02\x1c-\xc1\xdb\xe0\x15\xebXB\x04\xe3\xdf\x0cA\xe5\xd3\x1c\x14\xc1\xf3w\xcd\x17C \xa2~\x7f\xcc9\x05$\xb5\xee\xc1\xfc\xaf\xd4\xfecS\x7f\xea>M\xc8\x9dQ\x88\x8a\xc2"Hx(\xed\xf3\xc5\xdcp|\x16\xbf|(\x10\xc2$\xd5K\x0e\xd9v_K\xa0{\xe0\x14\xb4\xd4:\xc2\'\x81#\xec\xdd\xa6\n\xcd\xd0\xf5\xcd\xce\xcd\xe30\xc2.\xc2\x86r+\xc5\x83\x1f\x91\x93\xf5kv\x00h\xc2r\x0b\xfcA\xa9\x14o\xb2]#{rf\x85=\xc2r&4Al\xfa\xb7\x1a\xe7B\xbd@s\xf3\xb3\xc2y\x80\x90e\xb1!G\x18\xdd\x1b\x9c\x8b\x85\x11\xde\xc2\xa17:y\x10\xb8eI\x08\x93\x9aEc\xaf\xb2\xc2\xa2\x7f\xb9\x8bH\xf6[\tg.E\x90\xb8\xae\x07\xc2\xa6\xe6\x0e-\x12~\xfcK\xd6\xe8\x94\'\xe0\x08=\xc2\xc3\xa8\xee\xd7\xd8\x81\x955\xf3\x9b\xcf`M\xa3\r\xc3\x05\xeflG\xa4I\xa0\xdf\x0b\xdf}\xd9\x1f;\xf0\xc3\x1dHu\xa5\xa6j\xd4n\x9a\x1a\xfd\xc2\xbf\x9cI\xc3G\xcd\xd7\xca\xfa\x10\xc8\xe5+c1[\xbde\xa5\xc3a\x99[\x8a\xf9\x04\x8f/X\x7f4\x1bf1\xb3\xc3b\xdd\xb84\xbc\xe4\xc7\xb0\xf3\x98\xbd\xe0\x16XQ\xc3\xaan\xf4j\x90\x04\xa6\xeeU>/qPb\xa4\xc3\xac\xe5\xe35o\x07\x02\xf9l\x95\xe4\x08\xc6tt\xc4\x14\x0b\x0e\xee\xd2\x88\xe4\x9a\xff\x1d\x7f\xfa\x95}\xb0\xc4:t\xa5\x97\xbc\x16\xbf\x80\xaai\x06\x13uv\x1f\xc4@\xd5q\x17\xb5\x1d\xfa\xd4\xb5\xd0\\\x03S\r\xeb\xc4B\xb9\x07\xe3w\xda1\x8c\xa7\x1a7\x89\x85\xea>\xc4Z\x94(]\xae\x89\xe3U#D*\x9f\xa4\\\xe8\xc4o\xac\x14\x00\xfe\xe7J^#"\x03\x1e\x89\xe9\x82\xc4\xa8\xe7W\xfe\x7f\xfe\xf7\x9b\x89U\x08\xea\xe6$\xc7\xc4\xd2W\xa1H\xa3C\x96]\x88\x97\x81\xb8\xe8\x1e\xb9\xc4\xeb\x1b\xcff\xf8&\xef\x86O.\xc9\x11\xff\x1c\x16\xc5\x00\x074<\x17\x1c\xa1\xc4QH\x89ms\x10\x9d\xc5\x7fh\x11`\x8dh1\x1f\x90\xc7x26\xfct\xc5\x9cK\xc0@\xa2\xfdY\x8d\xf3\x97Y\x93\x9c\x862\xc6\x0f\x84\xe0\x9d[\x03_\xfc])\xcd\xfd*q\x89\xc6C:\xf8~\xe3 \xc4\xfa \xc2Gh\xa1\x9a\xae\xc6\x96\xbc\xc1\x08\x15\x8f"8>\xbe\xc5!\x9f)\xea\xc6\x9d\x0e\xb2\xe4rj;\xfd\xaa\x1e.\x8f"\xda\'\xc6\xa2c\xd9#\x96Z\xc6\xe0\xef\r\xeaOg\x86r\xc6\xa7-\xe1\xf6v?\x8b,I\xa0\xb89\x8ag\x93\xc6\xb56\x85\xcc\x99\x1ed\x82bH\x92\xd6\x12w$\xc6\xccgv\xd36:\x9e\\\x08\xc1\xcf\n\x1b{\x83\xc6\xf3\xf2&\x08w\x10\xecTj\xc7\xb0\x1c\x02\x9f\xb6\xc7 i\xf1\xe0\xb2h\x07\xcd\xe6N\x8f\x8e\x9f\xe1\xa1\xc7g\xb1\x9e\x14\x10\xc1LT~\xa6\x05W\x061\xb0\xc7j\xfc\xf7\xbeW\x11\xe3\xa2U\x96\x1c\xe2\x0e\x94\xfb\xc7w\x8e\xf2tX\x03\x97V"1\'\xc2\x13\xf9D\xc7\xa2\xda0\xd4\x7fX\xf3k*\xd9\x92\xdf\x00I\xdd\xc7\xa3\x83\xcc\xb1\x98\xf4\xe3\x93[{qCd\xc2\xf8\xc7\xb1$\x9eT\xfag\xfd,TD\xbd\x1c\x04c1\xc7\xda\xbc\xe4}}\xbbR>\xae\x82\xf4\x8du\xab\t\xc7\xec\xa5\xb7\xf9\xd8\x8b\xa6\xfc\xab\xf99\xbc\xe5\x9b%\xc8\x06\xf9f\r\x17.\xe8\xbdc\x87S\x81\xef\x89\x8c\xc8/\xfd?\xe1>\xd1\xe9;\xe2\xd3\xb0A\xa0\xf0\x82\xc8R\xf7\x1cl\xa8\xd0\xa1GD\xd7\xf0\xf7\xfa+\xe2\xc8a\xad\x1b\x0b\xc2U\x87\\\x973\xc0\xea\x9a\x07\\\xc8cm\x7f\xeb\x02\x88\xb7\xf4\xcd\x03 2!) \xc8eh\x95\xb2\'\x82p0\xd7\xf1\x08\xb9\x114\xd5\xc8o[\x90\xe6\xad\xa5+n\x85\x8e\r\xdc1p\x7f\xc8vT\xfd3d\x1de\xd5\xc6\xbf4\x1b\xe3}\xea\xc8\xcc\xc6\xddz~\xb02\n\xeb\x03t\x0b\x05\xf6\x83\xc9\tp}\xbb/\xa9/\x10\x9b\xf6\xe8e\xf1\xef\xf5\xc9)\x04\xbe\x9b\xf5"b\xe2{\x0fA* !\x82\xc9\xa4`\x17\xc9\xaf2\xac;{\xa6\xf4\xfe\xbeS\\\xc9\xaa \r\x83\xc9\x95C\xe3\xa3?\xd1\xf9e?f\xc9\xb9\xa5y@\xdb\x82\xd9\xf69\xa9\x13\xb1\r\xe8\xdb\xc9\xd0\x8e\x86!V\xf4@`\x1aM\x01\xa4iCm\xc9\xe5\xd4\xb5)/\xca\xd5\x15g\xd3\xabD\x94m\xea\xca!w2\x17\x8d\xf42\xf0\x95\x00\xfc\x04<\xe7*\xca)O\x8a\xf7X)\xc8\x03\x8c\x887\'~\xe2q\xca*l\xfaK\xda\xe9Z\xa71r\xa0u\x1e\xff\xaf\xca/\x85F6\\\x0e\x0b\xab\x19\xf6\xb5\x0c\n\x13T\xca/\xee\xb3\x10\x80\x14shj%V\x93*!\xf3\xca\xb5\xd4\x9a,`\x1bW\x8c\x9e\xedUA\x7f\xae\xf2\xca\xde\'\xaeGo\x8e\xb1\xd9\xf5\xd8\xa9E\x10\\C\xca\xfcq\x82]:#c\xd8\xc3DS\xd6Z\xe3:\xcb\x0fv\xa0q;` \xcb\xdd\xc6Z\xa87\xcc\x83\xcb1[\xcb\xf9\x1a&i\x86\x9f\xf4\x82\xd3\x02u$\xcbYB\xa5\xf9\x87\xc8p\xb1p\x0bc\xb5;UG\xcb`3\x0e\x96#4\xa68]\xb0>{9\xebn\xcbq$\xc7Z\xf9\x1c\xa0\x0f\xf6a\xeeh\xb6\xb1\xcc\xcbv\xfa\xe9\xed\xc3\x01\x8d\x10{\xdb/PjPR\xcbz\xc6ka\xbb\x8bb\x84\x9f\xa3!X\xcc\xc6\xfc\xcb\x83#@\xa4\x038\x03\xdf@\xbe\xcf\x03\xf7\xec\x1d\xcb\x89\x08U\t\xfa\x05h\x16\xca\xc5\xf4Yg\x9d_\xcb\x8dU\xb5\x94s\xb32b\x8d^\xb8I\xb4FW\xcb\xc7A\xa5\x10\xd7\x91\xb3\xad\xb7e\xfa\xc0\x84\xba(\xcb\xc7\x9b\xa3&\xbe\xac\xffF5\xbb?z\x8e6\x8c\xcb\xe5\x82"8\xf9\xf9PW\x19Cv\n\x10\x92\xb9\xcc*qg\xa3\xda\xe2\xa6\x11n\xa7\xf0\x08\xe2\xd7\xe6\xcch\xc1\xf3\xe1\xa0(\x7f\xd8\xbe<*\x98\xb6\xe1\x8d\xccon8C\x98\xd8M\xea\x07l$\x86J\x86\xfe\xccr\x15^\x10\xc5"\x8c\xc7\xdeoR\xc9\xfc\xea\xaa\xcc\xed\x9c\xa1\x81\x0boi<ZdU\xeb\xcd+?\xcd%\xbf?\\\x14/\xea\xb3\xeetc\x85\x84!\xf3\xcd/&A.k\x94l\xc0\'\xee\xe2\xac\x0eB\x04\xcd7O;,2@\xb0\xd0\x1b\xd8\xb9<\x9a\xd8\xa9\xcdj\xef\xa1\xa2\xb6\xd1\xc5\xc1\x84{-mY\xcc\x8d\xcdm\xe4\xb9\xa1\xa6p\xd9Q\xa4/|m\x8e\xab\x05\xcdp\xc5\x96\xf1e\xec\\1>\xcc\xe2;)\x05\xf0\xcd\xa41\xcfW&!,iM\x9d]\xd4\x15(\r\xcd\xc2F-qQ\x15+h\x88\xb4\x1fq\xb5\xd6\xa4\xcd\xd9\x12\xcb\xc4\xb0\x02x\xe0[\xc3\xaf\x1c\xdc[\xdf\xcd\xf8v\xc8\x99b\x9dHc\x11\xdf\x91X \x12\xc9\xce&\xc5\xd1\x05\x15\xa0\x8e\xbe\xb1\x1d\x14q"\x0e\xd5\xce{\x1e\x1e\x00\xd3J\x80\xd0\r\x91t\x83L\xf4\x1d\xce\x8a\x87F\xfb\xbb\t\x90J\td\x90\x93l\xf5\x07\xce\xdc\x11\x1b\xba\x14g\xf8\xb3\xa7SY\xa3D\x0f\x84\xce\xdc\xfez\xe3\x00w\x91v\x8c3i\r\xc7_\x08\xce\xe2\xce\xb0\xc8\xc3G\xcaD\xf3\xef5o\xa7_\xe9\xce\xe5\xcf\xd2\xadS\xf8I>\xe5\xce4\x882\xe5.\xce\xfb\x19\x8c\xae\xd6\x1d-2\x02\xa4|\xa6=2\x9f\xcf/\xff\x82\xc3\x93\x16\xb4\xed\xf3\xf8s\xda\xfb\x8f\x9c\xcfY6V\xe1\x01\x12\xa8qy\xf5\x8d\x89\xf8>\xaa\xcft\xd8t\xfa\x86\x8bP\xa552\x0e`\xd34m\xcfx\xdc\x0b \xce!Ac\xa1I\x984\x94\xf4\xd0\xcf\x7f\xd1R\x9ePQ\xd3s0\xfc\xcb\xa3\xf3\x14,\xcf\xd5\x81.-\xccA?6\xcf\xfdE\x90\xbb\xb4\x81\xd0\xca\xe9\x19\xce\x03\xeb\xc8\xa3\xfe\xa6\xb7H\xfc\x07l\xd0\xd83@\xc1\xea\xfbf\xdcV\xf0\xf7j\xe5O\xad\xd0\xd8dJV\xa3#\xe2\x88\x8b\xfbh\xcdg\xe3/\xd13\xe7T`\xc2\xe3\xb5\x15\xf0\xe9\x06\x96G\xe8\x9c\xd1K\x1fNd\xa6\x90,\xe0\xe8"\x9ct\xaa\x9a9\xd1_e\xc1\nN\x9b?\xf7\x8f\xe8:r#1\xf3\xd1tG\xef\xff\xcc\xdb\x11Otw\x86\xd8q\t\x0b\xd1\x9cS\xfe\xb5#L&\'70\x93\x91z\xc9q\xd1\xa7\xea\x95S#)\xbet\xc3\xcd\xe3\xbe\xd83\x14\xd1\xe1(\x13pS\x04\xf5\nV\xc5\xd5\xfd\xde\xf6B\xd1\xe1O# \xb6\x00\x0c\x12\\2\xfeo\x082\xec\xd1\xec\xa4\xe1\x9e+\x95\xab+\x98[\xbf\x18\x19\xad6\xd2\x12\xf3\r\xa83\x94\x93%\r \xb5\xc1-\xf7\x0b\xd2\'\xb7\xb4\x96\x9bG\x1f\xedP\x95\x96\x9316\xe0\xd2\\\xa5\x0b#\x98\xb2\x17\xc5\xd8\xaa\xa3\x1c\x83\xbb\x98\xd2o>\xc3\xfdyL\x80%\x19\x00.\x86\n_\x1a\xd2}\xda\xbc\x9eg$\xe0\xe6/\xdfV\xf3[\xd0\x1b\xd2\x8ce]\x98\x95\xf5\xee\x94)\xc4\xc0\xfa\xb8\x98V\xd2\xbb)^\x91.`\xe5\x00\x91.5\xce|\x92I\xd2\xc9\xe3\x18jQ\xe9R\x9c?\xf9\x1e6*i\xd8\xd3\x13\xdc\xb3\x0b\x0fX\x04\xc86\xc3.\xb4R-\x85\xd3\x1c]\x1e5\xae\x8c\xbc\x11K\x98II\x94C\xfa\xd3\x1eZ7\n\xc3\xbc\x17\xff\xc7Y\xd0\xd3|\xe2\xa8\xd3\x1f\xf63\xf8\xcb\xc5\xd8^9\xbd\x1c\x9c\xe2\xb0\'\xd3`\x9eiME4w\xcc?0V\xae\xaai\\\xd3y\x1e\x8b\xd8\xd6\xfeR7n\xff8\x98\xaba\x80\xd3\xa9\x1bV\x02&\x02\x04\xa6\x1b5\xe1\x9f\xd3\xe0)\xd3\xc7,F\xe0\xb7\x953[\xc8\xbb\x95\x1d\x9by)\xd4\t\xfb\xcd\x83\n\xf6\x15\\\x80F\x00)d\xfc\xd4\xd4(\xe8\xbbs/\x8e\xb3\xb4\xd4W+\xea\x1a\x0c\xd0\xd4Z\xde-l\x8e0\x1b\xd7\x96Z\x83A\x96\xeb\xce\xd4a\xec\x00@\xa9\x95\xdf\x0cL\xceC\x8di\xc3\x9a\xd4\xb7\xb5wGS\x19\xc8x\x1f\x9a\xdc\x99\x7f\xf8\xfb\xd4\xc0!\x9f\x15Yw\xf2K\xaf\xda\xab\xd9\xb0=\x1c\xd4\xf8\x97\x16 \x82\xc4\xb9\xb4Ne`\xb6\'\xf6Q\xd4\xfd\xa4.l\x99\xd4K\x87$\x8f?W\xac\xdf\xa3\xd5\x0f\xb5\x9c\xc3\\eG\xaa\x84\xad\\$\xa0\n\xc8\xd5\x1b\x80\x1e\xd5\xa4(H#\x8b\xb4\xbc\x13\xe7\x80\x93\xd5\'H\xae\x83\xf8\x89:\xe2\xf9\xe5\x8d\xd5\xa4\xdcT\xd50\x05\xe9-\x996\x8b\xe4\x96\x93\x8f;L\xdc\x8d\xd55\xe5x \x06\xb0\xac\\\xdc\xe1@\x84s%\x1a\xd5r"\xb9\x98\n\x87ku\xa5\x91\x19\xfaW\xdb\x80\xd5ws\x046=\xab\xa4\x90\x0bQFf\xbe\xb3\x8c\xd5\x96\xac~\x92I\x93\xca\x93\x01\x95Xtg\xca\x0f\xd5\x9e\x18%\xc7\xbd[~\x0bv\xf8LF\xbf,\xd9\xd5\xab\xb3a/\x8f\xaa\xfc\x88\xd0\x89\xf6\xfa\x89*\xfa\xd5\xac\x17\nn)S%\xe0x@\xcd\x17P\xaap\xd69\xf3]@)\xb8\xcb:\x08t\xb8\xddr\x0e\x8d\xd6E\x03B\x1d\xc2j>?x\x1akS\x1dX\xb0\xd6]\x9e\xee\x9dz\x12\xde!V4\x0fUo\xcf\xd4\xd6\x87\x80:\xe6\xb3F\xad\xe2\xa0as\x8c\xec\x89\x8f\xd6\xb3\xc6l\x96\x9d\xe9Kb6}\xe3\xaa\xd6o\xa6\xd6\xc0\xfd\x07\xb6&}\x0fF\x81}\x13\xb5\xd18l\xd6\xdf}o+\r\x9f\xcf`\xddn\xbd\xe7f\xd8B\xd7\x01U~f\'h\x9eX\xae\x92\xfe\xe5/\x01T\xd7!\n3\x82n\x04\x03g\xf3aX\x1c\xa6 W\xd7\xa3p\x86}g\x18M\x0b\xf2\x9e\x0e0\xeek\xb4\xd7\xbboTldu\x99c\xdbJ\x90\xfdZa\xb5\xd7\xd6\x98\xceL\x9a\x19N\x95\x8a\x00\x08\xce\xde#r\xd7\xe0fY\xcd\x00\x14\xc2\x95\x00\xab\xd0\xaa\xf3\xe9\xca\xd84ju\xebQDe\xb6\xe7\x07\xb7e{y\xd2\xd8:T\xe2\xcfU\x12\x8d\x7f[0\xbd\x89\xa5p\xe1\xd8E\xc0\xef\xdd^\x12{\x87\xc4\xf2_`\xa4or\xd8R7\x9aek\xe0!\x8f.\t\x98\x140\xc1\xcf\xd8\x9a\x05c\xa1\x00\x08\x0f\x02\x16<K\xa8\x1cA\x0f\xd8\x9c\xb5J\xe15\x1e2\xf5\xce$x\x15\xfe\x97l\xd8\xd5rBGEg[\xf1\xa3 oxw\x82C\xd8\xe1\xf9E\xf4`\xb7hAiL\xaa\xf5\xf2F}\xd8\xe5\x02r\xc1\xc69\x9ey\xa7\xde\xe8R\x0f\xc4~\xd9-\x162\x00\xa4v\xb1\xd6\xe0\xa3\xbeF\xd42\xb9\xd9J\xc1\xfb\x82v\xbem\xe4x\xbb\xd7\xf8?\xa2\xa8\xd9P\xda7C\xe0\xae\xf7A\x03\xcc/\xef\xaa\x80\xa1\xd9c\xa4>\x14\xefGz1 \xb7Cj\x0eO.\xd9\x81D\xf4\xcb*\xdb\xb3ZZcn\xe3\x81*?\xd9\xd5\x17\xfa~\xf7\xd1\x08\xaa3A\xcfN\xc7\x03\xdc\xd9\xe2\xb5\xd7\x8e\xe2\xa3\x94\xf6\xad\xf4\xb3\x00\xe5T9\xda\x15\xa8\x07\xe9\xddh\xb0\x10\xa5\xa5\xa3u\n\x1b\x0f\xda:\\B\xf0\x06`a\xe8\xba]\x0c\t/x \xda?\xea~\xf3\xa3\x8a=u\x00\xbb\x7f\xc1\nQ\x01\xda~qfF\x83CVc\x11M\x98:\xef#\xd7\xda\x80\xc8\x0cwK-\xb0\x1b\xec\x1e\xe4*\x15\x0f\x92\xda\xd2\x07\xday\x81\xd49\xfc\x17\n\xd1\xdd\xfe\x0c\x14\xda\xdb#8L\xdf&\x94\x86\x1a 1n\x08\xc4l\xda\xe9\xa2\xb6mX\xd5K"H\xa9\xcd\x05\xf2\x1c\x1b\xda\xf4<H}$=Y\xd8\xab;\xfbfEy\xec\xda\xf5\x1a\xf1uEU\x1e\xa0\xb3\xcd`6|\xd9\x9a\xdb)\x10:\xec\x1a\xe0\x03-\xf86\nsp\x8c\xfa\xdb9m\xe7\xa4\x1d\xbd\xa7\x06\xa4\x08\xbb3\xee\xadX\xdb@\x1c\x8eN>B\xae\xb1\xcc\x8eA2\xd6\x07\xb1\xdb\xa1Q\\\xd9\x82\xe9\xe0\x1a\xdd\x85CF\xa2\xde\xaf\xdb\xa2\x902\xd9\x0f\x9a\x01\xdb\x02\x9d\xa9/\xb41\xcc\xdb\xb5\xbf\x1f\x9d%N\x8c\x89\x88\xef\xd1\xb3\xc2\x8b\x06\xdb\xc4D\xe8\xe6\xa0\x19\xfe\xcf\xe0/Zd\xb31\xd4\xdb\xe1+IZ\x9e=]\xb0\x00[\xb6\x97\x90\xbf\xa5\xdc\x03\xa7\xc6\n\x82\x986\xa6\xc8t\xe6\x039\r~\xdc\x1a\xf8#\x8fr\xca\xff\xebZ\xe8fa\nx\\\xdc1\xa4\xf3\x01\xd6\x85fw\x01\x05/Z\xb5\xe6J\xdcK\xa4\xf6\x89\x82H=V\x85f\xbd\x97\x10\x01#\xdcLro0\x15\xac\xc7o\xfaEI\xcb\xee%b\xdcmJ,\xf0HF\xd4\xf8\xc2\xc4\x9a\xa3\xadk9\xdc\x8d0]\xb9@\xc5\xf0\xd3f\xaa/eq\xd8]\xdc\xa4\xf4\xb2W\x80\xb3>T_\xed\xea\x91e\xc0\xe1\xdc\xdf\x11\xec\x1d\xce \x8fn\xa6D\x1dJ\x8b\x80\xf1\xdc\xf1\xbc\x1b\x94\x17\xa9\xfb\x11I\x00\'\x85\xfe\xdcJ\xdc\xf6R\xaa\xd4Y\xdd\xa9\x9bi,\x0e\xf3$P\x17\xdc\xff\xa5\xe5\x84\x1c\x03\xcd\x06\xba\xa7\xbc\x87\n\xd5M\xdd\x96\xd6\x10\x95.C\xd0W\xb7e-\x84\\\xcah\xdd\xb7g\xe9*\xc5\x9d\xb7\xe2\x168\xd6\xc3\x0c\x89\xa1\xdd\xd8\xaf[\xbf\xc68\xbb\xb0\xf7~\xf97G\x18\xab\xdd\xd9\xfdNw\xf65\n\x13\xc3\xa9\x92\xd6\xb0\xfbZ\xdd\xdf\xf5\xb5\x12;e\x90\xc0\xf6X\xd1\xa5)\xcd\xa8\xde\x023\x1a\nd\xdb\x9a\x8a\x1b\xbf\x0e\xf3z\xc8\xd6\xde(}C6F\xb4\xdf\x9fWx\xe9M\x0fVE\xdeNk!\xc4\x13O^c\xbeop\xc4Cn%\xdeq-S\x83h\xaf\xbb\xc9)\x997\xbf\x82V\xe5\xde\x91\x1c\xeaF\xa05r\x8a\x85<\x8f\x0b\x17\x1bF\xde\xab\xb1-\xc1\x97\x10\x0e\xba\x01Q\xea\x99\xe6\xf3\x98\xde\xb2\x8e\xe3\xfeLmLq\x104\x04\xa3j\x98/\xde\xcev%\x94\xd4@h\xac\xc0 6\xc6\xa9\xdc^\xde\xeb\xc0\x93@\x97\xa7\xc2b5B\x1f\x1c\xdfx\xe3\xdf\t^\xcb\xde/!\xac\x85/\xc1\x82\x83\x85C\xc4\xdf\x0c\xe8\x1e\x0c\xce\xfc\x10\xfcY\xf1\xa1\xbc\xab~\x01\xdf\x0e\x98\xba^\xc0\x84!/u\xf6m|C\xb0\x92\xdfBY\xcd\xca\x9e\xf8\xbf\xac\xda\xad\xd5\x1cE\xe1U\xdfl\xe2T\x8f0\x98\x0b`\xcaj\xaf\xba\xe6\xea\xee\xdf\x8c\xc81\xbda\xa1\xb2N\xaa*\xde\xd1K\x1d\xdb\xdf\x98\x1c\xab\xae\xc8N_V\xd8\xf2\xdb\x11\x92\xe7_\xdf\xc1\xd6\x9ak\x12\xaf\x85@3\xc1kw\x89h\xaf\xdf\xcf\x94\x01U\x05k<c\xa3\xed\xe4C\xa8\xde\xa1\xe0\x01\'x]Q\xe8;\x8a\xb7\x0bZ\xb6nn\x8a\xe0O\x00\xf6\xbf\xc1\x0c\x08_W\x0f<\x1dmE\xee\xe0\x85\xb4\xc2cJ\x05`\x10\xc8\x9fnc\x85>5\xe0\x97\x92\xce\xda(;k\xef\xfc\x07W;\xb3\xab\x8d\xe0\xefd#\xbf\x1f\xe7\x9e\xac\xdd*U\x94\xc6\xfe\x00\xe1\x0f%\xe0\x99\x1cY\xfb\xd0\x98\xe1\x02J\x9a?\xfd\xe1&\x91s\xf2g\x06\x12_\x93\xe2\x04\x83\xbbX{\xe1(\x12\xfb\xa4\x88\xe0<\x08G\xeb\xa6\xebfH8\xe1Vkwky\xe5\xb8x\x81LN\x81\x1aV$\xe1g\xe5M\xf3"\x1a\xe6\x18F#a\x05\xc1\xb6\xdc\xe1n\xf3\xe3MR\xcaF\x95\xc2\x92\x1c{\x10<\x1b\xe1\xa1\xfc\x8f\x81\xb4\xe3\x9e\x16!\xc5\xa5\x91\x8d\xd4\x01\xe1\xa9\x0fV\xf7\xcc%L\xb2Q\x96\x96`\xc7\x95\xcb\xe1\xafk\xd3]\x17\xb9p\x88o\x1d\x83\x10Ej6\xe1\xe6t\xa6&\x84\xe0\x16\xa3V\x8b\xd9\xec\x11\xfc\x99\xe1\xfc\xdek\xb6(\xee\x00\xef\x85\xf5L\xb5\'%\xb8\xe2\'z\xef\x92\x1b\x97b!\xaa\xbf\xc7zZ\xac\xd0\xe2F\xfb\x8fs8\x15\xca\xfb\xd3\xec7hw\x8f\x9b\xe2Ry\xdf\x85\x0f\x94v\xeaR\x8f\xa6~\xe5^\xd8\xe2R\xe4\x02\xd39j\xfe\xee\x9b=\x9f=\x0e6G\xe2\xd5\x9b\x1f\to\xeb\x80\xab\x9bH\x94\x96\x00\xeb\xcb\xe2\xd8\x91,\xba@\xda\xf9Gw\x0eW1o\xc1\x10\xe3\ndL\x8e\xcd\xa7Wy\x1ej\xd7<!z\x91\xe3\x1e\xf1o\x97\x14\xbf\x97`n$d\xf9\xae\x08\xa0\xe3?\xf8\xf9\x94\xb4\xdc\x06\x07\xca\xd1&\x92\x82\x1fv\xe3\xc05[k\xe35\x04\x13;e\x18\xff\xccc\xa1\xe3\xd8s\xf5\\\x02LU\xda_S\x0b\xae\x87Ts\xe4\x83/%X\xf6\x05p4\xdfU\xae\xdc\xd2\x7f\xc3\xe4\x87h\xb0\xceYV\x1e[\xc1A\xa5 a\xddE\xe4\x8c9l\xa2\x9dQ\xe7\xfd\x80\x0c\x87\xadw\x19?\xe4\x9e\xe5\x90\x1b#\xbbJ\x0c\x17UR`\xeddC\xe4\xa8\x14\x0c\x0b\x00\x05\xd9\x99\xb7\xf1\x92\xb2\xb5\xc3\xc6\xe4\xb7H\xdcZ]\x1f\x89\xc5\xe1\x11\xd2f~,2\xe4\xc1WR\xcc\xd4V\xdf\xee\xcd\xdb\xc7\xa5\xa8\x1a\x11\xe4\xc3Y\x80\x01S\xfc\x01jW\xaf\xd4\xa8\xd6\xeeD\xe4\xee]\xcd]\xb1\x82\x85\xfd\n\x14\xa9\xc8\x80\x12<\xe5J\xa1\xec\x83\xb9\xc4\x1a\xc66\xc7\xf1\x9b\xc0x<\xe5\x7f7\x11h:2\xb71\xc8\xd3I\xf0^\x8eD\xe5\x80\x924\xa6\xd6`>\xd9S\xf7\xe4K\x98RN\xe5\xde\x07\'\xfc\xc7I\x9c\xc2hr@,\xa53\x18\xe6\x04\x95~\x17\x89\xa0eA@]\x00\x08\xdc\xc4X\xe6\x11\xeb\xcb0\xb6*T\x03\\Z\xfe\x10\xb9n\x91\xe6\x16\x1eM\x10p\x90"\xb5\xab\xc1cE\xb9\xdeo\xe65\xc7P\xc5\x8e4\xce~\xe0\x99"\xee>\xe2i\xe6B\x12\x99\xe0\xa5\x84\xf2r/\x1c^\xff\xa7\xb5\xf2\xe6\x82\xe0\xee\r\xb0i\x01l+l\x9d\xaf\\\xeai\xe6\x9c\xdf\xa4\xb9$\xdb=\xf6\xe6\xe5v\xd5+\xbd\x11\xe6\xbd;L3\xfdMi\xa3\xc9~\xba\xa4\xbfu=\xe7:\xec\x01\xc5\x86\xc9N\\Lle\x146&|\xe7\x92\xe3pq}]|\xf2_\x98`!\xe3\xe7\xc3\xe7\xd7\xa4\xd1\x81\x92\xd67^\x82\xcem)\xa4\xd7c\xe8\x0fo\xc1i\xbc*+\x13\xb5\xf9\xf9/w\x84{\xe8\x15jw\xa4\xb0\xc3\x14l\xf8o/d\xf5\xf5\xae\xe8\x1f:y(\xd8\xc0\xc5\x91\x8dk\xfa\x01\xf2\xe0\x9f\xe8+\xcc%e<\xd9\xf8\xad\xbc\x81\x8c\'\xc8\xdcG\xe8E\xbfn\xcb\xe3\xc9\xb3\x87\xed\x1e|f\x8f\xc6\xab\xe8X\xbe:zDq\x9f\xef\x02p\x86W\xa2\xebz\xe8zjx\xd8S\x1e\x8e\xbd\x8e\x0e=\x8d.\x12\xcd\xe8\x8d\xe8;\x1aY\x19g\x1c!^M\xb3\xed\xcb\x0e\xe8\xa3q\xde\x03\x87{\xc8\xa7\x17\xc0\xfb\xfa\x8c=G\xe8\xc6y_\xbb\xa4+\\"T\xb5\x12\x11\xb1R\xf4\xe8\xc7\xb9\xfct~I(8FSKH5\x9d\x14\xe9.\xf1\xd5 h\x14\xe9L\xb5\x7f\xcf2\xfcO}\xe9z68\x98\x142\x0c\xc9\x0e\xb3\xeeS\xee\xd7i\xe9\xfd\xd0\xbc\x8a\x82\x7f\x86\x8d\xbd\x12\xfet\xfe\xb4E\xea\x08\xc6\xcd\xf5I\xb2p\xbf\x9b\x9b\xc3\xfe\xfd\x01y\xea\t\x04\xb7\xf9\xa2\xc6k\xd0\xa6\xfd\xfe\xbd\x99\xb6\x8f\xea.\xd5S\xf4\x85t_0\xaa\xf6_\xb5\xf9\x07\xa2\xeaG\xd5d\xf1\xac=3t\xc5\x94\xd5\x18y\xf7.\xeaL\x15I\xc1H%B&\xbc/\xf6\x1f)5\x0e\xeay#R\xb4\xf1\x95\xce\x89{\x8e1\xec\x83\xbcb\xea\x81\xd9\xc9\x88\xbf=n\xc43h\xdfH\x87\x866\xea\x88\x03s\xa9\xef\xb7\xa8\x12d]\x8e\x98\x03\xc9E\xea\xa0\xa3\x1bW/\x8d>N\xab\xfc\x80ek2\x1b\xea\xa4\xc2]\x96\x00\x1a\x89\xadGG/O\x17.~\xea\xfc\x9e&(9\x8f\xccv\x8b\xbdu\x91\xe4b\xc3\xeb\x03a\xbdc\x9c\xce\xa5\x82\xcd\xee\xfa\x13\xce\xe1\x02\xeb%\xd2\xd0\x1b\x16\x8e\xb8\xe2\x93\xafJ\xdf"]\x86\xebU\xf5V\xed\xfe\xb1j\r\xc2\xca\xf7Y+9\x0c\xebs\x13:\xff\xf7\x89%{D\xd9\x1b\xd8V\x1dE\xeb\x7fk\xe6\xcba\xc0_\xb2\xe4}\x8e\x99\x94%T\xeb\x83\x00Q\x97\xc1*$\x15_\xc8\xe5h$\xa1-\xeb\xa01\x02\xa5FC\xea\x14\xf4\x9d\xae\x95\x06\xe4l\xeb\xa3\xb9e\x0flY\x87\x958D\xb4\x9b~\xaf\xfb\xeb\xf1\x15<\r\x86\\\xd2\x80\r|\xfb\x94\'\x82h\xec\x04\xcf-\t*\x90@\x85\xed\x06\x0b\xba\x82\xe2\xda\xec\x12\xb7\xad\xfc\xbb\xd0\xdf\x84\x11\x04D?\xcey\xb3\xec3\xed\xe2q\xd4\xb2\xf1\xe6hl\x8a\x04\xda_\xe4\xec?\'<0"ND\x9f\x0bJ\xd7q5\x05\x10\xecI\x901\x06\x12@\xd3\xb4dk\xd6\x19\xae~<\xec_\xcb\x97\xa6C>6\xedg{\x8e\x16\x12re\xecf5\xbe\x883A\x93j\x96\xfd\xcb\xc3)\xbd\x1f\xecn4\xc2@\xb6\x19\xed>\x92\x17\xcf\xc2\xe0\x87\xec\xecq\t\xb9\xa2&g`U\xa8\x96\xcf}"(\x11\xec\x83\xad\x8doXt\xbaycE\xb2\xfeSD\x18\xec\x8e\xd8~|4m\x8a\xa3"\x97#\x1b\xe3\xf8$\xec\xcd?\xaf\xb5#9\xd3\xf9L\xa0E\xbd\xb7\x83\xc1\xec\xf3\xd2\xc6p\xfe\xd0\x03t\xaf\\{\x80MYY\xec\xf6RyFf\xa9Q\xebo\xe9\xb9\xce\x9f\x99H\xed\x1c\x13\xd6\xda\xa5\x115\x89\xa8\xf5\x12\xc5\xb7\xfah\xed\x1f>\xbb!\x9e\xb9\xb3\xcfW\x14o\xd4\x96nJ\xed6\x97\xc4\xf4\xdd\x1a\xe6\x0bN\xb1"\x83\xa5\x12\x15\xedbj\xca\x1b\xd9m<\xb5\xfb\xae\x8a04n\xb3\xedj \x187\xc0k\xf4A\xcf\x9ew\xf8\x05\xe9\xa2\xedz\x151\xed\xd1\xe9a\t\x1b\xb7\xcf\xa0/C\xe0\xed\xa9*&}\xa2\xf6\x1b\x0e1\xa4\xbf\xc6\x96*\xc1\xed\xaf\x18\xe6|\x96x\xe5w\x15O\x7f\xd85\\(\xed\xfd\x8f\x0c\xa8\x00\xf5\x1e\xeb0I\xb9\x1fS\x8cj\xee\x0e\xe4\xc6\xd8\xf6\x99\xffN\x89\xf1I\xcd\xce\xfeK\xee s\xbf\x9e\x7f\x97_j\xa2h\x12\x03w`1\xeeA\xbd\x89\xb4\x8e\xe5@\n\xae\x0c>W\xdc\xcfo\xeec\xcd\xa4\xb27\xd1\xe2\xb7\xa1\x1c\x1d\x87H\xa3,\xeed\r!\x1f2\xed\xf1\x81\xd0;\x81i]&\x8a\xeeu\xf9\x98\xb5\xc3r\'Di\xba\x10\xc1]U\'\xee~\x88/\xfd\xd8\x8c^Z\xfa\xaf7PB\x95\x86\xee\xa28\xd0\x96\x17\xbb5\x03|T\xad\xc1#\xe3\xdc\xee\xacRRJci\x16\xc9\xc8\x8ey\xa7\x96\xb9\x88\xee\xc7"\x8c\xac\xbcn\xb1\x8c*5h\xd7UL\x94\xee\xcb D\xd8\xe3\x97\xdf\xac\x1aE\xd1\xb2i\x97\xe9\xee\xebu\xe3\x18/\x1f\xe0\xaf8\x05/\x91\x06\xa5\x7f\xef\x1a\x9a\xf0\xc8\x14y\xaf\x97\xa1\xe7\xe6\xd0\xa8\xe5D\xef\x1b\x14\xd6v\xfe\xacj;\x9c\xc0\x88q\xa3j\x87\xef\x1e\xde8\xa4\x94W\xb9\xda\x94\xfd\x0e\xf7\xd2p\xcb\xef\xb4o\xcb\x12D\x06C_\xf1\x81qf\x7fe~\xef\xe5\xd2F\xea\xe9Z\x0bq\xfa\xdb\xd2\x0f\x94\xb8R\xf0\x0f\xff\xfa\xb5\xfc\x07\xc6\xac\xba\x94\xa5\x98\xe0\x0c0\xf0\x15s:\x06)K\xdb\xa7\x0b2\xb54Z\x05\xd5\xf0+`1\x007J\x8e\xcd\xefP7Y\xfe\xb7W\xf0H\xea\xa5\xd9\x9a\xeeX\t\xab\'d\xa9\x9a\rx\xf0P(s\xd5[\xf83V\xfd\xfe\xce\x03\xa3\xb0\x91\xf0o=8\x01\x8e6\xcdn\xf7\x811Q-=\x9c\xf0\x83Glp\x9c6\x0c\xd0\xef\x1c\x17<7\x01V\xf0\x95l\xd5\x97wxF\x82\x96X\xc5\xd9\xb8z\xd0\xf0\x95\xe6\xef\xa7-\x88\xee\xdd\x012\xa1\xcb\xcdV\x1c\xf0\xa7S\t\xb3\xa2i]\xfb\x87\xafz\xf1\x9b]{\xf0\xc1\rM\xa5\x8e\x1d2\xce\xe8X*5\x1fc\xd4\xf0\xf4\x01v\xcb\x94\x00\x15\xea\xf0\xbf\xfa\xa0\xaf\xb8\x02\xf1\x027\xacx\x19\xee\x91\xe4\x91+ \\\xe9\x1d\xa7\xf1\x0b,\xe9<\x0fG#bFV2c\x8c`\x1f\xf1\x168\xabr\x08\xfc\xf2\xf7\xfd\xdc\xb22\xb1\xf4m\xf1T-P~n\xda\xd4\xcd\x0f\xaf\x80\x98\xa1\xe6\'\xf1V\xab-\xaf\x03B9\x16\t\xaf\xb0\xd1H\xec\x95\xf1\x99\xf8\xe3\t\'\xc3\xb8A\xb0d\xdf\x9b\x16<\xde\xf1\xaa/m\x06\x91\xaf\x0c~rs\xe6\x97\xc0PV\xf1\xce\xd2\xa2\xb4\xc4U\xed\xa3\xd9l\xfe\xadD\x17\xa9\xf1\xdf\x1f\x98\x87\xf1mwJt\x1a\x0c4\x1a\x1dE\xf1\xe1\xe0k\x8bZc\x89\x16\x9b\x88@\xc4\xf8d\xbd\xf1\xf5\x89\xd6k\x9c)\xd9U\xcap\x86\xe2\x9bb\xed\xf2q\xc13\x1d\xf0\x81\xe06\xbd~\xddv\xf0S\x96\xf2s\xa2\xb9*\x04\x80\xe8\xab}\\\xf4\x85\xfe{C\xf2\x9a\xbdQ\xedD\x19;b\xb9\xfdK\xbb\xb1\xa3\xd7\xf2\xf1ZZJ\xf6g \xd9\x1b(;\xfa\x99J\x12\xf3\x08\xcc1=\xa8P\xcf\x1b\x8d\xb7]\x11\xd3\x9e\x8c\xf3\xa7\xc5P\xbd\xaa\xacm^\x94\x17\xc9Z{\x98\xbb\xf3\xb0\x02\r\tLL\xbb#/\xb4\x15J\x97\x80\xb1\xf3\xbd$\xac\xa6\x110d\x1b\xf2=\xa3S\xe9Q\xd9\xf3\xd9(\x17\xfb\x89\x81\x05|2c\xd7"\x84\x93\r\xf3\xe3\xc9*y;je\xa9\xe9\xaf\xb8\xbb*\xeb\x16\xf4\x14P\x04\x92\x0b%\x8cK,\xfe \xe6\xc5\xdc\x9d\xf4.]b}\x00\xdc\xd2\xed\xc8\x83vV\'\xb9\'\xf47\xa7\xa2\xd0u\xff\xf4\x87\xa7]\x8a\xe8^\xfbE\xf4>\xfc\xe2P\xf7\x86T\xb2\xdfNZKO\x92\xbe\xf4`Kh\xe4l\xe4Z\xfc.\xc6;\xb2\x8a\x8e\x12\xf4\x8a\xa1c\xc0\'\xebj\xc4`\xd8E\xb6\x82\xd7K\xf4\xaaQi\xe1\x80\xa3\'dv\x8f\xd4j\x98R\xfa\xf4\xaeW\x176\x01\xdf\xd4$=\xc3\xe2\xd5$.\x07\xf4\xdc\xdc\x12K\xc7\x7f\x9d\xe5\xd7\xe7\x0c\x7f\xa9u\x8f\xf4\xdf\xde\n#3\xd9^\x96\x1a\x8e\x84\x18\x9f\xbd\xec\xf5\x08\xc7#\xa4\xe1\xcf\xb6\x04zY\x0fv\xfev\xd5\xf5\x15".\x10\xda\xbf\xb3O\xc9\xee\xad\xcd\xf8\xadH\xf5\x1e\xb6&\xf60\x92\x9f\xec\x17\xe0\x06\x85etL\xf5+\x14s\xcfL\xb07\xdf\xbe\xe7\x97\x891\xe7/\xf5z7t\xf3\xabc\xc0\xdf\x83N5\xc0\x196\xc0\xf5}-\xd9\x93\xa8\xaf:\xda\xc9)\xae0\xb09\x96\xf5\x84%\xf3b\xe5x\xdav78S\xc3o\';\xf5\xa5\x87\xb7\xee\xe9\x9d/\x02\x86\x88\x01\xc7\xf3\xf5j\xf5\xc2\xffT\x95\xdf\x15\xb2\x86-\x87\xb4/=\xf1\xba\xf5\xe1\xe5.\r\xd6\xe9\x05-\x9b\xb4\x82\xf3\xa2\xe1\x1e\xf5\xe8\xa0\x87\x93\x0f\x14\xbc\x03y\xb3Lp\xb5\x01J\xf6#\xef\xe8\xbe\xbf|\xfbIW\x0b\xd5\xefD"\xc5\xf6.\xe2\xdcDp\x10ez\x12]\t\x18\x96p\x92\xf6B|\xef\x9d/\\!\x1dW\x88\xc9E\xd8\xf9o\xf6Q6\x1d(s\x84\xb43\xfd$G\x92\x16\xd9\xcc\xf6k\xa1\x0el\x90\x9b`\xff\xc9\xa7\xceK\xb3\x04\xf7\xf6s\xc5^M9\xb7|\x05\xac\xb6\xe8\xbeS\x92\xe6\xf6\x97%\xc0ZFm\x02\nZ\x9a\x1d\xaf@\x06\xdc\xf6\x9a/w\xad\n\x05\xbe\x02\xdf\x7fw\xe2\xf1L\xc0\xf6\xee\x81\xa3\xcfV\x85\x0e\'\x86S\x9b\x96\xa3\x8c\x84\xf6\xf4.\xd6\xa6Ey/\x1cG|u\x92\xe6\x98g\xf7\x03\xbft\xdd\xba}7\xe3/\x99\xe1]\xaa4\xac\xf7\x0fL%\xbb&Q\xb1\xb1\xe8\xd9\x1bV\x86\xb9\xa0\xf72\xcb\xbbq\xabn\xea\xadN\x14[\\e5\xf5\xf7C@j"W\xd9\xa9\xcao\xd3\xaa=4\xa1\r\xf7P\x03\xee\xf7,\xb3\xc6\xe5\xd9\xd5K\x8d}5\x05\xf7f\xe7\x0c\x19A&^\x05\xfc"*\xe2\xb5H\x19\xf7\xba\x84M\xc4\x8ci\xc74!dL\xf0\x17O\xe0\xf7\xd5\xfd4e\xfe\xd9\x10#\xc2pG\xa4\x06\xab*\xf7\xef% \xdf\x9a\x91\x1d0 \x06\x1f\xe7\x17\x9bJ\xf8,\x10C>\xeas#J\x7fz\x14C\x9b\x01S\xf8\x90\xb8\x91\x83\x85LDK\x18\xc5 \xac\xbc\xfd\xf8\x95\xbc\xfc\xa1\x8dK\x1eV \x0c\x05?F\x10\xb6\xf8\xa5\x13\xdc\xc0\xdb\x82\x1f\xc9\xba\x08{\x9d{\xea\xc7\xf8\xe9\xa5|\xa0`f/\xd0\x17\xb0Ow\xd2\xe6\x17\xf9\x04w\xb0)\x10?\xcc\xdeU\x10q2\xde\xd4\xb4\xf9$l\x0b;\x9e\x14x\x94\x08\x14\xed\x1c\x1e\x89q\xf9H\xc5\xde!A\xaa\xb7\xe5\x1ev/\xbfl;5\xf9\x90\xa4s\x90\x0e\xbc@\xa6Ot\xee\xe4Yr\xcb\xf9\x9f\x1b\t\xd3\x14\x0f\x17^\'\xd6\xd5\x01\xc4\x7f\xc2\xf9\xe1\x88u5\x82\xfe\xb2X\x90\xcf8\xc6\x1c|\x88\xf9\xf9\xb0K$a\x83\'\x83x\xb7\x9fv\xf8W\x0b\xfa\x04I\xf7\x83\x18l\xda-\xf0\xdb\xf3?L\x17\x95\xfaB}\xeca\x89\xf4+3\xf0\x0e\xc8\xads\x11\x93\xfa[\xc9M\xf8\xc1S\xa0\xcf&\xb1\x1dn]\x08\xfe\xfa\xa1c\xcb\x0fv@<\xf5\x04\xf8\xc9,f\x05Q\xfa\xb3\x96\x027\x80\xebf\x86\xcc\xd4\x9e\t^mu\xfa\xc5p\xa4U\xfcuD\x8b6\x06#\t\xb3N>\xfa\xd7\t\x9c\x18\x83\xbf\x90\xbf\x13E\xe9\xd2\x14u\x99\xfa\xf34h\x8c\x1c\xd5\x0f\xee\xd4\xa4\xb4\x84\xf3)q\xfb\x02\x08\x81\x05p>\x9b+\x9e\xc8\x1e\xce\xc3\x1fW\xfbLz\xe5\x08Xr#\xebL\x0e1\xd3q=\x8d\xfbi\xdc\xeez\xcd\xe4\x07\xc5U\x96\xf0D\x13j\xa8\xfb|\xa4V\xde\n/\x05)\xd1\xb4\xa2o\x12O\x88\xfb\x8c~\x00\xb4\x82\xc6\xab\x1dTMm\x8e\x92?\r\xfb\x9b+\xde\xf3\x005\x06\x04{\x8aht\x96\x18Y\xfb\x9c\x19L\xe2d7\xedf;\x849c\x95\x06q\xfb\x9f\x18\x87\xd1\x19\xa5\xac\x06\x9c\x06\xb4\xa3\x0b\xca\xb3\xfb\xc5>M\x88\xdb\xdc2\xd9\xfd4\xef\x0c\xd5\xd2\xce\xfb\xd3\xe9t\xb3L\x1a\x8f\r\xb2;\xd3\xc2vp\x08\xfb\xe6\x01\xe4\xe6\x1c\xd8\x9b\x8c\x93\x00\xaf\x0b\x10\xe7\x1f\xfc\x96A\xcb\x9d\xc7^\xa6\x820@\x03\xab\xff_n\xfc\xca$\xc9a\xa1\xad\xdc\xaf\x1c\x8e8\xf9\xd9P\xac\xfc\xe6bG\x88\x1d0\x8dE\xcd\xab\xbe\xe7\xbb,\xfa\xfd\x16\xaf\xa6\x1906btC\x0b\x17\x83\x01\xa4j\xfdK1|\xd8\x04}^y\xc52\x8ft\xf5N:\xfd^\xa9\x9ab\xca\xf0\xd1\xfdj:\xd6Ty\n\x16\xfd\xaa-\xde\xac\xa4\x1a"\x83@\xf7\x96\x9fFy\x8b\xfd\xcaY=\x1d\xf1\xf6\xb4O\x00\x822\xc3\xca1n\xfe6\xdc\xefY\x169.\xc6\x10\xf3\xfa\xd0=\x14\xec\xfej\x84U\x02q\x12\x16\x1b7\xa6\xa4\xca\n\xfa\x1e\xfez\xacQ\xec\xdd\xc6\xe8Djf\x14g\x86\xb2F\xfe\x9e\xfe1T\xe1|\xb4\x93\x16\xcet2U\x10l\xfe\xa0ZD\x92\\\xff\xfc\x81-A\xe7w4\x18m\xfe\xc6\xb5\x0b\xc1L\xc9\x90\xdb\x9ff\x00\x10\x14[\x1c\xfe\xce \xfa\x85\xa2\x98\x1d*\xbd\xa9\xa4\x10=\x1d\x81\xffC\xff\xa2\x99\xfdQ\xbfSQ\x92\x86Kg\x9d\xda\xffU\xca\x96\x8dz2\x02\x87\xb8\x9f\xa0x\\M\xb9\xffwC\xfaH\x8a\x06\x7ft\x88\x7f}X\xbe\xe9=\xff\xe1\xcf\xb6\xd2\xa2\xf5\xd9\xf5\xdeCX,\xbe^\x9b' \ No newline at end of file
diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc index b5b27cd..c805952 100644 --- a/components/search_engines/template_url.cc +++ b/components/search_engines/template_url.cc
@@ -2205,7 +2205,16 @@ TemplateURLData& TemplateURL::active_data() { CHECK(local_data_ || base::FeatureList::IsEnabled( syncer::kSeparateLocalAndAccountSearchEngines)); - // TODO(crbug.com/374903497): Implement conflict resolution. + CHECK(!account_data_ || base::FeatureList::IsEnabled( + syncer::kSeparateLocalAndAccountSearchEngines)); + // TODO(crbug.com/386916073): Improve the conflict resolution. + if (local_data_ && account_data_) { + TemplateURL local_turl(local_data_, std::nullopt); + TemplateURL account_turl(std::nullopt, account_data_); + return local_turl.IsBetterThanConflictingEngine(&account_turl) + ? *local_data_ + : *account_data_; + } return local_data_ ? *local_data_ : *account_data_; }
diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc index f544180..eb0742c 100644 --- a/components/search_engines/template_url_service.cc +++ b/components/search_engines/template_url_service.cc
@@ -1831,6 +1831,27 @@ DCHECK_EQ(type, syncer::SEARCH_ENGINES); models_associated_ = false; sync_processor_.reset(); + + base::AutoReset<bool> processing_changes(&processing_syncer_changes_, true); + // Cleanup account template urls. + for (size_t i = 0; i < template_urls_.size();) { + TemplateURL* turl = template_urls_[i].get(); + // Skip if the turl has no account data. + if (!turl->GetAccountData()) { + ++i; + continue; + } + // If turl has local data, remove only the account data. This is done by + // updating turl with a new TemplateURL containing only the local data + // instead of just dropping the account data to ensure all the mappings are + // correctly updated. Else, remove turl. + if (turl->GetLocalData()) { + Update(turl, TemplateURL(*turl->GetLocalData())); + ++i; + } else { + Remove(turl); + } + } } void TemplateURLService::ProcessTemplateURLChange( @@ -2845,8 +2866,13 @@ // resolution. if (base::FeatureList::IsEnabled( syncer::kSeparateLocalAndAccountSearchEngines)) { - Update(conflicting_turl, *UpdateExistingURLWithAccountData( - conflicting_turl, sync_turl->data())); + // Skip overriding the default search provider. + if (conflicting_turl == GetDefaultSearchProvider()) { + ResetTemplateURLGUID(conflicting_turl, sync_turl->sync_guid()); + } else { + Update(conflicting_turl, *UpdateExistingURLWithAccountData( + conflicting_turl, sync_turl->data())); + } should_add_sync_turl = false; break; }
diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc index 35ba88a..43080ac 100644 --- a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc +++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc
@@ -37,6 +37,7 @@ #include "components/signin/public/identity_manager/set_accounts_in_cookie_result.h" #include "google_apis/credentials_mode.h" #include "google_apis/gaia/gaia_constants.h" +#include "google_apis/gaia/gaia_features.h" #include "google_apis/gaia/gaia_id.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/google_service_auth_error.h" @@ -440,17 +441,27 @@ std::string gaia_cookie_last_list_accounts_data = signin_client_->GetPrefs()->GetString( prefs::kGaiaCookieLastListAccountsData); + std::string gaia_cookie_last_list_accounts_binary_data = + signin_client_->GetPrefs()->GetString( + prefs::kGaiaCookieLastListAccountsBinaryData); + // Parse ListAccounts data from prefs. In case both jspb and protobuf encoded + // data are present prefer the jspb one. + bool parse_success = false; if (!gaia_cookie_last_list_accounts_data.empty()) { - if (!gaia::ParseListAccountsData(gaia_cookie_last_list_accounts_data, - &accounts_)) { - DLOG(WARNING) << "GaiaCookieManagerService::ListAccounts: Failed to " - "parse list accounts data from pref."; - accounts_.clear(); - return; - } - InitializeListedAccountsIds(); + parse_success = gaia::ParseListAccountsData( + gaia_cookie_last_list_accounts_data, &accounts_); + } else if (!gaia_cookie_last_list_accounts_binary_data.empty()) { + parse_success = gaia::ParseBinaryListAccountsData( + gaia_cookie_last_list_accounts_binary_data, &accounts_); } + if (!parse_success) { + DLOG(WARNING) << "GaiaCookieManagerService::ListAccounts: Failed to " + "parse list accounts data from pref."; + accounts_.clear(); + return; + } + InitializeListedAccountsIds(); } GaiaCookieManagerService::~GaiaCookieManagerService() { @@ -463,6 +474,8 @@ void GaiaCookieManagerService::RegisterPrefs(PrefRegistrySimple* registry) { registry->RegisterStringPref(prefs::kGaiaCookieLastListAccountsData, std::string()); + registry->RegisterStringPref(prefs::kGaiaCookieLastListAccountsBinaryData, + std::string()); } void GaiaCookieManagerService::InitCookieListener() { @@ -691,10 +704,16 @@ GaiaCookieRequestType::LIST_ACCOUNTS); fetcher_backoff_.InformOfRequest(true); - if (!gaia::ParseListAccountsData(data, &accounts_)) { + bool parse_success = base::FeatureList::IsEnabled( + gaia::features::kListAccountsUsesBinaryFormat) + ? gaia::ParseBinaryListAccountsData(data, &accounts_) + : gaia::ParseListAccountsData(data, &accounts_); + if (!parse_success) { accounts_.clear(); signin_client_->GetPrefs()->ClearPref( prefs::kGaiaCookieLastListAccountsData); + signin_client_->GetPrefs()->ClearPref( + prefs::kGaiaCookieLastListAccountsBinaryData); GoogleServiceAuthError error = GoogleServiceAuthError::FromUnexpectedServiceResponse( "Error parsing ListAccounts response"); @@ -702,8 +721,18 @@ return; } - signin_client_->GetPrefs()->SetString(prefs::kGaiaCookieLastListAccountsData, - data); + if (base::FeatureList::IsEnabled( + gaia::features::kListAccountsUsesBinaryFormat)) { + signin_client_->GetPrefs()->SetString( + prefs::kGaiaCookieLastListAccountsBinaryData, data); + signin_client_->GetPrefs()->ClearPref( + prefs::kGaiaCookieLastListAccountsData); + } else { + signin_client_->GetPrefs()->SetString( + prefs::kGaiaCookieLastListAccountsData, data); + signin_client_->GetPrefs()->ClearPref( + prefs::kGaiaCookieLastListAccountsBinaryData); + } RecordListAccountsFailure(GoogleServiceAuthError::NONE); InitializeListedAccountsIds();
diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service_unittest.cc b/components/signin/internal/identity_manager/gaia_cookie_manager_service_unittest.cc index 11e04cc6..9d47aac 100644 --- a/components/signin/internal/identity_manager/gaia_cookie_manager_service_unittest.cc +++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service_unittest.cc
@@ -18,6 +18,7 @@ #include "base/task/single_thread_task_runner.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/mock_callback.h" +#include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/test/test_mock_time_task_runner.h" #include "build/buildflag.h" @@ -31,6 +32,7 @@ #include "components/signin/public/identity_manager/set_accounts_in_cookie_result.h" #include "google_apis/gaia/core_account_id.h" #include "google_apis/gaia/gaia_constants.h" +#include "google_apis/gaia/gaia_features.h" #include "google_apis/gaia/gaia_id.h" #include "google_apis/gaia/gaia_urls.h" #include "net/cookies/canonical_cookie.h" @@ -950,6 +952,67 @@ } } +TEST_F(GaiaCookieManagerServiceTest, ListAccountsEncodingMigration) { + gaia::ListedAccount account; + account.gaia_id = GaiaId("8"); + account.id = CoreAccountId::FromGaiaId(account.gaia_id); + account.email = "a@b.com"; + account.raw_email = "a@b.com"; + signin::AccountsInCookieJarInfo cookies_expected_fresh(true, {account}); + signin::AccountsInCookieJarInfo cookies_expected_stale(false, {account}); + // ListAccounts data as jspb. + std::string data_jspb = + "[\"f\", [[\"b\", 0, \"n\", \"a@b.com\", \"p\", 0, 0, 0, 0, 1, \"8\"]]]"; + // ListAccounts data as base64-encoded protobuf. + std::string data_binary = "Cg4aB2FAYi5jb21IAVIBOA=="; + { + InstrumentedGaiaCookieManagerService helper( + account_tracker_service(), token_service(), signin_client()); + MockObserver observer(&helper); + EXPECT_EQ(helper.ListAccounts(), kCookiesEmptyStale); + + // Default behaviour: return and store ListAccounts data encoded in jspb. + SimulateListAccountsSuccess(&helper, data_jspb); + ASSERT_EQ(helper.ListAccounts(), cookies_expected_fresh); + EXPECT_EQ(signin_client()->GetPrefs()->GetString( + prefs::kGaiaCookieLastListAccountsData), + data_jspb); + EXPECT_TRUE(signin_client() + ->GetPrefs() + ->GetString(prefs::kGaiaCookieLastListAccountsBinaryData) + .empty()); + } + + { + // Enable the feature before reading prefs. + base::test::ScopedFeatureList feature_list( + gaia::features::kListAccountsUsesBinaryFormat); + InstrumentedGaiaCookieManagerService helper( + account_tracker_service(), token_service(), signin_client()); + MockObserver observer(&helper); + // Verify that the jspb pref was read correctly. + EXPECT_EQ(helper.ListAccounts(), cookies_expected_stale); + + // Set and verify binary ListAccounts. + SimulateListAccountsSuccess(&helper, data_binary); + ASSERT_EQ(helper.ListAccounts(), cookies_expected_fresh); + EXPECT_TRUE(signin_client() + ->GetPrefs() + ->GetString(prefs::kGaiaCookieLastListAccountsData) + .empty()); + EXPECT_EQ(signin_client()->GetPrefs()->GetString( + prefs::kGaiaCookieLastListAccountsBinaryData), + data_binary); + } + + { + InstrumentedGaiaCookieManagerService helper( + account_tracker_service(), token_service(), signin_client()); + // Verify that the binary pref was read correctly. + EXPECT_EQ(helper.ListAccounts(), cookies_expected_stale); + } +} + TEST_F(GaiaCookieManagerServiceTest, ExternalCcResultFetcher) { InstrumentedGaiaCookieManagerService helper(account_tracker_service(), token_service(), signin_client());
diff --git a/components/signin/public/android/BUILD.gn b/components/signin/public/android/BUILD.gn index 2ea22a8a..954cee6 100644 --- a/components/signin/public/android/BUILD.gn +++ b/components/signin/public/android/BUILD.gn
@@ -52,6 +52,7 @@ "java/src/org/chromium/components/signin/base/AccountInfo.java", "java/src/org/chromium/components/signin/base/CoreAccountId.java", "java/src/org/chromium/components/signin/base/CoreAccountInfo.java", + "java/src/org/chromium/components/signin/base/GaiaId.java", "java/src/org/chromium/components/signin/base/GoogleServiceAuthError.java", "java/src/org/chromium/components/signin/identitymanager/AccountInfoService.java", "java/src/org/chromium/components/signin/identitymanager/AccountInfoServiceImpl.java", @@ -80,6 +81,7 @@ "java/src/org/chromium/components/signin/base/AccountInfo.java", "java/src/org/chromium/components/signin/base/CoreAccountId.java", "java/src/org/chromium/components/signin/base/CoreAccountInfo.java", + "java/src/org/chromium/components/signin/base/GaiaId.java", "java/src/org/chromium/components/signin/base/GoogleServiceAuthError.java", "java/src/org/chromium/components/signin/identitymanager/IdentityManager.java", "java/src/org/chromium/components/signin/identitymanager/IdentityMutator.java",
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java index c5a4ea8..ba71a1d33 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/CoreAccountInfo.java
@@ -61,6 +61,13 @@ return mGaiaId; } + // TODO(crbug.com/380416867): Remove this API once all callers, including internal ones, are + // migrated. + /** Returns the Gaia ID in string form */ + public String getGaiaIdAsString() { + return mGaiaId; + } + @Override public String toString() { return String.format("CoreAccountInfo{id[%s], name[%s]}", getId(), getEmail()); @@ -119,8 +126,17 @@ return accountInfo == null ? null : accountInfo.getGaiaId(); } - /** Creates a {@link CoreAccountInfo} object from email and gaiaID. */ + /** + * Creates a {@link CoreAccountInfo} object from email and string representation of a gaia ID. + */ + // TODO(crbug.com/380416867): Remove this API once all callers, including internal ones, are + // migrated. public static CoreAccountInfo createFromEmailAndGaiaId(String email, String gaiaId) { return new CoreAccountInfo(new CoreAccountId(gaiaId), email, gaiaId); } + + /** Creates a {@link CoreAccountInfo} object from email and gaiaID. */ + public static CoreAccountInfo createFromEmailAndGaiaId(String email, GaiaId gaiaId) { + return new CoreAccountInfo(new CoreAccountId(gaiaId.toString()), email, gaiaId.toString()); + } }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/GaiaId.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/GaiaId.java new file mode 100644 index 0000000..bb290156 --- /dev/null +++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/GaiaId.java
@@ -0,0 +1,42 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.components.signin.base; + +import androidx.annotation.NonNull; + +import org.jni_zero.CalledByNative; +import org.jni_zero.JniType; + +/** Represents an account ID or Gaia ID. This class has a native counterpart also called GaiaId. */ +public class GaiaId { + private final String mValue; + + /** Constructs a new GaiaId from a String representation of the gaia ID. */ + @CalledByNative + public GaiaId(@NonNull @JniType("std::string") String value) { + assert value != null; + mValue = value; + } + + @Override + @CalledByNative + public @JniType("std::string") String toString() { + // Note that the value returned here is used to marshal the native `GaiaId` class during the + // conversion from Java to C++. + return mValue; + } + + @Override + public int hashCode() { + return mValue.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof GaiaId)) return false; + GaiaId other = (GaiaId) obj; + return mValue.equals(other.mValue); + } +}
diff --git a/components/signin/public/base/signin_feature_map.cc b/components/signin/public/base/signin_feature_map.cc index 36d135f..e62e0dd 100644 --- a/components/signin/public/base/signin_feature_map.cc +++ b/components/signin/public/base/signin_feature_map.cc
@@ -21,7 +21,6 @@ const base::Feature* const kFeaturesExposedToJava[] = { &switches::kForceSupervisedSigninWithCapabilities, &switches::kSkipCheckForAccountManagementOnSignin, - &switches::kUseConsentLevelSigninForLegacyAccountEmailPref, &switches::kCctSignInPrompt, &switches::kUnoForAuto, };
diff --git a/components/signin/public/base/signin_metrics.cc b/components/signin/public/base/signin_metrics.cc index e351627..2d51ab2 100644 --- a/components/signin/public/base/signin_metrics.cc +++ b/components/signin/public/base/signin_metrics.cc
@@ -480,9 +480,12 @@ case AccessPoint::ACCESS_POINT_WEBAUTHN_MODAL_DIALOG: case AccessPoint::ACCESS_POINT_CCT_ACCOUNT_MISMATCH_NOTIFICATION: case AccessPoint::ACCESS_POINT_DRIVE_FILE_PICKER_IOS: - case AccessPoint::ACCESS_POINT_COLLABORATION_TAB_GROUP: NOTREACHED() << "Access point " << static_cast<int>(access_point) << " is not supposed to log signin user actions."; + case AccessPoint::ACCESS_POINT_COLLABORATION_TAB_GROUP: + base::RecordAction( + base::UserMetricsAction("Signin_Signin_FromCollaborationTabGroup")); + break; case AccessPoint::ACCESS_POINT_SAFETY_CHECK: VLOG(1) << "Signin_Signin_From* user action is not recorded " << "for access point " << static_cast<int>(access_point);
diff --git a/components/signin/public/base/signin_pref_names.cc b/components/signin/public/base/signin_pref_names.cc index 49613d2..c7b2326f 100644 --- a/components/signin/public/base/signin_pref_names.cc +++ b/components/signin/public/base/signin_pref_names.cc
@@ -108,10 +108,16 @@ // Boolean which stores if the user is allowed to signin to chrome. const char kSigninAllowed[] = "signin.allowed"; -// Contains last |ListAccounts| data which corresponds to Gaia cookies. +// Contains last |ListAccounts| data which corresponds to Gaia cookies encoded +// in jspb. const char kGaiaCookieLastListAccountsData[] = "gaia_cookie.last_list_accounts_data"; +// Contains last |ListAccounts| data which corresponds to Gaia cookies in +// base64-encoded protobuf. +const char kGaiaCookieLastListAccountsBinaryData[] = + "gaia_cookie.last_list_accounts_binary_data"; + // The timestamp when History Sync was last declined (in the opt-in screen or // in the settings). // This value is reset when the user opts in to History Sync.
diff --git a/components/signin/public/base/signin_pref_names.h b/components/signin/public/base/signin_pref_names.h index 53ead20..0aa834e 100644 --- a/components/signin/public/base/signin_pref_names.h +++ b/components/signin/public/base/signin_pref_names.h
@@ -60,6 +60,8 @@ COMPONENT_EXPORT(SIGNIN_SWITCHES) extern const char kGaiaCookieLastListAccountsData[]; COMPONENT_EXPORT(SIGNIN_SWITCHES) +extern const char kGaiaCookieLastListAccountsBinaryData[]; +COMPONENT_EXPORT(SIGNIN_SWITCHES) extern const char kSigninAllowedOnNextStartup[]; COMPONENT_EXPORT(SIGNIN_SWITCHES) extern const char kSigninInterceptionIDPCookiesUrl[];
diff --git a/components/signin/public/base/signin_switches.cc b/components/signin/public/base/signin_switches.cc index 8f6cddb..05a38280 100644 --- a/components/signin/public/base/signin_switches.cc +++ b/components/signin/public/base/signin_switches.cc
@@ -22,10 +22,6 @@ "SkipCheckForAccountManagementOnSignin", base::FEATURE_ENABLED_BY_DEFAULT); -BASE_FEATURE(kUseConsentLevelSigninForLegacyAccountEmailPref, - "UseConsentLevelSigninForLegacyAccountEmailPref", - base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kCctSignInPrompt, "CctSignInPrompt", base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/signin/public/base/signin_switches.h b/components/signin/public/base/signin_switches.h index ca61da6c..738f942 100644 --- a/components/signin/public/base/signin_switches.h +++ b/components/signin/public/base/signin_switches.h
@@ -31,9 +31,6 @@ BASE_DECLARE_FEATURE(kSkipCheckForAccountManagementOnSignin); COMPONENT_EXPORT(SIGNIN_SWITCHES) -BASE_DECLARE_FEATURE(kUseConsentLevelSigninForLegacyAccountEmailPref); - -COMPONENT_EXPORT(SIGNIN_SWITCHES) BASE_DECLARE_FEATURE(kCctSignInPrompt); COMPONENT_EXPORT(SIGNIN_SWITCHES)
diff --git a/components/signin/public/identity_manager/account_info.cc b/components/signin/public/identity_manager/account_info.cc index 059d59f..aab01bf 100644 --- a/components/signin/public/identity_manager/account_info.cc +++ b/components/signin/public/identity_manager/account_info.cc
@@ -16,6 +16,7 @@ #include "components/signin/public/android/jni_headers/AccountInfo_jni.h" #include "components/signin/public/android/jni_headers/CoreAccountId_jni.h" #include "components/signin/public/android/jni_headers/CoreAccountInfo_jni.h" +#include "components/signin/public/android/jni_headers/GaiaId_jni.h" #include "ui/gfx/android/java_bitmap.h" #include "ui/gfx/image/image_skia.h" #endif @@ -236,6 +237,13 @@ env, base::android::ConvertUTF8ToJavaString(env, account_id.ToString())); } +base::android::ScopedJavaLocalRef<jobject> ConvertToJavaGaiaId( + JNIEnv* env, + const GaiaId& gaia_id) { + CHECK(!gaia_id.empty()); + return signin::Java_GaiaId_Constructor(env, gaia_id.ToString()); +} + CoreAccountInfo ConvertFromJavaCoreAccountInfo( JNIEnv* env, const base::android::JavaRef<jobject>& j_core_account_info) { @@ -280,4 +288,11 @@ signin::Java_CoreAccountId_getId(env, j_core_account_id))); return id; } + +GaiaId ConvertFromJavaGaiaId(JNIEnv* env, + const base::android::JavaRef<jobject>& j_gaia_id) { + CHECK(j_gaia_id); + return GaiaId(signin::Java_GaiaId_toString(env, j_gaia_id)); +} + #endif
diff --git a/components/signin/public/identity_manager/account_info.h b/components/signin/public/identity_manager/account_info.h index 2e3f5cf..2743dc46 100644 --- a/components/signin/public/identity_manager/account_info.h +++ b/components/signin/public/identity_manager/account_info.h
@@ -128,35 +128,44 @@ bool operator!=(const AccountInfo& l, const AccountInfo& r) = delete; #if BUILDFLAG(IS_ANDROID) -// Constructs a Java CoreAccountInfo from the provided C++ CoreAccountInfo +// Constructs a Java CoreAccountInfo from the provided C++ CoreAccountInfo. base::android::ScopedJavaLocalRef<jobject> ConvertToJavaCoreAccountInfo( JNIEnv* env, const CoreAccountInfo& account_info); -// Constructs a Java AccountInfo from the provided C++ AccountInfo +// Constructs a Java AccountInfo from the provided C++ AccountInfo. base::android::ScopedJavaLocalRef<jobject> ConvertToJavaAccountInfo( JNIEnv* env, const AccountInfo& account_info); -// Constructs a Java CoreAccountId from the provided C++ CoreAccountId +// Constructs a Java CoreAccountId from the provided C++ CoreAccountId. base::android::ScopedJavaLocalRef<jobject> ConvertToJavaCoreAccountId( JNIEnv* env, const CoreAccountId& account_id); -// Constructs a C++ CoreAccountInfo from the provided Java CoreAccountInfo +// Constructs a Java GaiaId from the provided C++ GaiaId. +base::android::ScopedJavaLocalRef<jobject> ConvertToJavaGaiaId( + JNIEnv* env, + const GaiaId& gaia_id); + +// Constructs a C++ CoreAccountInfo from the provided Java CoreAccountInfo. CoreAccountInfo ConvertFromJavaCoreAccountInfo( JNIEnv* env, const base::android::JavaRef<jobject>& j_core_account_info); -// Constructs a C++ AccountInfo from the provided Java AccountInfo +// Constructs a C++ AccountInfo from the provided Java AccountInfo. AccountInfo ConvertFromJavaAccountInfo( JNIEnv* env, const base::android::JavaRef<jobject>& j_account_info); -// Constructs a C++ CoreAccountId from the provided Java CoreAccountId +// Constructs a C++ CoreAccountId from the provided Java CoreAccountId. CoreAccountId ConvertFromJavaCoreAccountId( JNIEnv* env, const base::android::JavaRef<jobject>& j_core_account_id); + +// Constructs a C++ GaiaId from the provided Java GaiaId. +GaiaId ConvertFromJavaGaiaId(JNIEnv* env, + const base::android::JavaRef<jobject>& j_gaia_id); #endif #endif // COMPONENTS_SIGNIN_PUBLIC_IDENTITY_MANAGER_ACCOUNT_INFO_H_
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb index eff1927..9e62a12b 100644 --- a/components/strings/components_strings_af.xtb +++ b/components/strings/components_strings_af.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Gaan wagwoorde na</translation> <translation id="1187430513518041110">Motors en voertuie</translation> <translation id="1190491977647722791">Papier (swaar)</translation> +<translation id="1194278116501666615">Vorderingopdatering van die vooraflaai van ArcVm</translation> <translation id="1195073053842921378">Hierdie adres sal van hierdie toestel af uitgevee word</translation> <translation id="1195558154361252544">Kennisgewings word outomaties geblokkeer vir alle werwe behalwe dié wat jy toelaat</translation> <translation id="1197088940767939838">Oranje</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Regstellingdiens</translation> <translation id="306198082577913404">Skakel voorspellingverbeterings aan</translation> <translation id="3062655045399308513">Vee blaaierdata uit ...</translation> +<translation id="3063453392496098461">Installasie van VPN-agtergronddienste het misluk.</translation> <translation id="306573536155379004">Speletjie het begin.</translation> <translation id="3067505415088964188">Prys is laag</translation> <translation id="3068118691172921711">Jou lêeroplaai na <ph name="CLOUD_PROVIDER" /> sal oor 1 minuut begin</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Katon (enkellaag)</translation> <translation id="4104702906064390950">Stoor tans IBAN-inligting</translation> <translation id="4106887816571530227">Ingebedde inhoud word nie toegelaat nie</translation> +<translation id="4107047499377819067">Installasie van VPN-agtergronddienste het begin; dit kan ’n paar minute neem.</translation> <translation id="4110652170750985508">Gaan jou betaling na</translation> <translation id="4111546256784973544">Verfbal</translation> <translation id="4112140312785995938">Soek agtertoe</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Kom ons begin</translation> <translation id="6002122790816966947">Jou toestelle</translation> <translation id="6002968396561884726">Onlangs bekyk</translation> +<translation id="6005188329423473970">Installasie van VPN-agtergronddienste is voltooi. As jy nie VPN-apps sien nie, moet jy afmeld en weer aanmeld.</translation> <translation id="6005659677094197001">Aaneenlopend</translation> <translation id="6005765687956866568">Die inligting wat outomaties op die vorm ingevul is, is uitgevee</translation> <translation id="6006365096047131769">3x5 dm.</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index c446d08..e0d218d 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">የይለፍ ቃላትዎን ይፈትሹ</translation> <translation id="1187430513518041110">መኪናዎች እና ተሸከርካሪዎች</translation> <translation id="1190491977647722791">ወረቀት (ከባድ ክብደት)</translation> +<translation id="1194278116501666615">የArcVm ቅድሚያ ጫን ሂደት ዝማኔ</translation> <translation id="1195073053842921378">ይህ አድራሻ ከዚህ መሣሪያ ይሰረዛል</translation> <translation id="1195558154361252544">እርስዎ ከፈቀዱላቸው ጣቢያዎች በስተቀር ማሳወቂያዎች ለሁሉም ጣቢያዎች በራስ-ሰር ይታገዳሉ</translation> <translation id="1197088940767939838">ብርቱካናማ</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">የመጠገኛ አገልግሎት</translation> <translation id="306198082577913404">የግምት ማሻሻያዎችን ያብሩ</translation> <translation id="3062655045399308513">የአሰሳ ውሂብን ይሰርዙ...</translation> +<translation id="3063453392496098461">የVPN ዳራ አገልግሎቶች ጭነት አልተሳካም።</translation> <translation id="306573536155379004">ጨዋታው ተጀምሯል።</translation> <translation id="3067505415088964188">ዋጋ ዝቅተኛ ነው</translation> <translation id="3068118691172921711">የፋይልዎ ወደ <ph name="CLOUD_PROVIDER" /> የሚደረግ ሰቀላ በ1 ደቂቃ ውስጥ ይጀምራል</translation> @@ -1754,6 +1756,7 @@ <translation id="4103592298805904008">Cardboard (ነጠላ ግድግዳ)</translation> <translation id="4104702906064390950">የIBAN መረጃን በማስቀመጥ ላይ</translation> <translation id="4106887816571530227">የተከተተ ይዘት አይፈቀድም</translation> +<translation id="4107047499377819067">የVPN ዳራ አገልግሎቶችን መጫን ተጀምሯል፣ ይህ ጥቂት ደቂቃዎች ሊወስድ ይችላል።</translation> <translation id="4110652170750985508">የእርስዎን ክፍያ ይገምግሙ</translation> <translation id="4111546256784973544">ቀልም ኳስ</translation> <translation id="4112140312785995938">ወደኋላ ፈልግ</translation> @@ -2783,6 +2786,7 @@ <translation id="6001839398155993679">እንሂድ</translation> <translation id="6002122790816966947">የእርስዎ መሣሪያዎች</translation> <translation id="6002968396561884726">በቅርቡ የታየ</translation> +<translation id="6005188329423473970">የVPN ዳራ አገልግሎቶች ጭነት ተጠናቅቋል። የVPN መተግበሪያዎችን ካላዩ፣ እባክዎ ይውጡ እና ተመልሰው ይግቡ።</translation> <translation id="6005659677094197001">ተከታታይ</translation> <translation id="6005765687956866568">ራስ-ሙላ መረጃው ከቅጹ ላይ ጸድቷል</translation> <translation id="6006365096047131769">3 x 5 ኢንች</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 0dc26d6..8857fb58 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">التحقق من كلمات المرور</translation> <translation id="1187430513518041110">سيارات ومركبات</translation> <translation id="1190491977647722791">ورق (ثقيل الوزن)</translation> +<translation id="1194278116501666615">إشعار بتقدُّم التحميل المُسبق لنظام التشغيل ArcVm</translation> <translation id="1195073053842921378">سيتم حذف هذا العنوان من هذا الجهاز.</translation> <translation id="1195558154361252544">يتم حظر الإشعارات تلقائيًا لجميع المواقع الإلكترونية باستثناء المواقع التي تسمح بها.</translation> <translation id="1197088940767939838">برتقالي</translation> @@ -1147,6 +1148,7 @@ <translation id="3061707000357573562">خدمة رمز التصحيح</translation> <translation id="306198082577913404">تفعيل ميزة "تحسينات التوقعات"</translation> <translation id="3062655045399308513">حذف بيانات التصفّح…</translation> +<translation id="3063453392496098461">تعذَّر تثبيت خدمات VPN التي تُشغَّل في الخلفية.</translation> <translation id="306573536155379004">بدأت اللعبة.</translation> <translation id="3067505415088964188">السعر منخفض</translation> <translation id="3068118691172921711">سيبدأ تحميل الملف إلى <ph name="CLOUD_PROVIDER" /> بعد دقيقة واحدة</translation> @@ -1756,6 +1758,7 @@ <translation id="4103592298805904008">ورق مقوّى (طبقة واحدة)</translation> <translation id="4104702906064390950">جارٍ حفظ معلومات رقم الحساب بصيغة IBAN</translation> <translation id="4106887816571530227">تم رفض المحتوى المُضمَّن.</translation> +<translation id="4107047499377819067">بدأ تثبيت خدمات VPN التي تُشغَّل في الخلفية، وقد يستغرق هذا الإجراء بضع دقائق.</translation> <translation id="4110652170750985508">مراجعة الدفعة</translation> <translation id="4111546256784973544">لعبة "بينتبول"</translation> <translation id="4112140312785995938">الانتقال إلى الخلف</translation> @@ -2786,6 +2789,7 @@ <translation id="6001839398155993679">البدء</translation> <translation id="6002122790816966947">أجهزتك</translation> <translation id="6002968396561884726">منتج تم عرضه مؤخرًا</translation> +<translation id="6005188329423473970">اكتمل تثبيت خدمات VPN التي تُشغَّل في الخلفية. إذا لم تظهر لك تطبيقات VPN، يُرجى تسجيل الخروج ثم تسجيل الدخول مرة أخرى.</translation> <translation id="6005659677094197001">غير متقطع</translation> <translation id="6005765687956866568">تم محو المعلومات التي تم ملؤها تلقائيًا من النموذج.</translation> <translation id="6006365096047131769">3 × 5 بوصة</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index dedc972..b53ed98 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">পাসওয়ার্ড চেক করুন</translation> <translation id="1187430513518041110">অটো ও যানবাহন</translation> <translation id="1190491977647722791">পেপার (হেভিওয়েট)</translation> +<translation id="1194278116501666615">ArcVm প্রিলোড করার প্রোগ্রেস সম্পর্কিত আপডেট</translation> <translation id="1195073053842921378">এই ডিভাইস থেকে এই ঠিকানাটি মুছে ফেলা হবে</translation> <translation id="1195558154361252544">আপনার অনুমতি দেওয়া সাইট ছাড়া, বাকি সব সাইটের জন্য বিজ্ঞপ্তি অটোমেটিক ব্লক করা হয়েছে</translation> <translation id="1197088940767939838">কমলা</translation> @@ -1147,6 +1148,7 @@ <translation id="3061707000357573562">প্যাচ পরিষেবা</translation> <translation id="306198082577913404">পূর্বাভাসের উন্নতি চালু করুন</translation> <translation id="3062655045399308513">ব্রাউজ করা ডেটা মুছে দিন...</translation> +<translation id="3063453392496098461">VPN ব্যাকগ্রাউন্ড পরিষেবা ইনস্টলেশন করা যায়নি।</translation> <translation id="306573536155379004">গেম শুরু হয়েছে।</translation> <translation id="3067505415088964188">দাম কম</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" />-এ আপনার ফাইল আপলোড ১ মিনিটে শুরু হবে</translation> @@ -1756,6 +1758,7 @@ <translation id="4103592298805904008">কার্ডবোর্ড (সিঙ্গেল ওয়াল)</translation> <translation id="4104702906064390950">IBAN সম্পর্কিত তথ্য সেভ করা হচ্ছে</translation> <translation id="4106887816571530227">এম্বেড করা কন্টেন্ট ব্যবহার করা যাবে না</translation> +<translation id="4107047499377819067">VPN ব্যাকগ্রাউন্ড পরিষেবা ইনস্টলেশন চালু হয়েছে, এর জন্য কয়েক মিনিট সময় লাগতে পারে।</translation> <translation id="4110652170750985508">আপনার পেমেন্টের রিভিউ</translation> <translation id="4111546256784973544">পেন্টবল</translation> <translation id="4112140312785995938">পিছিয়ে যান</translation> @@ -2785,6 +2788,7 @@ <translation id="6001839398155993679">শুরু করা যাক</translation> <translation id="6002122790816966947">আপনার ডিভাইসগুলি</translation> <translation id="6002968396561884726">সম্প্রতি দেখা হয়েছে</translation> +<translation id="6005188329423473970">VPN ব্যাকগ্রাউন্ড পরিষেবা ইনস্টলেশন সম্পূর্ণ হয়েছে। আপনি যদি VPN অ্যাপ দেখতে না পান, সেক্ষেত্রে লগ-আউট করে আবার লগ-ইন করুন।</translation> <translation id="6005659677094197001">কন্টিনিউআস</translation> <translation id="6005765687956866568">ফর্ম থেকে আপনা-আপনি পূরণ হওয়া তথ্য মুছে ফেলা হয়েছে</translation> <translation id="6006365096047131769">৩ x ৫ ইঞ্চি</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb index ab6f2ed..7e8c36a1 100644 --- a/components/strings/components_strings_bs.xtb +++ b/components/strings/components_strings_bs.xtb
@@ -109,7 +109,7 @@ <translation id="1186201132766001848">Provjeri lozinke</translation> <translation id="1187430513518041110">Automobili i druga vozila</translation> <translation id="1190491977647722791">Papir (teški)</translation> -<translation id="1194278116501666615">Ažuriranje napretka predučitavanja ArcVm-a</translation> +<translation id="1194278116501666615">Ažuriranje napretka predučitavanja ARCVM-a</translation> <translation id="1195073053842921378">Adresa će se izbrisati s uređaja</translation> <translation id="1195558154361252544">Obavještenja se automatski blokiraju za sve web lokacije osim onih koje omogućite</translation> <translation id="1197088940767939838">Narandžasta</translation> @@ -1147,7 +1147,7 @@ <translation id="3061707000357573562">Usluga za zakrpe</translation> <translation id="306198082577913404">Uključite poboljšanja predviđanja</translation> <translation id="3062655045399308513">Izbrišite podatke pregledanja…</translation> -<translation id="3063453392496098461">Instaliranje VPN usluga u pozadini nije uspjelo.</translation> +<translation id="3063453392496098461">Instalacija VPN usluga u pozadini nije uspjela.</translation> <translation id="306573536155379004">Igra je počela.</translation> <translation id="3067505415088964188">Cijena je niska</translation> <translation id="3068118691172921711">Otpremanje fajlova na uslugu <ph name="CLOUD_PROVIDER" /> će započeti za 1 minutu</translation> @@ -1757,7 +1757,7 @@ <translation id="4103592298805904008">Karton (jednostruka stijenka)</translation> <translation id="4104702906064390950">Pohranjivanje IBAN podataka</translation> <translation id="4106887816571530227">Ugrađeni sadržaj nije dozvoljen</translation> -<translation id="4107047499377819067">Pokrenuto je instaliranje VPN usluga u pozadini, što može potrajati nekoliko minuta.</translation> +<translation id="4107047499377819067">Instalacija VPN usluga u pozadini je započela. Ovo može potrajati nekoliko minuta.</translation> <translation id="4110652170750985508">Pregledajte svoje plaćanje</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Pomakni unazad</translation> @@ -2787,7 +2787,7 @@ <translation id="6001839398155993679">Započnimo</translation> <translation id="6002122790816966947">Vaši uređaji</translation> <translation id="6002968396561884726">Nedavno pregledano</translation> -<translation id="6005188329423473970">Instaliranje VPN usluga u pozadini je dovršeno. Ako ne vidite VPN aplikacije, odjavite se i ponovo se prijavite.</translation> +<translation id="6005188329423473970">Instalacija VPN usluga u pozadini je završena. Ako ne vidite VPN aplikacije, odjavite se i ponovo se prijavite.</translation> <translation id="6005659677094197001">Neprekidno</translation> <translation id="6005765687956866568">Automatski popunjene informacije su obrisane iz obrasca</translation> <translation id="6006365096047131769">3 x 5 in</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 5b15355..40c9579 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Zkontrolovat hesla</translation> <translation id="1187430513518041110">Auta a dopravní prostředky</translation> <translation id="1190491977647722791">Papír (těžký)</translation> +<translation id="1194278116501666615">Informace o průběhu předběžného načítání ArcVm</translation> <translation id="1195073053842921378">Tato adresa bude smazána z tohoto zařízení</translation> <translation id="1195558154361252544">Oznámení jsou automaticky blokována u všech webů s výjimkou těch, u nichž je povolíte</translation> <translation id="1197088940767939838">Oranžová</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Služba oprav</translation> <translation id="306198082577913404">Zapněte vylepšování předpovědí</translation> <translation id="3062655045399308513">Vymazat údaje o prohlížení…</translation> +<translation id="3063453392496098461">Instalace služeb VPN na pozadí selhala.</translation> <translation id="306573536155379004">Hra byla spuštěna.</translation> <translation id="3067505415088964188">Cena je nízká</translation> <translation id="3068118691172921711">Nahrávání vašeho souboru do služby <ph name="CLOUD_PROVIDER" /> začne za 1 minutu</translation> @@ -1751,6 +1753,7 @@ <translation id="4103592298805904008">Lepenka (jednovrstvá)</translation> <translation id="4104702906064390950">Ukládání informací o číslu IBAN</translation> <translation id="4106887816571530227">Vložený obsah není povolen</translation> +<translation id="4107047499377819067">Byla zahájena instalace služeb VPN na pozadí, může to několik minut trvat.</translation> <translation id="4110652170750985508">Kontrola platby</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Přetočit dozadu</translation> @@ -2780,6 +2783,7 @@ <translation id="6001839398155993679">Jdeme na to</translation> <translation id="6002122790816966947">Vaše zařízení</translation> <translation id="6002968396561884726">Nedávno zobrazeno</translation> +<translation id="6005188329423473970">Byla dokončena instalace služeb VPN na pozadí. Pokud aplikace VPN nevidíte, odhlaste se a znovu se přihlaste.</translation> <translation id="6005659677094197001">Nepřetržité</translation> <translation id="6005765687956866568">Automaticky vyplněné informace byly z formuláře vymazány</translation> <translation id="6006365096047131769">3 × 5″</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb index d04bb59..003f01b 100644 --- a/components/strings/components_strings_cy.xtb +++ b/components/strings/components_strings_cy.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Gwirio Cyfrineiriau</translation> <translation id="1187430513518041110">Ceir a Cherbydau</translation> <translation id="1190491977647722791">Papur (Pwysau Trwm)</translation> +<translation id="1194278116501666615">Diweddariad cynnydd rhaglwytho ArcVm</translation> <translation id="1195073053842921378">Bydd y cyfeiriad hwn yn cael ei ddileu o'r ddyfais hon</translation> <translation id="1195558154361252544">Mae hysbysiadau'n cael eu rhwystro'n awtomatig ar gyfer pob gwefan ac eithrio'r rhai rydych yn eu caniatáu</translation> <translation id="1197088940767939838">Oren</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Gwasanaeth Trwsio</translation> <translation id="306198082577913404">Troi gwelliannau rhagfynegiad ymlaen</translation> <translation id="3062655045399308513">Dileu Data Pori...</translation> +<translation id="3063453392496098461">Wedi methu â gosod gwasanaethau cefndir VPN.</translation> <translation id="306573536155379004">Mae'r gêm wedi cychwyn.</translation> <translation id="3067505415088964188">Pris yn isel</translation> <translation id="3068118691172921711">Bydd eich uwchlwythiad ffeil i <ph name="CLOUD_PROVIDER" /> yn dechrau mewn 1 funud</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Cardfwrdd (Wal Sengl)</translation> <translation id="4104702906064390950">Wrthi'n cadw gwybodaeth IBAN</translation> <translation id="4106887816571530227">Ni chaniateir cynnwys sydd wedi'i blannu</translation> +<translation id="4107047499377819067">Mae gosod gwasanaethau cefndir VPN wedi dechrau, gall hyn gymryd ychydig funudau.</translation> <translation id="4110652170750985508">Adolygwch eich taliad</translation> <translation id="4111546256784973544">Pledu paent</translation> <translation id="4112140312785995938">Mynd yn ôl</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">I ffwrdd â ni</translation> <translation id="6002122790816966947">Eich dyfeisiau</translation> <translation id="6002968396561884726">Gwelwyd yn Ddiweddar</translation> +<translation id="6005188329423473970">Wedi gorffen gosod Gwasanaethau Cefndir VPN Os na welwch apiau VPN, allgofnodwch a mewngofnodwch eto.</translation> <translation id="6005659677094197001">Parhaus</translation> <translation id="6005765687956866568">Cliriwyd y wybodaeth a gafodd ei hawtolenwi o'r ffurflen</translation> <translation id="6006365096047131769">3 x 5 modfedd</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 84f781e..4ddd164 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Tjek adgangskoder</translation> <translation id="1187430513518041110">Biler og køretøjer</translation> <translation id="1190491977647722791">Papir (tungt)</translation> +<translation id="1194278116501666615">Opdatering af status for forudindlæsning af ArcVm</translation> <translation id="1195073053842921378">Adressen slettes fra denne enhed</translation> <translation id="1195558154361252544">Notifikationer blokeres automatisk for alle websites med undtagelse af dem, du har givet tilladelse til</translation> <translation id="1197088940767939838">Orange</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Tjeneste til programrettelse</translation> <translation id="306198082577913404">Aktivér forbedringer af forudsigelser</translation> <translation id="3062655045399308513">Slet browserdata...</translation> +<translation id="3063453392496098461">Installationen af VPN-baggrundstjenester mislykkedes.</translation> <translation id="306573536155379004">Spillet er startet.</translation> <translation id="3067505415088964188">Prisen er lav</translation> <translation id="3068118691172921711">Din filupload til <ph name="CLOUD_PROVIDER" /> starter om 1 minut</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Pap (med enkelt væg)</translation> <translation id="4104702906064390950">IBAN-oplysninger gemmes</translation> <translation id="4106887816571530227">Indlejret indhold er ikke tilladt</translation> +<translation id="4107047499377819067">Installationen af VPN-baggrundstjenester er startet. Dette kan tage et par minutter.</translation> <translation id="4110652170750985508">Gennemgå din betaling</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Spol tilbage</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Lad os komme i gang</translation> <translation id="6002122790816966947">Dine enheder</translation> <translation id="6002968396561884726">Set for nylig</translation> +<translation id="6005188329423473970">Installationen af VPN-baggrundstjenester er fuldført. Hvis du ikke kan se VPN-apps, skal du logge ud og logge ind igen.</translation> <translation id="6005659677094197001">Kontinuerlig</translation> <translation id="6005765687956866568">De automatisk udfyldte oplysninger blev fjernet fra formularen</translation> <translation id="6006365096047131769">3 x 5 tommer</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 945b344a..bc45ee7 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Passwörter prüfen</translation> <translation id="1187430513518041110">Fahrzeuge</translation> <translation id="1190491977647722791">Papier (schwer)</translation> +<translation id="1194278116501666615">Informationen zum Fortschritt beim Vorabladen von ArcVm</translation> <translation id="1195073053842921378">Diese Adresse wird von diesem Gerät gelöscht</translation> <translation id="1195558154361252544">Benachrichtigungen werden automatisch für alle Websites blockiert, außer für diejenigen, die du zulässt</translation> <translation id="1197088940767939838">Orange</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Patchdienst</translation> <translation id="306198082577913404">Verbesserungen bei Vorhersagen aktivieren</translation> <translation id="3062655045399308513">Browserdaten löschen...</translation> +<translation id="3063453392496098461">Die Installation der VPN-Hintergrunddienste ist fehlgeschlagen.</translation> <translation id="306573536155379004">Spiel gestartet.</translation> <translation id="3067505415088964188">Der Preis ist niedrig</translation> <translation id="3068118691172921711">Der Dateiupload in <ph name="CLOUD_PROVIDER" /> beginnt in 1 Minute</translation> @@ -1753,6 +1755,7 @@ <translation id="4103592298805904008">Karton (einwandig)</translation> <translation id="4104702906064390950">IBAN-Informationen werden gespeichert</translation> <translation id="4106887816571530227">Eingebettete Inhalte nicht zulässig</translation> +<translation id="4107047499377819067">Die Installation der VPN-Hintergrunddienste wurde gestartet. Dies kann einige Minuten dauern.</translation> <translation id="4110652170750985508">Zahlung überprüfen</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Zurück springen</translation> @@ -2782,6 +2785,7 @@ <translation id="6001839398155993679">Los gehts</translation> <translation id="6002122790816966947">Meine Geräte</translation> <translation id="6002968396561884726">Kürzlich angesehen</translation> +<translation id="6005188329423473970">Die Installation der VPN-Hintergrunddienste ist abgeschlossen. Wenn keine VPN-Apps angezeigt werden, melde dich ab und dann wieder an.</translation> <translation id="6005659677094197001">Endlos</translation> <translation id="6005765687956866568">Die automatisch ausgefüllten Informationen wurden aus dem Formular entfernt</translation> <translation id="6006365096047131769">3 × 5 Zoll</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index 7ce6019..bb3b777 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Έλεγχος κωδικών πρόσβασης</translation> <translation id="1187430513518041110">Αυτοκίνητα και άλλα οχήματα</translation> <translation id="1190491977647722791">Χαρτί (Βαρύ)</translation> +<translation id="1194278116501666615">Ενημέρωση προόδου προφόρτωσης ArcVm</translation> <translation id="1195073053842921378">Αυτή η διεύθυνση θα διαγραφεί από αυτήν τη συσκευή</translation> <translation id="1195558154361252544">Οι ειδοποιήσεις αποκλείονται αυτόματα για όλους τους ιστοτόπους εκτός από αυτούς στους οποίους τις επιτρέπετε</translation> <translation id="1197088940767939838">Πορτοκαλί</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Υπηρεσία ενημέρωσης κώδικα</translation> <translation id="306198082577913404">Ενεργοποίηση βελτιώσεων πρόβλεψης</translation> <translation id="3062655045399308513">Διαγραφή δεδομένων περιήγησης…</translation> +<translation id="3063453392496098461">Η εγκατάσταση των υπηρεσιών VPN στο παρασκήνιο απέτυχε.</translation> <translation id="306573536155379004">Το παιχνίδι ξεκίνησε.</translation> <translation id="3067505415088964188">Η τιμή είναι χαμηλή</translation> <translation id="3068118691172921711">Η μεταφόρτωση του αρχείου σας στο <ph name="CLOUD_PROVIDER" /> θα ξεκινήσει σε 1 λεπτό</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Χαρτόνι (Μονό τείχος)</translation> <translation id="4104702906064390950">Γίνεται αποθήκευση πληροφοριών IBAN</translation> <translation id="4106887816571530227">Το ενσωματωμένο περιεχόμενο δεν επιτρέπεται</translation> +<translation id="4107047499377819067">Η εγκατάσταση των υπηρεσιών VPN στο παρασκήνιο έχει ξεκινήσει. Η διαδικασία μπορεί να διαρκέσει μερικά λεπτά.</translation> <translation id="4110652170750985508">Έλεγχος πληρωμής</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Αναζήτηση προς τα πίσω</translation> @@ -2786,6 +2789,7 @@ <translation id="6001839398155993679">Ας ξεκινήσουμε</translation> <translation id="6002122790816966947">Οι συσκευές σας</translation> <translation id="6002968396561884726">Προβλήθηκαν πρόσφατα</translation> +<translation id="6005188329423473970">Η εγκατάσταση των υπηρεσιών VPN στο παρασκήνιο ολοκληρώθηκε. Αν δεν εμφανίζονται εφαρμογές VPN, αποσυνδεθείτε και συνδεθείτε ξανά.</translation> <translation id="6005659677094197001">Συνεχές</translation> <translation id="6005765687956866568">Οι πληροφορίες αυτόματης συμπλήρωσης διαγράφηκαν από τη φόρμα</translation> <translation id="6006365096047131769">3 x 5 ίντσες</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 067d340..726e0e6e 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Check Passwords</translation> <translation id="1187430513518041110">Cars and vehicles</translation> <translation id="1190491977647722791">Paper (heavyweight)</translation> +<translation id="1194278116501666615">ArcVm preload progress update</translation> <translation id="1195073053842921378">This address will be deleted from this device</translation> <translation id="1195558154361252544">Notifications are automatically blocked for all sites except ones that you allow</translation> <translation id="1197088940767939838">Orange</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Patch Service</translation> <translation id="306198082577913404">Turn on prediction improvements</translation> <translation id="3062655045399308513">Delete browsing data…</translation> +<translation id="3063453392496098461">VPN background services installation failed.</translation> <translation id="306573536155379004">Game started.</translation> <translation id="3067505415088964188">Price is low</translation> <translation id="3068118691172921711">Your file upload to <ph name="CLOUD_PROVIDER" /> will begin in one minute</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Cardboard (single wall)</translation> <translation id="4104702906064390950">Saving IBAN info</translation> <translation id="4106887816571530227">Embedded content not allowed</translation> +<translation id="4107047499377819067">Installation of VPN background services has started, this may take a few minutes.</translation> <translation id="4110652170750985508">Review your payment</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Seek backwards</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Let's go</translation> <translation id="6002122790816966947">Your devices</translation> <translation id="6002968396561884726">Recently viewed</translation> +<translation id="6005188329423473970">VPN background services installation complete. If you do not see VPN apps, please log out and log back in.</translation> <translation id="6005659677094197001">Continuous</translation> <translation id="6005765687956866568">The auto-filled info was cleared from the form</translation> <translation id="6006365096047131769">3 in x 5 in</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 8d3a374..781229e1 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Revisar contraseñas</translation> <translation id="1187430513518041110">Automóviles y vehículos</translation> <translation id="1190491977647722791">Papel (alto gramaje)</translation> +<translation id="1194278116501666615">Actualización del progreso de la precarga de ArcVM</translation> <translation id="1195073053842921378">Esta dirección se borrará de este dispositivo.</translation> <translation id="1195558154361252544">Las notificaciones se bloquean automáticamente en todos los sitios, excepto en los que las permites</translation> <translation id="1197088940767939838">Naranja</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Aplicar parche al servicio</translation> <translation id="306198082577913404">Activa las mejoras de predicción</translation> <translation id="3062655045399308513">Borrar datos de navegación…</translation> +<translation id="3063453392496098461">No se pudieron instalar los servicios en segundo plano de la VPN.</translation> <translation id="306573536155379004">Comenzó el juego.</translation> <translation id="3067505415088964188">El precio es bajo</translation> <translation id="3068118691172921711">La carga de tu archivo a <ph name="CLOUD_PROVIDER" /> comenzará dentro de 1 minuto</translation> @@ -1756,6 +1758,7 @@ <translation id="4103592298805904008">Cartón (corrugado simple)</translation> <translation id="4104702906064390950">Guardando información del IBAN</translation> <translation id="4106887816571530227">No se permite el contenido incorporado</translation> +<translation id="4107047499377819067">Comenzó la instalación de los servicios de segundo plano de la VPN. Esto puede tardar unos minutos.</translation> <translation id="4110652170750985508">Revisar el pago</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Buscar más atrás</translation> @@ -2785,6 +2788,7 @@ <translation id="6001839398155993679">Comenzar</translation> <translation id="6002122790816966947">Tus dispositivos</translation> <translation id="6002968396561884726">Vistos recientemente</translation> +<translation id="6005188329423473970">Se completó la instalación de los servicios en segundo plano de la VPN. Si no ves las apps de VPN, sal de la cuenta y vuelve a acceder.</translation> <translation id="6005659677094197001">Continuo</translation> <translation id="6005765687956866568">Se borró la información autocompletada del formulario</translation> <translation id="6006365096047131769">7.62 × 12.7 cm (3 × 5 in)</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index f3d338a..0481f7c 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Egiaztatu pasahitzak</translation> <translation id="1187430513518041110">Autoak eta ibilgailuak</translation> <translation id="1190491977647722791">Papera (astuna)</translation> +<translation id="1194278116501666615">ARCko makina birtualak aurrez kargatzearen garapenari buruzko informazio eguneratua</translation> <translation id="1195073053842921378">Helbidea gailutik ezabatuko da</translation> <translation id="1195558154361252544">Webgune guztien jakinarazpenak automatikoki blokeatzen dira, zuk baimentzen dituzunenak izan ezik</translation> <translation id="1197088940767939838">Laranja</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Adabaki-zerbitzua</translation> <translation id="306198082577913404">Aktibatu aurreikuspenen hobekuntzak</translation> <translation id="3062655045399308513">Ezabatu arakatze-datuak…</translation> +<translation id="3063453392496098461">Ezin izan da gauzatu VPNaren atzeko planoko zerbitzuen instalazioa.</translation> <translation id="306573536155379004">Hasi da jokoa.</translation> <translation id="3067505415088964188">Prezioa baxua da</translation> <translation id="3068118691172921711">Fitxategiak <ph name="CLOUD_PROVIDER" /> zerbitzura kargatzeko prozesua minutu bat barru hasiko da</translation> @@ -1751,6 +1753,7 @@ <translation id="4103592298805904008">Kartoia (horma bakarrekoa)</translation> <translation id="4104702906064390950">IBANaren informazioa gordetzen</translation> <translation id="4106887816571530227">Ukatu da eduki kapsulatua erabiltzeko baimena</translation> +<translation id="4107047499377819067">Hasi da VPNaren atzeko planoko zerbitzuen instalazioa. Minutu batzuk beharko dira instalatzeko.</translation> <translation id="4110652170750985508">Berrikusi ordainketa</translation> <translation id="4111546256784973544">Paintballa</translation> <translation id="4112140312785995938">Atzeratu</translation> @@ -2780,6 +2783,7 @@ <translation id="6001839398155993679">Has gaitezen</translation> <translation id="6002122790816966947">Zure gailuak</translation> <translation id="6002968396561884726">Duela gutxi ikusia</translation> +<translation id="6005188329423473970">Osatu da VPNaren atzeko planoko zerbitzuen instalazioa. VPNko aplikaziorik ikusten ez baduzu, amaitu saioa eta has ezazu berriro.</translation> <translation id="6005659677094197001">Etengabea</translation> <translation id="6005765687956866568">Garbitu da inprimakian automatikoki betetako informazioa</translation> <translation id="6006365096047131769">7,62 × 12,7 cm (3 × 5 in)</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 66db6c1..c4a204a 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">بررسی گذرواژهها</translation> <translation id="1187430513518041110">اتومبیل و وسایل نقلیه</translation> <translation id="1190491977647722791">کاغذ (سنگین)</translation> +<translation id="1194278116501666615">بهروزرسانی پیشرفت پیشبارگیری ArcVm</translation> <translation id="1195073053842921378">این نشانی از این دستگاه حذف خواهد شد</translation> <translation id="1195558154361252544">اعلانها بهطور خودکار برای همه سایتها، بهجز آنهایی که مجاز کردهاید، مسدود میشوند</translation> <translation id="1197088940767939838">نارنجی</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">سرویس وصله</translation> <translation id="306198082577913404">«بهبود پیشبینیها» را روشن کنید</translation> <translation id="3062655045399308513">حذف کردن دادههای مرور…</translation> +<translation id="3063453392496098461">سرویسهای پسزمینهای ویپیان نصب نشدند.</translation> <translation id="306573536155379004">بازی شروع شد.</translation> <translation id="3067505415088964188">قیمت پایین است</translation> <translation id="3068118691172921711">بارگذاری فایل در <ph name="CLOUD_PROVIDER" /> تا ۱ دقیقه دیگر شروع خواهد شد</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">مقوا (تکجداره)</translation> <translation id="4104702906064390950">درحال ذخیره کردن اطلاعات IBAN</translation> <translation id="4106887816571530227">محتوای جاسازیشده مجاز نیست</translation> +<translation id="4107047499377819067">نصب سرویسهای پسزمینهای ویپیان شروع شد و ممکن است چند دقیقه طول بکشد.</translation> <translation id="4110652170750985508">مرور پرداخت</translation> <translation id="4111546256784973544">پینتبال</translation> <translation id="4112140312785995938">رفتن به عقب</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">بیایید شروع کنیم</translation> <translation id="6002122790816966947">دستگاههای شما</translation> <translation id="6002968396561884726">بهتازگی مشاهدهشده</translation> +<translation id="6005188329423473970">نصب سرویسهای پسزمینهای ویپیان تکمیل شد. اگر برنامههای ویپیان را نمیبینید، از سیستم خارج شوید و دوباره به سیستم وارد شوید.</translation> <translation id="6005659677094197001">پیوسته</translation> <translation id="6005765687956866568">اطلاعاتی که بهطور خودکار تکمیل شده بود از فرم پاک شده است</translation> <translation id="6006365096047131769">۵ × ۳ اینچ</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index 32ea910..0aff5657b 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Tarkista salasanat</translation> <translation id="1187430513518041110">Autot ja ajoneuvot</translation> <translation id="1190491977647722791">Paperi (paksu)</translation> +<translation id="1194278116501666615">ArcVm:n esilatauksen edistymisen päivitys</translation> <translation id="1195073053842921378">Osoite poistetaan tältä laitteelta</translation> <translation id="1195558154361252544">Ilmoitukset estetään automaattisesti kaikilla muilla paitsi sallituilla sivustoilla</translation> <translation id="1197088940767939838">Oranssi</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Virheenkorjauspalvelu</translation> <translation id="306198082577913404">Laita ennakoinnin parannukset päälle</translation> <translation id="3062655045399308513">Poista selausdata…</translation> +<translation id="3063453392496098461">VPN-taustapalveluiden asennus epäonnistui.</translation> <translation id="306573536155379004">Peli aloitettu</translation> <translation id="3067505415088964188">Hinta on alhainen</translation> <translation id="3068118691172921711">Tiedostojen lataus (<ph name="CLOUD_PROVIDER" />) alkaa minuutin kuluttua</translation> @@ -1756,6 +1758,7 @@ <translation id="4103592298805904008">Pahvi (yksikerroksinen)</translation> <translation id="4104702906064390950">Tallennetaan IBAN-tietoja</translation> <translation id="4106887816571530227">Upotettu sisältö ei ole sallittua</translation> +<translation id="4107047499377819067">VPN-taustapalvelujen asennus on alkanut, ja siihen voi mennä muutama minuutti.</translation> <translation id="4110652170750985508">Tarkasta maksu</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Kelaa taaksepäin</translation> @@ -2785,6 +2788,7 @@ <translation id="6001839398155993679">Aloita</translation> <translation id="6002122790816966947">Omat laitteet</translation> <translation id="6002968396561884726">Viimeksi katsellut</translation> +<translation id="6005188329423473970">VPN-taustapalveluiden asennus on valmis. Jos VPN-sovelluksia ei näy, kirjaudu ulos ja takaisin sisään.</translation> <translation id="6005659677094197001">Jatkuva</translation> <translation id="6005765687956866568">Automaattisesti täytetyt tiedot on poistettu lomakkeesta</translation> <translation id="6006365096047131769">3 x 5 tuumaa</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index f3d4761..429030f 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Suriin ang mga Password</translation> <translation id="1187430513518041110">Mga Sasakyan</translation> <translation id="1190491977647722791">Papel (Heavyweight)</translation> +<translation id="1194278116501666615">Update sa pag-usad ng pag-preload ng ArcVm</translation> <translation id="1195073053842921378">Made-delete ang address na ito sa device na ito</translation> <translation id="1195558154361252544">Awtomatikong naka-block ang mga notification para sa lahat ng site maliban sa mga pinapayagan mo</translation> <translation id="1197088940767939838">Orange</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Serbisyo sa Pag-patch</translation> <translation id="306198082577913404">I-on ang mga pagpapahusay ng prediksyon</translation> <translation id="3062655045399308513">I-delete ang Data mula sa Pag-browse...</translation> +<translation id="3063453392496098461">Hindi na-install ang mga serbisyo sa background ng VPN.</translation> <translation id="306573536155379004">Nagsimula na ang laro.</translation> <translation id="3067505415088964188">Mababa ang presyo</translation> <translation id="3068118691172921711">Magsisimula ang pag-upload ng iyong file sa <ph name="CLOUD_PROVIDER" /> sa loob ng 1 minuto</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Cardboard (Single Wall)</translation> <translation id="4104702906064390950">Sine-save ang impormasyon ng IBAN</translation> <translation id="4106887816571530227">Hindi pinayagan ang naka-embed na content</translation> +<translation id="4107047499377819067">Nagsimula na ang pag-install ng mga serbisyo sa background ng VPN, posible itong abutin nang ilang minuto.</translation> <translation id="4110652170750985508">Suriin ang iyong pagbabayad</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Mag-seek Pabalik</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Tara na</translation> <translation id="6002122790816966947">Ang iyong mga device</translation> <translation id="6002968396561884726">Kamakailang Tiningnan</translation> +<translation id="6005188329423473970">Tapos na ang pag-install ng Mga Serbisyo sa Background ng VPN Kung wala kang nakikitang VPN app, mag-log out at mag-log in ulit.</translation> <translation id="6005659677094197001">Tuloy-tuloy</translation> <translation id="6005765687956866568">Na-clear sa form ang naka-autofill na impormasyon</translation> <translation id="6006365096047131769">3 x 5 in</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb index 41aca3d..0681ffa 100644 --- a/components/strings/components_strings_fr-CA.xtb +++ b/components/strings/components_strings_fr-CA.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Vérifier les mots de passe</translation> <translation id="1187430513518041110">Voitures et véhicules</translation> <translation id="1190491977647722791">Papier (épais)</translation> +<translation id="1194278116501666615">Mise à jour de la progression du préchargement de la MV Arc</translation> <translation id="1195073053842921378">Cette adresse sera supprimée de cet appareil</translation> <translation id="1195558154361252544">Les notifications sont automatiquement bloquées pour tous les sites, sauf ceux que vous autorisez</translation> <translation id="1197088940767939838">Orange</translation> @@ -962,6 +963,7 @@ <translation id="2688969097326701645">Oui, continuer</translation> <translation id="2690699652723742414">30 derniers jours</translation> <translation id="2691924980723297736">Avertissement de sécurité</translation> +<translation id="2697248912349197812">Demander à <ph name="KEYWORD_SHORT_NAME" /></translation> <translation id="2699273987028089219">Sous-menu accessible, utilisez <ph name="SHORTCUT" /> pour accéder à des options supplémentaires.</translation> <translation id="2701514975700770343">Face vers le bas</translation> <translation id="2702592986366989640">Option à bas prix</translation> @@ -1145,6 +1147,7 @@ <translation id="3061707000357573562">Service de correctif</translation> <translation id="306198082577913404">Activer les améliorations de prédiction</translation> <translation id="3062655045399308513">Supprimer les données de navigation…</translation> +<translation id="3063453392496098461">L'installation des services de RPV en arrière-plan a échoué.</translation> <translation id="306573536155379004">Jeu démarré.</translation> <translation id="3067505415088964188">Le prix est bas</translation> <translation id="3068118691172921711">Le téléversement de votre fichier vers <ph name="CLOUD_PROVIDER" /> commencera dans une minute</translation> @@ -1754,6 +1757,7 @@ <translation id="4103592298805904008">Carton (paroi simple)</translation> <translation id="4104702906064390950">Enregistrement des informations IBAN en cours…</translation> <translation id="4106887816571530227">Contenu intégré non autorisé</translation> +<translation id="4107047499377819067">L'installation des services de RPV en arrière-plan a commencé; cette opération peut prendre quelques minutes.</translation> <translation id="4110652170750985508">Examiner votre paiement</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Rechercher vers l'arrière</translation> @@ -2066,6 +2070,7 @@ <translation id="469028408546145398">Bouton Fermer les fenêtres de navigation privée, activez-le pour fermer toutes les fenêtres de navigation privée qui sont actuellement ouvertes</translation> <translation id="4691093235373904540">Toiture</translation> <translation id="4692623383562244444">Moteurs de recherche</translation> +<translation id="4695702626068620848"><ph name="KEYWORD" /> – Demander à <ph name="KEYWORD_SHORT_NAME" /></translation> <translation id="4698692901173737941">Sports de combat</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> <translation id="4702504834785592287">Côté</translation> @@ -2782,6 +2787,7 @@ <translation id="6001839398155993679">Accéder</translation> <translation id="6002122790816966947">Vos appareils</translation> <translation id="6002968396561884726">Récemment consulté</translation> +<translation id="6005188329423473970">L'installation des services de RPV en arrière-plan est terminée. Si les applis de RPV ne s'affichent pas, veuillez vous déconnecter et vous reconnecter.</translation> <translation id="6005659677094197001">Continu</translation> <translation id="6005765687956866568">Les renseignements remplis automatiquement ont été effacés du formulaire</translation> <translation id="6006365096047131769">3 po x 5 po</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 29e1946..3a912bb2 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Vérifier les mots de passe</translation> <translation id="1187430513518041110">Automobiles et véhicules</translation> <translation id="1190491977647722791">Papier (haute densité)</translation> +<translation id="1194278116501666615">Notification sur la progression du préchargement ARCVM</translation> <translation id="1195073053842921378">Cette adresse sera supprimée de cet appareil</translation> <translation id="1195558154361252544">Les notifications sont bloquées automatiquement pour tous les sites, sauf ceux que vous autorisez</translation> <translation id="1197088940767939838">Orange</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Service d'application de correctifs</translation> <translation id="306198082577913404">Activer les améliorations de prédiction</translation> <translation id="3062655045399308513">Supprimer les données de navigation...</translation> +<translation id="3063453392496098461">Échec de l'installation des services d'arrière-plan VPN.</translation> <translation id="306573536155379004">Le jeu a commencé.</translation> <translation id="3067505415088964188">Prix bas</translation> <translation id="3068118691172921711">L'importation de vos fichiers dans <ph name="CLOUD_PROVIDER" /> commencera dans 1 minute</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Carton (paroi simple)</translation> <translation id="4104702906064390950">Enregistrement des infos de l'IBAN…</translation> <translation id="4106887816571530227">Contenu intégré non autorisé</translation> +<translation id="4107047499377819067">L'installation des services d'arrière-plan VPN a commencé. Elle peut prendre quelques minutes.</translation> <translation id="4110652170750985508">Vérifier votre paiement</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Retour rapide</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">OK</translation> <translation id="6002122790816966947">Vos appareils</translation> <translation id="6002968396561884726">Consulté récemment</translation> +<translation id="6005188329423473970">Installation des services d'arrière-plan VPN terminée. Si vous ne voyez pas d'applis VPN, veuillez vous déconnecter, puis vous reconnecter.</translation> <translation id="6005659677094197001">Continu</translation> <translation id="6005765687956866568">Les infos de saisie automatique ont été effacées du formulaire</translation> <translation id="6006365096047131769">3 x 5 pouces</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb index 1d2f229..45b8450 100644 --- a/components/strings/components_strings_gl.xtb +++ b/components/strings/components_strings_gl.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Comprobar contrasinais</translation> <translation id="1187430513518041110">Automóbiles e vehículos</translation> <translation id="1190491977647722791">Papel (alta gramaxe)</translation> +<translation id="1194278116501666615">Actualización do progreso de precarga de ArcVm</translation> <translation id="1195073053842921378">Este enderezo eliminarase do dispositivo</translation> <translation id="1195558154361252544">Bloquéanse automaticamente as notificacións para todos os sitios, excepto para os que permitas</translation> <translation id="1197088940767939838">Laranxa</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Servizo de parche</translation> <translation id="306198082577913404">Activa as melloras de predición</translation> <translation id="3062655045399308513">Eliminar datos de navegación…</translation> +<translation id="3063453392496098461">Produciuse un erro na instalación dos servizos en segundo plano de VPN.</translation> <translation id="306573536155379004">Comezou a partida.</translation> <translation id="3067505415088964188">Prezo baixo</translation> <translation id="3068118691172921711">A carga de ficheiros en <ph name="CLOUD_PROVIDER" /> comezará dentro dun minuto</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Cartón (dobre cara)</translation> <translation id="4104702906064390950">Gardando información do IBAN</translation> <translation id="4106887816571530227">O contido inserido non está permitido</translation> +<translation id="4107047499377819067">Iniciouse a instalación dos servizos en segundo plano de VPN. Pode levar uns minutos.</translation> <translation id="4110652170750985508">Revisa o pago</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Retroceder</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Vamos aló</translation> <translation id="6002122790816966947">Os teus dispositivos</translation> <translation id="6002968396561884726">Viuse recentemente</translation> +<translation id="6005188329423473970">Completouse a instalación dos servizos en segundo plano de VPN. Se non ves aplicacións de VPN, pecha a sesión e volve iniciala.</translation> <translation id="6005659677094197001">Continuo</translation> <translation id="6005765687956866568">Borrouse do formulario a información completada automaticamente</translation> <translation id="6006365096047131769">3 x 5 polgadas</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 88cd8e1..1ec2114 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">પાસવર્ડ ચેક કરો</translation> <translation id="1187430513518041110">ઑટોમોબાઇલ અને વાહનો</translation> <translation id="1190491977647722791">પેપર (વજનમાં ભારે)</translation> +<translation id="1194278116501666615">ArcVm ની પહેલેથી લોડ કરવાની પ્રક્રિયાની પ્રગતિની અપડેટ</translation> <translation id="1195073053842921378">આ ડિવાઇસમાંથી આ સરનામું ડિલીટ કરવામાં આવશે</translation> <translation id="1195558154361252544">તમે જેના માટે મંજૂરી આપી હોય તે સિવાયની બધી સાઇટ માટે નોટિફિકેશનને ઑટોમૅટિક રીતે બ્લૉક કરવામાં આવે છે</translation> <translation id="1197088940767939838">નારંગી</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">પૅચ સેવા</translation> <translation id="306198082577913404">પૂર્વાનુમાનમાં સુધારણાઓ ચાલુ કરો</translation> <translation id="3062655045399308513">બ્રાઉઝિંગ ડેટા ડિલીટ કરી રહ્યાં છીએ...</translation> +<translation id="3063453392496098461">VPNની બૅકગ્રાઉન્ડ સેવાઓનું ઇન્સ્ટૉલેશન નિષ્ફળ થયું.</translation> <translation id="306573536155379004">ગેમ શરૂ થઈ ગઈ છે.</translation> <translation id="3067505415088964188">કિંમત ઓછી છે</translation> <translation id="3068118691172921711">તમારી ફાઇલને <ph name="CLOUD_PROVIDER" />માં અપલોડ કરવાની પ્રક્રિયા 1 મિનિટમાં શરૂ થશે</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">કાર્ડબોર્ડ (સિંગલ વૉલ)</translation> <translation id="4104702906064390950">IBAN માહિતી સાચવી રહ્યાં છીએ</translation> <translation id="4106887816571530227">શામેલ કરેલા કન્ટેન્ટની મંજૂરી નથી</translation> +<translation id="4107047499377819067">VPNની બૅકગ્રાઉન્ડ સેવાઓનું ઇન્સ્ટૉલેશન શરૂ થઈ ગયું છે, આમાં થોડો સમય લાગી શકે છે.</translation> <translation id="4110652170750985508">તમારી ચુકવણીને રિવ્યૂ કરો</translation> <translation id="4111546256784973544">પેંટબૉલ</translation> <translation id="4112140312785995938">પાછળ કરો</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">ચાલો જઈએ</translation> <translation id="6002122790816966947">તમારા ડિવાઇસ</translation> <translation id="6002968396561884726">તાજેતરમાં જોવાયેલી</translation> +<translation id="6005188329423473970">VPNની બૅકગ્રાઉન્ડ સેવાઓનું ઇન્સ્ટૉલેશન પૂર્ણ થયું. જો તમને VPN ઍપ ન દેખાય, તો કૃપા કરીને લોગ આઉટ કરો અને ફરીથી લોગ ઇન કરો.</translation> <translation id="6005659677094197001">સતત</translation> <translation id="6005765687956866568">ફોર્મમાંથી ઑટોમૅટિક રીતે ભરેલી માહિતી સાફ કરવામાં આવી</translation> <translation id="6006365096047131769">3 x 5 ઇંચ</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 0f5e2cc..8dcce170 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Jelszavak ellenőrzése</translation> <translation id="1187430513518041110">Autók és más járművek</translation> <translation id="1190491977647722791">Papír (nehézsúlyú)</translation> +<translation id="1194278116501666615">ArcVm előzetes betöltésének állapotfrissítése</translation> <translation id="1195073053842921378">Ez a cím törlődni fog erről az eszközről.</translation> <translation id="1195558154361252544">Az Ön által engedélyezett webhelyek kivételével a böngésző automatikusan letiltja az értesítéseket</translation> <translation id="1197088940767939838">Narancssárga</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Javítókészlet szolgáltatás</translation> <translation id="306198082577913404">A várható kifejezések szolgáltatás fejlesztéseinek bekapcsolása</translation> <translation id="3062655045399308513">Böngészési adatok törlése…</translation> +<translation id="3063453392496098461">Nem sikerült telepíteni a VPN-háttérszolgáltatásokat.</translation> <translation id="306573536155379004">A játék elindult.</translation> <translation id="3067505415088964188">Alacsony ár</translation> <translation id="3068118691172921711">A fájlok feltöltése a(z) <ph name="CLOUD_PROVIDER" /> szolgáltatásba 1 perc múlva kezdődik</translation> @@ -1752,6 +1754,7 @@ <translation id="4103592298805904008">Karton (egyfalú)</translation> <translation id="4104702906064390950">IBAN-adatok mentése folyamatban</translation> <translation id="4106887816571530227">A beágyazott tartalmak nem engedélyezettek</translation> +<translation id="4107047499377819067">Elkezdődött a VPN-háttérszolgáltatások telepítése. Ez eltarthat néhány percig.</translation> <translation id="4110652170750985508">Befizetés áttekintése</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Ugrás visszafelé</translation> @@ -2781,6 +2784,7 @@ <translation id="6001839398155993679">Kezdjük</translation> <translation id="6002122790816966947">Saját eszközök</translation> <translation id="6002968396561884726">Nemrégiben megtekintve</translation> +<translation id="6005188329423473970">A VPN-háttérszolgáltatások telepítése befejeződött. Ha a VPN-alkalmazások nem láthatók, jelentkezzen ki, majd jelentkezzen be újra.</translation> <translation id="6005659677094197001">Folyamatos</translation> <translation id="6005765687956866568">Az automatikusan kitöltött adatok törölve lettek az űrlapról</translation> <translation id="6006365096047131769">3 × 5 hüvelyk</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index 4f59041..c56e1dbf 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -113,6 +113,7 @@ <translation id="1186201132766001848">Ստուգել գաղտնաբառերը</translation> <translation id="1187430513518041110">Ավտոմեքենաներ և փոխադրամիջոցներ</translation> <translation id="1190491977647722791">Թուղթ (բարձր խտությամբ)</translation> +<translation id="1194278116501666615">ArcVm նախաբեռնման ընթացքի թարմացում</translation> <translation id="1195073053842921378">Այս հասցեն կհեռացվի այս սարքից</translation> <translation id="1195558154361252544">Բացի ձեր նշած կայքերից՝ մնացած բոլոր կայքերի համար ծանուցումներն ավտոմատ արգելափակվում են:</translation> <translation id="1197088940767939838">Նարնջագույն</translation> @@ -1152,6 +1153,7 @@ <translation id="3061707000357573562">Խոցելիության շտկում</translation> <translation id="306198082577913404">Միացրեք կանխատեսումների բարելավումները</translation> <translation id="3062655045399308513">Ջնջել այցելությունների պատմությունը...</translation> +<translation id="3063453392496098461">Չհաջողվեց տեղադրել VPN-ի ֆոնային ծառայությունները։</translation> <translation id="306573536155379004">Խաղը սկսված է։</translation> <translation id="3067505415088964188">Գինը ցածր է</translation> <translation id="3068118691172921711">Ֆայլի վերբեռնումը <ph name="CLOUD_PROVIDER" /> կսկսվի 1 րոպեից</translation> @@ -1761,6 +1763,7 @@ <translation id="4103592298805904008">Ստվարաթուղթ (միաշերտ)</translation> <translation id="4104702906064390950">IBAN-ի մասին տեղեկությունները պահվում են</translation> <translation id="4106887816571530227">Զետեղված բովանդակությունն արգելված է</translation> +<translation id="4107047499377819067">VPN-ի ֆոնային ծառայությունների տեղադրումը սկսվել է։ Այն կարող է մի քանի րոպե տևել։</translation> <translation id="4110652170750985508">Դիտեք վճարումը</translation> <translation id="4111546256784973544">Փեյնթբոլ</translation> <translation id="4112140312785995938">Հետ գնալ</translation> @@ -2793,6 +2796,7 @@ <translation id="6001839398155993679">Եկեք սկսենք</translation> <translation id="6002122790816966947">Ձեր սարքերը</translation> <translation id="6002968396561884726">Վերջին դիտումները</translation> +<translation id="6005188329423473970">VPN-ի ֆոնային ծառայությունների տեղադրումն ավարտվել է։ Եթե չեք տեսնում VPN հավելվածները, դուրս գրվեք հաշվից և նորից մուտք գործեք։</translation> <translation id="6005659677094197001">Շարունակական</translation> <translation id="6005765687956866568">Ինքնալրացված տեղեկությունները ջնջվել են ձևից</translation> <translation id="6006365096047131769">3 x 5 դյույմ</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 4d5d95ba..14dd6a3 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Periksa Sandi</translation> <translation id="1187430513518041110">Mobil & Kendaraan</translation> <translation id="1190491977647722791">Kertas (Tebal)</translation> +<translation id="1194278116501666615">Update progres pramuat ArcVm</translation> <translation id="1195073053842921378">Alamat ini akan dihapus dari perangkat ini</translation> <translation id="1195558154361252544">Notifikasi otomatis diblokir untuk semua situs kecuali situs yang Anda izinkan</translation> <translation id="1197088940767939838">Oranye</translation> @@ -1147,6 +1148,7 @@ <translation id="3061707000357573562">Layanan Patch</translation> <translation id="306198082577913404">Aktifkan peningkatan kualitas prediksi</translation> <translation id="3062655045399308513">Hapus Data Penjelajahan...</translation> +<translation id="3063453392496098461">Penginstalan layanan latar belakang VPN gagal.</translation> <translation id="306573536155379004">Game dimulai.</translation> <translation id="3067505415088964188">Harga rendah</translation> <translation id="3068118691172921711">Proses upload file Anda ke <ph name="CLOUD_PROVIDER" /> akan dimulai dalam 1 menit</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Kertas kardus (Lapis Tunggal)</translation> <translation id="4104702906064390950">Menyimpan info IBAN</translation> <translation id="4106887816571530227">Konten tersemat tidak diizinkan</translation> +<translation id="4107047499377819067">Penginstalan layanan latar belakang VPN telah dimulai, proses ini mungkin memerlukan waktu beberapa menit.</translation> <translation id="4110652170750985508">Tinjau pembayaran</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Cari Mundur</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Ayo</translation> <translation id="6002122790816966947">Perangkat Anda</translation> <translation id="6002968396561884726">Dilihat Baru-Baru Ini</translation> +<translation id="6005188329423473970">Penginstalan Layanan Latar Belakang VPN selesai. Jika Anda tidak melihat aplikasi VPN, logout dan login kembali.</translation> <translation id="6005659677094197001">Berkelanjutan</translation> <translation id="6005765687956866568">Info yang diisi otomatis telah dihapus dari formulir</translation> <translation id="6006365096047131769">3 x 5 inci (7 x 12 cm)</translation>
diff --git a/components/strings/components_strings_is.xtb b/components/strings/components_strings_is.xtb index 26c4feb..87786a01 100644 --- a/components/strings/components_strings_is.xtb +++ b/components/strings/components_strings_is.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Yfirfara aðgangsorð</translation> <translation id="1187430513518041110">Bílar og ökutæki</translation> <translation id="1190491977647722791">Pappír (þykkur)</translation> +<translation id="1194278116501666615">Framvinduuppfærsla fyrir forhleðslu ArcVm</translation> <translation id="1195073053842921378">Heimilisfanginu verður eytt úr tækinu</translation> <translation id="1195558154361252544">Sjálfkrafa er lokað á tilkynningar fyrir öll vefsvæði nema þau sem þú hefur gefið leyfi</translation> <translation id="1197088940767939838">Appelsínugulur</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Plástraþjónusta</translation> <translation id="306198082577913404">Kveikja á bætingu flýtiritunar</translation> <translation id="3062655045399308513">Eyða vefskoðunargögnum...</translation> +<translation id="3063453392496098461">Uppsetning á bakgrunnsþjónustu VPN mistókst.</translation> <translation id="306573536155379004">Leikur hafinn.</translation> <translation id="3067505415088964188">Verð er lágt</translation> <translation id="3068118691172921711">Upphleðsla skráa á <ph name="CLOUD_PROVIDER" /> hefst eftir eina mínútu</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Pappi (einfaldur)</translation> <translation id="4104702906064390950">Vistar IBAN-upplýsingar</translation> <translation id="4106887816571530227">Innfellt efni er ekki leyft</translation> +<translation id="4107047499377819067">Uppsetning á bakgrunnsþjónustu VPN er hafin, þetta gæti tekið nokkrar mínútur.</translation> <translation id="4110652170750985508">Farðu yfir greiðsluna</translation> <translation id="4111546256784973544">Litbolti</translation> <translation id="4112140312785995938">Spóla til baka</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Byrjum ballið</translation> <translation id="6002122790816966947">Tækin þín</translation> <translation id="6002968396561884726">Nýlega skoðað</translation> +<translation id="6005188329423473970">Uppsetningu á bakgrunnsþjónustu VPN lokið. Ef þú sérð engin VPN-forrit skaltu skrá þig út og aftur inn.</translation> <translation id="6005659677094197001">Samfelld prentun</translation> <translation id="6005765687956866568">Upplýsingar á eyðublaðinu sem voru fylltar út sjálfkrafa voru hreinsaðar</translation> <translation id="6006365096047131769">3 x 5 to.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 0fcc08b..2b164df2 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">パスワードを確認</translation> <translation id="1187430513518041110">自動車、乗り物</translation> <translation id="1190491977647722791">紙(重量)</translation> +<translation id="1194278116501666615">ArcVm プリロードの進行状況</translation> <translation id="1195073053842921378">この住所をこのデバイスから削除します</translation> <translation id="1195558154361252544">許可したサイトを除くすべてのサイトで通知を自動的にブロックします</translation> <translation id="1197088940767939838">オレンジ</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">サービスへのパッチの適用</translation> <translation id="306198082577913404">予測の改善を有効にする</translation> <translation id="3062655045399308513">閲覧履歴データを削除...</translation> +<translation id="3063453392496098461">VPN バックグラウンド サービスをインストールできませんでした。</translation> <translation id="306573536155379004">ゲームを開始しました。</translation> <translation id="3067505415088964188">低価格</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" /> へのファイルのアップロードは 1 分後に開始されます</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">段ボール(一重)</translation> <translation id="4104702906064390950">IBAN 情報を保存しています</translation> <translation id="4106887816571530227">埋め込みコンテンツは許可されていません</translation> +<translation id="4107047499377819067">VPN バックグラウンド サービスのインストールが開始しました。完了まで数分かかることがあります。</translation> <translation id="4110652170750985508">お支払いの確認</translation> <translation id="4111546256784973544">ペイントボール</translation> <translation id="4112140312785995938">後方に移動</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">開始する</translation> <translation id="6002122790816966947">他のデバイス</translation> <translation id="6002968396561884726">最近チェックしたアイテム</translation> +<translation id="6005188329423473970">VPN バックグラウンド サービスのインストールが完了しました。VPN アプリが表示されない場合は、ログインし直してください。</translation> <translation id="6005659677094197001">連続</translation> <translation id="6005765687956866568">自動入力された情報をフォームから削除しました</translation> <translation id="6006365096047131769">3x5 インチ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index 37f79f9..add323a 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">비밀번호 확인</translation> <translation id="1187430513518041110">자동차</translation> <translation id="1190491977647722791">용지(중량)</translation> +<translation id="1194278116501666615">ArcVm 미리 로드 진행률 업데이트</translation> <translation id="1195073053842921378">이 주소가 기기에서 삭제됩니다.</translation> <translation id="1195558154361252544">허용한 사이트를 제외한 모든 사이트의 알림이 자동으로 차단됩니다.</translation> <translation id="1197088940767939838">오렌지색</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">서비스 패치</translation> <translation id="306198082577913404">예측 개선 사용 설정</translation> <translation id="3062655045399308513">인터넷 사용 기록 삭제…</translation> +<translation id="3063453392496098461">VPN 백그라운드 서비스를 설치할 수 없습니다.</translation> <translation id="306573536155379004">게임이 시작되었습니다.</translation> <translation id="3067505415088964188">가격이 저렴함</translation> <translation id="3068118691172921711">1분 후 <ph name="CLOUD_PROVIDER" />에 파일이 업로드되기 시작합니다</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">골판지(편면)</translation> <translation id="4104702906064390950">IBAN 정보 저장 중</translation> <translation id="4106887816571530227">삽입된 콘텐츠가 허용되지 않습니다.</translation> +<translation id="4107047499377819067">VPN 백그라운드 서비스 설치가 시작되었습니다. 몇 분 정도 걸릴 수 있습니다.</translation> <translation id="4110652170750985508">결제 검토</translation> <translation id="4111546256784973544">서바이벌 게임</translation> <translation id="4112140312785995938">뒤로 탐색</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">시작</translation> <translation id="6002122790816966947">내 기기</translation> <translation id="6002968396561884726">최근에 본 항목</translation> +<translation id="6005188329423473970">VPN 백그라운드 서비스 설치가 완료되었습니다. VPN 앱이 표시되지 않으면 로그아웃했다가 다시 로그인하세요.</translation> <translation id="6005659677094197001">연속</translation> <translation id="6005765687956866568">양식에서 자동 완성 정보가 삭제되었습니다</translation> <translation id="6006365096047131769">3x5인치</translation>
diff --git a/components/strings/components_strings_ky.xtb b/components/strings/components_strings_ky.xtb index 7a1fa79..edb2d6f 100644 --- a/components/strings/components_strings_ky.xtb +++ b/components/strings/components_strings_ky.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Сырсөздөрдү текшерүү</translation> <translation id="1187430513518041110">Машиналар жана унаалар</translation> <translation id="1190491977647722791">Кагаз (оор капталган)</translation> +<translation id="1194278116501666615">ArcVm алдын ала жүктөө процессин жаңыртуу</translation> <translation id="1195073053842921378">Бул дарек ушул түзмөктөн өчүрүлөт</translation> <translation id="1195558154361252544">Билдирмелер өзүңүз белгилеген сайттардан тышкары бардык сайттар үчүн автоматтык түрдө бөгөттөлгөн</translation> <translation id="1197088940767939838">Кызгылт сары</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Оңдоо кызматы</translation> <translation id="306198082577913404">Божомолдоону жакшыртууну күйгүзүү</translation> <translation id="3062655045399308513">Серептөө дайындарын өчүрүү…</translation> +<translation id="3063453392496098461">VPN'дин фондогу кызматтары орнотулган жок.</translation> <translation id="306573536155379004">Оюн башталды.</translation> <translation id="3067505415088964188">Баасы төмөн</translation> <translation id="3068118691172921711">Файлыңыз <ph name="CLOUD_PROVIDER" /> камсыздоочусуна 1 мүнөттөн кийин жүктөлүп бериле башталат</translation> @@ -1754,6 +1756,7 @@ <translation id="4103592298805904008">Картон (бир катмарлуу)</translation> <translation id="4104702906064390950">IBAN кодунун маалыматы сакталууда</translation> <translation id="4106887816571530227">Кыстарылган мазмунга уруксат жок</translation> +<translation id="4107047499377819067">VPN'дин фондогу кызматтарын орнотуу башталды, бул бир нече мүнөткө созулушу мүмкүн.</translation> <translation id="4110652170750985508">Төлөмүңүздү карап чыгыңыз</translation> <translation id="4111546256784973544">Пейнтбол</translation> <translation id="4112140312785995938">Артка түрдүрүү</translation> @@ -2783,6 +2786,7 @@ <translation id="6001839398155993679">Кеттик</translation> <translation id="6002122790816966947">Түзмөктөрүңүз</translation> <translation id="6002968396561884726">Жакында көрүлгөндөр</translation> +<translation id="6005188329423473970">VPN'дин фондогу кызматтарын орнотуу аяктады. Эгер сиз VPN колдонмолорун көрбөсөңүз, чыгып, кайра кириңиз.</translation> <translation id="6005659677094197001">Үзгүлтүксүз</translation> <translation id="6005765687956866568">Автотолтурулган маалымат формадан өчүрүлдү</translation> <translation id="6006365096047131769">3 x 5 дюйм</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb index 5e4d927..d5ffeef 100644 --- a/components/strings/components_strings_lo.xtb +++ b/components/strings/components_strings_lo.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">ກວດເບິ່ງລະຫັດຜ່ານ</translation> <translation id="1187430513518041110">ລົດຍົນ ແລະ ຍານພາຫະນະ</translation> <translation id="1190491977647722791">ເຈ້ຍ (ນ້ຳໜັກຫຼາຍ)</translation> +<translation id="1194278116501666615">ການອັບເດດຄວາມຄືບໜ້າໃນການໂຫຼດ ArcVm ກ່ອນລ່ວງໜ້າ</translation> <translation id="1195073053842921378">ທີ່ຢູ່ນີ້ຈະຖືກລຶບຈາກອຸປະກອນນີ້</translation> <translation id="1195558154361252544">ການແຈ້ງເຕືອນຖືກບລັອກໄວ້ໂດຍອັດຕະໂນມັດສຳລັບເວັບໄຊທັງໝົດ ຍົກເວັ້ນເວັບໄຊທີ່ທ່ານອະນຸຍາດ</translation> <translation id="1197088940767939838">ສີໝາກກ້ຽງ</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">ການບໍລິການແກ້ບັນຫາ</translation> <translation id="306198082577913404">ເປີດການປັບປຸງການຄາດເດົາ</translation> <translation id="3062655045399308513">ລຶບຂໍ້ມູນການທ່ອງເວັບ...</translation> +<translation id="3063453392496098461">ການຕິດຕັ້ງການບໍລິການ VPN ໃນພື້ນຫຼັງບໍ່ສໍາເລັດ.</translation> <translation id="306573536155379004">ເລີ່ມເກມແລ້ວ.</translation> <translation id="3067505415088964188">ລາຄາຕ່ຳ</translation> <translation id="3068118691172921711">ການອັບໂຫຼດໄຟລ໌ຂອງທ່ານໃສ່ <ph name="CLOUD_PROVIDER" /> ຈະເລີ່ມໃນອີກ 1 ນາທີ</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">ເຈ້ຍແກັດ (1 ຊັ້ນ)</translation> <translation id="4104702906064390950">ກຳລັງບັນທຶກຂໍ້ມູນ IBAN</translation> <translation id="4106887816571530227">ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ເນື້ອຫາແບບຝັງ</translation> +<translation id="4107047499377819067">ການຕິດຕັ້ງການບໍລິການ VPN ໃນພື້ນຫຼັງໄດ້ເລີ່ມຕົ້ນແລ້ວ, ການດໍາເນີນການນີ້ອາດໃຊ້ເວລາສອງສາມນາທີ.</translation> <translation id="4110652170750985508">ກວດເບິ່ງການຈ່າຍເງິນຂອງທ່ານ</translation> <translation id="4111546256784973544">ຍິງປືນ Paintball</translation> <translation id="4112140312785995938">ເລື່ອນກັບຫຼັງ</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">ເລີ່ມກັນເລີຍ</translation> <translation id="6002122790816966947">ອຸປະກອນຂອງທ່ານ</translation> <translation id="6002968396561884726">ເບິ່ງຫຼ້າສຸດ</translation> +<translation id="6005188329423473970">ການຕິດຕັ້ງການບໍລິການ VPN ໃນພື້ນຫຼັງສໍາເລັດ. ຫາກທ່ານບໍ່ເຫັນແອັບ VPN, ກະລຸນາອອກຈາກລະບົບແລ້ວເຂົ້າສູ່ລະບົບຄືນໃໝ່.</translation> <translation id="6005659677094197001">ຕໍ່ເນື່ອງ</translation> <translation id="6005765687956866568">ລຶບລ້າງຂໍ້ມູນທີ່ຕື່ມອັດຕະໂນມັດອອກຈາກແບບຟອມແລ້ວ</translation> <translation id="6006365096047131769">3 x 5 ນິ້ວ</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 4b9d6ab6..8cc4147 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Patikrinti slaptažodžius</translation> <translation id="1187430513518041110">Automobiliai ir transporto priemonės</translation> <translation id="1190491977647722791">Popierius (sunkus)</translation> +<translation id="1194278116501666615">„ArcVm“ išankstinio įkėlimo eigos atnaujinimas</translation> <translation id="1195073053842921378">Šis adresas bus ištrintas iš šio įrenginio</translation> <translation id="1195558154361252544">Pranešimai automatiškai blokuojami visose svetainėse, išskyrus svetaines, kuriose leidote rodyti</translation> <translation id="1197088940767939838">Oranžinė</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Pataisos paslauga</translation> <translation id="306198082577913404">Įjunkite numatymų patobulinimus</translation> <translation id="3062655045399308513">Ištrinti naršymo duomenis...</translation> +<translation id="3063453392496098461">Nepavyko įdiegti VPN foninių paslaugų.</translation> <translation id="306573536155379004">Žaidimas prasidėjo.</translation> <translation id="3067505415088964188">Kaina yra maža</translation> <translation id="3068118691172921711">Failų įkėlimas į „<ph name="CLOUD_PROVIDER" />“ bus pradėtas po vienos minutės</translation> @@ -1756,6 +1758,7 @@ <translation id="4103592298805904008">Kartonas (vienos sienos)</translation> <translation id="4104702906064390950">Išsaugoma IBAN informacija</translation> <translation id="4106887816571530227">Neleidžiamas įterptas turinys</translation> +<translation id="4107047499377819067">VPN foninių paslaugų diegimas pradėtas. Tai gali užtrukti kelias minutes.</translation> <translation id="4110652170750985508">Mokėjimo peržiūra</translation> <translation id="4111546256784973544">Dažasvydis</translation> <translation id="4112140312785995938">Prasukti atgal</translation> @@ -2785,6 +2788,7 @@ <translation id="6001839398155993679">Pradėkime</translation> <translation id="6002122790816966947">Jūsų įrenginiai</translation> <translation id="6002968396561884726">Neseniai peržiūrėti</translation> +<translation id="6005188329423473970">VPN foninių paslaugų diegimas baigtas. Jei nematote VPN programų, atsijunkite ir vėl prisijunkite.</translation> <translation id="6005659677094197001">Nepertraukiamas</translation> <translation id="6005765687956866568">Automatiškai užpildyta informacija išvalyta iš formos</translation> <translation id="6006365096047131769">3 x 5 col.</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index 213bdd4..f01e20a 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Pārbaudīt paroles</translation> <translation id="1187430513518041110">Automašīnas un transportlīdzekļi</translation> <translation id="1190491977647722791">Papīrs (augsta gramāža)</translation> +<translation id="1194278116501666615">Paziņojums par ArcVM iepriekšējas ielādes norisi</translation> <translation id="1195073053842921378">Šī adrese tiks dzēsta no šīs ierīces.</translation> <translation id="1195558154361252544">Paziņojumi tiek automātiski bloķēti visās vietnēs, izņemot tās, kurās atļāvāt to rādīšanu.</translation> <translation id="1197088940767939838">Oranža</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Ielāpu pakalpojums</translation> <translation id="306198082577913404">Ieslēdziet prognožu uzlabojumus</translation> <translation id="3062655045399308513">Dzēst pārlūkošanas datus…</translation> +<translation id="3063453392496098461">Neizdevās instalēt VPN fona pakalpojumus.</translation> <translation id="306573536155379004">Spēle sākta.</translation> <translation id="3067505415088964188">Cena ir zema</translation> <translation id="3068118691172921711">Failu augšupielāde pakalpojumā <ph name="CLOUD_PROVIDER" /> sāksies pēc vienas minūtes</translation> @@ -1753,6 +1755,7 @@ <translation id="4103592298805904008">Kartons (vienslāņa)</translation> <translation id="4104702906064390950">Notiek IBAN informācijas saglabāšana</translation> <translation id="4106887816571530227">Iegultais saturs nav atļauts</translation> +<translation id="4107047499377819067">Ir sākta VPN fona pakalpojumu instalēšana. Tā var ilgt dažas minūtes.</translation> <translation id="4110652170750985508">Maksājuma pārskatīšana</translation> <translation id="4111546256784973544">Peintbols</translation> <translation id="4112140312785995938">Pārtīt atpakaļ</translation> @@ -2782,6 +2785,7 @@ <translation id="6001839398155993679">Aiziet!</translation> <translation id="6002122790816966947">Jūsu ierīces</translation> <translation id="6002968396561884726">Nesen skatītās</translation> +<translation id="6005188329423473970">VPN fona pakalpojumu instalēšana ir pabeigta. Ja neredzat VPN lietotnes, izrakstieties un atkārtoti piesakieties.</translation> <translation id="6005659677094197001">Vienlaidu</translation> <translation id="6005765687956866568">Automātiski aizpildītā informācija tika notīrīta no veidlapas</translation> <translation id="6006365096047131769">3 x 5 collas</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb index 723606d..97d93cb 100644 --- a/components/strings/components_strings_mk.xtb +++ b/components/strings/components_strings_mk.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Провери ги лозинките</translation> <translation id="1187430513518041110">Автомобили и возила</translation> <translation id="1190491977647722791">Хартија (дебела)</translation> +<translation id="1194278116501666615">Известување за напредокот на вчитувањето однапред на ArcVm</translation> <translation id="1195073053842921378">Адресава ќе се избрише од уредов</translation> <translation id="1195558154361252544">Известувањата се автоматски блокирани за сите сајтови, освен за оние за коишто сте ги дозволиле</translation> <translation id="1197088940767939838">Портокалова</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Услуга за поправање грешки</translation> <translation id="306198082577913404">Вклучете подобрувања на предвидувањата</translation> <translation id="3062655045399308513">Избришете ги податоците од прелистување…</translation> +<translation id="3063453392496098461">Инсталирањето на заднинските услуги на VPN не успеа.</translation> <translation id="306573536155379004">Играта започна.</translation> <translation id="3067505415088964188">Цената е ниска</translation> <translation id="3068118691172921711">Прикачувањето на вашата датотека во <ph name="CLOUD_PROVIDER" /> ќе започне по 1 минута</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Картон (единечен ѕид)</translation> <translation id="4104702906064390950">Се зачувуваат податоци за IBAN</translation> <translation id="4106887816571530227">Не се дозволени вметнати содржини</translation> +<translation id="4107047499377819067">Инсталирањето на заднинските услуги на VPN започна. Ова може да трае неколку минути.</translation> <translation id="4110652170750985508">Преглед на плаќањето</translation> <translation id="4111546256784973544">Пејнтбол</translation> <translation id="4112140312785995938">Премотај наназад</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Ајде</translation> <translation id="6002122790816966947">Ваши уреди</translation> <translation id="6002968396561884726">Неодамна видено</translation> +<translation id="6005188329423473970">Инсталирањето на заднинските услуги на VPN е завршено. Ако не гледате VPN-апликации, одјавете се, па најавете се повторно.</translation> <translation id="6005659677094197001">Непрекинато</translation> <translation id="6005765687956866568">Автоматски пополнетите податоци се избришани од формуларот</translation> <translation id="6006365096047131769">3 x 5 инчи</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index a456f50c..2f9b6e1 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">പാസ്വേഡ് പരിശോധിക്കൂ</translation> <translation id="1187430513518041110">കാറുകളും വാഹനങ്ങളും</translation> <translation id="1190491977647722791">പേപ്പർ (ഹെവിവെയിറ്റ്)</translation> +<translation id="1194278116501666615">ArcVm മുൻകൂട്ടി ലോഡ് ചെയ്യുന്നതിന്റെ പുരോഗതിയെക്കുറിച്ചുള്ള അപ്ഡേറ്റ്</translation> <translation id="1195073053842921378">ഈ വിലാസം ഈ ഉപകരണത്തിൽ നിന്ന് ഇല്ലാതാക്കും</translation> <translation id="1195558154361252544">നിങ്ങൾ അനുവദിക്കുന്ന സൈറ്റുകൾക്ക് ഒഴികെ മറ്റ് എല്ലാ സൈറ്റുകൾക്കും അറിയിപ്പുകൾ സ്വയമേവ ബ്ലോക്ക് ചെയ്തിരിക്കുന്നു</translation> <translation id="1197088940767939838">ഓറഞ്ച്</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">പാച്ച് സേവനം</translation> <translation id="306198082577913404">പ്രവചനം മെച്ചപ്പെടുത്തലുകൾ ഓണാക്കുക</translation> <translation id="3062655045399308513">ബ്രൗസിംഗ് ഡാറ്റ ഇല്ലാതാക്കുക...</translation> +<translation id="3063453392496098461">VPN പശ്ചാത്തല സേവനങ്ങളുടെ ഇൻസ്റ്റലേഷൻ നടന്നില്ല.</translation> <translation id="306573536155379004">ഗെയിം ആരംഭിച്ചു.</translation> <translation id="3067505415088964188">കുറഞ്ഞ നിരക്ക്</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" /> എന്നതിലേക്കുള്ള നിങ്ങളുടെ ഫയൽ അപ്ലോഡ് ഒരു മിനിറ്റിനുള്ളിൽ ആരംഭിക്കും</translation> @@ -1754,6 +1756,7 @@ <translation id="4103592298805904008">കാർഡ്ബോർഡ് (സിംഗിൾ വാൾ)</translation> <translation id="4104702906064390950">IBAN വിവരങ്ങൾ സംരക്ഷിക്കുന്നു</translation> <translation id="4106887816571530227">ഉൾച്ചേർത്ത ഉള്ളടക്കം അനുവദനീയമല്ല</translation> +<translation id="4107047499377819067">VPN പശ്ചാത്തല സേവനങ്ങളുടെ ഇൻസ്റ്റലേഷൻ ആരംഭിച്ചു, ഇതിന് കുറച്ച് സമയമെടുത്തേക്കാം.</translation> <translation id="4110652170750985508">നിങ്ങളുടെ പേയ്മെന്റ് അവലോകനം ചെയ്യുക</translation> <translation id="4111546256784973544">പെയിന്റ്ബോൾ</translation> <translation id="4112140312785995938">പുറകിലേക്ക് നീക്കുക</translation> @@ -2783,6 +2786,7 @@ <translation id="6001839398155993679">തുടങ്ങാം</translation> <translation id="6002122790816966947">നിങ്ങളുടെ ഉപകരണങ്ങൾ</translation> <translation id="6002968396561884726">അടുത്തിടെ കണ്ടത്</translation> +<translation id="6005188329423473970">VPN പശ്ചാത്തല സേവനങ്ങളുടെ ഇൻസ്റ്റലേഷൻ പൂർത്തിയായി. നിങ്ങൾ VPN ആപ്പുകൾ കാണുന്നില്ലെങ്കിൽ, ലോഗൗട്ട് ചെയ്ത് വീണ്ടും ലോഗിൻ ചെയ്യുക.</translation> <translation id="6005659677094197001">തുടർച്ചയായ</translation> <translation id="6005765687956866568">സ്വയമേവ പൂരിപ്പിച്ച വിവരങ്ങൾ ഫോമിൽ നിന്ന് മായ്ച്ചു</translation> <translation id="6006365096047131769">3 x 5 ഇഞ്ച്</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb index 38958be..ae06a8b 100644 --- a/components/strings/components_strings_mn.xtb +++ b/components/strings/components_strings_mn.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Нууц үгийг шалгах</translation> <translation id="1187430513518041110">Авто машин, тээврийн хэрэгслүүд</translation> <translation id="1190491977647722791">Цаас (хүнд)</translation> +<translation id="1194278116501666615">ArcVm-н урьдчилан ачаалах явцын шинэчлэлт</translation> <translation id="1195073053842921378">Энэ хаягийг энэ төхөөрөмжөөс устгана</translation> <translation id="1195558154361252544">Таны зөвшөөрөх сайтаас бусад бүх сайтын мэдэгдлийг автоматаар хориглоно</translation> <translation id="1197088940767939838">Улбар шар</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Patch үйлчилгээ</translation> <translation id="306198082577913404">Таамаглалын сайжруулалтыг асаах</translation> <translation id="3062655045399308513">Интернэтээр үзсэн өгөгдлийг устгах...</translation> +<translation id="3063453392496098461">VPN-н дэвсгэрийн үйлчилгээг суулгаж чадсангүй.</translation> <translation id="306573536155379004">Тоглоом эхэллээ.</translation> <translation id="3067505415088964188">Үнэ хямд байна</translation> <translation id="3068118691172921711">Таны файлыг <ph name="CLOUD_PROVIDER" />-д 1 минутын дараа байршуулж эхэлнэ</translation> @@ -1756,6 +1758,7 @@ <translation id="4103592298805904008">Цаасан хайрцаг (дан)</translation> <translation id="4104702906064390950">IBAN-н мэдээллийг хадгалж байна</translation> <translation id="4106887816571530227">Оруулсан контентыг зөвшөөрдөггүй</translation> +<translation id="4107047499377819067">VPN-н дэвсгэрийн үйлчилгээг суулгаж эхэлсэн. Үүнд цөөн хэдэн минут зарцуулж магадгүй.</translation> <translation id="4110652170750985508">Төлбөрөө хянах</translation> <translation id="4111546256784973544">Пейнтбол</translation> <translation id="4112140312785995938">Ухраах</translation> @@ -2785,6 +2788,7 @@ <translation id="6001839398155993679">Эхэлцгээе</translation> <translation id="6002122790816966947">Таны төхөөрөмжүүд</translation> <translation id="6002968396561884726">Саяхан үзсэн</translation> +<translation id="6005188329423473970">VPN-н дэвсгэрийн үйлчилгээг суулгаж дууслаа. Хэрэв та VPN апп харахгүй байвал гараад, буцаж нэвтэрнэ үү.</translation> <translation id="6005659677094197001">Тасралтгүй</translation> <translation id="6005765687956866568">Автоматаар бөглөсөн мэдээллийг маягтаас арилгасан</translation> <translation id="6006365096047131769">3 x 5 инч</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 0f474a0..8873421a 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">पासवर्ड तपासा</translation> <translation id="1187430513518041110">ऑटो आणि वाहने</translation> <translation id="1190491977647722791">पेपर (हेवीवेट)</translation> +<translation id="1194278116501666615">ArcVm प्रीलोड करण्याच्या प्रगतीसंबंधित अपडेट</translation> <translation id="1195073053842921378">हा पत्ता या डिव्हाइसवरून हटवला जाईल</translation> <translation id="1195558154361252544">तुम्ही अनुमती दिलेली साइट वगळता सर्व साइटसाठी सूचना आपोआप ब्लॉक केल्या आहेत</translation> <translation id="1197088940767939838">नारिंगी</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">पॅच सेवा</translation> <translation id="306198082577913404">पूर्वानुमानामधील सुधारणा सुरू करा</translation> <translation id="3062655045399308513">ब्राउझिंग डेटा हटवा...</translation> +<translation id="3063453392496098461">VPN बॅकग्राउंड सेवांचे इंस्टॉलेशन करता आले नाही.</translation> <translation id="306573536155379004">गेमला सुरुवात झाली.</translation> <translation id="3067505415088964188">किंमत कमी आहे</translation> <translation id="3068118691172921711">तुमचा <ph name="CLOUD_PROVIDER" /> मधील फाइल अपलोड १ मिनिटाने सुरू होईल</translation> @@ -1754,6 +1756,7 @@ <translation id="4103592298805904008">कार्डबोर्ड (सिंगल वॉल)</translation> <translation id="4104702906064390950">IBAN संबंधी माहिती सेव्ह करत आहे</translation> <translation id="4106887816571530227">एंबेड केलेल्या आशयाला अनुमती नाही</translation> +<translation id="4107047499377819067">VPN बॅकग्राउंड सेवांचे इंस्टॉलेशन सुरू झाले आहे, यासाठी काही मिनिटे लागू शकतात.</translation> <translation id="4110652170750985508">तुमचे पेमेंट पुन्हा एकदा तपासा</translation> <translation id="4111546256784973544">पेंटबॉल</translation> <translation id="4112140312785995938">मागे शोधा</translation> @@ -2783,6 +2786,7 @@ <translation id="6001839398155993679">चला करू या</translation> <translation id="6002122790816966947">तुमची डिव्हाइस</translation> <translation id="6002968396561884726">अलीकडे पाहिलेले</translation> +<translation id="6005188329423473970">VPN बॅकग्राउंड सेवा यांचे इंस्टॉलेशन पूर्ण झाले आहे. तुम्हाला VPN अॅप्स दिसत नसल्यास, कृपया लॉग आउट करून पुन्हा लॉग इन करा.</translation> <translation id="6005659677094197001">कंटिन्युअस</translation> <translation id="6005765687956866568">फॉर्ममधून ऑटोफिल माहिती साफ केली गेली आहे</translation> <translation id="6006365096047131769">३ x ५ इं</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb index 79c9ff6..2104b5f 100644 --- a/components/strings/components_strings_my.xtb +++ b/components/strings/components_strings_my.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">စကားဝှက်များ စစ်ဆေးရန်</translation> <translation id="1187430513518041110">မော်တော်ယာဉ်</translation> <translation id="1190491977647722791">စာရွက် (အထူ)</translation> +<translation id="1194278116501666615">ArcVm ကြိုဖွင့်ခြင်း အခြေအနေအပ်ဒိတ်</translation> <translation id="1195073053842921378">ဤလိပ်စာကို ယခုစက်မှ ဖျက်လိုက်မည်</translation> <translation id="1195558154361252544">သင်ခွင့်ပြုထားသည့် ဝဘ်ဆိုက်များအတွက်မှလွဲ၍ အကြောင်းကြားချက်များကို အလိုအလျောက် ပိတ်ထားသည်</translation> <translation id="1197088940767939838">လိမ္မော်ရောင်</translation> @@ -1151,6 +1152,7 @@ <translation id="3061707000357573562">ပြင်ဆင်ခြင်း ဝန်ဆောင်မှု</translation> <translation id="306198082577913404">ခန့်မှန်းချက် မွမ်းမံမှုများ ဖွင့်နိုင်သည်</translation> <translation id="3062655045399308513">ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာ ဖျက်ရန်…</translation> +<translation id="3063453392496098461">VPN နောက်ခံဝန်ဆောင်မှုများ ထည့်သွင်း၍ မရလိုက်ပါ။</translation> <translation id="306573536155379004">ဂိမ်းစတင်ပါပြီ။</translation> <translation id="3067505415088964188">ဈေးနှုန်း နိမ့်သည်</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" /> သို့ သင့်ဖိုင်အပ်လုဒ်လုပ်ခြင်းသည် ၁ မိနစ်အတွင်း စတင်ပါမည်</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">ကတ်ထူ (တစ်ထပ်)</translation> <translation id="4104702906064390950">IBAN အချက်အလက်ကို သိမ်းနေသည်</translation> <translation id="4106887816571530227">မြှုပ်သွင်းထားသော အကြောင်းအရာကို ခွင့်မပြုပါ</translation> +<translation id="4107047499377819067">VPN နောက်ခံဝန်ဆောင်မှုများ ထည့်သွင်းခြင်းကို စတင်လိုက်ပြီး အချိန်အနည်းငယ် ကြာနိုင်ပါသည်။</translation> <translation id="4110652170750985508">သင်၏ ငွေပေးချေမှုကို ပြန်စစ်ကြည့်ပါ</translation> <translation id="4111546256784973544">ဆေးရောင်သုံး သေနတ်ပစ်ကစားခြင်း</translation> <translation id="4112140312785995938">နောက်သို့ ပြန်ရစ်ရန်</translation> @@ -2785,6 +2788,7 @@ <translation id="6001839398155993679">စကြစို့</translation> <translation id="6002122790816966947">သင်၏စက်များ</translation> <translation id="6002968396561884726">လတ်တလော ကြည့်ထားသည်</translation> +<translation id="6005188329423473970">VPN နောက်ခံဝန်ဆောင်မှုများ ထည့်သွင်းပြီးပြီ။ VPN အက်ပ်များကို မတွေ့ပါက စနစ်မှထွက်ပြီး ပြန်ဝင်ပါ။</translation> <translation id="6005659677094197001">ဆက်တိုက်</translation> <translation id="6005765687956866568">အော်တိုဖြည့်အချက်အလက်ကို ဖောင်မှ ဖယ်ရှားထားသည်</translation> <translation id="6006365096047131769">၃ x ၅ လက်မ</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index a6ab7ca..4595ac96 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">ପାସ୍ୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରନ୍ତୁ</translation> <translation id="1187430513518041110">ଅଟୋ ଓ ଯାନବାହନ</translation> <translation id="1190491977647722791">କାଗଜ (ହେଭିୱେଟ)</translation> +<translation id="1194278116501666615">ArcVm ପ୍ରିଲୋଡ ପ୍ରୋଗ୍ରେସ ଅପଡେଟ</translation> <translation id="1195073053842921378">ଏହି ଡିଭାଇସରୁ ଏହି ଠିକଣାଟି ଡିଲିଟ ହୋଇଯିବ</translation> <translation id="1195558154361252544">ଆପଣ ଅନୁମତି ଦେଇଥିବା ସାଇଟ୍ଗୁଡ଼ିକ ବ୍ୟତୀତ ସମସ୍ତ ସାଇଟ୍ରେ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରାଯାଇଛି</translation> <translation id="1197088940767939838">କମଳା</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">ପ୍ୟାଚ୍ ସେବା</translation> <translation id="306198082577913404">ପୂର୍ବାନୁମାନ ଉନ୍ନତିକୁ ଚାଲୁ କରନ୍ତୁ</translation> <translation id="3062655045399308513">ବ୍ରାଉଜିଂ ଡାଟାକୁ ଡିଲିଟ କରନ୍ତୁ...</translation> +<translation id="3063453392496098461">VPN ବେକଗ୍ରାଉଣ୍ଡ ସେବାଗୁଡ଼ିକର ଇନଷ୍ଟଲେସନ ବିଫଳ ହୋଇଛି।</translation> <translation id="306573536155379004">ଗେମ୍ ଆରମ୍ଭ ହୋଇଛି।</translation> <translation id="3067505415088964188">ମୂଲ୍ୟ କମ ଅଟେ</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" />ରେ ଆପଣଙ୍କ ଫାଇଲର ଅପଲୋଡ 1 ମିନିଟରେ ଆରମ୍ଭ ହେବ</translation> @@ -1752,6 +1754,7 @@ <translation id="4103592298805904008">କାର୍ଡବୋର୍ଡ (ସିଙ୍ଗଲ ୱାଲ)</translation> <translation id="4104702906064390950">IBAN ସୂଚନା ସେଭ କରାଯାଉଛି</translation> <translation id="4106887816571530227">ଏମ୍ବେଡ କରାଯାଇଥିବା ବିଷୟବସ୍ତୁକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ</translation> +<translation id="4107047499377819067">VPN ବେକଗ୍ରାଉଣ୍ଡ ସେବାଗୁଡ଼ିକର ଇନଷ୍ଟଲେସନ ଆରମ୍ଭ ହୋଇଛି, ଏଥିପାଇଁ କିଛି ମିନିଟ ଲାଗିପାରେ।</translation> <translation id="4110652170750985508">ଆପଣ ପେମେଣ୍ଟର ସମୀକ୍ଷା କରନ୍ତୁ</translation> <translation id="4111546256784973544">ପେଣ୍ଟବଲ</translation> <translation id="4112140312785995938">ପଛକୁ ଆଣନ୍ତୁ</translation> @@ -2781,6 +2784,7 @@ <translation id="6001839398155993679">ଚାଲନ୍ତୁ ଆରମ୍ଭ କରିବା</translation> <translation id="6002122790816966947">ଆପଣଙ୍କ ଡିଭାଇସଗୁଡ଼ିକ</translation> <translation id="6002968396561884726">ଏବେ ଦେଖାଯାଇଥିବା ଉତ୍ପାଦଗୁଡ଼ିକ</translation> +<translation id="6005188329423473970">VPN ବେକଗ୍ରାଉଣ୍ଡ ସେବାଗୁଡ଼ିକର ଇନଷ୍ଟଲେସନ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି। ଯଦି ଆପଣ VPN ଆପ୍ସ ଦେଖୁନାହାନ୍ତି, ତେବେ ଦୟାକରି ଲଗ ଆଉଟ କରି ପୁଣି ଲଗ ଇନ କରନ୍ତୁ।</translation> <translation id="6005659677094197001">ଅବିରତ</translation> <translation id="6005765687956866568">ଅଟୋଫିଲ ହୋଇଥିବା ସୂଚନାକୁ ଫର୍ମରୁ ଖାଲି କରାଯାଇଛି</translation> <translation id="6006365096047131769">3 x 5 ଇଞ୍ଚ</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index 4b33829..a878ca65 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">ਪਾਸਵਰਡਾਂ ਦੀ ਜਾਂਚ ਕਰੋ</translation> <translation id="1187430513518041110">ਆਟੋ ਅਤੇ ਵਾਹਨ</translation> <translation id="1190491977647722791">ਪੇਪਰ (ਹੈਵੀਵੇਟ)</translation> +<translation id="1194278116501666615">ArcVm ਪ੍ਰੀਲੋਡ ਪ੍ਰਗਤੀ ਸੰਬੰਧੀ ਅੱਪਡੇਟ</translation> <translation id="1195073053842921378">ਇਸ ਪਤੇ ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> <translation id="1195558154361252544">ਸੂਚਨਾਵਾਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਇਜਾਜ਼ਤ ਦਿੱਤੀਆਂ ਸਾਈਟਾਂ ਨੂੰ ਛੱਡ ਕੇ ਸਾਰੀਆਂ ਸਾਈਟਾਂ ਲਈ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਬਲਾਕ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ</translation> <translation id="1197088940767939838">ਸੰਤਰੀ</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">ਪੈਚ ਸੇਵਾ</translation> <translation id="306198082577913404">ਪੂਰਵ-ਅਨੁਮਾਨ ਸੰਬੰਧੀ ਸੁਧਾਰਾਂ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="3062655045399308513">ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟਾ ਮਿਟਾਓ…</translation> +<translation id="3063453392496098461">VPN ਬੈਕਗ੍ਰਾਊਂਡ ਸੇਵਾਵਾਂ ਸੰਬੰਧੀ ਸਥਾਪਨਾ ਅਸਫਲ ਰਹੀ।</translation> <translation id="306573536155379004">ਗੇਮ ਸ਼ੁਰੂ ਕੀਤੀ ਗਈ।</translation> <translation id="3067505415088964188">ਕੀਮਤ ਘੱਟ ਹੈ</translation> <translation id="3068118691172921711">ਤੁਹਾਡੀ ਫ਼ਾਈਲ <ph name="CLOUD_PROVIDER" /> 'ਤੇ 1 ਮਿੰਟ ਵਿੱਚ ਅੱਪਲੋਡ ਹੋਣੀ ਸ਼ੁਰੂ ਹੋ ਜਾਵੇਗੀ</translation> @@ -1752,6 +1754,7 @@ <translation id="4103592298805904008">ਕਾਰਡਬੋਰਡ (ਸਿੰਗਲ ਵਾਲ)</translation> <translation id="4104702906064390950">IBAN ਜਾਣਕਾਰੀ ਰੱਖਿਅਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ</translation> <translation id="4106887816571530227">ਪਰੋਈ ਗਈ ਸਮੱਗਰੀ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ</translation> +<translation id="4107047499377819067">VPN ਬੈਕਗ੍ਰਾਊਂਡ ਸੇਵਾਵਾਂ ਸੰਬੰਧੀ ਸਥਾਪਨਾ ਸ਼ੁਰੂ ਹੋ ਗਈ ਹੈ, ਇਸ ਵਿੱਚ ਕੁਝ ਮਿੰਟ ਲੱਗ ਸਕਦੇ ਹਨ।</translation> <translation id="4110652170750985508">ਆਪਣੇ ਭੁਗਤਾਨ ਦੀ ਸਮੀਖਿਆ ਕਰੋ</translation> <translation id="4111546256784973544">ਪੇਂਟਬਾਲ</translation> <translation id="4112140312785995938">ਪਿੱਛੇ ਕਰੋ</translation> @@ -2781,6 +2784,7 @@ <translation id="6001839398155993679">ਚਲੋ ਸ਼ੁਰੂ ਕਰੀਏ</translation> <translation id="6002122790816966947">ਤੁਹਾਡੇ ਡੀਵਾਈਸ</translation> <translation id="6002968396561884726">ਹਾਲ ਹੀ ਵਿੱਚ ਦੇਖੇ ਗਏ</translation> +<translation id="6005188329423473970">VPN ਬੈਕਗ੍ਰਾਊਂਡ ਸੇਵਾਵਾਂ ਸੰਬੰਧੀ ਸਥਾਪਨਾ ਪੂਰੀ ਹੋ ਗਈ। ਜੇ ਤੁਹਾਨੂੰ VPN ਐਪਾਂ ਨਹੀਂ ਦਿਖਾਈ ਦਿੰਦੀਆਂ, ਤਾਂ ਕਿਰਪਾ ਕਰਕੇ ਲੌਗ-ਆਊਟ ਕਰੋ ਅਤੇ ਵਾਪਸ ਲੌਗ-ਇਨ ਕਰੋ।</translation> <translation id="6005659677094197001">ਲਗਾਤਾਰ</translation> <translation id="6005765687956866568">ਆਟੋਫਿਲ ਜਾਣਕਾਰੀ ਨੂੰ ਫ਼ਾਰਮ ਤੋਂ ਕਲੀਅਰ ਕੀਤਾ ਗਿਆ</translation> <translation id="6006365096047131769">3 x 5 ਇੰਚ</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index ee360fdc..1aba9ec 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Sprawdź hasła</translation> <translation id="1187430513518041110">Samochody i inne pojazdy</translation> <translation id="1190491977647722791">Papier (ciężki)</translation> +<translation id="1194278116501666615">Informacja o postępie wstępnego wczytywania ArcVm</translation> <translation id="1195073053842921378">Ten adres zostanie usunięty z tego urządzenia</translation> <translation id="1195558154361252544">Powiadomienia są automatycznie blokowane w przypadku wszystkich stron, chyba że na nie zezwolisz</translation> <translation id="1197088940767939838">Pomarańczowy</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Zastosowanie poprawki do usługi</translation> <translation id="306198082577913404">Włącz ulepszenia podpowiedzi</translation> <translation id="3062655045399308513">Usuń dane przeglądania…</translation> +<translation id="3063453392496098461">Nie udało się zainstalować usług VPN działających w tle.</translation> <translation id="306573536155379004">Gra się rozpoczęła.</translation> <translation id="3067505415088964188">Cena jest niska</translation> <translation id="3068118691172921711">Przesyłanie plików do usługi <ph name="CLOUD_PROVIDER" /> rozpocznie się za minutę</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Tektura (jednowarstwowa)</translation> <translation id="4104702906064390950">Zapisuję dane numeru IBAN</translation> <translation id="4106887816571530227">Umieszczona treść jest niedozwolona</translation> +<translation id="4107047499377819067">Rozpoczęła się instalacja usług VPN działających w tle. Może to potrwać kilka minut.</translation> <translation id="4110652170750985508">Sprawdź szczegóły płatności</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Przewiń do tyłu</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Do dzieła</translation> <translation id="6002122790816966947">Twoje urządzenia</translation> <translation id="6002968396561884726">Ostatnio wyświetlane</translation> +<translation id="6005188329423473970">Usługi VPN działające w tle zostały zainstalowane. Jeśli nie widzisz aplikacji VPN, wyloguj się i zaloguj ponownie.</translation> <translation id="6005659677094197001">Ciągły</translation> <translation id="6005765687956866568">Informacje autouzupełniania zostały usunięte z formularza</translation> <translation id="6006365096047131769">3 x 5 cali</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 9a5370c..4f86de8 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Verificar senhas</translation> <translation id="1187430513518041110">Automóveis e veículos</translation> <translation id="1190491977647722791">Papel (grosso)</translation> +<translation id="1194278116501666615">Atualização do progresso de pré-carregamento da VM do ARC</translation> <translation id="1195073053842921378">O endereço vai ser excluído deste dispositivo</translation> <translation id="1195558154361252544">As notificações são bloqueadas automaticamente para todos os sites, exceto para aqueles que têm permissão</translation> <translation id="1197088940767939838">Laranja</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Aplicar patch ao serviço</translation> <translation id="306198082577913404">Ativar melhorias de previsão</translation> <translation id="3062655045399308513">Excluir dados de navegação…</translation> +<translation id="3063453392496098461">Falha na instalação dos serviços em segundo plano da VPN.</translation> <translation id="306573536155379004">Jogo iniciado.</translation> <translation id="3067505415088964188">Preço baixo</translation> <translation id="3068118691172921711">O upload do arquivo para o <ph name="CLOUD_PROVIDER" /> vai começar em 1 minuto</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Papelão (camada única)</translation> <translation id="4104702906064390950">Salvando informações do IBAN</translation> <translation id="4106887816571530227">Não é permitido incorporar conteúdo</translation> +<translation id="4107047499377819067">A instalação dos serviços em segundo plano da VPN foi iniciada. Ela pode levar alguns minutos.</translation> <translation id="4110652170750985508">Analisar seu pagamento</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Voltar</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Vamos lá</translation> <translation id="6002122790816966947">Seus dispositivos</translation> <translation id="6002968396561884726">Acesso recente</translation> +<translation id="6005188329423473970">A instalação dos serviços em segundo plano da VPN foi concluída. Se você não encontrar os apps de VPN, saia e faça login de novo.</translation> <translation id="6005659677094197001">Contínua</translation> <translation id="6005765687956866568">As informações preenchidas automaticamente foram removidas do formulário</translation> <translation id="6006365096047131769">3 x 5 pol.</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 837b74b..eafad74 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Verifică parolele</translation> <translation id="1187430513518041110">Automobile și vehicule</translation> <translation id="1190491977647722791">Hârtie (grea)</translation> +<translation id="1194278116501666615">Actualizare privind progresul preîncărcării ArcVm</translation> <translation id="1195073053842921378">Adresa va fi ștearsă de pe acest dispozitiv</translation> <translation id="1195558154361252544">Notificările sunt blocate automat pentru toate site-urile, cu excepția celor pe care le accepți</translation> <translation id="1197088940767939838">Portocaliu</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Serviciu de corecție</translation> <translation id="306198082577913404">Activează îmbunătățirile predicțiilor</translation> <translation id="3062655045399308513">Șterge datele de navigare...</translation> +<translation id="3063453392496098461">Serviciile VPN în fundal nu s-au instalat.</translation> <translation id="306573536155379004">Jocul a început.</translation> <translation id="3067505415088964188">Prețul este mic</translation> <translation id="3068118691172921711">Încărcarea fișierelor în <ph name="CLOUD_PROVIDER" /> va începe într-un minut</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Carton (un perete)</translation> <translation id="4104702906064390950">Se salvează informațiile codului IBAN</translation> <translation id="4106887816571530227">Conținutul încorporat nu este permis</translation> +<translation id="4107047499377819067">Instalarea serviciilor VPN în fundal a început. Poate dura câteva minute.</translation> <translation id="4110652170750985508">Examinează plata</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Derulează înapoi</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Să începem</translation> <translation id="6002122790816966947">Dispozitivele tale</translation> <translation id="6002968396561884726">Afișate recent</translation> +<translation id="6005188329423473970">Instalarea Serviciilor VPN în fundal s-a încheiat. Dacă nu vezi aplicațiile VPN, deconectează-te și conectează-te din nou.</translation> <translation id="6005659677094197001">Continuu</translation> <translation id="6005765687956866568">Informațiile completate automat au fost șterse din formular</translation> <translation id="6006365096047131769">3 x 5 in</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb index f3a4475e..fdaf091 100644 --- a/components/strings/components_strings_si.xtb +++ b/components/strings/components_strings_si.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">මුරපද පරීක්ෂා කරන්න</translation> <translation id="1187430513518041110">මෝටර් රථ සහ වාහන</translation> <translation id="1190491977647722791">කඩදාසි (අධික බර)</translation> +<translation id="1194278116501666615">ArcVm පූර්ව පූරණ ප්රගති යාවත්කාලීන කිරීම</translation> <translation id="1195073053842921378">මෙම ලිපිනය මෙම උපාංගයෙන් මකනු ඇත</translation> <translation id="1195558154361252544">ඔබ අවසර දෙන ඒවා හැර සියලුම වෙබ් අඩවි සඳහා දැනුම්දීම් ස්වයංක්රීයව අවහිර කෙරෙති</translation> <translation id="1197088940767939838">තැඹිලි</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">පැච් සේවාව</translation> <translation id="306198082577913404">අනාවැකි වැඩි දියුණු කිරීම් ක්රියාත්මක කරන්න</translation> <translation id="3062655045399308513">බ්රවුස් කිරීමේ දත්ත මකන්න…</translation> +<translation id="3063453392496098461">VPN පසුබිම් සේවා ස්ථාපනය අසමත් විය.</translation> <translation id="306573536155379004">ක්රීඩාව ඇරඹිණි.</translation> <translation id="3067505415088964188">මිල අඩුයි</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" /> වෙත ඔබේ ගොනු උඩුගත කිරීම මිනිත්තු 1කින් ආරම්භ වනු ඇත</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">කාඩ්බෝඩ් (තනි බිත්තිය)</translation> <translation id="4104702906064390950">IBAN තතු සුරැකීම</translation> <translation id="4106887816571530227">කාවැද්දන ලද අන්තර්ගතයට ඉඩ නොදේ</translation> +<translation id="4107047499377819067">VPN පසුබිම් සේවා ස්ථාපනය ආරම්භ කර ඇත, මෙයට මිනිත්තු කිහිපයක් ගත වීමට හැක.</translation> <translation id="4110652170750985508">ඔබේ ගෙවීම සමාලෝචනය කරන්න</translation> <translation id="4111546256784973544">පේන්ට්බෝල්</translation> <translation id="4112140312785995938">පසුපසට සොයන්න</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">පටන් ගමු</translation> <translation id="6002122790816966947">ඔබගේ උපාංග</translation> <translation id="6002968396561884726">මෑතකදී බලන ලද</translation> +<translation id="6005188329423473970">VPN පසුබිම් සේවා ස්ථාපනය සම්පූර්ණයි. ඔබට VPN යෙදුම් නොපෙනේ නම්, වරනය වී නැවත පුරනය වන්න.</translation> <translation id="6005659677094197001">අඛණ්ඩ</translation> <translation id="6005765687956866568">ස්වයංව පුරවන ලද තතු පෝරමයෙන් හිස් කරන ලදි</translation> <translation id="6006365096047131769">අඟ 3 x 5</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index b936967..b0bb902 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Skontrolovať heslá</translation> <translation id="1187430513518041110">Automobily a vozidlá</translation> <translation id="1190491977647722791">Papier (vysoká gramáž)</translation> +<translation id="1194278116501666615">Informácie o priebehu prednačítania ArcVm</translation> <translation id="1195073053842921378">Táto adresa bude odstránená z tohto zariadenia</translation> <translation id="1195558154361252544">Upozornenia sú automaticky blokované pre všetky weby okrem tých, ktoré povolíte</translation> <translation id="1197088940767939838">Oranžová</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Služba opráv</translation> <translation id="306198082577913404">Zapnite zlepšenia predpovedí</translation> <translation id="3062655045399308513">Odstrániť dáta prehliadania…</translation> +<translation id="3063453392496098461">Inštalácia služieb VPN na pozadí sa nepodarila.</translation> <translation id="306573536155379004">Hra bola spustená.</translation> <translation id="3067505415088964188">Cena je nízka</translation> <translation id="3068118691172921711">Nahrávanie súborov do služby <ph name="CLOUD_PROVIDER" /> sa začne o 1 minútu</translation> @@ -1751,6 +1753,7 @@ <translation id="4103592298805904008">Kartón (jednovrstvový)</translation> <translation id="4104702906064390950">IBAN sa ukladá</translation> <translation id="4106887816571530227">Vložený obsah nie je povolený</translation> +<translation id="4107047499377819067">Začala sa inštalácia služieb VPN na pozadí, môže to trvať niekoľko minút.</translation> <translation id="4110652170750985508">Kontrola platby</translation> <translation id="4111546256784973544">Paintbal</translation> <translation id="4112140312785995938">Pretočiť dozadu</translation> @@ -2780,6 +2783,7 @@ <translation id="6001839398155993679">Poďme na to</translation> <translation id="6002122790816966947">Vaše zariadenia</translation> <translation id="6002968396561884726">Naposledy zobrazené</translation> +<translation id="6005188329423473970">Inštalácia služieb VPN na pozadí bola dokončená. Ak aplikácie VPN nevidíte, odhláste sa a znova sa prihláste.</translation> <translation id="6005659677094197001">Nepretržité</translation> <translation id="6005765687956866568">Automaticky doplnené informácie boli z formulára vymazané</translation> <translation id="6006365096047131769">3 × 5 palcov</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb index 540f8f68..437b354 100644 --- a/components/strings/components_strings_sq.xtb +++ b/components/strings/components_strings_sq.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Kontrollo fjalëkalimet</translation> <translation id="1187430513518041110">Automobila dhe automjete</translation> <translation id="1190491977647722791">Letër (e rëndë)</translation> +<translation id="1194278116501666615">Përditësimi për progresin e ngarkimit paraprak të ArcVm</translation> <translation id="1195073053842921378">Kjo adresë do të fshihet nga kjo pajisje</translation> <translation id="1195558154361252544">Njoftimet janë bllokuar automatikisht për të gjitha sajtet përveçse për ato që lejon ti</translation> <translation id="1197088940767939838">Portokalli</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Shërbimi i korrigjimit</translation> <translation id="306198082577913404">Aktivizo përmirësimet e parashikimit</translation> <translation id="3062655045399308513">Fshi të dhënat e shfletimit…</translation> +<translation id="3063453392496098461">Instalimi i shërbimeve të VPN-së në sfond dështoi.</translation> <translation id="306573536155379004">Loja filloi.</translation> <translation id="3067505415088964188">Çmimi është i ulët</translation> <translation id="3068118691172921711">Ngarkimi i skedarit në <ph name="CLOUD_PROVIDER" /> do të fillojë pas 1 minute</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Karton (me një mur)</translation> <translation id="4104702906064390950">Po ruhen informacionet e numrit IBAN</translation> <translation id="4106887816571530227">Përmbajtja e integruar nuk lejohet</translation> +<translation id="4107047499377819067">Instalimi i shërbimeve të VPN-së në sfond ka filluar. Kjo mund të zgjasë disa minuta.</translation> <translation id="4110652170750985508">Rishiko pagesën tënde</translation> <translation id="4111546256784973544">Lojërat me armë me bojë</translation> <translation id="4112140312785995938">Kërko prapa</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Fillojmë</translation> <translation id="6002122790816966947">Pajisjet e tua</translation> <translation id="6002968396561884726">Shikuar së fundi</translation> +<translation id="6005188329423473970">Instalimi i shërbimeve të VPN-së në sfond ka përfunduar. Nëse nuk i shikon aplikacionet e VPN-së, dil dhe identifikohu përsëri.</translation> <translation id="6005659677094197001">I vazhdueshëm</translation> <translation id="6005765687956866568">Informacionet e plotësuara automatikisht u pastruan nga formulari</translation> <translation id="6006365096047131769">3 x 5 inç</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 2afe565..2c03def 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Kagua Manenosiri</translation> <translation id="1187430513518041110">Motokaa na Magari</translation> <translation id="1190491977647722791">Karatasi (Nzito)</translation> +<translation id="1194278116501666615">Sasisho la maendeleo ya upakiaji mapema wa ArcVm</translation> <translation id="1195073053842921378">Anwani hii itafutwa kwenye kifaa hiki</translation> <translation id="1195558154361252544">Arifa zinazuiwa kiotomatiki kwenye tovuti zote isipokuwa zile unazoruhusu</translation> <translation id="1197088940767939838">Rangi ya machungwa</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Huduma ya Kurekebisha</translation> <translation id="306198082577913404">Washa kipengele cha maboresho ya utabiri</translation> <translation id="3062655045399308513">Futa Data ya Kuvinjari...</translation> +<translation id="3063453392496098461">Imeshindwa kuweka huduma za chinichini za VPN.</translation> <translation id="306573536155379004">Mchezo umeanza.</translation> <translation id="3067505415088964188">Bei ni nafuu</translation> <translation id="3068118691172921711">Upakiaji wa faili yako kwenye <ph name="CLOUD_PROVIDER" /> utaanza baada ya dakika 1</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Kadibodi (Ukuta Mmoja)</translation> <translation id="4104702906064390950">Inahifadhi taarifa za IBAN</translation> <translation id="4106887816571530227">Maudhui yaliyopachikwa hayaruhusiwi</translation> +<translation id="4107047499377819067">Imeanza kuweka huduma za chinichini za VPN, huenda hatua hii ikachukua muda.</translation> <translation id="4110652170750985508">Kagua malipo yako</translation> <translation id="4111546256784973544">Mchezo wa bunduki bandia ya rangi</translation> <translation id="4112140312785995938">Sogeza Nyuma</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Twende kazi</translation> <translation id="6002122790816966947">Vifaa vyako</translation> <translation id="6002968396561884726">Ulizotazama Hivi Majuzi</translation> +<translation id="6005188329423473970">Imemaliza kuweka Huduma za Chinichini za VPN. Ikiwa huoni programu za VPN, tafadhali ondoka na uingie tena.</translation> <translation id="6005659677094197001">Endelevu</translation> <translation id="6005765687956866568">Maelezo yaliyojazwa kiotomatiki yamefutwa kwenye fomu</translation> <translation id="6006365096047131769">Inchi 3 x 5</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 5848c90..28840a5 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">கடவுச்சொற்களைச் சோதித்துப் பார்க்கவும்</translation> <translation id="1187430513518041110">வாகனங்கள்</translation> <translation id="1190491977647722791">ஹெவிவெயிட் காகிதம்</translation> +<translation id="1194278116501666615">ArcVmமை முன்கூட்டியே ஏற்றுதல் செயல்நிலை அறிவிப்பு</translation> <translation id="1195073053842921378">இந்தச் சாதனத்தில் இருந்து இந்த முகவரி நீக்கப்படும்</translation> <translation id="1195558154361252544">நீங்கள் அனுமதிக்கும் தளங்களைத் தவிர பிற அனைத்துத் தளங்களுக்கும் அறிவிப்புகள் தானாகவே முடக்கப்படும்</translation> <translation id="1197088940767939838">ஆரஞ்சு</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">பேட்ச் சேவை</translation> <translation id="306198082577913404">கணிப்பு மேம்பாடுகளை இயக்குங்கள்</translation> <translation id="3062655045399308513">உலாவிய தரவை நீக்கு...</translation> +<translation id="3063453392496098461">VPN பின்னணிச் சேவைகளை நிறுவ முடியவில்லை.</translation> <translation id="306573536155379004">கேம் தொடங்கியது.</translation> <translation id="3067505415088964188">விலை குறைந்துள்ளது</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" />க்கு உங்கள் ஃபைல் பதிவேற்றம் இன்னும் ஒரு நிமிடத்தில் தொடங்கும்</translation> @@ -1751,6 +1753,7 @@ <translation id="4103592298805904008">சிங்கிள் வால் கார்டுபோர்டு</translation> <translation id="4104702906064390950">IBAN தகவலைச் சேமிக்கிறது</translation> <translation id="4106887816571530227">உட்பொதிக்கப்பட்ட உள்ளடக்கம் அனுமதிக்கப்படவில்லை</translation> +<translation id="4107047499377819067">VPN பின்னணிச் சேவைகள் நிறுவல் தொடங்கியுள்ளது. இதற்குச் சில நிமிடங்கள் ஆகலாம்.</translation> <translation id="4110652170750985508">உங்கள் கட்டணத்தை மதிப்பாய்வு செய்யவும்</translation> <translation id="4111546256784973544">பெயிண்ட்பால்</translation> <translation id="4112140312785995938">பின்செல்</translation> @@ -2780,6 +2783,7 @@ <translation id="6001839398155993679">தொடங்குக</translation> <translation id="6002122790816966947">உங்கள் சாதனங்கள்</translation> <translation id="6002968396561884726">சமீபத்தில் பார்த்தது</translation> +<translation id="6005188329423473970">VPN பின்னணிச் சேவைகள் நிறுவப்பட்டன. VPN ஆப்ஸ் உங்களுக்குக் காட்டப்படவில்லை என்றால், வெளியேறிவிட்டு மீண்டும் உள்நுழையவும்.</translation> <translation id="6005659677094197001">தொடர்ச்சியானது</translation> <translation id="6005765687956866568">தானாக நிரப்பப்பட்ட தகவல், படிவத்தில் இருந்து அழிக்கப்பட்டது</translation> <translation id="6006365096047131769">3 x 5 இன்ச்</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 10562e2..4709c2d7 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Şifreleri Kontrol Et</translation> <translation id="1187430513518041110">Arabalar ve Taşıtlar</translation> <translation id="1190491977647722791">Kağıt (Kalın)</translation> +<translation id="1194278116501666615">ArcVm önceden yükleme ilerleme durumu güncellemesi</translation> <translation id="1195073053842921378">Bu adres bu cihazdan silinecek</translation> <translation id="1195558154361252544">Bildirimler, izin verdikleriniz dışındaki tüm siteler için otomatik olarak engellenir</translation> <translation id="1197088940767939838">Turuncu</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Yama Hizmeti</translation> <translation id="306198082577913404">Geliştirilmiş tahminleri etkinleştirin</translation> <translation id="3062655045399308513">Tarama Verilerini Sil</translation> +<translation id="3063453392496098461">VPN arka plan hizmetleri yüklenemedi.</translation> <translation id="306573536155379004">Oyun başladı.</translation> <translation id="3067505415088964188">Düşük fiyatlı</translation> <translation id="3068118691172921711"><ph name="CLOUD_PROVIDER" /> hedefine dosya yükleme işleminiz 1 dakika sonra başlayacak</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Karton (Tek Duvarlı)</translation> <translation id="4104702906064390950">IBAN bilgileri kaydediliyor</translation> <translation id="4106887816571530227">Yerleştirilmiş içeriğe izin verilmedi</translation> +<translation id="4107047499377819067">VPN arka plan hizmetleri yüklenmeye başladı. Bu işlem birkaç dakika sürebilir.</translation> <translation id="4110652170750985508">Ödemenizi inceleyin</translation> <translation id="4111546256784973544">Paintball</translation> <translation id="4112140312785995938">Geri Sar</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Başlayalım</translation> <translation id="6002122790816966947">Cihazlarınız</translation> <translation id="6002968396561884726">Son Görüntülenenler</translation> +<translation id="6005188329423473970">VPN arka plan hizmetlerinin yüklenmesi tamamlandı. VPN uygulamalarını görmüyorsanız lütfen çıkış yapıp tekrar giriş yapın.</translation> <translation id="6005659677094197001">Sürekli</translation> <translation id="6005765687956866568">Otomatik doldurulan bilgiler formdan silindi</translation> <translation id="6006365096047131769">3 x 5 inç</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 9fd8cef..6d8180e 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Перевірити паролі</translation> <translation id="1187430513518041110">Автомобілі й інший транспорт</translation> <translation id="1190491977647722791">Папір (щільний)</translation> +<translation id="1194278116501666615">Оновлення щодо перебігу попереднього завантаження ArcVM</translation> <translation id="1195073053842921378">Адресу буде видалено з цього пристрою</translation> <translation id="1195558154361252544">Сповіщення автоматично заблоковано для всіх сайтів, крім тих, які ви дозволили</translation> <translation id="1197088940767939838">Оранжевий</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Служба виправлень</translation> <translation id="306198082577913404">Увімкніть покращене прогнозування</translation> <translation id="3062655045399308513">Видалити дані вебперегляду…</translation> +<translation id="3063453392496098461">Не вдалося встановити фонові сервіси VPN.</translation> <translation id="306573536155379004">Гра почалася.</translation> <translation id="3067505415088964188">Низька ціна</translation> <translation id="3068118691172921711">Завантаження файлів у сервіс <ph name="CLOUD_PROVIDER" /> почнеться через 1 хвилину</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Картон (тришаровий)</translation> <translation id="4104702906064390950">Зберігання коду IBAN</translation> <translation id="4106887816571530227">Вставлений контент заборонено</translation> +<translation id="4107047499377819067">Фонові сервіси VPN установлюються. Це може зайняти кілька хвилин.</translation> <translation id="4110652170750985508">Переглянути платіж</translation> <translation id="4111546256784973544">Пейнтбол</translation> <translation id="4112140312785995938">Перейти назад</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Почати</translation> <translation id="6002122790816966947">Ваші пристрої</translation> <translation id="6002968396561884726">Нещодавно переглянуто</translation> +<translation id="6005188329423473970">Фонові сервіси VPN установлено. Якщо додатки VPN не відображаються, вийдіть з облікового запису й увійдіть знову.</translation> <translation id="6005659677094197001">Безперервний друк</translation> <translation id="6005765687956866568">Автоматично заповнену інформацію було вилучено з форми</translation> <translation id="6006365096047131769">3 x 5 дюйм.</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index c0641397..9f47336d 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">پاس ورڈز چیک کریں</translation> <translation id="1187430513518041110">آٹوز اور گاڑیاں</translation> <translation id="1190491977647722791">کاغذ (ہیوی ویٹ)</translation> +<translation id="1194278116501666615">ArcVm پیشگی لوڈ پیش رفت کی اپ ڈیٹ</translation> <translation id="1195073053842921378">یہ پتہ اس آلے سے حذف ہو جائے گا</translation> <translation id="1195558154361252544">تمام سائٹس کے لیے اطلاعات کو خودکار طور پر مسدود کر دیا گیا ہے سوائے ان کے جن کی آپ نے اجازت دی ہے</translation> <translation id="1197088940767939838">نارنجی</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">پیچ سروس</translation> <translation id="306198082577913404">پیشگوئی کی بہتریوں کے لیے آن کریں</translation> <translation id="3062655045399308513">براؤزنگ ڈیٹا حذف کریں...</translation> +<translation id="3063453392496098461">VPN کی پس منظر سروسز کی انسٹالیشن ناکام ہو گئی۔</translation> <translation id="306573536155379004">گیم شروع ہو گئی۔</translation> <translation id="3067505415088964188">قیمت کم ہے</translation> <translation id="3068118691172921711">1 منٹ میں آپ کی فائل <ph name="CLOUD_PROVIDER" /> میں اپ لوڈ ہونا شروع ہو جائے گی</translation> @@ -1756,6 +1758,7 @@ <translation id="4103592298805904008">کارڈ بورڈ (سنگل وال)</translation> <translation id="4104702906064390950">IBAN کی معلومات کو محفوظ کیا جا رہا ہے</translation> <translation id="4106887816571530227">سرایت کردہ مواد کی اجازت نہیں ہے</translation> +<translation id="4107047499377819067">VPN کی پس منظر سروسز کی انسٹالیشن شروع ہو گئی ہے، اس میں چند منٹ لگ سکتے ہیں۔</translation> <translation id="4110652170750985508">اپنی ادائیگی کا جائزہ لیں</translation> <translation id="4111546256784973544">پینٹ بال</translation> <translation id="4112140312785995938">پیچھے کریں</translation> @@ -2785,6 +2788,7 @@ <translation id="6001839398155993679">آئیے شروع کریں</translation> <translation id="6002122790816966947">آپ کے آلات</translation> <translation id="6002968396561884726">حال ہی میں ملاحظہ کردہ</translation> +<translation id="6005188329423473970">VPN کی پس منظر سروسز کی انسٹالیشن مکمل ہو گئی۔ اگر آپ کو VPN ایپس نظر نہیں آتی ہیں تو براہ کرم لاگ آؤٹ کریں اور دوبارہ لاگ ان کریں۔</translation> <translation id="6005659677094197001">مسلسل</translation> <translation id="6005765687956866568">فارم سے خود کار طریقے سے پُر کی گئی معلومات کو صاف کر دیا گیا تھا</translation> <translation id="6006365096047131769">3 x 5 انچ</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 93157aa..15c814f 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Kiểm tra mật khẩu</translation> <translation id="1187430513518041110">Ô tô và xe cộ</translation> <translation id="1190491977647722791">Giấy (Nặng)</translation> +<translation id="1194278116501666615">Thông tin cập nhật về tiến trình tải trước ArcVm</translation> <translation id="1195073053842921378">Địa chỉ này sẽ bị xoá khỏi thiết bị này</translation> <translation id="1195558154361252544">Đã tự động chặn thông báo đối với mọi trang web, ngoại trừ những trang web bạn cho phép</translation> <translation id="1197088940767939838">Màu cam</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Dịch vụ vá lỗi</translation> <translation id="306198082577913404">Bật tính năng cải thiện nội dung gợi ý</translation> <translation id="3062655045399308513">Xoá dữ liệu duyệt web...</translation> +<translation id="3063453392496098461">Không cài đặt được dịch vụ nền VPN.</translation> <translation id="306573536155379004">Đã bắt đầu trò chơi.</translation> <translation id="3067505415088964188">Giá thấp</translation> <translation id="3068118691172921711">Quá trình tải tệp lên <ph name="CLOUD_PROVIDER" /> sẽ bắt đầu sau 1 phút</translation> @@ -1755,6 +1757,7 @@ <translation id="4103592298805904008">Bìa cứng (Một lớp)</translation> <translation id="4104702906064390950">Đang lưu thông tin IBAN</translation> <translation id="4106887816571530227">Không cho phép nội dung đã nhúng</translation> +<translation id="4107047499377819067">Quá trình cài đặt dịch vụ nền VPN đã bắt đầu. Quá trình này có thể mất vài phút.</translation> <translation id="4110652170750985508">Xem xét thanh toán của bạn</translation> <translation id="4111546256784973544">Bắn súng đạn nước sơn</translation> <translation id="4112140312785995938">Tua lùi</translation> @@ -2784,6 +2787,7 @@ <translation id="6001839398155993679">Bắt đầu</translation> <translation id="6002122790816966947">Các thiết bị của bạn</translation> <translation id="6002968396561884726">Đã xem gần đây</translation> +<translation id="6005188329423473970">Đã hoàn tất cài đặt Dịch vụ nền VPN. Nếu bạn không thấy ứng dụng VPN, vui lòng đăng xuất rồi đăng nhập lại.</translation> <translation id="6005659677094197001">Liên tục</translation> <translation id="6005765687956866568">Thông tin tự động điền đã bị xoá khỏi biểu mẫu</translation> <translation id="6006365096047131769">3 x 5 inch</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index 9853f6b..700e1bb 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">检查密码</translation> <translation id="1187430513518041110">车辆与载具</translation> <translation id="1190491977647722791">纸(重磅纸)</translation> +<translation id="1194278116501666615">ArcVm 预加载进度更新</translation> <translation id="1195073053842921378">该地址将从此设备中删除</translation> <translation id="1195558154361252544">除您允许的网站外,已自动阻止所有其他网站显示通知</translation> <translation id="1197088940767939838">橙色</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">修补服务</translation> <translation id="306198082577913404">开启预测改进功能</translation> <translation id="3062655045399308513">删除浏览数据…</translation> +<translation id="3063453392496098461">VPN 后台服务安装失败。</translation> <translation id="306573536155379004">游戏已开始。</translation> <translation id="3067505415088964188">价格低</translation> <translation id="3068118691172921711">系统将在 1 分钟后开始将文件上传到<ph name="CLOUD_PROVIDER" /></translation> @@ -1751,6 +1753,7 @@ <translation id="4103592298805904008">纸板(单层)</translation> <translation id="4104702906064390950">正在保存 IBAN 信息</translation> <translation id="4106887816571530227">不允许嵌入内容</translation> +<translation id="4107047499377819067">已开始安装 VPN 后台服务,这可能需要几分钟时间。</translation> <translation id="4110652170750985508">查看您的付款</translation> <translation id="4111546256784973544">彩弹射击</translation> <translation id="4112140312785995938">快退</translation> @@ -2780,6 +2783,7 @@ <translation id="6001839398155993679">开始</translation> <translation id="6002122790816966947">您的设备</translation> <translation id="6002968396561884726">最近查看过</translation> +<translation id="6005188329423473970">VPN 后台服务安装完毕。如果您看不到 VPN 应用,请退出并重新登录。</translation> <translation id="6005659677094197001">连续纸</translation> <translation id="6005765687956866568">已从此表单中清除自动填充的信息</translation> <translation id="6006365096047131769">3 x 5 英寸</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index 2be0057..74ba7ba 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -1756,7 +1756,7 @@ <translation id="4103592298805904008">紙板 (單層瓦楞紙)</translation> <translation id="4104702906064390950">儲存緊 IBAN 資料</translation> <translation id="4106887816571530227">唔批准嵌入嘅內容</translation> -<translation id="4107047499377819067">VPN 背景服務已開始安裝,可能需要幾分鐘才能完成。</translation> +<translation id="4107047499377819067">VPN 背景服務已開始安裝,可能需時幾分鐘。</translation> <translation id="4110652170750985508">檢查您的付款</translation> <translation id="4111546256784973544">漆彈</translation> <translation id="4112140312785995938">向後回轉</translation> @@ -2786,7 +2786,7 @@ <translation id="6001839398155993679">立即使用</translation> <translation id="6002122790816966947">您的裝置</translation> <translation id="6002968396561884726">最近查看過</translation> -<translation id="6005188329423473970">VPN 背景服務安裝完成。如果沒看到 VPN 應用程式,請登出再重新登入。</translation> +<translation id="6005188329423473970">VPN 背景服務安裝完成。如果看不到 VPN 應用程式,請登出再重新登入。</translation> <translation id="6005659677094197001">連續</translation> <translation id="6005765687956866568">已經由表格清除咗自動填入嘅資料</translation> <translation id="6006365096047131769">3 x 5 吋</translation>
diff --git a/components/strings/components_strings_zu.xtb b/components/strings/components_strings_zu.xtb index 7cdcc49..2db657ee 100644 --- a/components/strings/components_strings_zu.xtb +++ b/components/strings/components_strings_zu.xtb
@@ -109,6 +109,7 @@ <translation id="1186201132766001848">Hlola amaphasiwedi</translation> <translation id="1187430513518041110">Izimoto Nezinqola</translation> <translation id="1190491977647722791">Iphepha (Isisindo Esikhulu)</translation> +<translation id="1194278116501666615">Buyekeza inqubekelaphambili yokulayisha kusengaphambili kwe-ArcVm</translation> <translation id="1195073053842921378">Leli kheli lizosuswa kule divayisi</translation> <translation id="1195558154361252544">Izaziso zivinjelwe ngokuzenzakalela kuwo wonke amasayithi ngaphandle kwalawo ovavumelayo</translation> <translation id="1197088940767939838">Olintshi</translation> @@ -1146,6 +1147,7 @@ <translation id="3061707000357573562">Isevisi yepeshi</translation> <translation id="306198082577913404">Vula ukuthuthukiswa kokubikezela</translation> <translation id="3062655045399308513">Sula Idatha Yopheqululo...</translation> +<translation id="3063453392496098461">Kwehlulekile ukufakwa kwamaSevisi Angemuva e-VPN.</translation> <translation id="306573536155379004">Igeyimu iqalile.</translation> <translation id="3067505415088964188">Intengo iphansi</translation> <translation id="3068118691172921711">Ukulayisha kwefayela lakho ku-<ph name="CLOUD_PROVIDER" /> kuzoqala emzuzwini o-1</translation> @@ -1752,6 +1754,7 @@ <translation id="4103592298805904008">I-Cardboard (Udonga Olulodwa)</translation> <translation id="4104702906064390950">Ilondoloza ulwazi lwe-IBAN</translation> <translation id="4106887816571530227">Okuqukethwe okushumekiwe akuvunyelwe</translation> +<translation id="4107047499377819067">Sekuqalile ukufakwa kwamasevisi angemuva e-VPN, lokhu kungase kuthathe imizuzu embalwa.</translation> <translation id="4110652170750985508">Buyekeza inkokhelo yakho</translation> <translation id="4111546256784973544">Awe-Paintball</translation> <translation id="4112140312785995938">Funela emuva</translation> @@ -2781,6 +2784,7 @@ <translation id="6001839398155993679">Masihambe</translation> <translation id="6002122790816966947">Amadivayisi akho</translation> <translation id="6002968396561884726">Okubukwe Muva</translation> +<translation id="6005188329423473970">Sekuqediwe ukufakwa kwamaSevisi Angemuva e-VPN. Uma ungawaboni ama-app e-VPN, sicela uphume ngemvume uphinde ungene ngemvume.</translation> <translation id="6005659677094197001">Okuqhubekayo</translation> <translation id="6005765687956866568">Ulwazi olugcwaliswe ngokuzenzakalela lusuliwe efomini</translation> <translation id="6006365096047131769">3 x 5 phakathi</translation>
diff --git a/components/supervised_user/core/browser/child_account_service_unittest.cc b/components/supervised_user/core/browser/child_account_service_unittest.cc index 83fbb2a..475341d 100644 --- a/components/supervised_user/core/browser/child_account_service_unittest.cc +++ b/components/supervised_user/core/browser/child_account_service_unittest.cc
@@ -32,6 +32,7 @@ #include "components/supervised_user/test_support/supervised_user_url_filter_test_utils.h" #include "components/sync/test/mock_sync_service.h" #include "components/sync_preferences/testing_pref_service_syncable.h" +#include "google_apis/gaia/gaia_id.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h" @@ -167,7 +168,7 @@ GetGoogleAuthStateNotAuthenticatedWithInvalidAccount) { // An invalid (but signed-in) account means not authenticated. signin::SetListAccountsResponseOneAccountWithParams( - {"me@example.com", /*gaia_id=*/"abcdef", + {"me@example.com", GaiaId("abcdef"), /*valid=*/false, /*signed_out=*/false, /*verified=*/true}, @@ -182,7 +183,7 @@ TEST_F(ChildAccountServiceTest, GetGoogleAuthStateNotAuthenticatedNotSignedIn) { // A valid but not signed-in account means not authenticated. signin::SetListAccountsResponseOneAccountWithParams( - {"me@example.com", /*gaia_id=*/"abcdef", + {"me@example.com", GaiaId("abcdef"), /*valid=*/true, /*signed_out=*/true, /*verified=*/true},
diff --git a/components/supervised_user/test_support/kids_chrome_management_test_utils.cc b/components/supervised_user/test_support/kids_chrome_management_test_utils.cc index 5ddaa990..a049b846 100644 --- a/components/supervised_user/test_support/kids_chrome_management_test_utils.cc +++ b/components/supervised_user/test_support/kids_chrome_management_test_utils.cc
@@ -10,6 +10,7 @@ #include "base/strings/strcat.h" #include "components/signin/public/identity_manager/identity_test_utils.h" #include "components/supervised_user/core/browser/proto/kidsmanagement_messages.pb.h" +#include "google_apis/gaia/gaia_id.h" namespace supervised_user { @@ -25,7 +26,7 @@ mutable_member->mutable_profile()->set_profile_image_url( base::StrCat({"http://image.url/", username})); mutable_member->set_role(role); - mutable_member->set_user_id(signin::GetTestGaiaIdForEmail(email)); + mutable_member->set_user_id(signin::GetTestGaiaIdForEmail(email).ToString()); } } // namespace supervised_user
diff --git a/components/sync/service/account_pref_utils_unittest.cc b/components/sync/service/account_pref_utils_unittest.cc index 7022754..f7ee448 100644 --- a/components/sync/service/account_pref_utils_unittest.cc +++ b/components/sync/service/account_pref_utils_unittest.cc
@@ -7,6 +7,7 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" #include "components/signin/public/base/gaia_id_hash.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gtest/include/gtest/gtest.h" namespace syncer { @@ -23,7 +24,7 @@ pref_service.registry()->RegisterDictionaryPref(kPrefPathScalar); const signin::GaiaIdHash gaia_id_hash = - signin::GaiaIdHash::FromGaiaId("gaia_id"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id")); ASSERT_FALSE( GetAccountKeyedPrefValue(&pref_service, kPrefPathScalar, gaia_id_hash)); @@ -48,9 +49,9 @@ pref_service.registry()->RegisterDictionaryPref(kPrefPathScalar); const signin::GaiaIdHash gaia_id_hash_1 = - signin::GaiaIdHash::FromGaiaId("gaia_id_1"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_1")); const signin::GaiaIdHash gaia_id_hash_2 = - signin::GaiaIdHash::FromGaiaId("gaia_id_2"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_2")); SetAccountKeyedPrefValue(&pref_service, kPrefPathScalar, gaia_id_hash_1, base::Value("value_1")); @@ -72,7 +73,7 @@ pref_service.registry()->RegisterDictionaryPref(kPrefPathDict); const signin::GaiaIdHash gaia_id_hash = - signin::GaiaIdHash::FromGaiaId("gaia_id"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id")); const char kKey1[] = "key1"; const char kKey2[] = "key2"; @@ -112,9 +113,9 @@ pref_service.registry()->RegisterDictionaryPref(kPrefPathDict); const signin::GaiaIdHash gaia_id_hash_1 = - signin::GaiaIdHash::FromGaiaId("gaia_id_1"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_1")); const signin::GaiaIdHash gaia_id_hash_2 = - signin::GaiaIdHash::FromGaiaId("gaia_id_2"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_2")); const char kKey[] = "key"; @@ -139,11 +140,11 @@ pref_service.registry()->RegisterDictionaryPref(kPrefPathDict); const signin::GaiaIdHash gaia_id_hash_1 = - signin::GaiaIdHash::FromGaiaId("gaia_id_1"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_1")); const signin::GaiaIdHash gaia_id_hash_2 = - signin::GaiaIdHash::FromGaiaId("gaia_id_2"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_2")); const signin::GaiaIdHash gaia_id_hash_3 = - signin::GaiaIdHash::FromGaiaId("gaia_id_3"); + signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_3")); const char kKey[] = "key";
diff --git a/components/sync/service/glue/sync_engine_impl_unittest.cc b/components/sync/service/glue/sync_engine_impl_unittest.cc index 3e82c5b0..a0c7098 100644 --- a/components/sync/service/glue/sync_engine_impl_unittest.cc +++ b/components/sync/service/glue/sync_engine_impl_unittest.cc
@@ -37,6 +37,7 @@ #include "components/sync/service/glue/sync_transport_data_prefs.h" #include "components/sync/test/fake_sync_manager.h" #include "components/sync/test/mock_sync_invalidations_service.h" +#include "google_apis/gaia/gaia_id.h" #include "services/network/test/test_network_connection_tracker.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -165,7 +166,8 @@ "fakeDebugName", &mock_sync_invalidations_service_, std::move(mock_active_devices_provider), std::make_unique<SyncTransportDataPrefs>( - &pref_service_, signin::GaiaIdHash::FromGaiaId(kTestGaiaId)), + &pref_service_, + signin::GaiaIdHash::FromGaiaId(GaiaId(kTestGaiaId))), temp_dir_.GetPath().Append(base::FilePath(kTestSyncDir)), std::move(sync_task_runner)); @@ -194,7 +196,7 @@ // Synchronously initializes the backend. void InitializeBackend(bool expect_success = true, - const GaiaId& gaia_id = kTestGaiaId) { + const GaiaId& gaia_id = GaiaId(kTestGaiaId)) { SyncEngine::InitParams params; params.host = &mock_host_; params.http_factory_getter = base::BindOnce(&CreateHttpBridgeFactory); @@ -610,14 +612,15 @@ TEST_F(SyncEngineImplTest, ShouldLoadSyncDataUponInitialization) { SyncTransportDataPrefs transport_data_prefs( - &pref_service_, signin::GaiaIdHash::FromGaiaId(kTestGaiaId)); + &pref_service_, signin::GaiaIdHash::FromGaiaId(GaiaId(kTestGaiaId))); transport_data_prefs.SetCacheGuid(kTestCacheGuid); transport_data_prefs.SetBirthday(kTestBirthday); - transport_data_prefs.SetCurrentSyncingGaiaId(kTestGaiaId); + transport_data_prefs.SetCurrentSyncingGaiaId(GaiaId(kTestGaiaId)); InitializeBackend(); - EXPECT_EQ(kTestGaiaId, transport_data_prefs.GetCurrentSyncingGaiaId()); + EXPECT_EQ(GaiaId(kTestGaiaId), + transport_data_prefs.GetCurrentSyncingGaiaId()); EXPECT_EQ(kTestCacheGuid, transport_data_prefs.GetCacheGuid()); EXPECT_EQ(kTestBirthday, transport_data_prefs.GetBirthday()); } @@ -652,10 +655,10 @@ TEST_F(SyncEngineImplTest, ShouldReturnWhetherNextPollTimePassed) { SyncTransportDataPrefs transport_data_prefs( - &pref_service_, signin::GaiaIdHash::FromGaiaId(kTestGaiaId)); + &pref_service_, signin::GaiaIdHash::FromGaiaId(GaiaId(kTestGaiaId))); transport_data_prefs.SetCacheGuid(kTestCacheGuid); transport_data_prefs.SetBirthday(kTestBirthday); - transport_data_prefs.SetCurrentSyncingGaiaId(kTestGaiaId); + transport_data_prefs.SetCurrentSyncingGaiaId(GaiaId(kTestGaiaId)); transport_data_prefs.SetLastPollTime(base::Time::Now() - base::Hours(5)); transport_data_prefs.SetPollInterval(base::Hours(4));
diff --git a/components/sync/service/glue/sync_transport_data_prefs_unittest.cc b/components/sync/service/glue/sync_transport_data_prefs_unittest.cc index 1902807..114144e6 100644 --- a/components/sync/service/glue/sync_transport_data_prefs_unittest.cc +++ b/components/sync/service/glue/sync_transport_data_prefs_unittest.cc
@@ -12,6 +12,7 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" #include "components/sync/base/features.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gtest/include/gtest/gtest.h" namespace syncer { @@ -23,9 +24,9 @@ SyncTransportDataPrefsTest() { SyncTransportDataPrefs::RegisterProfilePrefs(pref_service_.registry()); sync_prefs_ = std::make_unique<SyncTransportDataPrefs>( - &pref_service_, signin::GaiaIdHash::FromGaiaId("gaia_id")); + &pref_service_, signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id"))); sync_prefs_2_ = std::make_unique<SyncTransportDataPrefs>( - &pref_service_, signin::GaiaIdHash::FromGaiaId("gaia_id_2")); + &pref_service_, signin::GaiaIdHash::FromGaiaId(GaiaId("gaia_id_2"))); } TestingPrefServiceSimple pref_service_;
diff --git a/components/sync/service/sync_prefs_unittest.cc b/components/sync/service/sync_prefs_unittest.cc index c09b3d5..ba989e76 100644 --- a/components/sync/service/sync_prefs_unittest.cc +++ b/components/sync/service/sync_prefs_unittest.cc
@@ -22,6 +22,7 @@ #include "components/sync/base/user_selectable_type.h" #include "components/sync/protocol/nigori_specifics.pb.h" #include "components/sync/service/glue/sync_transport_data_prefs.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -57,7 +58,7 @@ pref_service_.registry()->RegisterBooleanPref( ::prefs::kExplicitBrowserSignin, false); sync_prefs_ = std::make_unique<SyncPrefs>(&pref_service_); - gaia_id_hash_ = signin::GaiaIdHash::FromGaiaId("account_gaia"); + gaia_id_hash_ = signin::GaiaIdHash::FromGaiaId(GaiaId("account_gaia")); } base::test::SingleThreadTaskEnvironment task_environment_; @@ -67,7 +68,7 @@ }; TEST_F(SyncPrefsTest, EncryptionBootstrapTokenPerAccountSignedOut) { - auto gaia_id_hash_empty = signin::GaiaIdHash::FromGaiaId(""); + auto gaia_id_hash_empty = signin::GaiaIdHash::FromGaiaId(GaiaId()); EXPECT_TRUE( sync_prefs_->GetEncryptionBootstrapTokenForAccount(gaia_id_hash_empty) .empty()); @@ -79,7 +80,8 @@ sync_prefs_->SetEncryptionBootstrapTokenForAccount("token", gaia_id_hash_); EXPECT_EQ("token", sync_prefs_->GetEncryptionBootstrapTokenForAccount(gaia_id_hash_)); - auto gaia_id_hash_2 = signin::GaiaIdHash::FromGaiaId("account_gaia_2"); + auto gaia_id_hash_2 = + signin::GaiaIdHash::FromGaiaId(GaiaId("account_gaia_2")); EXPECT_TRUE(sync_prefs_->GetEncryptionBootstrapTokenForAccount(gaia_id_hash_2) .empty()); sync_prefs_->SetEncryptionBootstrapTokenForAccount("token2", gaia_id_hash_2); @@ -95,7 +97,8 @@ sync_prefs_->SetEncryptionBootstrapTokenForAccount("token", gaia_id_hash_); EXPECT_EQ("token", sync_prefs_->GetEncryptionBootstrapTokenForAccount(gaia_id_hash_)); - auto gaia_id_hash_2 = signin::GaiaIdHash::FromGaiaId("account_gaia_2"); + auto gaia_id_hash_2 = + signin::GaiaIdHash::FromGaiaId(GaiaId("account_gaia_2")); EXPECT_TRUE(sync_prefs_->GetEncryptionBootstrapTokenForAccount(gaia_id_hash_2) .empty()); sync_prefs_->SetEncryptionBootstrapTokenForAccount("token2", gaia_id_hash_2); @@ -586,7 +589,7 @@ Difference(default_selected_types, {UserSelectableType::kPayments})); // Other accounts should be unnafected. EXPECT_EQ(sync_prefs_->GetSelectedTypesForAccount( - signin::GaiaIdHash::FromGaiaId("account_gaia_2")), + signin::GaiaIdHash::FromGaiaId(GaiaId("account_gaia_2"))), default_selected_types); } @@ -622,7 +625,8 @@ const UserSelectableTypeSet default_selected_types = sync_prefs_->GetSelectedTypesForAccount(gaia_id_hash_); - auto gaia_id_hash_2 = signin::GaiaIdHash::FromGaiaId("account_gaia_2"); + auto gaia_id_hash_2 = + signin::GaiaIdHash::FromGaiaId(GaiaId("account_gaia_2")); // Change one of the default values for example kPasswords for account 1. sync_prefs_->SetSelectedTypeForAccount(UserSelectableType::kPasswords, false, @@ -791,7 +795,8 @@ EXPECT_EQ(sync_prefs_->GetNumberOfAccountsWithPasswordsSelected(), 1); - const auto other_gaia_id_hash = signin::GaiaIdHash::FromGaiaId("other"); + const auto other_gaia_id_hash = + signin::GaiaIdHash::FromGaiaId(GaiaId("other")); sync_prefs_->SetSelectedTypeForAccount(UserSelectableType::kPasswords, true, other_gaia_id_hash); @@ -866,7 +871,7 @@ /*disabled_features=*/{}); SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); - gaia_id_hash_ = signin::GaiaIdHash::FromGaiaId("account_gaia"); + gaia_id_hash_ = signin::GaiaIdHash::FromGaiaId(GaiaId("account_gaia")); #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) // Pref is registered in signin internal `PrimaryAccountManager`. pref_service_.registry()->RegisterBooleanPref( @@ -977,17 +982,17 @@ std::string()); pref_service_.SetBoolean(prefs::internal::kSyncKeepEverythingSynced, false); ASSERT_FALSE(pref_service_.GetBoolean(kGlobalPasswordsPref)); - ASSERT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + ASSERT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); SyncPrefs::MaybeMigrateAutofillToPerAccountPref(&pref_service_); - EXPECT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + EXPECT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); } TEST_F(SyncPrefsMigrationTest, @@ -998,17 +1003,17 @@ ASSERT_TRUE( pref_service_.GetBoolean(prefs::internal::kSyncKeepEverythingSynced)); ASSERT_FALSE(pref_service_.GetBoolean(kGlobalPasswordsPref)); - ASSERT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + ASSERT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); SyncPrefs::MaybeMigrateAutofillToPerAccountPref(&pref_service_); - EXPECT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + EXPECT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); } TEST_F(SyncPrefsMigrationTest, @@ -1018,17 +1023,17 @@ pref_service_.SetString(::prefs::kGoogleServicesLastSyncingGaiaId, kGaiaId); pref_service_.SetBoolean(prefs::internal::kSyncKeepEverythingSynced, false); pref_service_.SetBoolean(kGlobalPasswordsPref, true); - ASSERT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + ASSERT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); SyncPrefs::MaybeMigrateAutofillToPerAccountPref(&pref_service_); - EXPECT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + EXPECT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); } TEST_F(SyncPrefsMigrationTest, @@ -1039,17 +1044,17 @@ pref_service_.SetString(::prefs::kGoogleServicesLastSyncingGaiaId, kGaiaId); pref_service_.SetBoolean(prefs::internal::kSyncKeepEverythingSynced, false); ASSERT_FALSE(pref_service_.GetBoolean(kGlobalPasswordsPref)); - ASSERT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + ASSERT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); SyncPrefs::MaybeMigrateAutofillToPerAccountPref(&pref_service_); - EXPECT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + EXPECT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); } TEST_F(SyncPrefsMigrationTest, MigratePasswordsToPerAccountPrefRunsOnce) { @@ -1058,29 +1063,30 @@ pref_service_.SetString(::prefs::kGoogleServicesLastSyncingGaiaId, kGaiaId); pref_service_.SetBoolean(prefs::internal::kSyncKeepEverythingSynced, false); ASSERT_FALSE(pref_service_.GetBoolean(kGlobalPasswordsPref)); - ASSERT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + ASSERT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); SyncPrefs::MaybeMigrateAutofillToPerAccountPref(&pref_service_); - EXPECT_FALSE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + EXPECT_FALSE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); // Manually re-enable and attempt to run the migration again. SyncPrefs(&pref_service_) - .SetSelectedTypeForAccount(UserSelectableType::kPasswords, true, - signin::GaiaIdHash::FromGaiaId(kGaiaId)); + .SetSelectedTypeForAccount( + UserSelectableType::kPasswords, true, + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))); SyncPrefs::MaybeMigrateAutofillToPerAccountPref(&pref_service_); // This time the migration didn't run, because it was one-off. - EXPECT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kPasswords)); + EXPECT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kPasswords)); } TEST_F(SyncPrefsMigrationTest, MigrateAddressesToPerAccountPref) { @@ -1089,17 +1095,17 @@ pref_service_.SetString(::prefs::kGoogleServicesLastSyncingGaiaId, kGaiaId); pref_service_.SetBoolean(prefs::internal::kSyncKeepEverythingSynced, false); ASSERT_FALSE(pref_service_.GetBoolean(kGlobalAutofillPref)); - ASSERT_TRUE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kAutofill)); + ASSERT_TRUE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kAutofill)); SyncPrefs::MaybeMigrateAutofillToPerAccountPref(&pref_service_); - EXPECT_FALSE( - SyncPrefs(&pref_service_) - .GetSelectedTypesForAccount(signin::GaiaIdHash::FromGaiaId(kGaiaId)) - .Has(UserSelectableType::kAutofill)); + EXPECT_FALSE(SyncPrefs(&pref_service_) + .GetSelectedTypesForAccount( + signin::GaiaIdHash::FromGaiaId(GaiaId(kGaiaId))) + .Has(UserSelectableType::kAutofill)); } #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) @@ -1110,7 +1116,7 @@ pref_service_.GetString(prefs::internal::kSyncEncryptionBootstrapToken) .empty()); - auto gaia_id_hash_empty = signin::GaiaIdHash::FromGaiaId(""); + auto gaia_id_hash_empty = signin::GaiaIdHash::FromGaiaId(GaiaId()); prefs.MaybeMigrateCustomPassphrasePref(gaia_id_hash_empty); EXPECT_TRUE( pref_service_.GetString(prefs::internal::kSyncEncryptionBootstrapToken) @@ -1130,7 +1136,7 @@ EXPECT_EQ(prefs.GetEncryptionBootstrapTokenForAccount(gaia_id_hash_), "token"); signin::GaiaIdHash gaia_id_hash_2 = - signin::GaiaIdHash::FromGaiaId("account_gaia_2"); + signin::GaiaIdHash::FromGaiaId(GaiaId("account_gaia_2")); EXPECT_TRUE( prefs.GetEncryptionBootstrapTokenForAccount(gaia_id_hash_2).empty()); }
diff --git a/components/sync/service/sync_service_crypto_unittest.cc b/components/sync/service/sync_service_crypto_unittest.cc index 48690d1..e9a4a93 100644 --- a/components/sync/service/sync_service_crypto_unittest.cc +++ b/components/sync/service/sync_service_crypto_unittest.cc
@@ -18,6 +18,7 @@ #include "components/sync/engine/sync_status.h" #include "components/sync/test/mock_sync_engine.h" #include "components/trusted_vault/test/fake_trusted_vault_client.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -50,7 +51,7 @@ return encrypted; } -CoreAccountInfo MakeAccountInfoWithGaia(const std::string& gaia) { +CoreAccountInfo MakeAccountInfoWithGaia(const GaiaId& gaia) { CoreAccountInfo result; result.gaia = gaia; return result; @@ -134,7 +135,7 @@ protected: // Account used in most tests. const CoreAccountInfo kSyncingAccount = - MakeAccountInfoWithGaia("syncingaccount"); + MakeAccountInfoWithGaia(GaiaId("syncingaccount")); // Initial trusted vault keys stored on the server for `kSyncingAccount`. const std::vector<std::vector<uint8_t>> kInitialTrustedVaultKeys = {
diff --git a/components/sync/service/sync_service_impl_unittest.cc b/components/sync/service/sync_service_impl_unittest.cc index 96fa076..34f14ed7 100644 --- a/components/sync/service/sync_service_impl_unittest.cc +++ b/components/sync/service/sync_service_impl_unittest.cc
@@ -49,6 +49,7 @@ #include "components/sync/test/sync_service_impl_bundle.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/trusted_vault/test/fake_trusted_vault_client.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -1272,7 +1273,7 @@ // TODO(crbug.com/40066949): Update once kSync becomes unreachable or is // deleted from the codebase. See ConsentLevel::kSync documentation for // details. - const std::string primary_account_gaia_id = + const GaiaId primary_account_gaia_id = identity_manager() ->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) .gaia;
diff --git a/components/sync/service/sync_session_durations_metrics_recorder_unittest.cc b/components/sync/service/sync_session_durations_metrics_recorder_unittest.cc index 44e9d98..92c4bbc 100644 --- a/components/sync/service/sync_session_durations_metrics_recorder_unittest.cc +++ b/components/sync/service/sync_session_durations_metrics_recorder_unittest.cc
@@ -13,6 +13,7 @@ #include "base/timer/timer.h" #include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/test/test_sync_service.h" +#include "google_apis/gaia/gaia_id.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h" @@ -125,7 +126,8 @@ } TEST_F(SyncSessionDurationsMetricsRecorderTest, WebSignedIn) { - identity_test_env_.SetCookieAccounts({{"foo@gmail.com", "foo_gaia_id"}}); + identity_test_env_.SetCookieAccounts( + {{"foo@gmail.com", GaiaId("foo_gaia_id")}}); base::HistogramTester ht; StartAndEndSession(kSessionTime);
diff --git a/components/sync/service/sync_user_settings_impl_unittest.cc b/components/sync/service/sync_user_settings_impl_unittest.cc index 1b3b499..af398704 100644 --- a/components/sync/service/sync_user_settings_impl_unittest.cc +++ b/components/sync/service/sync_user_settings_impl_unittest.cc
@@ -21,6 +21,7 @@ #include "components/sync/service/sync_prefs.h" #include "components/sync/service/sync_service_crypto.h" #include "components/trusted_vault/test/fake_trusted_vault_client.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -94,7 +95,7 @@ CoreAccountInfo GetSyncAccountInfoForPrefs() const override { CoreAccountInfo account; account.email = "name@account.com"; - account.gaia = "name"; + account.gaia = GaiaId("name"); account.account_id = CoreAccountId::FromGaiaId(account.gaia); return account; }
diff --git a/components/sync/service/trusted_vault_synthetic_field_trial_unittest.cc b/components/sync/service/trusted_vault_synthetic_field_trial_unittest.cc index 14eda91..49de97a 100644 --- a/components/sync/service/trusted_vault_synthetic_field_trial_unittest.cc +++ b/components/sync/service/trusted_vault_synthetic_field_trial_unittest.cc
@@ -144,7 +144,7 @@ // Expected values have been computed empirically. They are all between zero // and one as expected and appear to be uniformly distributed. struct { - GaiaId gaia_id; + std::string gaia_id_str; std::string salt; float expected_value; } test_cases[] = { @@ -162,9 +162,9 @@ for (const auto& test_case : test_cases) { EXPECT_THAT(TrustedVaultAutoUpgradeSyntheticFieldTrialGroup:: DeterministicFloatBetweenZeroAndOneFromGaiaIdForTest( - test_case.gaia_id, test_case.salt), + GaiaId(test_case.gaia_id_str), test_case.salt), FloatNear(test_case.expected_value, kEpsilon)) - << " for " << test_case.gaia_id << " and salt " << test_case.salt; + << " for " << test_case.gaia_id_str << " and salt " << test_case.salt; } } @@ -176,7 +176,7 @@ for (int i = 0; i < kNumGaiaIdsToTest; i++) { if (TrustedVaultAutoUpgradeSyntheticFieldTrialGroup:: ShouldSampleGaiaIdWithTenPercentProbabilityForTest( - base::StringPrintf("gaia_id_%d", i))) { + GaiaId(base::StringPrintf("gaia_id_%d", i)))) { num_sampled_gaia_ids++; } } @@ -201,7 +201,7 @@ // String chosen from previous tests, given the convenient float value // computed from it. - const std::string kGaiaId = "gaia_id_49"; + const GaiaId kGaiaId("gaia_id_49"); ASSERT_TRUE(TrustedVaultAutoUpgradeSyntheticFieldTrialGroup:: ShouldSampleGaiaIdWithTenPercentProbabilityForTest(kGaiaId)); ASSERT_THAT(TrustedVaultAutoUpgradeSyntheticFieldTrialGroup:: @@ -390,7 +390,7 @@ kTypeIndex)); // String chosen from previous tests. - const std::string kGaiaId = "gaia_id_1"; + const GaiaId kGaiaId("gaia_id_1"); ASSERT_FALSE(TrustedVaultAutoUpgradeSyntheticFieldTrialGroup:: ShouldSampleGaiaIdWithTenPercentProbabilityForTest(kGaiaId));
diff --git a/components/sync/test/test_sync_service.cc b/components/sync/test/test_sync_service.cc index 884e38e..2b272e1 100644 --- a/components/sync/test/test_sync_service.cc +++ b/components/sync/test/test_sync_service.cc
@@ -37,8 +37,8 @@ CoreAccountInfo GetDefaultAccountInfo() { CoreAccountInfo account; account.email = "foo@bar.com"; - account.gaia = "foo-gaia-id"; - account.account_id = CoreAccountId::FromGaiaId(GaiaId(account.gaia)); + account.gaia = GaiaId("foo-gaia-id"); + account.account_id = CoreAccountId::FromGaiaId(account.gaia); return account; }
diff --git a/components/test/data/autofill/heuristics/input/144_cc_checkout_m_jcp.com.html b/components/test/data/autofill/heuristics/input/144_cc_checkout_m_jcp.com.html index de99cb0..9eb0994 100644 --- a/components/test/data/autofill/heuristics/input/144_cc_checkout_m_jcp.com.html +++ b/components/test/data/autofill/heuristics/input/144_cc_checkout_m_jcp.com.html
@@ -42,7 +42,15 @@ </div> <div class="small-3 medium-3 large-2 columns" ng-class="{error: payWithCreditCardVm.isInvalidYear}"> - <select id="cardExpirationYear" name="year-guest" data-prompt="Year" ng-model="payWithCreditCardVm.paywithcreditcard.expiryYear" ng-options="expyear.code as expyear.year for expyear in payWithCreditCardVm.expiryYear" ng-blur="payWithCreditCardVm.onBlurInput()" ng-change="payWithCreditCardVm.clearErrorMessage('isInvalidYear')" ng-required="payWithCreditCardVm.isExpDateShown" class="ng-pristine ng-valid ng-valid-required"><option value="" selected="" disabled="" class="">Year</option><option value="0">2016</option><option value="1">2017</option><option value="2">2018</option><option value="3">2019</option><option value="4">2020</option><option value="5">2021</option><option value="6">2022</option><option value="7">2023</option><option value="8">2024</option><option value="9">2025</option><option value="10">2026</option></select> + <select id="cardExpirationYear" name="year-guest" data-prompt="Year" ng-model="payWithCreditCardVm.paywithcreditcard.expiryYear" ng-options="expyear.code as expyear.year for expyear in payWithCreditCardVm.expiryYear" ng-blur="payWithCreditCardVm.onBlurInput()" ng-change="payWithCreditCardVm.clearErrorMessage('isInvalidYear')" ng-required="payWithCreditCardVm.isExpDateShown" class="ng-pristine ng-valid ng-valid-required"> + <option value="" selected="" disabled="" class="">Year</option> + <option value="0">2023</option><option value="1">2024</option> + <option value="2">2025</option><option value="3">2026</option> + <option value="4">2027</option><option value="5">2028</option> + <option value="6">2029</option><option value="7">2030</option> + <option value="8">2031</option><option value="9">2032</option> + <option value="10">2033</option> + </select> <div class="error-message ng-binding"></div> </div>
diff --git a/components/trusted_vault/standalone_trusted_vault_backend_unittest.cc b/components/trusted_vault/standalone_trusted_vault_backend_unittest.cc index 7bdc253..01454c8fc5 100644 --- a/components/trusted_vault/standalone_trusted_vault_backend_unittest.cc +++ b/components/trusted_vault/standalone_trusted_vault_backend_unittest.cc
@@ -37,6 +37,7 @@ #include "components/trusted_vault/trusted_vault_connection.h" #include "components/trusted_vault/trusted_vault_histograms.h" #include "components/trusted_vault/trusted_vault_server_constants.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -100,9 +101,9 @@ return temp_dir->GetPath(); } -CoreAccountInfo MakeAccountInfoWithGaiaId(const GaiaId& gaia_id) { +CoreAccountInfo MakeAccountInfoWithGaiaId(const std::string& gaia_id) { CoreAccountInfo account_info; - account_info.gaia = gaia_id; + account_info.gaia = GaiaId(gaia_id); return account_info; } @@ -453,8 +454,8 @@ initial_data.add_user(); trusted_vault_pb::LocalTrustedVaultPerUser* user_data2 = initial_data.add_user(); - user_data1->set_gaia_id(account_info_1.gaia); - user_data2->set_gaia_id(account_info_2.gaia); + user_data1->set_gaia_id(account_info_1.gaia.ToString()); + user_data2->set_gaia_id(account_info_2.gaia.ToString()); user_data1->add_vault_key()->set_key_material(kKey1.data(), kKey1.size()); user_data2->add_vault_key()->set_key_material(kKey2.data(), kKey2.size()); user_data2->add_vault_key()->set_key_material(kKey3.data(), kKey3.size()); @@ -483,7 +484,7 @@ trusted_vault_pb::LocalTrustedVault initial_data; trusted_vault_pb::LocalTrustedVaultPerUser* user_data = initial_data.add_user(); - user_data->set_gaia_id(account_info.gaia); + user_data->set_gaia_id(account_info.gaia.ToString()); user_data->add_vault_key()->set_key_material( GetConstantTrustedVaultKey().data(), GetConstantTrustedVaultKey().size()); user_data->add_vault_key()->set_key_material(kKey.data(), kKey.size()); @@ -499,8 +500,8 @@ } TEST_F(StandaloneTrustedVaultBackendTest, ShouldStoreKeys) { - const std::string kGaiaId1 = "user1"; - const std::string kGaiaId2 = "user2"; + const GaiaId kGaiaId1("user1"); + const GaiaId kGaiaId2("user2"); const std::vector<uint8_t> kKey1 = {0, 1, 2, 3, 4}; const std::vector<uint8_t> kKey2 = {1, 2, 3, 4}; const std::vector<uint8_t> kKey3 = {2, 3, 4}; @@ -540,8 +541,8 @@ initial_data.add_user(); trusted_vault_pb::LocalTrustedVaultPerUser* user_data2 = initial_data.add_user(); - user_data1->set_gaia_id(account_info_1.gaia); - user_data2->set_gaia_id(account_info_2.gaia); + user_data1->set_gaia_id(account_info_1.gaia.ToString()); + user_data2->set_gaia_id(account_info_2.gaia.ToString()); // Mimic |user_data1| to be affected by crbug.com/1267391 and |user_data2| to // be not affected. AssignBytesToProtoString(kKey1, @@ -580,9 +581,9 @@ initial_data.add_user(); trusted_vault_pb::LocalTrustedVaultPerUser* user_data2 = initial_data.add_user(); - user_data1->set_gaia_id(account_info_1.gaia); + user_data1->set_gaia_id(account_info_1.gaia.ToString()); user_data1->set_keys_marked_as_stale_by_consumer(true); - user_data2->set_gaia_id(account_info_2.gaia); + user_data2->set_gaia_id(account_info_2.gaia.ToString()); user_data2->set_keys_marked_as_stale_by_consumer(true); ASSERT_TRUE(WriteLocalTrustedVaultFile(initial_data, file_path())); @@ -607,7 +608,7 @@ const CoreAccountInfo account_info_1 = MakeAccountInfoWithGaiaId("user1"); trusted_vault_pb::LocalTrustedVaultPerUser* user_data1 = initial_data.add_user(); - user_data1->set_gaia_id(account_info_1.gaia); + user_data1->set_gaia_id(account_info_1.gaia.ToString()); user_data1->mutable_local_device_registration_info()->set_device_registered( true); user_data1->mutable_local_device_registration_info() @@ -620,7 +621,7 @@ const CoreAccountInfo account_info_2 = MakeAccountInfoWithGaiaId("user2"); trusted_vault_pb::LocalTrustedVaultPerUser* user_data2 = initial_data.add_user(); - user_data2->set_gaia_id(account_info_2.gaia); + user_data2->set_gaia_id(account_info_2.gaia.ToString()); user_data2->mutable_local_device_registration_info()->set_device_registered( true); user_data2->mutable_local_device_registration_info()
diff --git a/components/trusted_vault/trusted_vault_degraded_recoverability_handler_unittest.cc b/components/trusted_vault/trusted_vault_degraded_recoverability_handler_unittest.cc index 00a8331e..cab5114 100644 --- a/components/trusted_vault/trusted_vault_degraded_recoverability_handler_unittest.cc +++ b/components/trusted_vault/trusted_vault_degraded_recoverability_handler_unittest.cc
@@ -19,6 +19,7 @@ #include "components/trusted_vault/securebox.h" #include "components/trusted_vault/test/mock_trusted_vault_connection.h" #include "components/trusted_vault/trusted_vault_connection.h" +#include "google_apis/gaia/gaia_id.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -28,9 +29,9 @@ using testing::_; using testing::Eq; -CoreAccountInfo MakeAccountInfoWithGaiaId(const GaiaId& gaia_id) { +CoreAccountInfo MakeAccountInfoWithGaiaId(const std::string& gaia_id) { CoreAccountInfo account_info; - account_info.gaia = gaia_id; + account_info.gaia = GaiaId(gaia_id); return account_info; }
diff --git a/components/user_actions_ui/resources/BUILD.gn b/components/user_actions_ui/resources/BUILD.gn new file mode 100644 index 0000000..e9ba768 --- /dev/null +++ b/components/user_actions_ui/resources/BUILD.gn
@@ -0,0 +1,23 @@ +# Copyright 2024 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//ui/webui/resources/tools/build_webui.gni") + +build_webui("build") { + grd_prefix = "user_actions_ui" + + static_files = [ + "user_actions.css", + "user_actions.html", + ] + + non_web_component_files = [ "user_actions.ts" ] + + if (!is_ios) { + ts_definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ] + } + ts_deps = [ "//ui/webui/resources/js:build_ts" ] + + grit_output_dir = "$root_gen_dir/components" +}
diff --git a/components/user_actions_ui/resources/user_actions.js b/components/user_actions_ui/resources/user_actions.ts similarity index 61% rename from components/user_actions_ui/resources/user_actions.js rename to components/user_actions_ui/resources/user_actions.ts index 3ae4537..96cc363 100644 --- a/components/user_actions_ui/resources/user_actions.js +++ b/components/user_actions_ui/resources/user_actions.ts
@@ -3,31 +3,28 @@ // found in the LICENSE file. /** - * Javascript for user_actions.html, served from chrome://user-actions/ + * Typescript for user_actions.html, served from chrome://user-actions/ * This is used to debug user actions recording. It displays a live * stream of all user action events that occur in chromium while the * chrome://user-actions/ page is open. - * - * The simple object defined in this javascript file listens for - * callbacks from the C++ code saying that a new user action was seen. */ -import {addWebUiListener} from 'chrome://resources/js/cr.js'; -import {$} from 'chrome://resources/js/util.js'; +import {addWebUiListener} from '//resources/js/cr.js'; +import {getRequiredElement} from '//resources/js/util.js'; /** * Appends a row to the output table listing the user action observed * and the current timestamp. - * @param {string} userAction the name of the user action observed. + * @param userAction the name of the user action observed. */ -function observeUserAction(userAction) { - const table = $('user-actions-table'); +function observeUserAction(userAction: string): void { + const table = getRequiredElement('user-actions-table'); const tr = document.createElement('tr'); let td = document.createElement('td'); td.textContent = userAction; tr.appendChild(td); td = document.createElement('td'); - td.textContent = Date.now() / 1000; // in seconds since epoch + td.textContent = (Date.now() / 1000).toString(); // in seconds since epoch tr.appendChild(td); table.appendChild(tr); }
diff --git a/components/wifi/wifi_test.cc b/components/wifi/wifi_test.cc index 340b222..dcfb9a3 100644 --- a/components/wifi/wifi_test.cc +++ b/components/wifi/wifi_test.cc
@@ -28,6 +28,8 @@ #if BUILDFLAG(IS_APPLE) #include "base/apple/scoped_nsautorelease_pool.h" +#elif BUILDFLAG(IS_WIN) +#include <windows.h> #endif namespace wifi {
diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm index 767c532..fc345ea0 100644 --- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm +++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
@@ -2284,9 +2284,9 @@ _markedRange.length = length; } - if (fixLiveConversion && newSelRange.location != NSNotFound) { + if (fixLiveConversion && newSelRange.location != NSNotFound && + _markedRange.location <= std::numeric_limits<uint32_t>::max()) { CHECK_NE(_markedRange.location, static_cast<NSUInteger>(NSNotFound)); - CHECK_LE(_markedRange.location, std::numeric_limits<uint32_t>::max()); CHECK_LE(newSelRange.location, std::numeric_limits<uint32_t>::max()); // `_markedRange.location + NSMaxRange(newSelRange)` can be larger than // the maximum uint32_t. See crbug.com/40060200.
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 31ee1bcb..9969d95 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -4091,7 +4091,14 @@ RunHtmlTest(FILE_PATH_LITERAL("name-img-labelledby-inputs-tree.html")); } -IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, ReloadSelectionCrash) { +// TODO(crbug.com/386918219): Flaky on UIA +#if BUILDFLAG(IS_WIN) +#define MAYBE_ReloadSelectionCrash DISABLED_ReloadSelectionCrash +#else +#define MAYBE_ReloadSelectionCrash ReloadSelectionCrash +#endif +IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, + MAYBE_ReloadSelectionCrash) { RunRegressionTest(FILE_PATH_LITERAL("reload-selection-crash.html")); }
diff --git a/content/browser/dips/dips_navigation_flow_detector.cc b/content/browser/dips/dips_navigation_flow_detector.cc index de9f92a..5815aa94 100644 --- a/content/browser/dips/dips_navigation_flow_detector.cc +++ b/content/browser/dips/dips_navigation_flow_detector.cc
@@ -20,8 +20,9 @@ kMultiple, }; -// Types that qualify a navigation for the DIPS.TrustIndicator.DirectNavigation -// UKM event. Should only contain core page transition types (no qualifiers). +// Types that qualify a navigation for the +// DIPS.TrustIndicator.DirectNavigationV2 UKM event. Should only contain core +// page transition types (no qualifiers). constexpr const std::array<ui::PageTransition, 2>& kDirectNavigationPageTransitions{ ui::PAGE_TRANSITION_TYPED, @@ -102,11 +103,11 @@ ukm::SourceId entrypoint_source_id, int32_t flow_id, DIPSRedirectType exit_redirect_type) { - ukm::builders::DIPS_SuspectedTrackerFlowReferrer(referrer_source_id) + ukm::builders::DIPS_SuspectedTrackerFlowReferrerV2(referrer_source_id) .SetFlowId(flow_id) .Record(ukm::UkmRecorder::Get()); - ukm::builders::DIPS_SuspectedTrackerFlowEntrypoint(entrypoint_source_id) + ukm::builders::DIPS_SuspectedTrackerFlowEntrypointV2(entrypoint_source_id) .SetExitRedirectType(static_cast<int64_t>(exit_redirect_type)) .SetFlowId(flow_id) .Record(ukm::UkmRecorder::Get()); @@ -125,7 +126,7 @@ ? first_server_redirect->url.source_id : navigation_handle->GetNextPageUkmSourceId(); - ukm::builders::DIPS_TrustIndicator_DirectNavigation(source_id) + ukm::builders::DIPS_TrustIndicator_DirectNavigationV2(source_id) .SetNavigationSource( ToDirectNavigationSource(navigation_handle->GetPageTransition())) .Record(ukm::UkmRecorder::Get()); @@ -426,7 +427,7 @@ return; } - ukm::builders::DIPS_TrustIndicator_InFlowInteraction( + ukm::builders::DIPS_TrustIndicator_InFlowInteractionV2( previous_page_visit_info_->source_id) .SetFlowId(flow_id) .Record(ukm::UkmRecorder::Get());
diff --git a/content/browser/dips/dips_navigation_flow_detector_browsertest.cc b/content/browser/dips/dips_navigation_flow_detector_browsertest.cc index 278d707f..885ac43 100644 --- a/content/browser/dips/dips_navigation_flow_detector_browsertest.cc +++ b/content/browser/dips/dips_navigation_flow_detector_browsertest.cc
@@ -94,15 +94,15 @@ std::string_view kNavigationFlowNodeUkmEventName = "DIPS.NavigationFlowNode"; std::string_view kSuspectedTrackerFlowReferrerUkmEventName = - "DIPS.SuspectedTrackerFlowReferrer"; + "DIPS.SuspectedTrackerFlowReferrerV2"; std::string_view kSuspectedTrackerFlowEntrypointUkmEventName = - "DIPS.SuspectedTrackerFlowEntrypoint"; + "DIPS.SuspectedTrackerFlowEntrypointV2"; std::string_view kInFlowInteractionUkmEventName = - "DIPS.TrustIndicator.InFlowInteraction"; + "DIPS.TrustIndicator.InFlowInteractionV2"; std::string_view kInFlowSuccessorInteractionUkmEventName = "DIPS.TrustIndicator.InFlowSuccessorInteraction"; std::string_view kDirectNavigationUkmEventName = - "DIPS.TrustIndicator.DirectNavigation"; + "DIPS.TrustIndicator.DirectNavigationV2"; std::string_view kSiteA = "a.test"; std::string_view kSiteB = "b.test"; std::string_view kSiteC = "c.test";
diff --git a/content/browser/interest_group/ad_auction_service_impl_unittest.cc b/content/browser/interest_group/ad_auction_service_impl_unittest.cc index 04c35e39..6a632d3 100644 --- a/content/browser/interest_group/ad_auction_service_impl_unittest.cc +++ b/content/browser/interest_group/ad_auction_service_impl_unittest.cc
@@ -1569,7 +1569,8 @@ "buyerReportingId": "ignored1", "buyerAndSellerReportingId": "ignored2", "adRenderId": "456def", - "allowedReportingOrigins": ["https://ignored.test"] + "allowedReportingOrigins": ["https://ignored.test"], + "creativeScanningMetadata": "please check" }], "adSizes": {"size_new": {"width": "300px", "height": "150px"}}, "sizeGroups": {"group_new": ["size_new"]}, @@ -1737,6 +1738,10 @@ group.ad_components.value()[0].allowed_reporting_origins.has_value()); ASSERT_TRUE(group.ad_components.value()[0].ad_render_id.has_value()); EXPECT_EQ(group.ad_components.value()[0].ad_render_id.value(), "456def"); + ASSERT_TRUE( + group.ad_components.value()[0].creative_scanning_metadata.has_value()); + EXPECT_EQ(group.ad_components.value()[0].creative_scanning_metadata.value(), + "please check"); ASSERT_TRUE(group.ad_sizes.has_value()); ASSERT_EQ(group.ad_sizes->size(), 1u); EXPECT_EQ(group.ad_sizes->at("size_new"),
diff --git a/content/browser/interest_group/auction_metrics_recorder_unittest.cc b/content/browser/interest_group/auction_metrics_recorder_unittest.cc index a32ddccb..3bbc8c5 100644 --- a/content/browser/interest_group/auction_metrics_recorder_unittest.cc +++ b/content/browser/interest_group/auction_metrics_recorder_unittest.cc
@@ -282,6 +282,7 @@ /*wasm_url=*/std::nullopt, /*signals_url=*/std::nullopt, /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, /*experiment_group_id=*/std::nullopt, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt);
diff --git a/content/browser/interest_group/auction_process_manager_unittest.cc b/content/browser/interest_group/auction_process_manager_unittest.cc index ab1ab1d..4617ce2 100644 --- a/content/browser/interest_group/auction_process_manager_unittest.cc +++ b/content/browser/interest_group/auction_process_manager_unittest.cc
@@ -168,6 +168,7 @@ auction_worklet::mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_id, + std::optional<bool> send_creative_scanning_metadata, auction_worklet::mojom::TrustedSignalsPublicKeyPtr public_key, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> trusted_signals_url_allowed) override {
diff --git a/content/browser/interest_group/auction_worklet_manager.cc b/content/browser/interest_group/auction_worklet_manager.cc index 8638b34..36d5099 100644 --- a/content/browser/interest_group/auction_worklet_manager.cc +++ b/content/browser/interest_group/auction_worklet_manager.cc
@@ -689,6 +689,7 @@ GetAuctionWorkletPermissionsPolicyState(delegate->GetFrame(), worklet_info_.script_url), worklet_info_.experiment_group_id, + worklet_info_.send_creative_scanning_metadata, std::move(trusted_signals_kvv2_public_key_), std::move(load_seller_worklet_client_remote)); seller_worklet_.set_disconnect_with_reason_handler(base::BindOnce( @@ -783,6 +784,7 @@ const std::optional<GURL>& wasm_url, const std::optional<GURL>& signals_url, bool needs_cors_for_additional_bid, + std::optional<bool> send_creative_scanning_metadata, std::optional<uint16_t> experiment_group_id, const std::string& trusted_bidding_signals_slot_size_param, const std::optional<url::Origin>& trusted_signals_coordinator) @@ -791,6 +793,7 @@ wasm_url(wasm_url), signals_url(signals_url), needs_cors_for_additional_bid(needs_cors_for_additional_bid), + send_creative_scanning_metadata(send_creative_scanning_metadata), experiment_group_id(experiment_group_id), trusted_bidding_signals_slot_size_param( trusted_bidding_signals_slot_size_param), @@ -825,6 +828,10 @@ hash, trusted_signals_coordinator ? FastHash(trusted_signals_coordinator->GetURL().spec()) : 0xf3a287b1); + hash = CombineHash( + hash, send_creative_scanning_metadata.has_value() + ? (*send_creative_scanning_metadata ? 0x4b9dff24u : 0x2af93982u) + : 0x5f0d73ebu); return hash; } @@ -833,12 +840,14 @@ return std::tie(type, script_url, wasm_url, signals_url, needs_cors_for_additional_bid, experiment_group_id, trusted_bidding_signals_slot_size_param, - trusted_signals_coordinator) < + trusted_signals_coordinator, + send_creative_scanning_metadata) < std::tie(other.type, other.script_url, other.wasm_url, other.signals_url, other.needs_cors_for_additional_bid, other.experiment_group_id, other.trusted_bidding_signals_slot_size_param, - other.trusted_signals_coordinator); + other.trusted_signals_coordinator, + other.send_creative_scanning_metadata); } AuctionWorkletManager::WorkletHandle::~WorkletHandle() { @@ -998,6 +1007,7 @@ /*script_url=*/bidding_logic_url, wasm_url, /*signals_url=*/trusted_bidding_signals_url, needs_cors_for_additional_bid, + /*send_creative_scanning_metadata=*/std::nullopt, trusted_bidding_signals_url.has_value() ? experiment_group_id : std::nullopt, @@ -1041,6 +1051,7 @@ const std::optional<GURL>& trusted_scoring_signals_url, std::optional<uint16_t> experiment_group_id, const std::optional<url::Origin>& trusted_scoring_signals_coordinator, + std::optional<bool> send_creative_scanning_metadata, base::OnceClosure process_assigned_callback, base::OnceClosure worklet_available_callback, FatalErrorCallback fatal_error_callback, @@ -1051,7 +1062,7 @@ /*wasm_url=*/std::nullopt, /*signals_url=*/trusted_scoring_signals_url, /*needs_cors_for_additional_bid=*/false, - experiment_group_id, + send_creative_scanning_metadata, experiment_group_id, /*trusted_bidding_signals_slot_size_param=*/"", trusted_scoring_signals_coordinator); RequestWorkletByKey(std::move(worklet_info), std::move(devtools_auction_id),
diff --git a/content/browser/interest_group/auction_worklet_manager.h b/content/browser/interest_group/auction_worklet_manager.h index 2255f68..ed92d285 100644 --- a/content/browser/interest_group/auction_worklet_manager.h +++ b/content/browser/interest_group/auction_worklet_manager.h
@@ -137,6 +137,7 @@ const std::optional<GURL>& wasm_url, const std::optional<GURL>& signals_url, bool needs_cors_for_additional_bid, + std::optional<bool> send_creative_scanning_metadata, std::optional<uint16_t> experiment_group_id, const std::string& trusted_bidding_signals_slot_size_param, const std::optional<url::Origin>& trusted_signals_coordinator); @@ -158,6 +159,8 @@ // bids; those need to perform a CORS check others don't. bool needs_cors_for_additional_bid; + std::optional<bool> send_creative_scanning_metadata; + std::optional<uint16_t> experiment_group_id; std::string trusted_bidding_signals_slot_size_param; std::optional<url::Origin> trusted_signals_coordinator; @@ -329,6 +332,7 @@ const std::optional<GURL>& trusted_scoring_signals_url, std::optional<uint16_t> experiment_group_id, const std::optional<url::Origin>& trusted_scoring_signals_coordinator, + std::optional<bool> send_creative_scanning_metadata, base::OnceClosure process_assigned_callback, base::OnceClosure worklet_available_callback, FatalErrorCallback fatal_error_callback,
diff --git a/content/browser/interest_group/auction_worklet_manager_unittest.cc b/content/browser/interest_group/auction_worklet_manager_unittest.cc index 812685d..36d811d 100644 --- a/content/browser/interest_group/auction_worklet_manager_unittest.cc +++ b/content/browser/interest_group/auction_worklet_manager_unittest.cc
@@ -743,6 +743,7 @@ auction_worklet::mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, auction_worklet::mojom::TrustedSignalsPublicKeyPtr public_key, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> load_seller_worklet_client) override { @@ -1053,6 +1054,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -1109,6 +1111,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, /*process_assigned_callback=*/base::OnceClosure(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -1188,6 +1191,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -1321,6 +1325,7 @@ /*trusted_scoring_signals_url=*/std::nullopt, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -1355,6 +1360,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -1514,6 +1520,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), seller_helper1.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper1.handle(), @@ -1539,6 +1546,7 @@ kAuction2, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -1570,6 +1578,7 @@ kAuction3, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper3.ProcessAssignedCallback(), seller_helper3.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper3.handle(), @@ -1599,6 +1608,7 @@ kAuction4, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper4.ProcessAssignedCallback(), seller_helper4.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper4.handle(), @@ -1875,6 +1885,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), seller_helper1.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper1.handle(), @@ -1898,6 +1909,7 @@ kAuction1, kDifferentDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -1922,6 +1934,7 @@ /*trusted_scoring_signals_url=*/std::nullopt, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper3.ProcessAssignedCallback(), seller_helper3.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper3.handle(), @@ -1950,6 +1963,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, kExperiment1, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), seller_helper1.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper1.handle(), @@ -1965,6 +1979,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, kExperiment2, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -1981,6 +1996,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction1, kDecisionLogicUrl, kWasmUrl, kExperiment1, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper3.ProcessAssignedCallback(), seller_helper3.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper3.handle(), @@ -2002,6 +2018,7 @@ kAuction1, kDecisionLogicUrl, /*trusted_scoring_signals_url=*/std::nullopt, kExperiment1, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper4.ProcessAssignedCallback(), seller_helper4.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper4.handle(), @@ -2023,6 +2040,7 @@ /*trusted_scoring_signals_url=*/std::nullopt, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper5.ProcessAssignedCallback(), seller_helper5.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper5.handle(), @@ -2041,6 +2059,64 @@ seller_helper5.handle()->GetSellerWorklet()); } +// Test seller worklet matching with different setting for sending creative +// scanning metadata. +TEST_F(AuctionWorkletManagerTest, SellerWorkletSendCreativeScanningMetadata) { + SellerWorkletHelper seller_helper1; + auction_worklet_manager_->RequestSellerWorklet( + kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, + /*experiment_group_id=*/std::nullopt, + /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, + seller_helper1.ProcessAssignedCallback(), + seller_helper1.WorkletAvailableCallback(), + NeverInvokedFatalErrorCallback(), seller_helper1.handle(), + auction_metrics_recorder_manager_->CreateAuctionMetricsRecorder()); + seller_helper1.WaitForWorklet(); + EXPECT_TRUE(seller_helper1.handle()->GetSellerWorklet()); + std::unique_ptr<MockSellerWorklet> seller_worklet1 = + auction_process_manager_->WaitForSellerWorklet(); + + // Request one with a different `send_creative_scanning_metadata`. Should + // result in a different worklet. + SellerWorkletHelper seller_helper2; + auction_worklet_manager_->RequestSellerWorklet( + kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, + /*experiment_group_id=*/std::nullopt, + /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/true, + seller_helper2.ProcessAssignedCallback(), + seller_helper2.WorkletAvailableCallback(), + NeverInvokedFatalErrorCallback(), seller_helper2.handle(), + auction_metrics_recorder_manager_->CreateAuctionMetricsRecorder()); + seller_helper2.WaitForWorklet(); + EXPECT_TRUE(seller_helper2.handle()->GetSellerWorklet()); + std::unique_ptr<MockSellerWorklet> seller_worklet2 = + auction_process_manager_->WaitForSellerWorklet(); + EXPECT_NE(seller_helper1.handle()->GetSellerWorklet(), + seller_helper2.handle()->GetSellerWorklet()); + + // "false" is different from nullopt because of AuctionConfig serialization. + SellerWorkletHelper seller_helper3; + auction_worklet_manager_->RequestSellerWorklet( + kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, + /*experiment_group_id=*/std::nullopt, + /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/false, + seller_helper3.ProcessAssignedCallback(), + seller_helper3.WorkletAvailableCallback(), + NeverInvokedFatalErrorCallback(), seller_helper3.handle(), + auction_metrics_recorder_manager_->CreateAuctionMetricsRecorder()); + seller_helper3.WaitForWorklet(); + EXPECT_TRUE(seller_helper3.handle()->GetSellerWorklet()); + std::unique_ptr<MockSellerWorklet> seller_worklet3 = + auction_process_manager_->WaitForSellerWorklet(); + EXPECT_NE(seller_helper3.handle()->GetSellerWorklet(), + seller_helper1.handle()->GetSellerWorklet()); + EXPECT_NE(seller_helper3.handle()->GetSellerWorklet(), + seller_helper2.handle()->GetSellerWorklet()); +} + TEST_F(AuctionWorkletManagerTest, BidderWorkletLoadError) { const char kErrorText[] = "Goat teleportation error"; @@ -2200,6 +2276,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), seller_helper1.WorkletAvailableCallback(), seller_helper1.FatalErrorCallback(), seller_helper1.handle(), @@ -2231,6 +2308,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -2253,6 +2331,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, /*process_assigned_callback=*/base::OnceClosure(), seller_helper1.WorkletAvailableCallback(), seller_helper1.FatalErrorCallback(), seller_helper1.handle(), @@ -2284,6 +2363,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -2358,6 +2438,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), seller_helper1.WorkletAvailableCallback(), seller_helper1.FatalErrorCallback(), seller_helper1.handle(), @@ -2391,6 +2472,7 @@ kAuction2, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -2518,6 +2600,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), base::BindLambdaForTesting( @@ -2644,6 +2727,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -2717,6 +2801,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -2737,7 +2822,7 @@ GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), /*needs_cors_for_additional_bid=*/ - false, 0x85u, + false, /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2746,7 +2831,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2761,7 +2847,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2770,7 +2857,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2784,7 +2872,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2793,7 +2882,8 @@ GURL("https://different.example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2807,7 +2897,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2816,7 +2907,8 @@ GURL("https://example.test/script_url"), GURL("https://different.example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2830,7 +2922,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2838,7 +2931,8 @@ AuctionWorkletManager::WorkletType::kBidder, GURL("https://example.test/script_url"), std::nullopt, GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2852,7 +2946,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2861,7 +2956,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://different.example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2875,7 +2971,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2883,7 +2980,8 @@ AuctionWorkletManager::WorkletType::kBidder, GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), std::nullopt, - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2897,7 +2995,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2906,7 +3005,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x48u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x48u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2920,7 +3020,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2929,7 +3030,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, std::nullopt, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, std::nullopt, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2943,7 +3045,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2952,7 +3055,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/true, 0x85u, + /*needs_cors_for_additional_bid=*/true, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2965,7 +3069,8 @@ AuctionWorkletManager::WorkletType::kBidder, GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), /*signals_url=*/std::nullopt, - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2973,7 +3078,8 @@ AuctionWorkletManager::WorkletType::kBidder, GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), /*signals_url=*/std::nullopt, - /*needs_cors_for_additional_bid=*/true, 0x85u, + /*needs_cors_for_additional_bid=*/true, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"foo=bar", /*trusted_signals_coordinator=*/std::nullopt); @@ -2987,7 +3093,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -2996,7 +3103,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/true, 0x85u, + /*needs_cors_for_additional_bid=*/true, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"foo=bar", /*trusted_signals_coordinator=*/std::nullopt); @@ -3010,7 +3118,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", url::Origin::Create(GURL("https://foo.test"))); @@ -3019,7 +3128,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", url::Origin::Create(GURL("https://bar.test"))); @@ -3033,7 +3143,8 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", url::Origin::Create(GURL("https://foo.test"))); @@ -3042,7 +3153,58 @@ GURL("https://example.test/script_url"), GURL("https://example.test/wasm_url"), GURL("https://example.test/signals_url"), - /*needs_cors_for_additional_bid=*/false, 0x85u, + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, + /*trusted_bidding_signals_slot_size_param=*/"", + /*trusted_signals_coordinator=*/std::nullopt); + + EXPECT_TRUE(key1 < key2 || key2 < key1); + EXPECT_NE(key1.GetHash(), key2.GetHash()); +} + +TEST(WorkletKeyTest, HashIsDifferentForKeysWithCreativeScanning) { + AuctionWorkletManager::WorkletKey key1( + AuctionWorkletManager::WorkletType::kBidder, + GURL("https://example.test/script_url"), + GURL("https://example.test/wasm_url"), + GURL("https://example.test/signals_url"), + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/true, 0x85u, + /*trusted_bidding_signals_slot_size_param=*/"", + /*trusted_signals_coordinator=*/std::nullopt); + + AuctionWorkletManager::WorkletKey key2( + AuctionWorkletManager::WorkletType::kBidder, + GURL("https://example.test/script_url"), + GURL("https://example.test/wasm_url"), + GURL("https://example.test/signals_url"), + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/false, 0x85u, + /*trusted_bidding_signals_slot_size_param=*/"", + /*trusted_signals_coordinator=*/std::nullopt); + + EXPECT_TRUE(key1 < key2 || key2 < key1); + EXPECT_NE(key1.GetHash(), key2.GetHash()); +} + +TEST(WorkletKeyTest, HashIsDifferentWhenGivenNullOptCreativeScanning) { + AuctionWorkletManager::WorkletKey key1( + AuctionWorkletManager::WorkletType::kBidder, + GURL("https://example.test/script_url"), + GURL("https://example.test/wasm_url"), + GURL("https://example.test/signals_url"), + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/true, 0x85u, + /*trusted_bidding_signals_slot_size_param=*/"", + /*trusted_signals_coordinator=*/std::nullopt); + + AuctionWorkletManager::WorkletKey key2( + AuctionWorkletManager::WorkletType::kBidder, + GURL("https://example.test/script_url"), + GURL("https://example.test/wasm_url"), + GURL("https://example.test/signals_url"), + /*needs_cors_for_additional_bid=*/false, + /*send_creative_scanning_metadata=*/std::nullopt, 0x85u, /*trusted_bidding_signals_slot_size_param=*/"", /*trusted_signals_coordinator=*/std::nullopt); @@ -3429,6 +3591,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -3462,6 +3625,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -3497,6 +3661,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -3525,6 +3690,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://a.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), seller_helper1.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper1.handle(), @@ -3551,6 +3717,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://b.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -3570,7 +3737,7 @@ UnorderedElementsAre(kAuction2)); } -// Test that requests with the same parameters reuse bidder worklets. +// Test that requests with the same parameters reuse seller worklets. TEST_F(AuctionWorkletManagerKVv2Test, ReuseSellerWorklet) { // Load a KVv2 seller worklet. SellerWorkletHelper seller_helper1; @@ -3578,6 +3745,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, coordinator_, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), seller_helper1.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper1.handle(), @@ -3604,6 +3772,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction2, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, coordinator_, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -3635,6 +3804,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction3, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, coordinator_, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper3.ProcessAssignedCallback(), seller_helper3.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper3.handle(), @@ -3664,6 +3834,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction4, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, coordinator_, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper4.ProcessAssignedCallback(), seller_helper4.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper4.handle(), @@ -3691,6 +3862,7 @@ kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -3734,6 +3906,7 @@ auction_worklet_manager_->RequestSellerWorklet( kAuction1, kDecisionLogicUrl, kTrustedSignalsUrl, /*experiment_group_id=*/std::nullopt, coordinator_, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -3762,6 +3935,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, process_assigned1.GetCallback(), helper1.GetCallback(), NeverInvokedFatalErrorCallback(), helper1.handle(), auction_metrics_recorder_manager_->CreateAuctionMetricsRecorder()); @@ -3783,6 +3957,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, process_assigned2.GetCallback(), helper2.GetCallback(), NeverInvokedFatalErrorCallback(), helper2.handle(), auction_metrics_recorder_manager_->CreateAuctionMetricsRecorder()); @@ -3823,6 +3998,7 @@ /*trusted_scoring_signals_url=*/std::nullopt, /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/std::nullopt, + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper.ProcessAssignedCallback(), seller_helper.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper.handle(), @@ -3853,6 +4029,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, process_assigned.GetCallback(), helper.GetCallback(), NeverInvokedFatalErrorCallback(), helper.handle(), auction_metrics_recorder_manager_->CreateAuctionMetricsRecorder()); @@ -3886,6 +4063,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper1.ProcessAssignedCallback(), base::MakeExpectedNotRunClosure(FROM_HERE), seller_helper1.FatalErrorCallback(), seller_helper1.handle(), @@ -3906,6 +4084,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), base::MakeExpectedNotRunClosure(FROM_HERE), seller_helper2.FatalErrorCallback(), seller_helper2.handle(), @@ -3947,6 +4126,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, seller_helper2.ProcessAssignedCallback(), seller_helper2.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper2.handle(), @@ -3959,6 +4139,7 @@ /*experiment_group_id=*/std::nullopt, /*trusted_scoring_signals_coordinator=*/ url::Origin::Create(GURL("https://origin.test/")), + /*send_creative_scanning_metadata=*/std::nullopt, std::move(request_seller2_callback), seller_helper1.WorkletAvailableCallback(), NeverInvokedFatalErrorCallback(), seller_helper1.handle(),
diff --git a/content/browser/interest_group/interest_group_auction.cc b/content/browser/interest_group/interest_group_auction.cc index 876f3b5..46f2d2c 100644 --- a/content/browser/interest_group/interest_group_auction.cc +++ b/content/browser/interest_group/interest_group_auction.cc
@@ -5048,6 +5048,7 @@ devtools_auction_id_, *config_->decision_logic_url, config_->trusted_scoring_signals_url, config_->seller_experiment_group_id, config_->non_shared_params.trusted_scoring_signals_coordinator, + config_->send_creative_scanning_metadata, base::BindOnce(&InterestGroupAuction::OnSellerProcessAssigned, base::Unretained(this)), base::BindOnce(&InterestGroupAuction::OnSellerWorkletReceived,
diff --git a/content/browser/interest_group/interest_group_auction_reporter.cc b/content/browser/interest_group/interest_group_auction_reporter.cc index ee683d1..a3346237 100644 --- a/content/browser/interest_group/interest_group_auction_reporter.cc +++ b/content/browser/interest_group/interest_group_auction_reporter.cc
@@ -489,6 +489,7 @@ seller_info->auction_config->seller_experiment_group_id, seller_info->auction_config->non_shared_params .trusted_scoring_signals_coordinator, + seller_info->auction_config->send_creative_scanning_metadata, /*process_assigned_callback=*/base::OnceClosure(), base::BindOnce(&InterestGroupAuctionReporter::OnSellerWorkletReceived, base::Unretained(this), base::Unretained(seller_info),
diff --git a/content/browser/interest_group/interest_group_browsertest.cc b/content/browser/interest_group/interest_group_browsertest.cc index 6ae4687..cbaabbe7 100644 --- a/content/browser/interest_group/interest_group_browsertest.cc +++ b/content/browser/interest_group/interest_group_browsertest.cc
@@ -267,6 +267,9 @@ AdAllowedReportingOriginsToList( ad.allowed_reporting_origins.value())); } + if (ad.creative_scanning_metadata) { + entry.Set("creativeScanningMetadata", *ad.creative_scanning_metadata); + } list.Append(std::move(entry)); } return list; @@ -754,7 +757,8 @@ // TODO(crrev.com/c/6096602): Remove once implementation is removed. {blink::features::kFledgeDirectFromSellerSignalsWebBundles, {}}, {blink::features::kFledgeSellerNonce, {}}, - {blink::features::kFledgeTrustedSignalsKVv2Support, {}}}, + {blink::features::kFledgeTrustedSignalsKVv2Support, {}}, + {blink::features::kFledgeTrustedSignalsKVv1CreativeScanning, {}}}, /*disabled_features=*/ {blink::features::kFencedFrames, blink::features::kFledgeEnforceKAnonymity, @@ -3695,6 +3699,45 @@ } IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest, + JoinInterestGroupValidCreativeScanningMetadata) { + GURL url = embedded_https_test_server().GetURL("a.test", "/echo"); + auto origin = url::Origin::Create(url); + ASSERT_TRUE(NavigateToURL(shell(), url)); + + blink::InterestGroup ig = + blink::TestInterestGroupBuilder(origin, "cars") + .SetAds({{{GURL("https://example.com/render"), + /*metadata=*/std::nullopt}, + {GURL("https://example.com/render2"), + /*metadata=*/std::nullopt}}}) + .SetAdComponents({{{GURL("https://example.com/component"), + /*metadata=*/std::nullopt}}}) + .Build(); + ig.ads.value()[1].creative_scanning_metadata = "scan me"; + ig.ad_components.value()[0].creative_scanning_metadata = "me too"; + + EXPECT_EQ(kSuccess, JoinInterestGroupAndVerify(ig)); + + scoped_refptr<StorageInterestGroups> groups = + GetInterestGroupsForOwner(origin); + ASSERT_EQ(groups->size(), 1u); + const blink::InterestGroup& group = + groups->GetInterestGroups()[0]->interest_group; + ASSERT_TRUE(group.ads.has_value()); + ASSERT_EQ(group.ads->size(), 2u); + EXPECT_FALSE(group.ads.value()[0].creative_scanning_metadata.has_value()); + ASSERT_TRUE(group.ads.value()[1].creative_scanning_metadata.has_value()); + EXPECT_EQ("scan me", *group.ads.value()[1].creative_scanning_metadata); + + ASSERT_TRUE(group.ad_components.has_value()); + ASSERT_EQ(group.ad_components->size(), 1u); + ASSERT_TRUE( + group.ad_components.value()[0].creative_scanning_metadata.has_value()); + EXPECT_EQ("me too", + *group.ad_components.value()[0].creative_scanning_metadata); +} + +IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest, JoinInterestGroupValidAdRenderId) { GURL url = embedded_https_test_server().GetURL("a.test", "/echo"); auto origin = url::Origin::Create(url); @@ -14708,6 +14751,7 @@ perBuyerPrioritySignals: {$4: {foo: 1}, '*': {BaR: -2}}, perBuyerCurrencies: {$4: 'USD', $5: 'CAD', '*': 'EUR'}, sellerCurrency: 'EUR', + sendCreativeScanningMetadata: true, })", seller_origin, seller_script_url, embedded_https_test_server().GetURL( @@ -14859,7 +14903,8 @@ perBuyerCumulativeTimeouts: {$4: 13000, $5: 14000, '*': 16000}, perBuyerPrioritySignals: {$4: {foo: 1}, '*': {BaR: -2}}, perBuyerCurrencies: {$4: 'USD', $5: 'CAD', '*': 'EUR'}, - sellerCurrency: 'EUR' + sellerCurrency: 'EUR', + sendCreativeScanningMetadata: true, })", seller_origin, seller_script_url, embedded_https_test_server().GetURL(
diff --git a/content/browser/interest_group/interest_group_storage.cc b/content/browser/interest_group/interest_group_storage.cc index 68550b6..f26af5f 100644 --- a/content/browser/interest_group/interest_group_storage.cc +++ b/content/browser/interest_group/interest_group_storage.cc
@@ -238,8 +238,9 @@ // Version 29 adds selectableBuyerAndSellerReportingIds field to ad object. // Version 30 compresses the AdsProto field using Snappy compression and runs a // VACUUM command. +// Version 31 adds creative_scanning_metadata field to ad object. -const int kCurrentVersionNumber = 30; +const int kCurrentVersionNumber = 31; // Earliest version of the code which can use a |kCurrentVersionNumber| database // without failing. @@ -432,6 +433,9 @@ allowed_reporting_origin.Serialize()); } } + if (ad.creative_scanning_metadata.has_value()) { + ad_proto->set_creative_scanning_metadata(*ad.creative_scanning_metadata); + } } return ad_protos; } @@ -567,6 +571,10 @@ ad.allowed_reporting_origins = std::move(allowed_reporting_origins_vector); } + if (ad_proto.has_creative_scanning_metadata()) { + ad.creative_scanning_metadata = + std::move(*ad_proto.mutable_creative_scanning_metadata()); + } } UMA_HISTOGRAM_TIMES("Storage.InterestGroup.AdProtoDeserializationTime", base::TimeTicks::Now() - start); @@ -3039,6 +3047,9 @@ if (!UpgradeV29SchemaToV30(db, meta_table)) { return false; } + ABSL_FALLTHROUGH_INTENDED; + case 30: + // Conversion is a no-op, just bookkeeping for a proto change. if (!meta_table.SetVersionNumber(kCurrentVersionNumber)) { return false; }
diff --git a/content/browser/interest_group/interest_group_storage.proto b/content/browser/interest_group/interest_group_storage.proto index c4a9196..1b5f845 100644 --- a/content/browser/interest_group/interest_group_storage.proto +++ b/content/browser/interest_group/interest_group_storage.proto
@@ -18,6 +18,7 @@ repeated string selectable_buyer_and_seller_reporting_ids = 8; optional string ad_render_id = 6; repeated string allowed_reporting_origins = 7; + optional string creative_scanning_metadata = 9; } repeated AdProto ads = 1; }
diff --git a/content/browser/interest_group/interest_group_storage_unittest.cc b/content/browser/interest_group/interest_group_storage_unittest.cc index 37ce3ee..f237542 100644 --- a/content/browser/interest_group/interest_group_storage_unittest.cc +++ b/content/browser/interest_group/interest_group_storage_unittest.cc
@@ -136,6 +136,11 @@ // in that version will be added. By default, all fields for the current // version are added. // + // For best coverage, changes within the fields that don't require any + // active database migration (e.g. adding an optional field to a proto) should + // still get their own version number with `version_changed_ig_fields` + // set to true. + // // If non-null, *version_changed_ig_fields will be set indicating if // `version_number` changed any new interest group fields when compared to // `version_number` - 1, if it exists. (Some versions merely changed the @@ -196,6 +201,10 @@ // instance. switch (version_number) { + case 31: + result.ads.value()[0].creative_scanning_metadata = "scan 1"; + result.ad_components.value()[1].creative_scanning_metadata = "scan 2"; + ABSL_FALLTHROUGH_INTENDED; case 30: // Compressed AdsProto, but introduced no new fields. ABSL_FALLTHROUGH_INTENDED; @@ -2989,7 +2998,7 @@ const blink::InterestGroup& actual = interest_groups[0].interest_group; // Don't compare `expiry` as it changes every test run. expected.expiry = actual.expiry; - IgExpectEqualsForTesting(expected, actual); + IgExpectEqualsForTesting(actual, expected); } // Make sure the database still works if we open it again. @@ -3002,7 +3011,7 @@ const blink::InterestGroup& actual = interest_groups[0].interest_group; // Don't compare `expiry` as it changes every test run. expected.expiry = actual.expiry; - IgExpectEqualsForTesting(expected, actual); + IgExpectEqualsForTesting(actual, expected); bool version_changed_ig_fields; blink::InterestGroup next_version_expected = @@ -3011,7 +3020,7 @@ // Make sure IgExpect[Not]EqualsForTesting() gets updated to compare the // newly introduced field(s). next_version_expected.expiry = actual.expiry; - IgExpectNotEqualsForTesting(next_version_expected, actual); + IgExpectNotEqualsForTesting(actual, next_version_expected); } }
diff --git a/content/browser/interest_group/interest_group_update_manager.cc b/content/browser/interest_group/interest_group_update_manager.cc index 24d4b8d..e16849e 100644 --- a/content/browser/interest_group/interest_group_update_manager.cc +++ b/content/browser/interest_group/interest_group_update_manager.cc
@@ -495,6 +495,11 @@ } } } + const std::string* maybe_creative_scanning_metadata = + ads_dict->FindString("creativeScanningMetadata"); + if (maybe_creative_scanning_metadata) { + ad.creative_scanning_metadata = *maybe_creative_scanning_metadata; + } const base::Value* maybe_metadata = ads_dict->Find("metadata"); if (maybe_metadata) { std::string metadata;
diff --git a/content/browser/interest_group/mock_auction_process_manager.cc b/content/browser/interest_group/mock_auction_process_manager.cc index 0638e76..5ed7162d2 100644 --- a/content/browser/interest_group/mock_auction_process_manager.cc +++ b/content/browser/interest_group/mock_auction_process_manager.cc
@@ -631,6 +631,7 @@ auction_worklet::mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, auction_worklet::mojom::TrustedSignalsPublicKeyPtr public_key, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> load_seller_worklet_client) {
diff --git a/content/browser/interest_group/mock_auction_process_manager.h b/content/browser/interest_group/mock_auction_process_manager.h index ac4dc57c..cb0a17e 100644 --- a/content/browser/interest_group/mock_auction_process_manager.h +++ b/content/browser/interest_group/mock_auction_process_manager.h
@@ -475,6 +475,7 @@ auction_worklet::mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, auction_worklet::mojom::TrustedSignalsPublicKeyPtr public_key, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> load_seller_worklet_client) override;
diff --git a/content/browser/media/capture/web_contents_auto_scaler_unittest.cc b/content/browser/media/capture/web_contents_auto_scaler_unittest.cc index ad269e1..50e00f7 100644 --- a/content/browser/media/capture/web_contents_auto_scaler_unittest.cc +++ b/content/browser/media/capture/web_contents_auto_scaler_unittest.cc
@@ -38,10 +38,6 @@ WebContentsAutoScalerTest() = default; ~WebContentsAutoScalerTest() override = default; - void SetUp() override { - feature_list_.InitAndEnableFeature(media::kWebContentsCaptureHiDpi); - } - void CreateAutoScaler(const gfx::Size& capture_size) { scaler_ = std::make_unique<WebContentsAutoScaler>(delegate_, capture_size); }
diff --git a/content/browser/media/capture/web_contents_frame_tracker.cc b/content/browser/media/capture/web_contents_frame_tracker.cc index a6532160..603f0a9 100644 --- a/content/browser/media/capture/web_contents_frame_tracker.cc +++ b/content/browser/media/capture/web_contents_frame_tracker.cc
@@ -29,7 +29,6 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_media_capture_id.h" #include "content/public/browser/web_contents_observer.h" -#include "media/base/media_switches.h" #include "media/base/video_util.h" #include "media/capture/mojom/video_capture_types.mojom.h" #include "media/capture/video_capture_types.h" @@ -164,7 +163,6 @@ capture_size_ = capture_size; if (is_high_dpi_enabled && - base::FeatureList::IsEnabled(media::kWebContentsCaptureHiDpi) && !GpuDataManagerImpl::GetInstance()->IsGpuCompositingDisabled()) { auto_scaler_ = std::make_unique<WebContentsAutoScaler>(*context_, capture_size);
diff --git a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc index dc0b606..edc35ef 100644 --- a/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc +++ b/content/browser/media/capture/web_contents_video_capture_device_browsertest.cc
@@ -26,7 +26,6 @@ #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test.h" #include "content/shell/browser/shell.h" -#include "media/base/media_switches.h" #include "media/base/video_frame.h" #include "media/base/video_types.h" #include "media/base/video_util.h" @@ -52,10 +51,7 @@ : public ContentCaptureDeviceBrowserTestBase, public FrameTestUtil { public: - WebContentsVideoCaptureDeviceBrowserTest() { - // TODO(https://crbug.com/1324757): tests should work with HiDPI enabled. - scoped_feature_list_.InitAndDisableFeature(media::kWebContentsCaptureHiDpi); - } + WebContentsVideoCaptureDeviceBrowserTest() = default; WebContentsVideoCaptureDeviceBrowserTest( const WebContentsVideoCaptureDeviceBrowserTest&) = delete;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h index 2285564..bea4e26 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.h +++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -565,6 +565,13 @@ void UpdateWindowsNow(); + // For HiDPI capture mode, adjust the device scale factor to render the + // contents at a higher pixel density when scale_override_for_capture_ > 1.0. + // The first boolean returns true if any of the ScreenInfo elements in + // `screen_infos_` was changed. The second boolean returns true if the current + // ScreenInfo element was changed. + std::pair<bool, bool> MaybeUpdateScreenInfosForHiDPI(); + // Interface through which the NSView is to be manipulated. This points either // to |in_process_ns_view_bridge_| or to |remote_ns_view_|. raw_ptr<remote_cocoa::mojom::RenderWidgetHostNSView> ns_view_ = nullptr;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm index 8f1cdd2..9185fd2 100644 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -876,29 +876,9 @@ new_screen_infos_from_shim_.reset(); } - if (base::FeatureList::IsEnabled(media::kWebContentsCaptureHiDpi)) { - // If HiDPI capture mode is active, adjust the device scale factor to - // increase the rendered pixel count. |new_screen_infos| always contains - // the unmodified original values for the display, and a copy of it is - // saved in |screen_infos_|, with a modification applied if applicable. - // When HiDPI mode is turned off (the scale override is 1.0), the original - // |new_screen_infos| value gets copied unchanged to |screen_infos_|. - display::ScreenInfos new_screen_infos = original_screen_infos_; - const float old_device_scale_factor = - new_screen_infos.current().device_scale_factor; - new_screen_infos.mutable_current().device_scale_factor = - old_device_scale_factor * scale_override_for_capture_; - if (screen_infos_ != new_screen_infos) { - DVLOG(1) << __func__ << ": Overriding device_scale_factor from " - << old_device_scale_factor << " to " - << new_screen_infos.current().device_scale_factor - << " for capture."; - any_display_changed = true; - current_display_changed |= - new_screen_infos.current() != screen_infos_.current(); - screen_infos_ = new_screen_infos; - } - } + std::pair<bool, bool> was_updated = MaybeUpdateScreenInfosForHiDPI(); + any_display_changed |= was_updated.first; + current_display_changed |= was_updated.second; bool dip_size_changed = view_bounds_in_window_dip_.size() != browser_compositor_->GetRendererSize(); @@ -2428,6 +2408,32 @@ [NSApp updateWindows]; } +std::pair<bool, bool> +RenderWidgetHostViewMac::MaybeUpdateScreenInfosForHiDPI() { + // For HiDPI capture mode, adjust the device scale factor to + // increase the rendered pixel count. |new_screen_infos| always contains + // the unmodified original values for the display, and a copy of it is + // saved in |screen_infos_|, with a modification applied if applicable. + // When HiDPI mode is turned off (the scale override is 1.0), the original + // |new_screen_infos| value gets copied unchanged to |screen_infos_|. + display::ScreenInfos new_screen_infos = original_screen_infos_; + const float old_device_scale_factor = + new_screen_infos.current().device_scale_factor; + new_screen_infos.mutable_current().device_scale_factor = + old_device_scale_factor * scale_override_for_capture_; + if (screen_infos_ != new_screen_infos) { + DVLOG(1) << __func__ << ": Overriding device_scale_factor from " + << old_device_scale_factor << " to " + << new_screen_infos.current().device_scale_factor + << " for capture."; + const bool current_display_changed = + new_screen_infos.current() != screen_infos_.current(); + screen_infos_ = new_screen_infos; + return {true, current_display_changed}; + } + return {false, false}; +} + Class GetRenderWidgetHostViewCocoaClassForTesting() { return [RenderWidgetHostViewCocoa class]; }
diff --git a/content/browser/webid/federated_auth_request_impl.cc b/content/browser/webid/federated_auth_request_impl.cc index 1706c23..8207ea2 100644 --- a/content/browser/webid/federated_auth_request_impl.cc +++ b/content/browser/webid/federated_auth_request_impl.cc
@@ -151,7 +151,8 @@ const RpMode& rp_mode, const std::optional<std::vector<std::string>>& fields, const std::vector<std::string>& disclosure_shown_for, - const std::string& params_json) { + const std::string& params_json, + const std::optional<std::string>& type) { std::string query; if (!client_id.empty()) { query += @@ -227,7 +228,9 @@ base::EscapeUrlEncodedData(params_json, /*use_plus=*/true); } } - + if (IsFedCmIdPRegistrationEnabled() && type) { + query += "&type=" + base::EscapeUrlEncodedData(*type, /*use_plus=*/true); + } return query; } @@ -2339,7 +2342,8 @@ idp_info.provider->nonce, account_id, identity_selection_type_ != kExplicit, rp_mode_, idp_info.provider->fields, disclosure_shown_for, - idp_info.provider->params_json.value_or("")); + idp_info.provider->params_json.value_or(""), + idp_info.provider->config->type); } network_manager_->SendTokenRequest(
diff --git a/content/browser/webid/federated_auth_request_impl_unittest.cc b/content/browser/webid/federated_auth_request_impl_unittest.cc index 1220250..41c5adb 100644 --- a/content/browser/webid/federated_auth_request_impl_unittest.cc +++ b/content/browser/webid/federated_auth_request_impl_unittest.cc
@@ -155,6 +155,7 @@ const char* domain_hint; std::optional<std::vector<std::string>> fields; const char* params_json; + std::optional<std::string> type; }; // Parameters for a call to RequestToken. @@ -206,6 +207,7 @@ std::optional<SkColor> brand_background_color; std::optional<SkColor> brand_text_color; std::string requested_label; + std::vector<std::string> types; }; struct MockIdpInfo { @@ -373,6 +375,7 @@ idp_metadata.brand_background_color = config.brand_background_color; idp_metadata.brand_text_color = config.brand_text_color; idp_metadata.requested_label = config.requested_label; + idp_metadata.types = config.types; base::SequencedTaskRunner::GetCurrentDefault()->PostTask( FROM_HERE, base::BindOnce(std::move(callback), @@ -1145,6 +1148,9 @@ if (identity_provider.params_json) { options->params_json = identity_provider.params_json; } + if (identity_provider.type) { + options->config->type = *identity_provider.type; + } idp_ptrs.push_back(std::move(options)); } blink::mojom::IdentityProviderGetParametersPtr get_params = @@ -3689,6 +3695,29 @@ RunAuthTest(kDefaultRequestParameters, expectations, kConfigurationValid); } +TEST_F(FederatedAuthRequestImplTest, RegisteredIdpInIdAssertion) { + base::test::ScopedFeatureList list; + list.InitAndEnableFeature(features::kFedCmIdPRegistration); + std::unique_ptr<IdpNetworkRequestManagerParamChecker> checker = + std::make_unique<IdpNetworkRequestManagerParamChecker>(); + RequestParameters request = kDefaultRequestParameters; + constexpr char kType[] = "someType"; + request.identity_providers[0].type = kType; + checker->SetExpectedTokenPostData( + "client_id=" + std::string(kClientId) + "&nonce=" + std::string(kNonce) + + "&account_id=" + std::string(kAccountId) + "&disclosure_text_shown=true" + + "&is_auto_selected=false&mode=passive&fields=name,email,picture&" + "disclosure_shown_for=" + "name,email,picture" + "&type=" + + kType); + SetNetworkRequestManager(std::move(checker)); + + MockConfiguration config = kConfigurationValid; + config.idp_info[kProviderUrlFull].config.types = {kType}; + RunAuthTest(request, kExpectationSuccess, config); +} + namespace { // TestIdpNetworkRequestManager subclass which runs the `account_list_task`
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/StylusGestureEndToEndTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/StylusGestureEndToEndTest.java index 1582e19..58dffc0 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/input/StylusGestureEndToEndTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/input/StylusGestureEndToEndTest.java
@@ -36,7 +36,6 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.content.browser.RenderCoordinatesImpl; import org.chromium.content.browser.webcontents.WebContentsImpl; @@ -57,7 +56,6 @@ @CommandLineFlags.Add({"enable-features=StylusRichGestures"}) @MinAndroidSdkLevel(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) -@DisabledTest(message = "crbug.com/343810189") public class StylusGestureEndToEndTest { @Rule public ImeActivityTestRule mRule = new ImeActivityTestRule();
diff --git a/content/services/auction_worklet/auction_worklet_service_impl.cc b/content/services/auction_worklet/auction_worklet_service_impl.cc index 3b1fd75..cfdd7a7c 100644 --- a/content/services/auction_worklet/auction_worklet_service_impl.cc +++ b/content/services/auction_worklet/auction_worklet_service_impl.cc
@@ -339,6 +339,7 @@ const url::Origin& top_window_origin, mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, mojom::TrustedSignalsPublicKeyPtr public_key, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> load_seller_worklet_client) { @@ -356,7 +357,7 @@ std::move(auction_network_events_handler), GetTrustedSignalsKVv2Manager(), decision_logic_url, trusted_scoring_signals_url, top_window_origin, std::move(permissions_policy_state), experiment_group_id, - std::move(public_key), + send_creative_scanning_metadata, std::move(public_key), base::BindRepeating( &AuctionWorkletServiceImpl::GetNextSellerWorkletThreadIndex, base::Unretained(this)),
diff --git a/content/services/auction_worklet/auction_worklet_service_impl.h b/content/services/auction_worklet/auction_worklet_service_impl.h index 3c6836a3..0fda80d 100644 --- a/content/services/auction_worklet/auction_worklet_service_impl.h +++ b/content/services/auction_worklet/auction_worklet_service_impl.h
@@ -99,6 +99,7 @@ const url::Origin& top_window_origin, mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, mojom::TrustedSignalsPublicKeyPtr public_key, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> load_seller_worklet_client) override;
diff --git a/content/services/auction_worklet/bidder_lazy_filler.cc b/content/services/auction_worklet/bidder_lazy_filler.cc index 7bda61a..c84cb20 100644 --- a/content/services/auction_worklet/bidder_lazy_filler.cc +++ b/content/services/auction_worklet/bidder_lazy_filler.cc
@@ -8,12 +8,14 @@ #include <string_view> #include <vector> +#include "base/feature_list.h" #include "base/functional/callback.h" #include "content/services/auction_worklet/auction_v8_helper.h" #include "content/services/auction_worklet/auction_v8_logger.h" #include "content/services/auction_worklet/public/mojom/bidder_worklet.mojom.h" #include "gin/converter.h" #include "gin/dictionary.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/interest_group/interest_group.h" #include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom.h" #include "v8/include/v8-exception.h" @@ -114,7 +116,10 @@ InterestGroupLazyFiller::InterestGroupLazyFiller(AuctionV8Helper* v8_helper, AuctionV8Logger* v8_logger) - : PersistedLazyFiller(v8_helper), v8_logger_(v8_logger) {} + : PersistedLazyFiller(v8_helper), + creative_scanning_enabled_(base::FeatureList::IsEnabled( + blink::features::kFledgeTrustedSignalsKVv1CreativeScanning)), + v8_logger_(v8_logger) {} void InterestGroupLazyFiller::ReInitialize( const GURL* bidding_logic_url, @@ -275,6 +280,11 @@ return false; } } + if (creative_scanning_enabled_ && ad.creative_scanning_metadata && + !ad_dict.Set("creativeScanningMetadata", + *ad.creative_scanning_metadata)) { + return false; + } ads_vector.emplace_back(std::move(ad_object)); } return v8_helper()->InsertValue(
diff --git a/content/services/auction_worklet/bidder_lazy_filler.h b/content/services/auction_worklet/bidder_lazy_filler.h index 6ddd935b..3bf96f1 100644 --- a/content/services/auction_worklet/bidder_lazy_filler.h +++ b/content/services/auction_worklet/bidder_lazy_filler.h
@@ -149,6 +149,7 @@ raw_ptr<const GURL> trusted_bidding_signals_url_ = nullptr; raw_ptr<const mojom::BidderWorkletNonSharedParams> bidder_worklet_non_shared_params_ = nullptr; + const bool creative_scanning_enabled_; const raw_ptr<AuctionV8Logger> v8_logger_; };
diff --git a/content/services/auction_worklet/bidder_worklet_unittest.cc b/content/services/auction_worklet/bidder_worklet_unittest.cc index 119e9099..188cbe48 100644 --- a/content/services/auction_worklet/bidder_worklet_unittest.cc +++ b/content/services/auction_worklet/bidder_worklet_unittest.cc
@@ -4647,6 +4647,47 @@ /*aggregate_win_signals=*/std::nullopt, base::TimeDelta())); } +TEST_F(BidderWorkletTest, GenerateBidInterestGroupCreativeScanningMetadata) { + RunGenerateBidExpectingExpressionIsTrue( + R"(!('creativeScanningMetadata' in interestGroup.ads[0]))"); + RunGenerateBidExpectingExpressionIsTrue( + R"(!('creativeScanningMetadata' in interestGroup.adComponents[0]))"); + + interest_group_ads_[0].creative_scanning_metadata = "123"; + interest_group_ad_components_.value()[0].creative_scanning_metadata = "456"; + // Not set because the feature is off. + RunGenerateBidExpectingExpressionIsTrue( + R"(!('creativeScanningMetadata' in interestGroup.ads[0]))"); + RunGenerateBidExpectingExpressionIsTrue( + R"(!('creativeScanningMetadata' in interestGroup.adComponents[0]))"); +} + +class BidderWorkletCreativeScanningTest : public BidderWorkletTest { + public: + BidderWorkletCreativeScanningTest() { + feature_list_.InitAndEnableFeature( + blink::features::kFledgeTrustedSignalsKVv1CreativeScanning); + } + + protected: + base::test::ScopedFeatureList feature_list_; +}; + +TEST_F(BidderWorkletCreativeScanningTest, + GenerateBidInterestGroupCreativeScanningMetadata) { + RunGenerateBidExpectingExpressionIsTrue( + R"(!('creativeScanningMetadata' in interestGroup.ads[0]))"); + RunGenerateBidExpectingExpressionIsTrue( + R"(!('creativeScanningMetadata' in interestGroup.adComponents[0]))"); + + interest_group_ads_[0].creative_scanning_metadata = "123"; + interest_group_ad_components_.value()[0].creative_scanning_metadata = "456"; + RunGenerateBidExpectingExpressionIsTrue( + R"(interestGroup.ads[0].creativeScanningMetadata === "123")"); + RunGenerateBidExpectingExpressionIsTrue( + R"(interestGroup.adComponents[0].creativeScanningMetadata === "456")"); +} + // Test multiple GenerateBid calls on a single worklet, in parallel. Do this // twice, once before the worklet has loaded its Javascript, and once after, to // make sure both cases work.
diff --git a/content/services/auction_worklet/public/cpp/auction_downloader.cc b/content/services/auction_worklet/public/cpp/auction_downloader.cc index 6173ffa..a88e44d 100644 --- a/content/services/auction_worklet/public/cpp/auction_downloader.cc +++ b/content/services/auction_worklet/public/cpp/auction_downloader.cc
@@ -15,6 +15,7 @@ #include "base/metrics/histogram_functions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" +#include "base/time/time.h" #include "base/trace_event/trace_event.h" #include "base/unguessable_token.h" #include "base/values.h" @@ -182,18 +183,6 @@ dict.Add("pushEnd", timing.push_end.since_origin().InSecondsF()); } -bool IsCachedResponse(const network::mojom::URLResponseHead& response_head) { - if (response_head.was_fetched_via_cache) { - return true; - } - - // was_fetched_via_cache only includes the cases where the entry was fresh - // or was validated. Include `response_head.original_response_time - // < response_head.response_time` so that we include the cases the entry - // was updated as well. - return response_head.original_response_time < response_head.response_time; -} - } // namespace AuctionDownloader::AuctionDownloader( @@ -263,8 +252,9 @@ simple_url_loader_->SetOnRedirectCallback(base::BindRepeating( &AuctionDownloader::OnRedirect, base::Unretained(this))); - simple_url_loader_->SetOnResponseStartedCallback(base::BindRepeating( - &AuctionDownloader::OnResponseStarted, base::Unretained(this))); + simple_url_loader_->SetOnResponseStartedCallback( + base::BindRepeating(&AuctionDownloader::OnResponseStarted, + base::Unretained(this), base::Time::Now())); simple_url_loader_->SetTimeoutDuration(kRequestTimeout); @@ -409,6 +399,7 @@ } void AuctionDownloader::OnResponseStarted( + base::Time request_time, const GURL& final_url, const network::mojom::URLResponseHead& response_head) { if (network_events_delegate_ != nullptr) { @@ -482,11 +473,11 @@ // Record the cached response's age if there was an entry in the cache. if (is_trusted_bidding_signals_kvv1_download_ && - IsCachedResponse(response_head) && - response_head.original_response_time < response_head.request_time) { + response_head.was_fetched_via_cache && + response_head.original_response_time < request_time) { base::UmaHistogramTimes( - "Ads.InterestGroup.Auction.HttpCachedTrustedBiddingSignalsAge", - response_head.request_time - response_head.original_response_time); + "Ads.InterestGroup.Auction.HttpCachedTrustedBiddingSignalsAge2", + request_time - response_head.original_response_time); } if (response_started_callback_) {
diff --git a/content/services/auction_worklet/public/cpp/auction_downloader.h b/content/services/auction_worklet/public/cpp/auction_downloader.h index 032900f..d595268 100644 --- a/content/services/auction_worklet/public/cpp/auction_downloader.h +++ b/content/services/auction_worklet/public/cpp/auction_downloader.h
@@ -145,7 +145,8 @@ const net::RedirectInfo& redirect_info, const network::mojom::URLResponseHead& response_head, std::vector<std::string>* removed_headers); - void OnResponseStarted(const GURL& final_url, + void OnResponseStarted(base::Time request_time, + const GURL& final_url, const network::mojom::URLResponseHead& response_head); // Notifies tracing, devtools and callback of a failure and cancels any
diff --git a/content/services/auction_worklet/public/cpp/auction_downloader_unittest.cc b/content/services/auction_worklet/public/cpp/auction_downloader_unittest.cc index 59a9a0fe..50f7d2e 100644 --- a/content/services/auction_worklet/public/cpp/auction_downloader_unittest.cc +++ b/content/services/auction_worklet/public/cpp/auction_downloader_unittest.cc
@@ -41,7 +41,7 @@ const char kUtf8Charset[] = "utf-8"; const char kCachedTrustedBiddingSignalsAge[] = - "Ads.InterestGroup.Auction.HttpCachedTrustedBiddingSignalsAge"; + "Ads.InterestGroup.Auction.HttpCachedTrustedBiddingSignalsAge2"; // Creates a URLResponseHeadPtr that the AuctionDownloader will accept as a // valid set of headers for a response. @@ -860,14 +860,13 @@ } } -TEST_P(AuctionDownloaderTest, HttpCachedTrustedBiddingSignalsAge_Cached) { +TEST_P(AuctionDownloaderTest, HttpCachedTrustedBiddingSignalsAge2_Cached) { network::URLLoaderCompletionStatus status; is_trusted_bidding_signals_kvv1_download_ = true; base::HistogramTester histogram_tester; auto response_head = CreateResponseHead(); response_head->was_fetched_via_cache = true; - response_head->request_time = base::Time::Now(); response_head->original_response_time = base::Time::Now() - base::Minutes(2); url_loader_factory_.AddResponse(url_, std::move(response_head), kAsciiResponseBody, status); @@ -876,24 +875,7 @@ base::Minutes(2).InMilliseconds(), 1); } -TEST_P(AuctionDownloaderTest, HttpCachedTrustedBiddingSignalsAge_Stale) { - network::URLLoaderCompletionStatus status; - is_trusted_bidding_signals_kvv1_download_ = true; - - base::HistogramTester histogram_tester; - auto response_head = CreateResponseHead(); - response_head->was_fetched_via_cache = false; - response_head->request_time = base::Time::Now(); - response_head->response_time = base::Time::Now() + base::Minutes(2); - response_head->original_response_time = base::Time::Now() - base::Minutes(2); - url_loader_factory_.AddResponse(url_, std::move(response_head), - kAsciiResponseBody, status); - std::unique_ptr<std::string> body = RunRequest(); - histogram_tester.ExpectUniqueSample(kCachedTrustedBiddingSignalsAge, - base::Minutes(2).InMilliseconds(), 1); -} - -TEST_P(AuctionDownloaderTest, HttpCachedTrustedBiddingSignalsAge_NotCached) { +TEST_P(AuctionDownloaderTest, HttpCachedTrustedBiddingSignalsAge2_NotCached) { network::URLLoaderCompletionStatus status; is_trusted_bidding_signals_kvv1_download_ = true; @@ -905,14 +887,13 @@ histogram_tester.ExpectTotalCount(kCachedTrustedBiddingSignalsAge, 0); } -TEST_P(AuctionDownloaderTest, HttpCachedTrustedBiddingSignalsAge_NotKVV1) { +TEST_P(AuctionDownloaderTest, HttpCachedTrustedBiddingSignalsAge2_NotKVV1) { network::URLLoaderCompletionStatus status; is_trusted_bidding_signals_kvv1_download_ = false; base::HistogramTester histogram_tester; auto response_head = CreateResponseHead(); response_head->was_fetched_via_cache = true; - response_head->request_time = base::Time::Now(); response_head->original_response_time = base::Time::Now() - base::Minutes(2); url_loader_factory_.AddResponse(url_, std::move(response_head), kAsciiResponseBody, status);
diff --git a/content/services/auction_worklet/public/mojom/auction_worklet_service.mojom b/content/services/auction_worklet/public/mojom/auction_worklet_service.mojom index a23d8bda..c33b625 100644 --- a/content/services/auction_worklet/public/mojom/auction_worklet_service.mojom +++ b/content/services/auction_worklet/public/mojom/auction_worklet_service.mojom
@@ -189,6 +189,10 @@ // `experiment_group_id`: An optional parameter to pass to trusted signals // server and as part of AuctionConfig. // + // `send_creative_scanning_metadata`: If true, creative scanning data from + // the interest group will be sent to V1 trusted seller signals servers. + // Also part of AuctionConfig. + // // `load_seller_worklet_client` may be passed in to get a notification when // the `script_source_url` has been loaded, and is passed whether // `trusted_scoring_signals_url` may be requested. It's needed when @@ -211,6 +215,7 @@ url.mojom.Origin top_window_origin, AuctionWorkletPermissionsPolicyState permissions_policy_state, uint16? experiment_group_id, + bool? send_creative_scanning_metadata, TrustedSignalsPublicKey? public_key, pending_remote<LoadSellerWorkletClient>? load_seller_worklet_client); };
diff --git a/content/services/auction_worklet/seller_worklet.cc b/content/services/auction_worklet/seller_worklet.cc index cc73a4f6..120e0cb 100644 --- a/content/services/auction_worklet/seller_worklet.cc +++ b/content/services/auction_worklet/seller_worklet.cc
@@ -156,6 +156,7 @@ base::optional_ref<const GURL> decision_logic_url, base::optional_ref<const GURL> trusted_scoring_signals_url, const std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, const blink::AuctionConfig::NonSharedParams& auction_ad_config_non_shared_params, const std::vector<std::unique_ptr<AuctionConfigLazyFiller>>& @@ -243,9 +244,10 @@ v8_helper, v8_logger, context, component_auction.seller, component_auction.decision_logic_url, component_auction.trusted_scoring_signals_url, - experiment_group_id, component_auction.non_shared_params, - auction_config_lazy_fillers, pos + 1, - &component_auction_vector)) { + experiment_group_id, + component_auction.send_creative_scanning_metadata, + component_auction.non_shared_params, auction_config_lazy_fillers, + pos + 1, &component_auction_vector)) { return false; } } @@ -263,6 +265,11 @@ static_cast<unsigned>(experiment_group_id.value())); } + if (send_creative_scanning_metadata.has_value()) { + auction_config_dict.Set("sendCreativeScanningMetadata", + *send_creative_scanning_metadata); + } + args->push_back(std::move(auction_config_value)); return true; } @@ -436,6 +443,7 @@ const url::Origin& top_window_origin, mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, mojom::TrustedSignalsPublicKeyPtr public_key, GetNextThreadIndexCallback get_next_thread_index_callback, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> @@ -443,6 +451,7 @@ : url_loader_factory_(std::move(pending_url_loader_factory)), trusted_signals_kvv2_manager_(trusted_signals_kvv2_manager), script_source_url_(decision_logic_url), + send_creative_scanning_metadata_(send_creative_scanning_metadata), trusted_scoring_signals_origin_( trusted_scoring_signals_url ? std::make_optional(url::Origin::Create( *trusted_scoring_signals_url)) @@ -463,12 +472,12 @@ debug_ids_.push_back( base::MakeRefCounted<AuctionV8Helper::DebugId>(v8_helpers_[i].get())); v8_state_.push_back(std::unique_ptr<V8State, base::OnTaskRunnerDeleter>( - new V8State(v8_helpers_[i], debug_ids_[i], - std::move(shared_storage_hosts[i]), decision_logic_url, - trusted_scoring_signals_url, - trusted_scoring_signals_origin_, top_window_origin, - permissions_policy_state->Clone(), experiment_group_id, - weak_ptr_factory_.GetWeakPtr()), + new V8State( + v8_helpers_[i], debug_ids_[i], std::move(shared_storage_hosts[i]), + decision_logic_url, trusted_scoring_signals_url, + trusted_scoring_signals_origin_, top_window_origin, + permissions_policy_state->Clone(), experiment_group_id, + send_creative_scanning_metadata, weak_ptr_factory_.GetWeakPtr()), base::OnTaskRunnerDeleter(v8_runners_[i]))); } @@ -835,6 +844,7 @@ const url::Origin& top_window_origin, mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, base::WeakPtr<SellerWorklet> parent) : v8_helper_(std::move(v8_helper)), debug_id_(debug_id), @@ -845,7 +855,8 @@ trusted_scoring_signals_origin_(trusted_scoring_signals_origin), top_window_origin_(top_window_origin), permissions_policy_state_(std::move(permissions_policy_state)), - experiment_group_id_(experiment_group_id) { + experiment_group_id_(experiment_group_id), + send_creative_scanning_metadata_(send_creative_scanning_metadata) { DETACH_FROM_SEQUENCE(v8_sequence_checker_); v8_helper_->v8_runner()->PostTask( FROM_HERE, base::BindOnce(&V8State::FinishInit, base::Unretained(this), @@ -1055,13 +1066,13 @@ context_recycler->EnsureAuctionConfigLazyFillers( 1 + auction_ad_config_non_shared_params.component_auctions.size()); - if (!AppendAuctionConfig(v8_helper_.get(), &v8_logger, context, - url::Origin::Create(decision_logic_url_), - decision_logic_url_, trusted_scoring_signals_url_, - experiment_group_id_, - auction_ad_config_non_shared_params, - context_recycler->auction_config_lazy_fillers(), - /*auction_config_lazy_filler_pos=*/0, &args)) { + if (!AppendAuctionConfig( + v8_helper_.get(), &v8_logger, context, + url::Origin::Create(decision_logic_url_), decision_logic_url_, + trusted_scoring_signals_url_, experiment_group_id_, + send_creative_scanning_metadata_, auction_ad_config_non_shared_params, + context_recycler->auction_config_lazy_fillers(), + /*auction_config_lazy_filler_pos=*/0, &args)) { PostScoreAdCallbackToUserThreadOnError( std::move(callback), /*scoring_latency=*/elapsed_timer.Elapsed(), @@ -1641,13 +1652,13 @@ context_recycler.EnsureAuctionConfigLazyFillers( 1 + auction_ad_config_non_shared_params.component_auctions.size()); - if (!AppendAuctionConfig(v8_helper_.get(), &v8_logger, context, - url::Origin::Create(decision_logic_url_), - decision_logic_url_, trusted_scoring_signals_url_, - experiment_group_id_, - auction_ad_config_non_shared_params, - context_recycler.auction_config_lazy_fillers(), - /*auction_config_lazy_filler_pos=*/0, &args)) { + if (!AppendAuctionConfig( + v8_helper_.get(), &v8_logger, context, + url::Origin::Create(decision_logic_url_), decision_logic_url_, + trusted_scoring_signals_url_, experiment_group_id_, + send_creative_scanning_metadata_, auction_ad_config_non_shared_params, + context_recycler.auction_config_lazy_fillers(), + /*auction_config_lazy_filler_pos=*/0, &args)) { PostReportResultCallbackToUserThread(std::move(callback), /*signals_for_winner=*/std::nullopt, /*report_url=*/std::nullopt,
diff --git a/content/services/auction_worklet/seller_worklet.h b/content/services/auction_worklet/seller_worklet.h index 1219e42..5c69dafa 100644 --- a/content/services/auction_worklet/seller_worklet.h +++ b/content/services/auction_worklet/seller_worklet.h
@@ -106,6 +106,7 @@ const url::Origin& top_window_origin, mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, mojom::TrustedSignalsPublicKeyPtr public_key, GetNextThreadIndexCallback next_thread_index_callback, mojo::PendingRemote<auction_worklet::mojom::LoadSellerWorkletClient> @@ -385,6 +386,7 @@ const url::Origin& top_window_origin, mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state, std::optional<uint16_t> experiment_group_id, + std::optional<bool> send_creative_scanning_metadata, base::WeakPtr<SellerWorklet> parent); void SetWorkletScript(WorkletLoader::Result worklet_script, @@ -532,6 +534,7 @@ const url::Origin top_window_origin_; mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state_; const std::optional<uint16_t> experiment_group_id_; + std::optional<bool> send_creative_scanning_metadata_; mojo::Remote<mojom::AuctionSharedStorageHost> shared_storage_host_remote_; @@ -654,6 +657,7 @@ const GURL script_source_url_; mojom::TrustedSignalsPublicKeyPtr public_key_; + std::optional<bool> send_creative_scanning_metadata_; // Populated only if `this` was created with a non-null // `trusted_scoring_signals_url`.
diff --git a/content/services/auction_worklet/seller_worklet_unittest.cc b/content/services/auction_worklet/seller_worklet_unittest.cc index 6ed0ac0..1b3686d7 100644 --- a/content/services/auction_worklet/seller_worklet_unittest.cc +++ b/content/services/auction_worklet/seller_worklet_unittest.cc
@@ -234,6 +234,8 @@ base::test::TaskEnvironment::TimeSource time_mode = base::test::TaskEnvironment::TimeSource::MOCK_TIME) : task_environment_(time_mode) { + feature_list_.InitAndEnableFeature( + blink::features::kFledgeTrustedSignalsKVv1CreativeScanning); SetDefaultParameters(); } @@ -288,6 +290,7 @@ /*private_aggregation_allowed=*/true, /*shared_storage_allowed=*/false); experiment_group_id_ = std::nullopt; + send_creative_scanning_metadata_ = std::nullopt; public_key_ = nullptr; browser_signals_other_seller_.reset(); component_expect_bid_currency_ = std::nullopt; @@ -810,6 +813,7 @@ trusted_signals_kvv2_manager_.get(), decision_logic_url_, trusted_scoring_signals_url_, top_window_origin_, permissions_policy_state_.Clone(), experiment_group_id_, + send_creative_scanning_metadata_, public_key_ ? public_key_.Clone() : nullptr, base::BindRepeating(&SellerWorkletTest::GetNextThreadIndex, base::Unretained(this)), @@ -896,6 +900,7 @@ } } + base::test::ScopedFeatureList feature_list_; base::test::TaskEnvironment task_environment_; // Extra headers to append to replies for JavaScript resources. @@ -922,6 +927,7 @@ url::Origin top_window_origin_; mojom::AuctionWorkletPermissionsPolicyStatePtr permissions_policy_state_; std::optional<uint16_t> experiment_group_id_; + std::optional<bool> send_creative_scanning_metadata_; mojom::TrustedSignalsPublicKeyPtr public_key_; mojom::ComponentAuctionOtherSellerPtr browser_signals_other_seller_; std::optional<blink::AdCurrency> component_expect_bid_currency_; @@ -2072,6 +2078,37 @@ 954); } +TEST_F(SellerWorkletTest, ScoreAdSendCreativeScanParam) { + RunScoreAdWithReturnValueExpectingResult( + R"("sendCreativeScanningMetadata" in auctionConfig ? 1 : 0)", 0); + + send_creative_scanning_metadata_ = true; + RunScoreAdWithReturnValueExpectingResult( + "auctionConfig.sendCreativeScanningMetadata ? 1 : 0", 1); + + auto& component_auctions = + auction_ad_config_non_shared_params_.component_auctions; + component_auctions.emplace_back(); + component_auctions[0].seller = + url::Origin::Create(GURL("https://component1.test")); + component_auctions[0].decision_logic_url = + GURL("https://component1.test/script.js"); + + RunScoreAdWithReturnValueExpectingResult( + R"(("sendCreativeScanningMetadata" in + auctionConfig.componentAuctions[0]) ? 1 : 0)", + 0); + + component_auctions[0].send_creative_scanning_metadata = false; + RunScoreAdWithReturnValueExpectingResult( + R"(("sendCreativeScanningMetadata" in + auctionConfig.componentAuctions[0]) ? 1 : 0)", + 1); + RunScoreAdWithReturnValueExpectingResult( + "auctionConfig.componentAuctions[0].sendCreativeScanningMetadata ? 1 : 0", + 0); +} + // Tests that trusted scoring signals are correctly passed to scoreAd(). Each // request is sent individually, without calling SendPendingSignalsRequests() - // instead, the test advances the mock clock by
diff --git a/content/test/content_test_bundle_data.filelist b/content/test/content_test_bundle_data.filelist index ef8335e..288cbad8 100644 --- a/content/test/content_test_bundle_data.filelist +++ b/content/test/content_test_bundle_data.filelist
@@ -5599,10 +5599,10 @@ data/accessibility/mac/methods/accessibility-is-ignored.html data/accessibility/mac/methods/accessibility-label-expected.txt data/accessibility/mac/methods/accessibility-label.html -data/accessibility/mac/methods/accessibility-number-of-characters-expected.txt -data/accessibility/mac/methods/accessibility-number-of-characters.html data/accessibility/mac/methods/accessibility-linked-ui-elements-expected.txt data/accessibility/mac/methods/accessibility-linked-ui-elements.html +data/accessibility/mac/methods/accessibility-number-of-characters-expected.txt +data/accessibility/mac/methods/accessibility-number-of-characters.html data/accessibility/mac/methods/accessibility-placeholder-value-expected.txt data/accessibility/mac/methods/accessibility-placeholder-value.html data/accessibility/mac/methods/accessibility-role-description-expected.txt @@ -7194,6 +7194,7 @@ data/interest_group/autogenSchemaV28.sql data/interest_group/autogenSchemaV29.sql data/interest_group/autogenSchemaV30.sql +data/interest_group/autogenSchemaV31.sql data/interest_group/bidding_argument_validator.js data/interest_group/bidding_argument_validator.js.mock-http-headers data/interest_group/bidding_logic.js @@ -7481,9 +7482,9 @@ data/mojo_bindings_web_test.test-mojom data/mojo_bindings_web_test_types.test-mojom data/mojo_web_test_helper.test-mojom +data/navigate-has-ua-visual-transition.html data/navigate_on_load.html data/navigate_opener.html -data/navigate-has-ua-visual-transition.html data/navigation_controller/beforeunload_dialog.html data/navigation_controller/beforeunload_replacestate_1.html data/navigation_controller/beforeunload_replacestate_2.html
diff --git a/content/test/data/interest_group/autogenSchemaV31.sql b/content/test/data/interest_group/autogenSchemaV31.sql new file mode 100644 index 0000000..973be68a --- /dev/null +++ b/content/test/data/interest_group/autogenSchemaV31.sql
@@ -0,0 +1,24 @@ +PRAGMA foreign_keys=OFF; +BEGIN TRANSACTION; +CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR); +INSERT INTO meta VALUES('mmap_status','-1'); +INSERT INTO meta VALUES('version','31'); +INSERT INTO meta VALUES('last_compatible_version','30'); +CREATE TABLE interest_groups(expiration INTEGER NOT NULL,last_updated INTEGER NOT NULL,next_update_after INTEGER NOT NULL,owner TEXT NOT NULL,joining_origin TEXT NOT NULL,exact_join_time INTEGER NOT NULL,name TEXT NOT NULL,priority DOUBLE NOT NULL,enable_bidding_signals_prioritization INTEGER NOT NULL,priority_vector TEXT NOT NULL,priority_signals_overrides TEXT NOT NULL,seller_capabilities TEXT NOT NULL,all_sellers_capabilities INTEGER NOT NULL,execution_mode INTEGER NOT NULL,joining_url TEXT NOT NULL,bidding_url TEXT NOT NULL,bidding_wasm_helper_url TEXT NOT NULL,update_url TEXT NOT NULL,trusted_bidding_signals_url TEXT NOT NULL,trusted_bidding_signals_keys TEXT NOT NULL,trusted_bidding_signals_slot_size_mode INTEGER NOT NULL,max_trusted_bidding_signals_url_length INTEGER NOT NULL,trusted_bidding_signals_coordinator TEXT,user_bidding_signals TEXT,ads_pb BLOB NOT NULL,ad_components_pb BLOB NOT NULL,ad_sizes TEXT NOT NULL,size_groups TEXT NOT NULL,auction_server_request_flags INTEGER NOT NULL,additional_bid_key BLOB NOT NULL,aggregation_coordinator_origin TEXT,storage_size INTEGER NOT NULL,last_k_anon_updated_time INTEGER NOT NULL,kanon_keys BLOB NOT NULL,PRIMARY KEY(owner,name)); +INSERT INTO interest_groups VALUES(11649410968695000,11646818968695000,-9223372036854775808,'https://full.example.com','https://full.example.com',11646818968695000,'full',1.0,1,'{"a":2.0,"b":-2.2}','{"a":-2.0,"c":10.0,"d":1.2}','{"https://full.example.com":"1","https://partial.example.com":"2"}',3,2,'https://full.example.com/','https://full.example.com/bid','https://full.example.com/bid_wasm','https://full.example.com/update','https://full.example.com/signals','["a","b","c","d"]',2,8000,'https://coordinator.test','foo',X'd401f0580a92010a1c68747470733a2f2f66756c6c2e6578616d706c652e636f6d2f616431120767726f75705f311a096d6574616461746131220862757965725f69642a097368617265645f6964320a616452656e64657249643a15680d53207265706f7274696e6701503c420e73656c65637461626c655f6964313a100034324a067363616e20310a3d0a1c680d410066469400003211940c321a096d0d942c32220962757965725f696432',X'9101f04c0a490a2568747470733a2f2f66756c6c2e6578616d706c652e636f6d2f6164636f6d706f6e656e7431120767726f75705f311a0a6d657461646174613163320b616452656e6465724964320a44964b000032114b04321a154b2432634a067363616e2032','{"size_1":"{\"height\":150.0,\"height_units\":1,\"width\":300.0,\"width_units\":1}","size_2":"{\"height\":480.0,\"height_units\":1,\"width\":640.0,\"width_units\":1}","size_3":"{\"height\":100.0,\"height_units\":2,\"width\":100.0,\"width_units\":2}"}','{"group_1":"[\"size_1\"]","group_2":"[\"size_1\",\"size_2\"]","group_3":"[\"size_3\"]"}',3,X'','https://coordinator.test',779,-9223372036854775808,X''); +CREATE TABLE joined_k_anon(hashed_key BLOB NOT NULL,last_reported_to_anon_server_time INTEGER NOT NULL,PRIMARY KEY(hashed_key)); +CREATE TABLE join_history(owner TEXT NOT NULL,name TEXT NOT NULL,join_time INTEGER NOT NULL,count INTEGER NOT NULL,PRIMARY KEY(owner, name, join_time) FOREIGN KEY(owner,name) REFERENCES interest_groups); +INSERT INTO join_history VALUES('https://full.example.com','full',11646806400000000,1); +CREATE TABLE bid_history(owner TEXT NOT NULL,name TEXT NOT NULL,bid_time INTEGER NOT NULL,count INTEGER NOT NULL,PRIMARY KEY(owner, name, bid_time) FOREIGN KEY(owner,name) REFERENCES interest_groups); +CREATE TABLE win_history(owner TEXT NOT NULL,name TEXT NOT NULL,win_time INTEGER NOT NULL,ad TEXT NOT NULL,FOREIGN KEY(owner,name) REFERENCES interest_groups); +CREATE TABLE lockout_debugging_only_report(id INTEGER NOT NULL,last_report_sent_time INTEGER NOT NULL,PRIMARY KEY(id)); +CREATE TABLE cooldown_debugging_only_report(origin TEXT NOT NULL,starting_time INTEGER NOT NULL,type INTEGER NOT NULL,PRIMARY KEY(origin)); +CREATE TABLE bidding_and_auction_server_keys(coordinator TEXT NOT NULL,keys BLOB NOT NULL,expiration INTEGER NOT NULL,PRIMARY KEY(coordinator)); +CREATE INDEX interest_group_expiration ON interest_groups(expiration DESC, owner, name); +CREATE INDEX interest_group_owner ON interest_groups(owner,expiration DESC,next_update_after ASC,name); +CREATE INDEX interest_group_owner_and_type ON interest_groups(LENGTH(additional_bid_key) == 0,owner,expiration DESC,name); +CREATE INDEX interest_group_owner_size ON interest_groups(owner,expiration DESC,storage_size); +CREATE INDEX interest_group_joining_origin ON interest_groups(joining_origin, expiration DESC, owner, name); +CREATE INDEX k_anon_last_server_time_idx ON joined_k_anon(last_reported_to_anon_server_time DESC); +CREATE INDEX win_history_index ON win_history(owner,name,win_time DESC); +COMMIT;
diff --git a/content/test/data/interest_group/decision_argument_validator.js b/content/test/data/interest_group/decision_argument_validator.js index e5eb287..33d5dce 100644 --- a/content/test/data/interest_group/decision_argument_validator.js +++ b/content/test/data/interest_group/decision_argument_validator.js
@@ -41,7 +41,7 @@ } function validateAuctionConfig(auctionConfig) { - if (Object.keys(auctionConfig).length !== 16) { + if (Object.keys(auctionConfig).length !== 17) { throw 'Wrong number of auctionConfig fields ' + JSON.stringify(auctionConfig); } @@ -143,6 +143,11 @@ JSON.stringify(perBuyerPrioritySignals); } + if (auctionConfig.sendCreativeScanningMetadata !== true) { + throw 'Wrong sendCreativeScanningMetadata ' + + JSON.stringify(auctionConfig.sendCreativeScanningMetadata); + } + if ('componentAuctions' in auctionConfig) { throw 'Unexpected componentAuctions ' + JSON.stringify(auctionConfig.componentAuctions);
diff --git a/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt index 116de6a..a3895e3 100644 --- a/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/expected_color_expectations.txt
@@ -109,11 +109,8 @@ # Non-"Skip" expectations go here to suppress regular flakes/failures. # Fails on GL, Metal, Graphite and Ganesh, AMD and Intel -crbug.com/377724727 [ mac amd-0x67ef passthrough ] ExpectedColor_MediaRecorderFrom2DCanvas [ Failure ] -crbug.com/377724727 [ mac amd-0x67ef passthrough ] ExpectedColor_MediaRecorderFromVideoElement [ Failure ] -crbug.com/377724727 [ amd-0x67ef mac-x86_64 no-asan no-clang-coverage passthrough release sonoma ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ] crbug.com/377724727 [ angle-opengl asan graphite-disabled intel-0x3e9b mac-x86_64 no-clang-coverage passthrough release sonoma ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ] -crbug.com/377724727 [ angle-opengl debug graphite-disabled intel-0x3e9b mac-x86_64 no-asan no-clang-coverage passthrough sonoma ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ] +crbug.com/377724727 [ amd-0x7340 angle-opengl debug graphite-disabled mac-x86_64 no-asan no-clang-coverage passthrough sonoma ] ExpectedColor_MediaRecorderFromVideoElementWithOoprCanvasDisabled [ Failure ] # Longstanding flaking test - page reported failure crbug.com/40877266 [ android android-shield-android-tv ] ExpectedColor_MediaRecorderFromVideoElement [ RetryOnFailure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt index 93537ec..0d10e5f3 100644 --- a/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/trace_test_expectations.txt
@@ -214,7 +214,6 @@ # Fail or flaky on Windows and Linux. Flaky timeout on Mac. crbug.com/371949935 [ debug-x64 graphite-disabled nvidia-0x2184 nvidia_lt_535.183.01 target-cpu-64 win10 ] TraceTest_ViewTransitionsCapture [ Failure ] -crbug.com/371949935 [ graphite-disabled intel-0x9bc5 release-x64 target-cpu-64 win10 ] TraceTest_ViewTransitionsCapture [ Failure ] crbug.com/371949935 [ graphite-enabled no-clang-coverage qualcomm-0x41333430 release target-cpu-64 win11 ] TraceTest_ViewTransitionsCapture [ Failure ] crbug.com/371949935 [ angle-opengl debug display-server-x linux no-clang-coverage nvidia-0x2184 nvidia_lt_535.183.01 renderer-skia-gl ] TraceTest_ViewTransitionsCapture [ Failure ] crbug.com/371949935 [ angle-metal apple-angle-metal-renderer:-apple-m2 graphite-enabled mac-arm64 no-asan no-clang-coverage release sonoma ] TraceTest_ViewTransitionsCapture [ Failure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt index 469c3f23..5c7c2f7 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webcodecs_expectations.txt
@@ -135,12 +135,8 @@ crbug.com/1474916 [ android-nexus-5x ] WebCodecs_EncodeColorSpace_avc1.42001E_prefer-hardware [ Failure ] -crbug.com/1466102 [ nvidia-0x2184 nvidia_lt_31.0.15.4601 win ] WebCodecs_FrameSizeChange_hvc1.1.6.L123.00_* [ Failure ] +crbug.com/1466102 [ nvidia-0x2184 nvidia_lt_31.0.15.4601 release-x64 target-cpu-64 win ] WebCodecs_FrameSizeChange_hvc1.1.6.L123.00_* [ Failure ] -crbug.com/337665165 [ angle-d3d11 graphite-disabled nvidia-0x2184 nvidia_lt_31.0.15.4601 passthrough release win ] WebCodecs_ContentHint_avc1.42001E_text [ Failure ] -crbug.com/337665165 [ angle-d3d11 graphite-disabled nvidia-0x2184 nvidia_lt_31.0.15.4601 passthrough release win ] WebCodecs_ContentHint_hvc1.1.6.L123.00_text [ Failure ] -crbug.com/337665165 [ angle-d3d11 graphite-disabled nvidia-0x2184 nvidia_lt_31.0.15.4601 passthrough release win ] WebCodecs_ContentHint_hvc1.1.6.L123.00_motion [ Failure ] -crbug.com/337665165 [ angle-d3d11 graphite-disabled nvidia-0x2184 nvidia_lt_31.0.15.4601 passthrough release win ] WebCodecs_ContentHint_hvc1.1.6.L123.00_detail [ Failure ] # Known issues with hvc1 variants with hvc1 + camera + prefers-software to reproduce
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt index 0c8878e..e3725e6 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -449,13 +449,6 @@ crbug.com/1490427 [ fuchsia fuchsia-board-sherlock ] conformance/state/gl-object-get-calls.html [ RetryOnFailure ] crbug.com/1490427 [ fuchsia fuchsia-board-sherlock ] conformance/textures/misc/texture-size-limit.html [ RetryOnFailure ] -crbug.com/1490427 [ fuchsia fuchsia-board-nelson ] conformance/textures/image_bitmap_from_blob/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html [ RetryOnFailure ] -crbug.com/1490427 [ fuchsia fuchsia-board-nelson ] conformance/textures/image_bitmap_from_canvas/tex-2d-luminance-luminance-unsigned_byte.html [ RetryOnFailure ] -crbug.com/1490427 [ fuchsia fuchsia-board-nelson ] conformance/textures/image_bitmap_from_image/tex-2d-luminance_alpha-luminance_alpha-unsigned_byte.html [ RetryOnFailure ] -crbug.com/1490427 [ fuchsia fuchsia-board-nelson ] conformance/uniforms/no-over-optimization-on-uniform-array-08.html [ RetryOnFailure ] -crbug.com/1490427 [ fuchsia fuchsia-board-nelson ] conformance/uniforms/no-over-optimization-on-uniform-array-14.html [ RetryOnFailure ] -crbug.com/1490427 [ fuchsia fuchsia-board-nelson ] deqp/data/gles2/shaders/constants.html [ RetryOnFailure ] -crbug.com/1490427 [ fuchsia fuchsia-board-nelson ] deqp/data/gles2/shaders/reserved_operators.html [ RetryOnFailure ] crbug.com/1490427 [ fuchsia fuchsia-board-astro ] conformance/state/gl-object-get-calls.html [ RetryOnFailure ] crbug.com/1490427 [ fuchsia fuchsia-board-astro ] conformance/uniforms/no-over-optimization-on-uniform-array-01.html [ RetryOnFailure ]
diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc index 92d1574..44ad379 100644 --- a/content/test/test_web_contents.cc +++ b/content/test/test_web_contents.cc
@@ -122,6 +122,18 @@ return g_next_image_download_id; } +int TestWebContents::DownloadImageInFrame( + const GlobalRenderFrameHostId& initiator_frame_routing_id, + const GURL& url, + bool is_favicon, + const gfx::Size& preferred_size, + uint32_t max_bitmap_size, + bool bypass_cache, + ImageDownloadCallback callback) { + return DownloadImage(url, is_favicon, preferred_size, max_bitmap_size, + bypass_cache, std::move(callback)); +} + const GURL& TestWebContents::GetLastCommittedURL() { if (last_committed_url_.is_valid()) { return last_committed_url_;
diff --git a/content/test/test_web_contents.h b/content/test/test_web_contents.h index 53fb629..c85b439 100644 --- a/content/test/test_web_contents.h +++ b/content/test/test_web_contents.h
@@ -64,6 +64,14 @@ uint32_t max_bitmap_size, bool bypass_cache, ImageDownloadCallback callback) override; + int DownloadImageInFrame( + const GlobalRenderFrameHostId& initiator_frame_routing_id, + const GURL& url, + bool is_favicon, + const gfx::Size& preferred_size, + uint32_t max_bitmap_size, + bool bypass_cache, + ImageDownloadCallback callback) override; const GURL& GetLastCommittedURL() override; const std::u16string& GetTitle() override;
diff --git a/docs/security/faq.md b/docs/security/faq.md index 5e33d46e..9a46ca8 100644 --- a/docs/security/faq.md +++ b/docs/security/faq.md
@@ -1168,14 +1168,14 @@ <a name="TOC-How-can-I-appeal-a-Safe-Browsing-warning-"></a> ### How can I appeal a Safe Browsing warning? -To request a review of phishing warnings relating to your own website, use the +To request a review of warnings relating to your own website, use the [Security Issues report](https://support.google.com/webmasters/answer/9044101) page in your Google Search Console. If the warning applies to another site, you may be able to use [https://safebrowsing.google.com/safebrowsing/report_error/](https://safebrowsing.google.com/safebrowsing/report_error/), though you are likely better off contacting the site owner. -If your concern relates to download warnings, you may find the warning in your +If your concern relates to malware warnings, you may find the warning in your Security Issues report and request a review from there. There is no separate appeal form or process at this time. Please follow these [guidelines](https://developers.google.com/search/docs/monitor-debug/security/malware#guidelines)
diff --git a/docs/website b/docs/website index 1229734..35124db 160000 --- a/docs/website +++ b/docs/website
@@ -1 +1 @@ -Subproject commit 1229734e08d74bf1d5ce69051ed70d2b392d356c +Subproject commit 35124dbd52018ec09acadfbf61b18d5ca4d4b067
diff --git a/google_apis/BUILD.gn b/google_apis/BUILD.gn index 1b67111..75a79ae 100644 --- a/google_apis/BUILD.gn +++ b/google_apis/BUILD.gn
@@ -133,6 +133,8 @@ "gaia/gaia_config.h", "gaia/gaia_constants.cc", "gaia/gaia_constants.h", + "gaia/gaia_features.cc", + "gaia/gaia_features.h", "gaia/gaia_id.cc", "gaia/gaia_id.h", "gaia/gaia_oauth_client.cc", @@ -210,6 +212,7 @@ proto_library("proto") { sources = [ "gaia/bound_oauth_token.proto", + "gaia/list_accounts_response.proto", "gaia/oauth2_mint_token_consent_result.proto", ] } @@ -286,6 +289,7 @@ "//google_apis/common:common_unittests", "//testing/gmock", "//testing/gtest", + "//third_party/protobuf:protobuf_lite", ] if (is_ios) {
diff --git a/google_apis/gaia/gaia_auth_util.cc b/google_apis/gaia/gaia_auth_util.cc index c3402582..8b0a623 100644 --- a/google_apis/gaia/gaia_auth_util.cc +++ b/google_apis/gaia/gaia_auth_util.cc
@@ -9,6 +9,7 @@ #include <memory> #include <string_view> +#include "base/base64.h" #include "base/base64url.h" #include "base/containers/contains.h" #include "base/functional/bind.h" @@ -21,6 +22,7 @@ #include "google_apis/gaia/bound_oauth_token.pb.h" #include "google_apis/gaia/gaia_id.h" #include "google_apis/gaia/gaia_urls.h" +#include "google_apis/gaia/list_accounts_response.pb.h" #include "google_apis/gaia/oauth2_mint_token_consent_result.pb.h" #include "url/gurl.h" #include "url/origin.h" @@ -203,6 +205,54 @@ return true; } +bool ParseBinaryListAccountsData(const std::string& data, + std::vector<ListedAccount>* accounts) { + // Clear and rebuild our accounts list if one is given. + if (accounts) { + accounts->clear(); + } + + // The input is expected to be base64-encoded. + std::string decoded_data; + if (!base::Base64Decode(data, &decoded_data, + base::Base64DecodePolicy::kForgiving)) { + VLOG(1) << "Failed to decode ListAccounts data as a Base64 String"; + return false; + } + + // Parse our binary proto response. + ListAccountsResponse parsed_result; + if (!parsed_result.ParseFromString(decoded_data)) { + VLOG(1) << "malformed ListAccountsResponse"; + return false; + } + + // Build a vector of accounts from the cookie. Order is important: the first + // account in the list is the primary account. + for (const auto& account : parsed_result.account()) { + if (account.display_email().empty() || account.obfuscated_id().empty()) { + continue; + } + + ListedAccount listed_account; + listed_account.email = CanonicalizeEmail(account.display_email()); + listed_account.gaia_id = GaiaId(account.obfuscated_id()); + listed_account.valid = ( + // Assume the account is valid if unspecified for backcompat. + account.has_valid_session() ? account.valid_session() : true); + listed_account.signed_out = + (account.has_signed_out() ? account.signed_out() : false); + listed_account.verified = + (account.has_is_verified() ? account.is_verified() : true); + listed_account.raw_email = account.display_email(); + if (accounts) { + accounts->push_back(std::move(listed_account)); + } + } + + return true; +} + bool ParseOAuth2MintTokenConsentResult(std::string_view consent_result, bool* approved, GaiaId* gaia_id) {
diff --git a/google_apis/gaia/gaia_auth_util.h b/google_apis/gaia/gaia_auth_util.h index 8a044a6f..d29b639 100644 --- a/google_apis/gaia/gaia_auth_util.h +++ b/google_apis/gaia/gaia_auth_util.h
@@ -88,6 +88,16 @@ // a GAIA origin and will in that case return false. COMPONENT_EXPORT(GOOGLE_APIS) bool HasGaiaSchemeHostPort(const GURL& url); +// Parses binary proto data returned by /ListAccounts call into the given +// ListedAccounts. An email addresses is considered valid if a passive login +// would succeed (i.e. the user does not need to reauthenticate). +// If there was a parse error, this method returns false. +// If |accounts| is null, the corresponding accounts returned from /ListAccounts +// will be ignored. +COMPONENT_EXPORT(GOOGLE_APIS) +bool ParseBinaryListAccountsData(const std::string& data, + std::vector<ListedAccount>* accounts); + // Parses JSON data returned by /ListAccounts call, returning a vector of // email/valid pairs. An email addresses is considered valid if a passive // login would succeed (i.e. the user does not need to reauthenticate).
diff --git a/google_apis/gaia/gaia_auth_util_unittest.cc b/google_apis/gaia/gaia_auth_util_unittest.cc index 93009e0..4930006d3 100644 --- a/google_apis/gaia/gaia_auth_util_unittest.cc +++ b/google_apis/gaia/gaia_auth_util_unittest.cc
@@ -4,9 +4,11 @@ #include "google_apis/gaia/gaia_auth_util.h" +#include "base/base64.h" #include "base/base64url.h" #include "google_apis/gaia/gaia_auth_test_util.h" #include "google_apis/gaia/gaia_id.h" +#include "google_apis/gaia/list_accounts_response.pb.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -47,6 +49,12 @@ return result; } +std::string CreateBinaryListAccountsData(const ListAccountsResponse& response) { + std::string serialized_response; + response.SerializeToString(&serialized_response); + return base::Base64Encode(serialized_response); +} + } // namespace using ::testing::ElementsAre; @@ -314,6 +322,202 @@ nullptr)); } +TEST(GaiaAuthUtilTest, ParseBinaryListAccountsData) { + std::vector<ListedAccount> accounts; + ListAccountsResponse response; + + std::string serialized_empty_response; + response.SerializeToString(&serialized_empty_response); + std::string encoded_empty_response = + base::Base64Encode(serialized_empty_response); + ASSERT_TRUE(ParseBinaryListAccountsData(encoded_empty_response, &accounts)); + ASSERT_EQ(0u, accounts.size()); + + Account* account1 = response.add_account(); + account1->set_display_email("u@g.c"); + account1->set_valid_session(true); + account1->set_obfuscated_id("45"); + + std::string encoded_one_account_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE( + ParseBinaryListAccountsData(encoded_one_account_response, &accounts)); + ASSERT_EQ(1u, accounts.size()); + ASSERT_EQ("u@g.c", accounts[0].email); + ASSERT_TRUE(accounts[0].valid); + + Account* account2 = response.add_account(); + account2->set_display_email("u2@g.c"); + account2->set_valid_session(true); + account2->set_obfuscated_id("6"); + + std::string encoded_two_accounts_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE( + ParseBinaryListAccountsData(encoded_two_accounts_response, &accounts)); + ASSERT_EQ(2u, accounts.size()); + ASSERT_EQ("u@g.c", accounts[0].email); + ASSERT_TRUE(accounts[0].valid); + ASSERT_EQ("u2@g.c", accounts[1].email); + ASSERT_TRUE(accounts[1].valid); + + account1->set_display_email("U1@g.c"); + account1->set_obfuscated_id("45"); + account2->set_display_email("u.2@g.c"); + account2->set_obfuscated_id("46"); + + std::string encoded_noncanonical_account_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE(ParseBinaryListAccountsData(encoded_noncanonical_account_response, + &accounts)); + ASSERT_EQ(2u, accounts.size()); + ASSERT_EQ(CanonicalizeEmail("U1@g.c"), accounts[0].email); + ASSERT_TRUE(accounts[0].valid); + ASSERT_EQ(CanonicalizeEmail("u.2@g.c"), accounts[1].email); + ASSERT_TRUE(accounts[1].valid); +} + +TEST(GaiaAuthUtilTest, ParseBinaryListAccountsDataValidSession) { + std::vector<ListedAccount> accounts; + ListAccountsResponse response; + + Account* account1 = response.add_account(); + account1->set_display_email("u@g.c"); + account1->set_valid_session(true); + account1->set_obfuscated_id("45"); + + // Valid session is true means: return account. + std::string encoded_one_account_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE( + ParseBinaryListAccountsData(encoded_one_account_response, &accounts)); + ASSERT_EQ(1u, accounts.size()); + ASSERT_EQ("u@g.c", accounts[0].email); + ASSERT_TRUE(accounts[0].valid); + + // Valid session is false means: return account with valid bit false. + account1->set_valid_session(false); + std::string encoded_invalid_account_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE( + ParseBinaryListAccountsData(encoded_invalid_account_response, &accounts)); + ASSERT_EQ(1u, accounts.size()); + ASSERT_EQ("u@g.c", accounts[0].email); + ASSERT_FALSE(accounts[0].valid); +} + +TEST(GaiaAuthUtilTest, ParseBinaryListAccountsDataGaiaId) { + std::vector<ListedAccount> accounts; + ListAccountsResponse response; + + Account* account1 = response.add_account(); + account1->set_display_email("u@g.c"); + account1->set_valid_session(true); + + // Missing gaia id: do not return account. + std::string encoded_no_gaia_id_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE( + ParseBinaryListAccountsData(encoded_no_gaia_id_response, &accounts)); + ASSERT_EQ(0u, accounts.size()); + + account1->set_obfuscated_id("9863"); + + // Valid gaia session and gaia_id: return gaia session + std::string encoded_with_gaia_session_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE(ParseBinaryListAccountsData(encoded_with_gaia_session_response, + &accounts)); + ASSERT_EQ(1u, accounts.size()); + ASSERT_EQ("u@g.c", accounts[0].email); + ASSERT_TRUE(accounts[0].valid); + ASSERT_EQ("9863", accounts[0].gaia_id); +} + +TEST(GaiaAuthUtilTest, ParseBinaryListAccountsWithSignedOutAccounts) { + std::vector<ListedAccount> accounts; + ListAccountsResponse response; + + Account* account1 = response.add_account(); + account1->set_display_email("u@g.c"); + account1->set_valid_session(true); + account1->set_obfuscated_id("45"); + + Account* account2 = response.add_account(); + account2->set_display_email("u.2@g.c"); + account2->set_valid_session(true); + account2->set_obfuscated_id("46"); + account2->set_signed_out(true); + + std::string encoded_with_signed_out_session_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE(ParseBinaryListAccountsData( + encoded_with_signed_out_session_response, &accounts)); + ASSERT_EQ(2u, accounts.size()); + ASSERT_EQ("u@g.c", accounts[0].email); + ASSERT_FALSE(accounts[0].signed_out); + ASSERT_EQ("u.2@g.c", accounts[1].email); + ASSERT_TRUE(accounts[1].signed_out); +} + +TEST(GaiaAuthUtilTest, ParseBinaryListAccountsVerifiedAccounts) { + std::vector<ListedAccount> accounts; + ListAccountsResponse response; + + Account* account1 = response.add_account(); + account1->set_display_email("a@g.c"); + account1->set_valid_session(true); + account1->set_obfuscated_id("45"); + + Account* account2 = response.add_account(); + account2->set_display_email("b@g.c"); + account2->set_valid_session(true); + account2->set_obfuscated_id("46"); + account2->set_signed_out(false); + + Account* account3 = response.add_account(); + account3->set_display_email("c@g.c"); + account3->set_valid_session(true); + account3->set_obfuscated_id("47"); + account3->set_signed_out(true); + + std::string encoded_three_accounts_response = + CreateBinaryListAccountsData(response); + ASSERT_TRUE( + ParseBinaryListAccountsData(encoded_three_accounts_response, &accounts)); + ASSERT_EQ(3u, accounts.size()); + ASSERT_EQ("a@g.c", accounts[0].email); + EXPECT_TRUE(accounts[0].verified); // Accounts are not verified by default. + EXPECT_FALSE(accounts[0].signed_out); // Accounts are not signed out by + // default. + ASSERT_EQ("b@g.c", accounts[1].email); + EXPECT_TRUE(accounts[1].verified); + EXPECT_FALSE(accounts[1].signed_out); + ASSERT_EQ("c@g.c", accounts[2].email); + EXPECT_TRUE(accounts[2].verified); + EXPECT_TRUE(accounts[2].signed_out); +} + +TEST(GaiaAuthUtilTest, ParseBinaryListAccountsWithInvalidInput) { + std::vector<ListedAccount> accounts; + ListAccountsResponse response; + + // Try to parse a malformed input string. + std::string malformed_base64_response = "AAAAAAAAAAAAA"; + ASSERT_FALSE( + ParseBinaryListAccountsData(malformed_base64_response, &accounts)); + + Account* account1 = response.add_account(); + account1->set_display_email("a@g.c"); + account1->set_valid_session(true); + account1->set_obfuscated_id("45"); + std::string serialized_response; + response.SerializeToString(&serialized_response); + + // Try to parse serialized but not base64-encoded response. + ASSERT_FALSE(ParseBinaryListAccountsData(serialized_response, &accounts)); +} + TEST(GaiaAuthUtilTest, ParseConsentResultApproved) { const char kApprovedConsent[] = "CAESCUVOQ1JZUFRFRBoMZmFrZV9nYWlhX2lk"; EXPECT_EQ(kApprovedConsent,
diff --git a/google_apis/gaia/gaia_features.cc b/google_apis/gaia/gaia_features.cc new file mode 100644 index 0000000..2430d64 --- /dev/null +++ b/google_apis/gaia/gaia_features.cc
@@ -0,0 +1,15 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "google_apis/gaia/gaia_features.h" + +namespace gaia::features { + +// Enables binary format parsing in the /ListAccounts Gaia call. The endpoint +// response depends on the presence of laf=b64bin parameter in the called url. +BASE_FEATURE(kListAccountsUsesBinaryFormat, + "ListAccountsUsesBinaryFormat", + base::FEATURE_DISABLED_BY_DEFAULT); + +} // namespace gaia::features
diff --git a/google_apis/gaia/gaia_features.h b/google_apis/gaia/gaia_features.h new file mode 100644 index 0000000..dcee75b --- /dev/null +++ b/google_apis/gaia/gaia_features.h
@@ -0,0 +1,18 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GOOGLE_APIS_GAIA_GAIA_FEATURES_H_ +#define GOOGLE_APIS_GAIA_GAIA_FEATURES_H_ + +#include "base/component_export.h" +#include "base/feature_list.h" + +namespace gaia::features { + +COMPONENT_EXPORT(GOOGLE_APIS) +BASE_DECLARE_FEATURE(kListAccountsUsesBinaryFormat); + +} // namespace gaia::features + +#endif // GOOGLE_APIS_GAIA_GAIA_FEATURES_H_
diff --git a/google_apis/gaia/gaia_urls.cc b/google_apis/gaia/gaia_urls.cc index 3900b71..2866dfb 100644 --- a/google_apis/gaia/gaia_urls.cc +++ b/google_apis/gaia/gaia_urls.cc
@@ -14,6 +14,7 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "google_apis/gaia/gaia_config.h" +#include "google_apis/gaia/gaia_features.h" #include "google_apis/gaia/gaia_switches.h" #include "google_apis/google_api_keys.h" #include "url/url_canon.h" @@ -327,6 +328,11 @@ return list_accounts_url_; } else { std::string query = list_accounts_url_.query(); + if (base::FeatureList::IsEnabled( + gaia::features::kListAccountsUsesBinaryFormat)) { + return list_accounts_url_.Resolve(base::StringPrintf( + "?gpsia=1&source=%s&laf=b64bin&%s", source.c_str(), query.c_str())); + } return list_accounts_url_.Resolve(base::StringPrintf( "?gpsia=1&source=%s&%s", source.c_str(), query.c_str())); }
diff --git a/google_apis/gaia/gaia_urls_unittest.cc b/google_apis/gaia/gaia_urls_unittest.cc index 7c6ccd8c..0459f36 100644 --- a/google_apis/gaia/gaia_urls_unittest.cc +++ b/google_apis/gaia/gaia_urls_unittest.cc
@@ -13,9 +13,11 @@ #include "base/memory/raw_ptr.h" #include "base/path_service.h" #include "base/test/scoped_command_line.h" +#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "google_apis/gaia/gaia_config.h" +#include "google_apis/gaia/gaia_features.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -383,6 +385,20 @@ "https://www.exampleapis.com/reauth/v1beta/users/"); } +TEST_F(GaiaUrlsTest, InitializeDefault_ListAccountsFormat) { + base::test::ScopedFeatureList feature_list; + + // Default behaviour - kListAccountsUsesBinaryFormat disabled. + EXPECT_EQ(gaia_urls()->ListAccountsURLWithSource("fake_source").spec(), + "https://accounts.google.com/" + "ListAccounts?gpsia=1&source=fake_source&json=standard"); + feature_list.InitAndEnableFeature( + gaia::features::kListAccountsUsesBinaryFormat); + EXPECT_EQ(gaia_urls()->ListAccountsURLWithSource("fake_source").spec(), + "https://accounts.google.com/" + "ListAccounts?gpsia=1&source=fake_source&laf=b64bin&json=standard"); +} + TEST_F(GaiaUrlsTest, InitializeFromConfigContents) { base::test::ScopedCommandLine command_line; command_line.GetProcessCommandLine()->AppendSwitchASCII(
diff --git a/google_apis/gaia/list_accounts_response.proto b/google_apis/gaia/list_accounts_response.proto new file mode 100644 index 0000000..e83125d --- /dev/null +++ b/google_apis/gaia/list_accounts_response.proto
@@ -0,0 +1,39 @@ +// Copyright (c) 2024 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. + +syntax = "proto2"; + +package gaia; + +option optimize_for = LITE_RUNTIME; + +// The state of a Gaia account. +// +// This is a projection of the type returned by Gaia's /ListAccounts, which only +// has the fields that Chrome will use. +message Account { + // The display email for the account. + optional string display_email = 3; + + // If the session for this account is still 'valid' (not expired, + // the account is not disabled, etc.). Only present for person accounts when + // called with cookies as credentials. + optional bool valid_session = 9; + + // Obfuscated Gaia ID. + optional string obfuscated_id = 10; + + // Whether this account is only in the cookie and is actually signed out. + optional bool signed_out = 14; + + // Whether this account is verified. + optional bool is_verified = 15; + + // Internal Fields. + reserved 1, 2, 4, 5, 6, 7, 8, 11, 12, 13; +} + +message ListAccountsResponse { + repeated Account account = 1; +}
diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json index 7bc3f38..7b1058f 100644 --- a/gpu/config/software_rendering_list.json +++ b/gpu/config/software_rendering_list.json
@@ -1435,26 +1435,6 @@ "features": [ "skia_graphite" ] - }, - { - "id": 182, - "cr_bugs": [332731568], - "description": "Accelerated video decoding fails with SkiaGraphite on win10+nvidia", - "os": { - "type": "win", - "version": { - "op": "<", - "value": "10.0.22621" - } - }, - "vendor_id": "0x10de", - "driver_version": { - "op": "<", - "value": "31.0.15.3623" - }, - "features": [ - "skia_graphite" - ] } ] }
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn index 2a61b0a..7a20cefb 100644 --- a/ios/chrome/app/BUILD.gn +++ b/ios/chrome/app/BUILD.gn
@@ -430,6 +430,7 @@ "//ios/chrome/app/strings", "//ios/chrome/browser/accessibility/model", "//ios/chrome/browser/appearance/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled", "//ios/chrome/browser/bookmarks/model", "//ios/chrome/browser/browsing_data/model", "//ios/chrome/browser/commerce/model/push_notification", @@ -488,7 +489,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid:tab_grid_ui", "//ios/chrome/browser/tabs/ui_bundled", "//ios/chrome/browser/toolbar/ui_bundled:ui", - "//ios/chrome/browser/ui/authentication", "//ios/chrome/browser/ui/device_orientation", "//ios/chrome/browser/upgrade/model:public", "//ios/chrome/browser/url_loading/model",
diff --git a/ios/chrome/app/DEPS b/ios/chrome/app/DEPS index 4572a8b..b15768c 100644 --- a/ios/chrome/app/DEPS +++ b/ios/chrome/app/DEPS
@@ -59,8 +59,8 @@ "+components/strings", "+ios/chrome/grit", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h",
diff --git a/ios/chrome/app/profile/BUILD.gn b/ios/chrome/app/profile/BUILD.gn index 0bc6e86..c8761b8 100644 --- a/ios/chrome/app/profile/BUILD.gn +++ b/ios/chrome/app/profile/BUILD.gn
@@ -194,6 +194,7 @@ "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/application_delegate:startup_information", "//ios/chrome/app/profile", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/first_run/ui_bundled", "//ios/chrome/browser/first_run/ui_bundled:first_run_provider", "//ios/chrome/browser/scoped_ui_blocker/ui_bundled", @@ -203,7 +204,6 @@ "//ios/chrome/browser/shared/model/profile", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:signin_util", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/browser/ui/device_orientation", ] } @@ -255,6 +255,7 @@ "//ios/chrome/app/application_delegate:observing_app_state_agent", "//ios/chrome/app/profile", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/ntp/model", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", "//ios/chrome/browser/policy/ui_bundled:management_util", @@ -272,7 +273,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/third_party/material_components_ios", "//ui/base", ]
diff --git a/ios/chrome/app/profile/first_run_profile_agent.mm b/ios/chrome/app/profile/first_run_profile_agent.mm index 3c06451..2d143bde8 100644 --- a/ios/chrome/app/profile/first_run_profile_agent.mm +++ b/ios/chrome/app/profile/first_run_profile_agent.mm
@@ -10,6 +10,7 @@ #import "ios/chrome/app/application_delegate/startup_information.h" #import "ios/chrome/app/profile/profile_init_stage.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_coordinator.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_screen_provider.h" #import "ios/chrome/browser/scoped_ui_blocker/ui_bundled/scoped_ui_blocker.h" @@ -20,7 +21,6 @@ #import "ios/chrome/browser/shared/model/browser/browser_provider_interface.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/signin_util.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/chrome/browser/ui/device_orientation/scoped_force_portrait_orientation.h" @interface FirstRunProfileAgent () <FirstRunCoordinatorDelegate,
diff --git a/ios/chrome/app/profile/identity_confirmation_profile_agent.mm b/ios/chrome/app/profile/identity_confirmation_profile_agent.mm index 004ca7f6..f75c7cf 100644 --- a/ios/chrome/app/profile/identity_confirmation_profile_agent.mm +++ b/ios/chrome/app/profile/identity_confirmation_profile_agent.mm
@@ -13,6 +13,7 @@ #import "components/prefs/pref_service.h" #import "ios/chrome/app/profile/profile_init_stage.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/ntp/model/new_tab_page_tab_helper.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/policy/ui_bundled/management_util.h" @@ -37,7 +38,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/signin_util.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/app/resources/BUILD.gn b/ios/chrome/app/resources/BUILD.gn index 16822aa..eddcdc0b 100644 --- a/ios/chrome/app/resources/BUILD.gn +++ b/ios/chrome/app/resources/BUILD.gn
@@ -72,6 +72,7 @@ "$root_gen_dir/components/signin_internals_resources.pak", "$root_gen_dir/components/sync_service_sync_internals_resources.pak", "$root_gen_dir/components/ukm_resources.pak", + "$root_gen_dir/components/user_actions_ui_resources.pak", "$root_gen_dir/components/version_ui_resources.pak", "$root_gen_dir/ios/chrome/ios_resources.pak", "$root_gen_dir/ios/web/ios_web_resources.pak",
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 08c65ab6..ade4686a 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1689,6 +1689,12 @@ <message name="IDS_IOS_DOWNLOAD_MOBILECONFIG_FILE_WARNING_TITLE" desc="Title of the alert displaying a warning message before downloading a .mobileconfig file.[iOS only]"> Configuration profile available </message> + <message name="IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_TEXT" desc="The snackbar message to inform users that the download is blocked. [iOS only]"> + Saving files is blocked by your organization + </message> + <message name="IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_BUTTON_TEXT" desc="The text of the snackbar button to dismiss the snackbar. [iOS only]"> + GOT IT + </message> <message name="IDS_IOS_DRIVE_FILE_PICKER_ALERT_THIS_FILE_COUND_NOT_BE_OPENED" desc="Title for an alert which is presented when a file selected by the user cannot be opened in the Drive file picker. [iOS only]"> <ph name="FILENAME">$1<ex>image.jpeg</ex></ph> couldn't be opened </message> @@ -6851,6 +6857,15 @@ <message name="IDS_IOS_COLLAPSED_PRIMARY_TOOLBAR_BUTTON" desc="The accessibility label for the collapsed toolbar button in primary toolbar. [iOS only]."> Collapsed primary toolbar button </message> + <message name="IDS_IOS_KEYBOARD_GO_TO_INCOGNITO_TAB_GRID" desc="The title of the keyboard shortcut to go to the incognito tab grid from the tab grid menu." meaning="Used as a command title in the iPad command menu."> + Incognito tab grid + </message> + <message name="IDS_IOS_KEYBOARD_GO_TO_REGULAR_TAB_GRID" desc="The title of the keyboard shortcut to go to the regular tab grid from the tab grid menu." meaning="Used as a command title in the iPad command menu."> + Regular tab grid + </message> + <message name="IDS_IOS_KEYBOARD_GO_TO_REMOTE_TAB_GRID" desc="The title of the keyboard shortcut to go to the remote tab grid from the tab grid menu." meaning="Used as a command title in the iPad command menu."> + Remote tab grid + </message> </messages> </release> </grit>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_BUTTON_TEXT.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_BUTTON_TEXT.png.sha1 new file mode 100644 index 0000000..bdeae3d --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_BUTTON_TEXT.png.sha1
@@ -0,0 +1 @@ +f21d493f517ec58f196739791a3110a1ffda8f39 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_TEXT.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_TEXT.png.sha1 new file mode 100644 index 0000000..bdeae3d --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_TEXT.png.sha1
@@ -0,0 +1 @@ +f21d493f517ec58f196739791a3110a1ffda8f39 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_INCOGNITO_TAB_GRID.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_INCOGNITO_TAB_GRID.png.sha1 new file mode 100644 index 0000000..6ac528dd --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_INCOGNITO_TAB_GRID.png.sha1
@@ -0,0 +1 @@ +d5b400108db5b20167731c2e6b8dd1f7f95a0342 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_REGULAR_TAB_GRID.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_REGULAR_TAB_GRID.png.sha1 new file mode 100644 index 0000000..6ac528dd --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_REGULAR_TAB_GRID.png.sha1
@@ -0,0 +1 @@ +d5b400108db5b20167731c2e6b8dd1f7f95a0342 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_REMOTE_TAB_GRID.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_REMOTE_TAB_GRID.png.sha1 new file mode 100644 index 0000000..6ac528dd --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_GO_TO_REMOTE_TAB_GRID.png.sha1
@@ -0,0 +1 @@ +d5b400108db5b20167731c2e6b8dd1f7f95a0342 \ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb index 5fd4117..4753afb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -108,7 +108,7 @@ <translation id="143681031165817424">Cyfeiriad wedi'i gadw ar y ddyfais hon yn unig</translation> <translation id="1445276840641906250">Eich holl dabiau mewn un porwr</translation> <translation id="1450170672351507823">Mae amddiffyniad safonol wedi'i droi ymlaen. Am fwy fyth o ddiogelwch, defnyddiwch Gwell amddiffyniad.</translation> -<translation id="1454615514353469963">Bydd cyfrineiriau, codau pas a data arall yn cael eu dileu yn barhaol o Reolwr Cyfrineiriau Google</translation> +<translation id="1454615514353469963">Bydd cyfrineiriau, codau pas a data eraill yn cael eu dileu yn barhaol o Reolwr Cyfrineiriau Google</translation> <translation id="1455660774629812862">Peidio â chuddio</translation> <translation id="1460751212339734034">Arbed amser, teipio llai</translation> <translation id="1466035273550360103">Dim tabiau ar agor</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb index c2c2aef..04fcb455 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -1204,6 +1204,7 @@ <translation id="6418346271604475326">Prép. du PDF</translation> <translation id="6429213933892582367">Ouvrez les options de mot de passe</translation> <translation id="6434591244308415567">Une erreur s'est produite. Réessayez plus tard.</translation> +<translation id="6435307030888827407">Rester déconnecté</translation> <translation id="6436318499800111867">Partagés avec moi : <ph name="SHARED_WITH_ME_DATE" /></translation> <translation id="6442697326824312960">Annuler l'épinglage de l'onglet</translation> <translation id="6443118737398455446">Date d'expiration non valide</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index d9f942e..ade8650 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -137,7 +137,7 @@ <translation id="1536390784834419204">Prevedi stranicu</translation> <translation id="1540800554400757039">1. adresni redak</translation> <translation id="154312949627292154">Otvorite kartice primljene s drugih uređaja sa zaključanog zaslona.</translation> -<translation id="1545749641540134597">Skenirajte QR kod</translation> +<translation id="1545749641540134597">Skenirajte QR kôd</translation> <translation id="1554477036522844996">Novi prozor</translation> <translation id="1558391695376153246">Zatvori anonimne kartice</translation> <translation id="1571780780926010134">Anonimne kartice</translation> @@ -1086,7 +1086,7 @@ <translation id="5937560539988385583">Stranica je prevedena</translation> <translation id="5938160824633642847">Uređaj je gotovo pun. Oslobodite prostor i pokušajte ponovo.</translation> <translation id="594324569139756587">Blokiraj treće strane</translation> -<translation id="5944869793365969636">Skenirajte QR kod</translation> +<translation id="5944869793365969636">Skenirajte QR kôd</translation> <translation id="5948291296578561264">To vam omogućuje da spremite fotografije u zbirku fotografija.</translation> <translation id="5952641243319721872">Jeste li sigurni da želite odbaciti odabir?</translation> <translation id="5956112131836209882">Kartica grupe kartica. <ph name="TAB_INDEX_IN_GROUP" /> od <ph name="NUMBER_OF_TABS_IN_GROUP" />.</translation>
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS index bafc91e..93503721 100644 --- a/ios/chrome/browser/DEPS +++ b/ios/chrome/browser/DEPS
@@ -210,9 +210,7 @@ # TODO(crbug.com/40820398): browser should not depend on UI, this is a # blanket exception for tests. "+ios/chrome/browser/ui", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", - # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h",
diff --git a/ios/chrome/browser/account_picker/ui_bundled/BUILD.gn b/ios/chrome/browser/account_picker/ui_bundled/BUILD.gn index c5c6ee5..173e333 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/account_picker/ui_bundled/BUILD.gn
@@ -20,6 +20,8 @@ "//ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_screen", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_selection", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", "//ios/chrome/browser/shared/coordinator/alert", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", @@ -29,8 +31,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:constants", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", "//ios/chrome/common/ui/colors", "//ui/base", ]
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/BUILD.gn b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/BUILD.gn index 8129407a..6e6551c5 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/BUILD.gn +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/BUILD.gn
@@ -25,6 +25,10 @@ "//ios/chrome/browser/account_picker/ui_bundled:account_picker_configuration", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_layout", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_screen", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/settings/ui_bundled/password:title_view", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", @@ -36,10 +40,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/elements:branded_navigation_item_title_view", "//ios/chrome/common/ui/util",
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/DEPS b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/DEPS index 6e93973f..2da4d52 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/DEPS +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/DEPS
@@ -1,6 +1,6 @@ include_rules = [ "+ios/chrome/browser/sync/model/sync_service_factory.h", - "+ios/chrome/browser/ui/authentication/views/identity_button_control.h", - "+ios/chrome/browser/ui/authentication/views/identity_view.h", - "+ios/chrome/browser/ui/authentication/signin/signin_utils.h", + "+ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h", + "+ios/chrome/browser/authentication/ui_bundled/views/identity_view.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h", ]
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_mediator.mm b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_mediator.mm index 9dd8030..f59f655 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_mediator.mm +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_mediator.mm
@@ -11,11 +11,11 @@ #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_configuration.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface AccountPickerConfirmationScreenMediator () < ChromeAccountManagerServiceObserver,
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_view_controller.mm b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_view_controller.mm index 827c305..ac79513 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_view_controller.mm +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_view_controller.mm
@@ -10,11 +10,11 @@ #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_configuration.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_constants.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_layout_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_view.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" -#import "ios/chrome/browser/ui/authentication/views/identity_view.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/elements/branded_navigation_item_title_view.h" #import "ios/chrome/common/ui/util/button_util.h"
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/BUILD.gn b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/BUILD.gn index 1908396..7cddc902 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/BUILD.gn +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/BUILD.gn
@@ -24,6 +24,9 @@ "//ios/chrome/app/strings:ios_strings", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_layout", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_screen", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", @@ -37,9 +40,6 @@ "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/common/ui/colors", "//ui/base", ] @@ -50,5 +50,5 @@ "account_picker_selection_screen_identity_item_configurator.h", "account_picker_selection_screen_identity_item_configurator.mm", ] - deps = [ "//ios/chrome/browser/ui/authentication/cells" ] + deps = [ "//ios/chrome/browser/authentication/ui_bundled/cells" ] }
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/DEPS b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/DEPS index fa6e27f..25acd47d 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/DEPS +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/DEPS
@@ -1,6 +1,6 @@ include_rules = [ "+ios/chrome/browser/net/model/crurl.h", - "+ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h", - "+ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h", - "+ios/chrome/browser/ui/authentication/signin/signin_utils.h", + "+ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h", + "+ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h", ]
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.mm b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.mm index dc824c7..c3eac95 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.mm +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.mm
@@ -4,7 +4,7 @@ #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" @implementation AccountPickerSelectionScreenIdentityItemConfigurator
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_mediator.mm b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_mediator.mm index f444aafb..3edfeff 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_mediator.mm +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_mediator.mm
@@ -9,11 +9,11 @@ #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_consumer.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface AccountPickerSelectionScreenMediator () < ChromeAccountManagerServiceObserver,
diff --git a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm index 4885182..08813f97 100644 --- a/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm +++ b/ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller.mm
@@ -7,15 +7,15 @@ #import "base/apple/foundation_util.h" #import "base/check.h" #import "base/notreached.h" +#import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.h" +#import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller_action_delegate.h" +#import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller_model_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" #import "ios/chrome/browser/net/model/crurl.h" #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_image_item.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_link_header_footer_item.h" -#import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.h" -#import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller_action_delegate.h" -#import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_table_view_controller_model_delegate.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/BUILD.gn index 6e941c0..fd44812 100644 --- a/ios/chrome/browser/authentication/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/BUILD.gn
@@ -1,13 +1,259 @@ -# Copyright 2024 The Chromium Authors +# Copyright 2016 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chrome_build.gni") + +source_set("ui_bundled") { + sources = [ + "authentication_ui_util.h", + "authentication_ui_util.mm", + "re_signin_infobar_delegate.h", + "re_signin_infobar_delegate.mm", + "signin_notification_infobar_delegate.h", + "signin_notification_infobar_delegate.mm", + "signin_promo_view_mediator.h", + "signin_promo_view_mediator.mm", + ] + deps = [ + ":account_settings_presenter", + ":authentication_constants", + ":signin_presenter", + "//components/bookmarks/common", + "//components/consent_auditor", + "//components/infobars/core", + "//components/policy/core/common", + "//components/prefs", + "//components/reading_list/features:flags", + "//components/signin/ios/browser", + "//components/signin/public/base", + "//components/signin/public/base:signin_switches", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager/objc", + "//components/strings", + "//components/unified_consent", + "//google_apis", + "//ios/chrome/app:change_profile_commands", + "//ios/chrome/app/application_delegate:app_state", + "//ios/chrome/app/profile", + "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation", + "//ios/chrome/browser/authentication/ui_bundled/history_sync:capabilities_fetcher", + "//ios/chrome/browser/authentication/ui_bundled/resources", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/flags", + "//ios/chrome/browser/infobars/model", + "//ios/chrome/browser/ntp/ui_bundled:feature_flags", + "//ios/chrome/browser/policy/model", + "//ios/chrome/browser/settings/ui_bundled:settings_root", + "//ios/chrome/browser/shared/coordinator/alert", + "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", + "//ios/chrome/browser/shared/model/application_context", + "//ios/chrome/browser/shared/model/browser", + "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/model/profile", + "//ios/chrome/browser/shared/model/web_state_list", + "//ios/chrome/browser/shared/public/commands", + "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/shared/public/features:system_flags", + "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/browser/shared/ui/util:snackbar_util", + "//ios/chrome/browser/signin/model", + "//ios/chrome/browser/signin/model:authentication_service", + "//ios/chrome/browser/signin/model:authentication_service_factory", + "//ios/chrome/browser/signin/model:capabilities_types", + "//ios/chrome/browser/signin/model:constants", + "//ios/chrome/browser/signin/model:system_identity", + "//ios/chrome/browser/signin/model:system_identity_manager", + "//ios/chrome/browser/sync/model", + "//ios/chrome/browser/unified_consent/model", + "//ios/chrome/common", + "//ios/chrome/common/ui/colors", + "//ios/chrome/common/ui/util", + "//ios/public/provider/chrome/browser/signin:signin_error_api", + "//ios/public/provider/chrome/browser/signin:signin_resources_api", + "//ios/third_party/material_components_ios", + "//ios/web/public", + "//services/network/public/cpp", + "//ui/base", + "//ui/gfx", + ] + public_deps = [ + "//base", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + ] + frameworks = [ + "CoreGraphics.framework", + "QuartzCore.framework", + "UIKit.framework", + ] +} + +source_set("authentication_constants") { + sources = [ + "authentication_constants.h", + "authentication_constants.mm", + ] + frameworks = [ "UIKit.framework" ] +} + +source_set("signin_presenter") { + sources = [ "signin_presenter.h" ] +} + +source_set("account_settings_presenter") { + sources = [ "account_settings_presenter.h" ] +} + +source_set("unit_tests") { + testonly = true + sources = [ + "authentication_ui_util_unittest.mm", + "re_signin_infobar_delegate_unittest.mm", + "signin_promo_view_mediator_unittest.mm", + ] + deps = [ + ":account_settings_presenter", + ":signin_presenter", + ":ui_bundled", + "//base", + "//base/test:test_support", + "//build:branding_buildflags", + "//components/consent_auditor", + "//components/consent_auditor:test_support", + "//components/policy/core/common", + "//components/policy/core/common:test_support", + "//components/pref_registry", + "//components/prefs", + "//components/signin/public/base", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager:test_support", + "//components/sync:test_support", + "//components/sync/base:features", + "//components/sync_preferences", + "//components/sync_preferences:test_support", + "//components/variations", + "//components/variations:test_support", + "//components/version_info", + "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/infobars/model", + "//ios/chrome/browser/ntp/ui_bundled:feature_flags", + "//ios/chrome/browser/policy/model", + "//ios/chrome/browser/policy/model:constants", + "//ios/chrome/browser/policy/model:policy_util", + "//ios/chrome/browser/policy/model:test_support", + "//ios/chrome/browser/shared/model/application_context", + "//ios/chrome/browser/shared/model/browser/test:test_support", + "//ios/chrome/browser/shared/model/prefs:browser_prefs", + "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/model/profile/test", + "//ios/chrome/browser/shared/model/web_state_list", + "//ios/chrome/browser/shared/public/commands", + "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/shared/ui/symbols", + "//ios/chrome/browser/shared/ui/table_view:styler", + "//ios/chrome/browser/signin/model", + "//ios/chrome/browser/signin/model:authentication_service", + "//ios/chrome/browser/signin/model:authentication_service_factory", + "//ios/chrome/browser/signin/model:fake_system_identity", + "//ios/chrome/browser/signin/model:fake_system_identity_manager", + "//ios/chrome/browser/signin/model:test_support", + "//ios/chrome/browser/sync/model", + "//ios/chrome/browser/sync/model:test_support", + "//ios/chrome/browser/unified_consent/model", + "//ios/chrome/test:test_support", + "//ios/testing:protocol_fake", + "//ios/web/public/test", + "//testing/gtest", + "//third_party/ocmock", + "//ui/base", + "//ui/strings:ui_strings_grit", + ] +} + +source_set("eg_app_support+eg2") { + configs += [ "//build/config/ios:xctest_config" ] + testonly = true + sources = [ + "signin_earl_grey_app_interface.h", + "signin_earl_grey_app_interface.mm", + ] + visibility = [ + "//ios/chrome/test/earl_grey:eg_app_support+eg2", + "//ios/chrome/test/earl_grey:hooks", + ] + deps = [ + ":account_settings_presenter", + ":signin_presenter", + ":ui_bundled", + "//components/bookmarks/browser", + "//components/prefs", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager:test_support", + "//components/supervised_user/core/browser", + "//components/sync", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt", + "//ios/chrome/browser/bookmarks/model", + "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", + "//ios/chrome/browser/shared/model/application_context", + "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/model/profile", + "//ios/chrome/browser/shared/public/commands", + "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/browser/signin/model", + "//ios/chrome/browser/signin/model:authentication_service", + "//ios/chrome/browser/signin/model:authentication_service_factory", + "//ios/chrome/browser/signin/model:capabilities_types", + "//ios/chrome/browser/signin/model:fake_system_identity", + "//ios/chrome/browser/signin/model:fake_system_identity_manager", + "//ios/chrome/browser/sync/model", + "//ios/chrome/test/app:test_support", + "//ios/testing/earl_grey:eg_app_support+eg2", + "//ios/third_party/earl_grey2:app_framework+link", + ] +} + source_set("eg_test_support+eg2") { + configs += [ "//build/config/ios:xctest_config" ] testonly = true sources = [ "signin_earl_grey.h", + "signin_earl_grey.mm", + "signin_earl_grey_app_interface.h", + "signin_earl_grey_app_interface_stub.mm", "signin_earl_grey_ui_test_util.h", + "signin_earl_grey_ui_test_util.mm", "signin_matchers.h", + "signin_matchers.mm", ] - public_deps = [ "//ios/chrome/browser/ui/authentication:eg_test_support+eg2" ] + deps = [ + ":account_settings_presenter", + ":signin_presenter", + "//base", + "//base/test:test_support", + "//components/signin/public/base", + "//components/sync/base", + "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", + "//ios/chrome/browser/first_run/ui_bundled:constants", + "//ios/chrome/browser/recent_tabs/ui_bundled:ui_constants", + "//ios/chrome/browser/settings/ui_bundled:constants", + "//ios/chrome/browser/settings/ui_bundled/google_services:constants", + "//ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts:constants", + "//ios/chrome/browser/shared/ui/table_view:constants", + "//ios/chrome/browser/signin/model:capabilities_types", + "//ios/chrome/browser/signin/model:fake_system_identity", + "//ios/chrome/common/ui/promo_style:constants", + "//ios/chrome/test:eg_test_support+eg2", + "//ios/chrome/test/earl_grey:eg_test_support+eg2", + "//ios/testing/earl_grey:eg_test_support+eg2", + "//ui/base", + ] }
diff --git a/ios/chrome/browser/authentication/ui_bundled/DEPS b/ios/chrome/browser/authentication/ui_bundled/DEPS index 555dcbd..edc8596 100644 --- a/ios/chrome/browser/authentication/ui_bundled/DEPS +++ b/ios/chrome/browser/authentication/ui_bundled/DEPS
@@ -1,3 +1,32 @@ include_rules = [ - "+ios/chrome/browser/ui/authentication", -] \ No newline at end of file + "+ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.h", + "+components/consent_auditor", + "+ios/chrome/browser/settings", + "+ios/chrome/browser/screen", + "+ios/chrome/browser/first_run", + "+ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_constants.h", + "+ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h", + "+ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h", + + # TODO(crbug.com/40269518): Remove this deps. + "+ios/chrome/browser/scoped_ui_blocker/ui_bundled", + + "+ios/chrome/browser/signin/model", + "+ios/chrome/browser/sync/model", + "+ios/chrome/browser/flags", + "+ios/chrome/browser/policy", + "+ios/chrome/browser/bookmarks/model", + "+ios/chrome/browser/infobars/model", + "+ios/chrome/browser/discover_feed/model", + "+ios/chrome/browser/push_notification", + "+ios/chrome/browser/net/model", +] + +specific_include_rules = { + "signin_earl_grey_app_interface\.mm": [ + "+ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", + ], + ".*_egtest\.mm": [ + "+components/signin/internal/identity_manager/account_capabilities_constants.h", + ], +}
diff --git a/ios/chrome/browser/ui/authentication/DIR_METADATA b/ios/chrome/browser/authentication/ui_bundled/DIR_METADATA similarity index 100% rename from ios/chrome/browser/ui/authentication/DIR_METADATA rename to ios/chrome/browser/authentication/ui_bundled/DIR_METADATA
diff --git a/ios/chrome/browser/ui/authentication/OWNERS b/ios/chrome/browser/authentication/ui_bundled/OWNERS similarity index 100% rename from ios/chrome/browser/ui/authentication/OWNERS rename to ios/chrome/browser/authentication/ui_bundled/OWNERS
diff --git a/ios/chrome/browser/ui/authentication/account_menu/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/account_menu/BUILD.gn similarity index 84% rename from ios/chrome/browser/ui/authentication/account_menu/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/account_menu/BUILD.gn index a31b943..0027cb29 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/BUILD.gn
@@ -22,6 +22,14 @@ "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/app/strings:ios_strings_grit", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/change_profile", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", + "//ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet", "//ios/chrome/browser/policy/model", "//ios/chrome/browser/policy/ui_bundled:management_util", "//ios/chrome/browser/push_notification/model:push_notification_service_header", @@ -47,13 +55,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:system_identity_manager", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/change_profile", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", - "//ios/chrome/browser/ui/authentication/signin/add_account_signin", - "//ios/chrome/browser/ui/authentication/signout_action_sheet", "//ios/third_party/material_components_ios", ] } @@ -72,6 +73,7 @@ "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/keyboard/ui_bundled", "//ios/chrome/browser/keyboard/ui_bundled", "//ios/chrome/browser/keyboard/ui_bundled", @@ -85,7 +87,6 @@ "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/signin/model:constants", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/util", "//ios/chrome/common/ui/util:image_util", @@ -115,6 +116,13 @@ "//base", "//components/sync:test_support", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", + "//ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet", "//ios/chrome/browser/policy/model", "//ios/chrome/browser/settings/model/sync/utils:identity_error_util", "//ios/chrome/browser/settings/ui_bundled:constants", @@ -138,12 +146,6 @@ "//ios/chrome/browser/signin/model:test_support", "//ios/chrome/browser/sync/model", "//ios/chrome/browser/sync/model:test_support", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", - "//ios/chrome/browser/ui/authentication/signin/add_account_signin", - "//ios/chrome/browser/ui/authentication/signout_action_sheet", "//ios/chrome/test:test_support", "//ios/web/public/test", "//testing/gtest", @@ -159,6 +161,7 @@ ":constants", "//base/test:test_support", "//ios/chrome/app/strings:ios_strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/ntp/ui_bundled:constants", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", @@ -169,7 +172,6 @@ "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:test_constants", "//ios/chrome/browser/start_surface/ui_bundled:feature_flags", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/chrome/test/earl_grey:switches", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/authentication/account_menu/DEPS b/ios/chrome/browser/authentication/ui_bundled/account_menu/DEPS similarity index 100% rename from ios/chrome/browser/ui/authentication/account_menu/DEPS rename to ios/chrome/browser/authentication/ui_bundled/account_menu/DEPS
diff --git a/ios/chrome/browser/ui/authentication/account_menu/OWNERS b/ios/chrome/browser/authentication/ui_bundled/account_menu/OWNERS similarity index 100% rename from ios/chrome/browser/ui/authentication/account_menu/OWNERS rename to ios/chrome/browser/authentication/ui_bundled/account_menu/OWNERS
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h similarity index 81% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h index fecdc1e..f7891f6 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_CONSTANTS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_CONSTANTS_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_CONSTANTS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_CONSTANTS_H_ #import <Foundation/Foundation.h> @@ -26,4 +26,4 @@ // The accessibility identifier for the account menu activity indicator. extern NSString* const kAccountMenuActivityIndicatorId; -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_CONSTANTS_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.mm similarity index 90% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.mm index e7f877a..bd5c999 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h" NSString* const kAccountMenuTableViewId = @"AccountMenuTableViewId"; NSString* const kAccountMenuCloseButtonId = @"AccountMenuCloseButtonId";
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_consumer.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_consumer.h similarity index 76% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_consumer.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_consumer.h index 5e3c77c..92de463 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_consumer.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_consumer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_CONSUMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_CONSUMER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_CONSUMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_CONSUMER_H_ #import <Foundation/Foundation.h> @@ -33,4 +33,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_CONSUMER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h similarity index 71% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h index 5213134..f12a29c 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_COORDINATOR_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" @protocol AccountMenuCoordinatorDelegate; @@ -30,4 +30,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.mm index 8bb7de4..f8db426 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h" #import <MaterialComponents/MaterialSnackbar.h> @@ -19,6 +19,19 @@ #import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/app/change_profile_commands.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/policy/model/management_state.h" #import "ios/chrome/browser/policy/ui_bundled/management_util.h" #import "ios/chrome/browser/push_notification/model/push_notification_service.h" @@ -51,19 +64,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_delegate.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_continuation.h" -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.h" -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator_unittests.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator_unittests.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator_unittests.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator_unittests.mm index 038672f5..5253c202 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator_unittests.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator_unittests.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h" #import <MaterialComponents/MaterialSnackbar.h> @@ -10,6 +10,13 @@ #import "base/test/scoped_feature_list.h" #import "components/sync/service/sync_service_utils.h" #import "components/trusted_vault/trusted_vault_server_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/settings/ui_bundled/sync/sync_encryption_passphrase_table_view_controller.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" #import "ios/chrome/browser/shared/coordinator/scene/test/stub_browser_provider_interface.h" @@ -32,13 +39,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_delegate.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/platform_test.h"
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_data_source.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_data_source.h similarity index 82% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_data_source.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_data_source.h index a2be303..3e891f7 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_data_source.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_data_source.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_DATA_SOURCE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_DATA_SOURCE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_DATA_SOURCE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_DATA_SOURCE_H_ #import <UIKit/UIKit.h> @@ -43,4 +43,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_DATA_SOURCE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_DATA_SOURCE_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_egtest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_egtest.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_egtest.mm index 70d1921..fb341664 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_egtest.mm
@@ -6,6 +6,9 @@ #import "base/strings/sys_string_conversions.h" #import "base/test/ios/wait_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" @@ -16,9 +19,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" #import "ios/chrome/browser/start_surface/ui_bundled/start_surface_features.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.h similarity index 78% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.h index b11bb74..eab579f 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_H_ #import <Foundation/Foundation.h> -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_data_source.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mutator.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_data_source.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mutator.h" @protocol AccountMenuConsumer; @protocol AccountMenuMediatorDelegate; @@ -56,4 +56,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.mm index 9dc93c7..2b4fabae 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.h" #import <optional> #import <string> @@ -14,6 +14,13 @@ #import "components/prefs/pref_service.h" #import "components/signin/public/base/consent_level.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_data_source.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/policy/ui_bundled/management_util.h" #import "ios/chrome/browser/settings/model/sync/utils/account_error_ui_info.h" #import "ios/chrome/browser/settings/model/sync/utils/identity_error_util.h" @@ -23,13 +30,6 @@ #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/sync/model/sync_observer_bridge.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_consumer.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_data_source.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_delegate.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface AccountMenuMediator () <ChromeAccountManagerServiceObserver, IdentityManagerObserverBridgeDelegate,
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_delegate.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h similarity index 83% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h index 606901c6..ff14a7bf 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h
@@ -2,14 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_DELEGATE_H_ #import <Foundation/Foundation.h> +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/sync_error_settings_command_handler.h" #import "ios/chrome/browser/shared/public/commands/show_signin_command.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/signin/model/constants.h" @class AccountMenuMediator; @class AuthenticationFlow; @@ -20,7 +21,6 @@ // Requests to dismiss the account menu. - (void)mediatorWantsToBeDismissed:(AccountMenuMediator*)mediator; - // Starts the sign-in flow. Then call `completion`, with a parameter stating // whether the the sign-in was done. - (AuthenticationFlow*) @@ -63,4 +63,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MEDIATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_unittests.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_unittests.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_unittests.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_unittests.mm index 0a6d584..0cb113a 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_unittests.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_unittests.mm
@@ -2,13 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.h" #import "base/memory/raw_ptr.h" #import "base/test/metrics/user_action_tester.h" #import "base/test/scoped_feature_list.h" #import "base/test/task_environment.h" #import "components/sync/test/test_sync_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/settings/model/sync/utils/account_error_ui_info.h" #import "ios/chrome/browser/settings/model/sync/utils/identity_error_util.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" @@ -26,12 +32,6 @@ #import "ios/chrome/browser/signin/model/identity_test_environment_browser_state_adaptor.h" #import "ios/chrome/browser/sync/model/mock_sync_service_utils.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_consumer.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mediator_delegate.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/gtest_mac.h"
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mutator.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mutator.h similarity index 80% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_mutator.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mutator.h index 3080ba6..ee31068 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_mutator.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mutator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MUTATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MUTATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MUTATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MUTATOR_H_ #import <Foundation/Foundation.h> @@ -39,4 +39,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_MUTATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_MUTATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h similarity index 73% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h index bada3b7..072f2a7 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_VIEW_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_VIEW_CONTROLLER_H_ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_consumer.h" #import "ios/chrome/browser/shared/ui/table_view/chrome_table_view_controller.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_consumer.h" @protocol AccountMenuDataSource; @protocol AccountMenuMutator; @@ -33,4 +33,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_MENU_ACCOUNT_MENU_VIEW_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_MENU_ACCOUNT_MENU_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.mm index 9383e3a2..afe60f9 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h" #import "base/apple/foundation_util.h" #import "base/check.h" @@ -11,6 +11,11 @@ #import "base/metrics/user_metrics_action.h" #import "base/strings/sys_string_conversions.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_data_source.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mutator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" #import "ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.h" #import "ios/chrome/browser/policy/model/management_state.h" #import "ios/chrome/browser/settings/model/sync/utils/account_error_ui_info.h" @@ -20,11 +25,6 @@ #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/signin/model/constants.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_data_source.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mutator.h" -#import "ios/chrome/browser/ui/authentication/cells/central_account_view.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/image_util.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller_unittests.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller_unittests.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller_unittests.mm rename to ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller_unittests.mm index 0e3183d..9fa4613 100644 --- a/ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller_unittests.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller_unittests.mm
@@ -2,12 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h" #import "base/check_op.h" #import "base/memory/raw_ptr.h" #import "base/test/metrics/user_action_tester.h" #import "base/test/scoped_feature_list.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_data_source.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mutator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" #import "ios/chrome/browser/policy/model/management_state.h" #import "ios/chrome/browser/settings/model/sync/utils/account_error_ui_info.h" #import "ios/chrome/browser/settings/ui_bundled/cells/settings_image_detail_text_cell.h" @@ -24,10 +28,6 @@ #import "ios/chrome/browser/signin/model/fake_authentication_service_delegate.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_data_source.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_mutator.h" -#import "ios/chrome/browser/ui/authentication/cells/central_account_view.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" @@ -167,9 +167,7 @@ base::UserActionTester user_actions_; // Verify that all mocks expectation are fulfilled. - void VerifyMock() { - EXPECT_OCMOCK_VERIFY((id)mutator_); - } + void VerifyMock() { EXPECT_OCMOCK_VERIFY((id)mutator_); } // The UITableView* of the account menu view controller. UITableView* TableView() { return view_controller_.view.subviews[0]; }
diff --git a/ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h b/ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h new file mode 100644 index 0000000..c5dc674aa --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h
@@ -0,0 +1,16 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_SETTINGS_PRESENTER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_SETTINGS_PRESENTER_H_ + +// Protocol used to display the account settings UI of the signed in account. +@protocol AccountSettingsPresenter + +// Asks the presenter to display account settings. +- (void)showAccountSettings; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ACCOUNT_SETTINGS_PRESENTER_H_
diff --git a/ios/chrome/browser/ui/authentication/authentication_constants.h b/ios/chrome/browser/authentication/ui_bundled/authentication_constants.h similarity index 80% rename from ios/chrome/browser/ui/authentication/authentication_constants.h rename to ios/chrome/browser/authentication/ui_bundled/authentication_constants.h index d09ddf8..8711564e 100644 --- a/ios/chrome/browser/ui/authentication/authentication_constants.h +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_constants.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_CONSTANTS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_CONSTANTS_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_CONSTANTS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_CONSTANTS_H_ #import <UIKit/UIKit.h> @@ -29,4 +29,4 @@ // Accessibility identifier for the 'Undo' button in signin snackbar. extern NSString* const kSigninSnackbarUndo; -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_CONSTANTS_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/authentication_constants.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_constants.mm similarity index 88% rename from ios/chrome/browser/ui/authentication/authentication_constants.mm rename to ios/chrome/browser/authentication/ui_bundled/authentication_constants.mm index adcb0d7..8f7270c3 100644 --- a/ios/chrome/browser/ui/authentication/authentication_constants.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_constants.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" const CGFloat kAuthenticationHeaderImageHeight = 180.;
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/BUILD.gn similarity index 89% rename from ios/chrome/browser/ui/authentication/authentication_flow/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow/BUILD.gn index c99cd75..7c0ed9cb 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/BUILD.gn
@@ -25,6 +25,11 @@ "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", + "//ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation", + "//ios/chrome/browser/authentication/ui_bundled/history_sync:capabilities_fetcher", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/flags", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", "//ios/chrome/browser/policy/model", @@ -46,11 +51,6 @@ "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/signin/model:system_identity_manager", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:authentication_constants", - "//ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation", - "//ios/chrome/browser/ui/authentication/history_sync:capabilities_fetcher", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/public/provider/chrome/browser/signin:signin_error_api", "//ios/third_party/material_components_ios", "//ios/web/public", @@ -74,6 +74,7 @@ "//components/pref_registry", "//components/sync_preferences", "//components/sync_preferences:test_support", + "//ios/chrome/browser/authentication/ui_bundled", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", "//ios/chrome/browser/policy/model:constants", "//ios/chrome/browser/policy/model:test_support",
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h similarity index 85% rename from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h index 9af07b9..2884d17 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_H_ #import <Foundation/Foundation.h> #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/signin/model/constants.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" @class AuthenticationFlowPerformer; class Browser; @@ -86,4 +86,4 @@ - (void)setPerformerForTesting:(AuthenticationFlowPerformer*)performer; @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_H_
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.mm similarity index 87% rename from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.mm rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.mm index 118f1d8..bf45481 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" #import "base/check_op.h" #import "base/feature_list.h" @@ -21,6 +21,9 @@ #import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/app/change_profile_commands.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.h" #import "ios/chrome/browser/flags/ios_chrome_flag_descriptions.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/policy/model/browser_policy_connector_ios.h" @@ -41,9 +44,6 @@ #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/public/provider/chrome/browser/signin/signin_error_api.h" #import "ui/base/l10n/l10n_util.h" @@ -55,7 +55,6 @@ // The states of the sign-in flow state machine. enum AuthenticationState { BEGIN, - CHECK_SIGNIN_STEPS, FETCH_MANAGED_STATUS, SHOW_MANAGED_CONFIRMATION, CONVERT_PERSONAL_PROFILE_TO_MANAGED, @@ -130,23 +129,6 @@ // The actions to perform following account sign-in. @property(nonatomic, assign) PostSignInActionSet postSignInActions; -// Checks which sign-in steps to perform and updates member variables -// accordingly. -- (void)checkSigninSteps; - -// Continues the sign-in state machine starting from `_state` and invokes -// `_signInCompletion` when finished. -- (void)continueSignin; - -// Runs `_signInCompletion` asynchronously with `result` argument. -- (void)completeSignInWithResult:(SigninCoordinatorResult)result; - -// Cancels the current sign-in flow. -- (void)cancelFlowWithReason:(CancelationReason)byUser; - -// Handles an authentication error and show an alert to the user. -- (void)handleAuthenticationError:(NSError*)error; - @end @implementation AuthenticationFlow { @@ -158,19 +140,10 @@ AuthenticationState _state; BOOL _didSignIn; CancelationReason _cancelationReason; - BOOL _shouldSignOut; - BOOL _alreadySignedInWithTheSameAccount; - // YES if the signed in account is a managed account and the sign-in flow - // includes sync. - BOOL _shouldShowManagedConfirmation; // YES if the personal profile should be converted to a managed (work) profile // as part of the signin flow. Can only be true if the to-be-signed-in account // is managed. BOOL _shouldConvertPersonalProfileToManaged; - // YES if user policies have to be fetched. - BOOL _shouldFetchUserPolicy; - // YES if user is opted into bookmark and reading list account storage. - BOOL _shouldShowSigninSnackbar; raw_ptr<Browser> _browser; id<SystemIdentity> _identityToSignIn; @@ -240,7 +213,7 @@ // Related to http://crbug.com/1246480. __weak __typeof(self) weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ - [weakSelf continueSignin]; + [weakSelf continueFlow]; }); } @@ -276,7 +249,6 @@ DCHECK([self canceled]); switch (_state) { case BEGIN: - case CHECK_SIGNIN_STEPS: case FETCH_MANAGED_STATUS: case SHOW_MANAGED_CONFIRMATION: case CONVERT_PERSONAL_PROFILE_TO_MANAGED: @@ -304,34 +276,26 @@ DCHECK(![self canceled]); switch (_state) { case BEGIN: - return CHECK_SIGNIN_STEPS; - case CHECK_SIGNIN_STEPS: return FETCH_MANAGED_STATUS; case FETCH_MANAGED_STATUS: - if (_shouldShowManagedConfirmation) { + if (ShouldShowManagedConfirmationForHostedDomain( + _identityToSignInHostedDomain, _accessPoint, + _identityToSignIn.gaiaID, [self prefs])) { return SHOW_MANAGED_CONFIRMATION; - } else if (_shouldSignOut) { - return SIGN_OUT_IF_NEEDED; - } else { - return SIGN_IN; } + return SIGN_OUT_IF_NEEDED; case SHOW_MANAGED_CONFIRMATION: if (_shouldConvertPersonalProfileToManaged) { return CONVERT_PERSONAL_PROFILE_TO_MANAGED; - } else if (_shouldSignOut) { - return SIGN_OUT_IF_NEEDED; - } else { - return SIGN_IN; } + return SIGN_OUT_IF_NEEDED; case CONVERT_PERSONAL_PROFILE_TO_MANAGED: - return SIGN_IN; + return SIGN_OUT_IF_NEEDED; case SIGN_OUT_IF_NEEDED: return SIGN_IN; case SIGN_IN: - if (self.postSignInActions.Has(PostSignInAction::kShowSnackbar)) { - _shouldShowSigninSnackbar = YES; - } - if (_shouldFetchUserPolicy) { + if (policy::IsAnyUserPolicyFeatureEnabled() && + _identityToSignInHostedDomain.length > 0) { return REGISTER_FOR_USER_POLICY; } else if ([self shouldFetchCapabilities]) { return FETCH_CAPABILITIES; @@ -366,7 +330,9 @@ } } -- (void)continueSignin { +// Continues the sign-in state machine starting from `_state` and invokes +// `_signInCompletion` when finished. +- (void)continueFlow { ProfileIOS* profile = [self originalProfile]; if (self.handlingError) { // The flow should not continue while the error is being handled, e.g. while @@ -378,11 +344,6 @@ case BEGIN: NOTREACHED(); - case CHECK_SIGNIN_STEPS: - [self checkSigninSteps]; - [self continueSignin]; - return; - case FETCH_MANAGED_STATUS: [_performer fetchManagedStatus:profile forIdentity:_identityToSignIn]; return; @@ -405,9 +366,7 @@ } case SIGN_OUT_IF_NEEDED: - // TODO(crbug.com/375605482): skip sign out if there is a profile - // switching. - [_performer signOutProfile:profile]; + [self signOutIfNeededStep]; return; case SIGN_IN: @@ -457,7 +416,7 @@ dispatch_async(dispatch_get_main_queue(), ^{ self->_selfRetainer = nil; }); - [self continueSignin]; + [self continueFlow]; return; } case DONE: @@ -466,17 +425,20 @@ NOTREACHED(); } -- (void)checkSigninSteps { +// Signs out, if the user is already signed in with a different identity. +// Otherwise, this step does nothing and the flow continues to the next step. +- (void)signOutIfNeededStep { + ProfileIOS* profile = [self originalProfile]; id<SystemIdentity> currentIdentity = - AuthenticationServiceFactory::GetForProfile([self originalProfile]) - ->GetPrimaryIdentity(signin::ConsentLevel::kSignin); + AuthenticationServiceFactory::GetForProfile(profile)->GetPrimaryIdentity( + signin::ConsentLevel::kSignin); if (currentIdentity && ![currentIdentity isEqual:_identityToSignIn]) { - // If the identity to sign-in is different than the current identity, - // sign-out is required. - _shouldSignOut = YES; + // TODO(crbug.com/375605482): skip sign out if there is a profile + // switching. + [_performer signOutProfile:profile]; + return; } - _alreadySignedInWithTheSameAccount = - [currentIdentity isEqual:_identityToSignIn]; + [self continueFlow]; } - (void)multiProfileSignIn { @@ -537,10 +499,11 @@ signin::Tribool capability) { // The capability value is ignored. - [weakSelf continueSignin]; + [weakSelf continueFlow]; })]; } +// Runs `_signInCompletion` asynchronously with `result` argument. - (void)completeSignInWithResult:(SigninCoordinatorResult)result { DCHECK(_signInCompletion) << "`completeSignInWithResult` should not be called twice."; @@ -555,18 +518,20 @@ _signInCompletion = nil; signInCompletion(result); } - if (_shouldShowSigninSnackbar) { + if (self.postSignInActions.Has(PostSignInAction::kShowSnackbar) && + result == SigninCoordinatorResult::SigninCoordinatorResultSuccess) { [_performer completePostSignInActions:_postSignInActions withIdentity:_identityToSignIn browser:_browser]; } - [self continueSignin]; + [self continueFlow]; } - (BOOL)canceled { return _cancelationReason != CancelationReason::kNotCanceled; } +// Cancels the current sign-in flow. - (void)cancelFlowWithReason:(CancelationReason)reason { CHECK_NE(reason, CancelationReason::kNotCanceled); if ([self canceled]) { @@ -574,9 +539,10 @@ return; } _cancelationReason = reason; - [self continueSignin]; + [self continueFlow]; } +// Handles an authentication error and show an alert to the user. - (void)handleAuthenticationError:(NSError*)error { if ([self canceled]) { // Avoid double handling of cancel or error. @@ -593,7 +559,7 @@ return; } [strongSelf setHandlingError:NO]; - [strongSelf continueSignin]; + [strongSelf continueFlow]; } viewController:_presentingViewController browser:_browser]; @@ -602,21 +568,17 @@ #pragma mark AuthenticationFlowPerformerDelegate - (void)didSignOut { - [self continueSignin]; + [self continueFlow]; } - (void)didClearData { - [self continueSignin]; + [self continueFlow]; } - (void)didFetchManagedStatus:(NSString*)hostedDomain { DCHECK_EQ(FETCH_MANAGED_STATUS, _state); - _shouldShowManagedConfirmation = - [self ShouldShowManagedConfirmationForHostedDomain:hostedDomain]; _identityToSignInHostedDomain = hostedDomain; - _shouldFetchUserPolicy = - [self shouldFetchUserPolicy] && hostedDomain.length > 0; - [self continueSignin]; + [self continueFlow]; } - (void)didFailFetchManagedStatus:(NSError*)error { @@ -647,7 +609,7 @@ (!keepBrowsingDataSeparate || _accessPoint == signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE); - [self continueSignin]; + [self continueFlow]; } - (void)didCancelManagedConfirmation { @@ -663,17 +625,17 @@ _dmToken = dmToken; _clientID = clientID; _userAffiliationIDs = userAffiliationIDs; - [self continueSignin]; + [self continueFlow]; } - (void)didFetchUserPolicyWithSuccess:(BOOL)success { DCHECK_EQ(FETCH_USER_POLICY, _state); DLOG_IF(ERROR, !success) << "Error fetching policy for user"; - [self continueSignin]; + [self continueFlow]; } - (void)didMakePersonalProfileManaged { - [self continueSignin]; + [self continueFlow]; } #pragma mark - Private methods @@ -690,18 +652,6 @@ return [self originalProfile]->GetPrefs(); } -// Returns YES if the managed confirmation dialog should be shown for the -// hosted domain. -- (BOOL)ShouldShowManagedConfirmationForHostedDomain:(NSString*)hostedDomain { - return ShouldShowManagedConfirmationForHostedDomain( - hostedDomain, _accessPoint, _identityToSignIn.gaiaID, [self prefs]); -} - -// Returns YES if should fetch user policy. -- (BOOL)shouldFetchUserPolicy { - return policy::IsAnyUserPolicyFeatureEnabled(); -} - // Return YES if capabilities should be fetched for the History Sync screen. - (BOOL)shouldFetchCapabilities { if (!self.precedingHistorySync) { @@ -754,7 +704,7 @@ atAccessPoint:self.accessPoint currentProfile:profile]; _didSignIn = YES; - [self continueSignin]; + [self continueFlow]; } #pragma mark - Used for testing
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h similarity index 89% rename from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h index 4eeb5a1b5..74b450a 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_H_ #import <UIKit/UIKit.h> #import "base/functional/callback_forward.h" #import "base/ios/block_types.h" #import "components/signin/public/base/signin_metrics.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" class Browser; @protocol ChangeProfileCommands; @@ -104,4 +104,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_H_
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.mm rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.mm index a145ac7..b194a3f0 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h" #import <MaterialComponents/MaterialSnackbar.h> @@ -26,6 +26,9 @@ #import "google_apis/gaia/gaia_auth_util.h" #import "google_apis/gaia/gaia_urls.h" #import "ios/chrome/app/change_profile_commands.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h" #import "ios/chrome/browser/policy/model/cloud/user_policy_signin_service.h" #import "ios/chrome/browser/policy/model/cloud/user_policy_signin_service_factory.h" #import "ios/chrome/browser/policy/model/cloud/user_policy_switch.h" @@ -50,9 +53,6 @@ #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/web/public/web_state.h"
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_delegate.h b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_delegate.h similarity index 82% rename from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_delegate.h index 418fed3..02cd3ae 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_DELEGATE_H_ #import <Foundation/Foundation.h> @@ -49,4 +49,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_FLOW_AUTHENTICATION_FLOW_PERFORMER_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_unittest.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_unittest.mm index 0aa08e77..2d9249f1 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h" #import <objc/runtime.h>
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_unittest.mm similarity index 97% copy from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_unittest.mm copy to ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_unittest.mm index 07f2678d..835f359d 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" #import <memory> @@ -23,6 +23,7 @@ #import "components/signin/public/identity_manager/tribool.h" #import "components/sync_preferences/pref_service_mock_factory.h" #import "components/sync_preferences/pref_service_syncable.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/policy/model/cloud/user_policy_constants.h" #import "ios/chrome/browser/policy/model/enterprise_policy_test_helper.h" @@ -38,7 +39,6 @@ #import "ios/chrome/browser/signin/model/fake_authentication_service_delegate.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/gtest_mac.h" @@ -53,8 +53,9 @@ NSString* const kFakeClientID = @"fake_client_id"; NSString* const kFakeUserAffiliationID = @"fake_user_affiliation_id"; -// Duplicated from ios/chrome/browser/ui/authentication/authentication_flow.mm, -// which is fine since the enum values should never be renumbered. +// Duplicated from +// ios/chrome/browser/authentication/ui_bundled/authentication_flow.mm, which +// is fine since the enum values should never be renumbered. enum class SigninAccountType { kRegular = 0, kManaged = 1,
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_flow_unittest.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/authentication_flow_unittest.mm index 07f2678d..9e7eee17 100644 --- a/ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow.h" #import <memory> @@ -23,6 +23,7 @@ #import "components/signin/public/identity_manager/tribool.h" #import "components/sync_preferences/pref_service_mock_factory.h" #import "components/sync_preferences/pref_service_syncable.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow_performer.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/policy/model/cloud/user_policy_constants.h" #import "ios/chrome/browser/policy/model/enterprise_policy_test_helper.h" @@ -38,7 +39,6 @@ #import "ios/chrome/browser/signin/model/fake_authentication_service_delegate.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow_performer.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/gtest_mac.h" @@ -53,8 +53,9 @@ NSString* const kFakeClientID = @"fake_client_id"; NSString* const kFakeUserAffiliationID = @"fake_user_affiliation_id"; -// Duplicated from ios/chrome/browser/ui/authentication/authentication_flow.mm, -// which is fine since the enum values should never be renumbered. +// Duplicated from +// ios/chrome/browser/authentication/ui_bundled/authentication_flow.mm, which is +// fine since the enum values should never be renumbered. enum class SigninAccountType { kRegular = 0, kManaged = 1,
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util.h b/ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h similarity index 92% rename from ios/chrome/browser/ui/authentication/authentication_ui_util.h rename to ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h index 5fb9f94..0fb27099 100644 --- a/ios/chrome/browser/ui/authentication/authentication_ui_util.h +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_UI_UTIL_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_UI_UTIL_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_UI_UTIL_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_UI_UTIL_H_ #import <UIKit/UIKit.h> @@ -82,4 +82,4 @@ NSString* gaia_ID, PrefService* prefs); -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_AUTHENTICATION_UI_UTIL_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_AUTHENTICATION_UI_UTIL_H_
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/authentication_ui_util.mm rename to ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.mm index 76abfadd..05fc744b 100644 --- a/ios/chrome/browser/ui/authentication/authentication_ui_util.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" #import "base/check.h" #import "base/format_macros.h"
diff --git a/ios/chrome/browser/ui/authentication/authentication_ui_util_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_ui_util_unittest.mm similarity index 68% rename from ios/chrome/browser/ui/authentication/authentication_ui_util_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/authentication_ui_util_unittest.mm index 231768a..dfd95cc 100644 --- a/ios/chrome/browser/ui/authentication/authentication_ui_util_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_ui_util_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" #import "testing/platform_test.h" @@ -18,7 +18,7 @@ EXPECT_TRUE([message containsString:error.domain]); EXPECT_TRUE([message containsString:[@(error.code) description]]); } -} +} // namespace using AuthenticationUIUtil = PlatformTest; @@ -26,8 +26,9 @@ TEST_F(AuthenticationUIUtil, DialogMessageFromErrorWithLocalizedDescription) { NSDictionary* userInfo = @{NSLocalizedDescriptionKey : @"MyLocalizedDescription"}; - NSError* error = - [NSError errorWithDomain:@"MyErrorDomain" code:-1234 userInfo:userInfo]; + NSError* error = [NSError errorWithDomain:@"MyErrorDomain" + code:-1234 + userInfo:userInfo]; NSString* message = DialogMessageFromError(error); ExpectErrorInMessage(error, message, YES); } @@ -35,8 +36,9 @@ // Tests the error message with one error without a localized description. TEST_F(AuthenticationUIUtil, DialogMessageFromErrorWithoutLocalizedDescription) { - NSError* error = - [NSError errorWithDomain:@"MyErrorDomain" code:-1234 userInfo:nil]; + NSError* error = [NSError errorWithDomain:@"MyErrorDomain" + code:-1234 + userInfo:nil]; NSString* message = DialogMessageFromError(error); ExpectErrorInMessage(error, message, NO); } @@ -46,24 +48,27 @@ // Error 1 NSDictionary* userInfo1 = @{NSLocalizedDescriptionKey : @"MyLocalizedDescription1"}; - NSError* error1 = - [NSError errorWithDomain:@"MyErrorDomain1" code:-1234 userInfo:userInfo1]; + NSError* error1 = [NSError errorWithDomain:@"MyErrorDomain1" + code:-1234 + userInfo:userInfo1]; // Error 2 NSDictionary* userInfo2 = @{ NSLocalizedDescriptionKey : @"MyLocalizedDescription2", NSUnderlyingErrorKey : error1 }; - NSError* error2 = - [NSError errorWithDomain:@"MyErrorDomain2" code:-567 userInfo:userInfo2]; + NSError* error2 = [NSError errorWithDomain:@"MyErrorDomain2" + code:-567 + userInfo:userInfo2]; // Error 3 NSDictionary* userInfo3 = @{ NSLocalizedDescriptionKey : @"MyLocalizedDescription3", NSUnderlyingErrorKey : error2 }; - NSError* error3 = - [NSError errorWithDomain:@"MyErrorDomain3" code:-890 userInfo:userInfo3]; + NSError* error3 = [NSError errorWithDomain:@"MyErrorDomain3" + code:-890 + userInfo:userInfo3]; NSString* message = DialogMessageFromError(error3); ExpectErrorInMessage(error3, message, YES);
diff --git a/ios/chrome/browser/ui/authentication/cells/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/cells/BUILD.gn similarity index 95% rename from ios/chrome/browser/ui/authentication/cells/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/cells/BUILD.gn index 5a623f8..f791798 100644 --- a/ios/chrome/browser/ui/authentication/cells/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/cells/BUILD.gn
@@ -27,6 +27,7 @@ "//base", "//build:branding_buildflags", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/ntp/ui_bundled", "//ios/chrome/browser/policy/model", "//ios/chrome/browser/settings/ui_bundled/cells:public", @@ -36,7 +37,6 @@ "//ios/chrome/browser/shared/ui/table_view:styler", "//ios/chrome/browser/signin/model:constants", "//ios/chrome/browser/signin/model:signin_util", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/table_view:cells_constants", "//ios/chrome/common/ui/util", @@ -46,8 +46,8 @@ ] public_deps = [ ":constants", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/shared/ui/table_view/cells", - "//ios/chrome/browser/ui/authentication/views:views_constants", ] frameworks = [ "UIKit.framework" ] }
diff --git a/ios/chrome/browser/ui/authentication/cells/central_account_view.h b/ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h similarity index 82% rename from ios/chrome/browser/ui/authentication/cells/central_account_view.h rename to ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h index cf3708d..a575f3d 100644 --- a/ios/chrome/browser/ui/authentication/cells/central_account_view.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_CENTRAL_ACCOUNT_VIEW_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_CENTRAL_ACCOUNT_VIEW_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_CENTRAL_ACCOUNT_VIEW_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_CENTRAL_ACCOUNT_VIEW_H_ #import <UIKit/UIKit.h> @@ -39,4 +39,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_CENTRAL_ACCOUNT_VIEW_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_CENTRAL_ACCOUNT_VIEW_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/central_account_view.mm b/ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/cells/central_account_view.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.mm index 8fd7b11d..2dca8c4d 100644 --- a/ios/chrome/browser/ui/authentication/cells/central_account_view.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/central_account_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h" #import "base/apple/foundation_util.h" #import "base/check_op.h"
diff --git a/ios/chrome/browser/ui/authentication/cells/central_account_view_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/cells/central_account_view_unittest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/cells/central_account_view_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/central_account_view_unittest.mm index fce8bc4..db5865f6 100644 --- a/ios/chrome/browser/ui/authentication/cells/central_account_view_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/central_account_view_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/central_account_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h" #import <CoreGraphics/CoreGraphics.h> #import <UIKit/UIKit.h>
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.h b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h similarity index 88% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view.h rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h index 632c101b..b7056ba6 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" @protocol SigninPromoViewDelegate; @@ -71,4 +71,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.mm b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.mm index fa644666..2012b14 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" #import "base/apple/foundation_util.h" #import "base/check_op.h" @@ -10,11 +10,11 @@ #import "base/notreached.h" #import "build/branding_buildflags.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_delegate.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_delegate.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/common/ui/util/pointer_interaction_util.h" @@ -103,7 +103,7 @@ constexpr CGFloat kProfileImageCompactHeightWidth = 48.0; constexpr CGFloat kNonProfileLogoImageCompactHeightWidth = 34.0; constexpr CGFloat kNonProfileBackgroundImageCompactHeightWidth = 54.0; -} +} // namespace @interface SigninPromoView () // Re-declare as readwrite.
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h similarity index 81% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h index 3c0370d3..e6e87d27 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h
@@ -2,11 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONFIGURATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONFIGURATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONFIGURATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONFIGURATOR_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" + +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" @class SigninPromoView; @@ -41,4 +42,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONFIGURATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONFIGURATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.mm index 2875f5c..8212a71 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.mm
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" #import "base/notreached.h" #import "base/strings/sys_string_conversions.h" #import "build/branding_buildflags.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/signin/model/constants.h" #import "ios/chrome/browser/signin/model/signin_util.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" #import "ios/chrome/common/ui/util/image_util.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h similarity index 85% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h index a0a36f9..b42ed95 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONSTANTS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONSTANTS_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONSTANTS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONSTANTS_H_ #import <Foundation/Foundation.h> @@ -38,4 +38,4 @@ extern NSString* const kSigninPromoCloseButtonId; extern NSString* const kSigninPromoActivityIndicatorId; -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONSTANTS_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.mm b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.mm similarity index 84% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.mm index 38edf13..461f2b6 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" NSString* const kSigninPromoViewId = @"SigninPromoViewId"; NSString* const kSigninPromoPrimaryButtonId = @"SigninPromoPrimaryButtonId";
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h similarity index 81% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h index 4faf095..5638f17 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONSUMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONSUMER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONSUMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONSUMER_H_ #import <Foundation/Foundation.h> @@ -38,4 +38,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_CONSUMER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_delegate.h b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_delegate.h similarity index 77% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_delegate.h index fa16f0d..f1bfed4e 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_DELEGATE_H_ #import <UIKit/UIKit.h> @@ -29,4 +29,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_SIGNIN_PROMO_VIEW_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_SIGNIN_PROMO_VIEW_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_unittest.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/cells/signin_promo_view_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_unittest.mm index 34254c1d9..a488df4 100644 --- a/ios/chrome/browser/ui/authentication/cells/signin_promo_view_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_unittest.mm
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" #import <MaterialComponents/MaterialOverlayWindow.h> +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/signin/model/signin_util.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" #import "ios/chrome/common/ui/util/image_util.h" #import "ios/public/provider/chrome/browser/signin/signin_resources_api.h" #import "testing/gtest_mac.h"
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_account_item.h b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h similarity index 89% rename from ios/chrome/browser/ui/authentication/cells/table_view_account_item.h rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h index 042e4fd..7119ac5 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_account_item.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_ACCOUNT_ITEM_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_ACCOUNT_ITEM_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_ACCOUNT_ITEM_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_ACCOUNT_ITEM_H_ #import <UIKit/UIKit.h> @@ -63,4 +63,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_ACCOUNT_ITEM_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_ACCOUNT_ITEM_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_account_item.mm b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/cells/table_view_account_item.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.mm index 1214f5c..c7aaa2c 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_account_item.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" #import "base/apple/foundation_util.h" #import "ios/chrome/browser/settings/ui_bundled/cells/settings_cells_constants.h"
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_account_item_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item_unittest.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/cells/table_view_account_item_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item_unittest.mm index 48c02bde..cb65469 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_account_item_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" #import <CoreGraphics/CoreGraphics.h> #import <UIKit/UIKit.h>
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.h b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.h similarity index 76% rename from ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.h rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.h index f052c7c9..40e768ee 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_IDENTITY_CELL_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_IDENTITY_CELL_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_IDENTITY_CELL_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_IDENTITY_CELL_H_ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_cell.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" @class IdentityView; @@ -34,4 +34,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_IDENTITY_CELL_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_IDENTITY_CELL_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.mm b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.mm index 7a16f531..96b7916 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.mm
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.h" -#import "ios/chrome/browser/ui/authentication/views/identity_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_view.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/common/ui/util/pointer_interaction_util.h"
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h similarity index 69% rename from ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h index 1d7a30a..b6fd54d1 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_IDENTITY_ITEM_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_IDENTITY_ITEM_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_IDENTITY_ITEM_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_IDENTITY_ITEM_H_ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_item.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" // TableViewIdentityItem holds the model data for an identity. @interface TableViewIdentityItem : TableViewItem @@ -28,4 +28,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_IDENTITY_ITEM_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_IDENTITY_ITEM_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_identity_item.mm b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.mm similarity index 87% rename from ios/chrome/browser/ui/authentication/cells/table_view_identity_item.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.mm index 605147eb..35ecac60 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_identity_item.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.mm
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @implementation TableViewIdentityItem
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h similarity index 78% rename from ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h index 8ac3fbb..a716f18 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_SIGNIN_PROMO_ITEM_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_SIGNIN_PROMO_ITEM_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_SIGNIN_PROMO_ITEM_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_SIGNIN_PROMO_ITEM_H_ #import <UIKit/UIKit.h> @@ -29,4 +29,4 @@ @property(nonatomic, strong) SigninPromoView* signinPromoView; @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CELLS_TABLE_VIEW_SIGNIN_PROMO_ITEM_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CELLS_TABLE_VIEW_SIGNIN_PROMO_ITEM_H_
diff --git a/ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.mm b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.mm similarity index 86% rename from ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.mm rename to ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.mm index 0ff4cf67..482a4d9 100644 --- a/ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.mm +++ b/ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.mm
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h" #import "base/apple/foundation_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_styler.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" namespace { // The inner insets of the View content. const CGFloat kMargin = 16; -} +} // namespace #pragma mark - TableViewSigninPromoItem @@ -37,8 +37,9 @@ [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; [self.configurator configureSigninPromoView:cell.signinPromoView withStyle:SigninPromoViewStyleStandard]; - if (styler.cellTitleColor) + if (styler.cellTitleColor) { cell.signinPromoView.textLabel.textColor = styler.cellTitleColor; + } } @end
diff --git a/ios/chrome/browser/ui/authentication/change_profile/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/change_profile/BUILD.gn similarity index 91% rename from ios/chrome/browser/ui/authentication/change_profile/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/change_profile/BUILD.gn index ed30961..ad7f0cd 100644 --- a/ios/chrome/browser/ui/authentication/change_profile/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/BUILD.gn
@@ -17,10 +17,10 @@ "//ios/chrome/app:change_profile_commands", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", ] }
diff --git a/ios/chrome/browser/ui/authentication/change_profile/OWNERS b/ios/chrome/browser/authentication/ui_bundled/change_profile/OWNERS similarity index 100% rename from ios/chrome/browser/ui/authentication/change_profile/OWNERS rename to ios/chrome/browser/authentication/ui_bundled/change_profile/OWNERS
diff --git a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h new file mode 100644 index 0000000..6b98928 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h
@@ -0,0 +1,21 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_ + +#import <UIKit/UIKit.h> + +#import "base/ios/block_types.h" + +@class SceneState; + +@protocol ChangeProfileContinuation <NSObject> + +- (void)executeWithSceneState:(SceneState*)sceneState + completion:(ProceduralBlock)completion; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_
diff --git a/ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.h b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h similarity index 67% rename from ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.h rename to ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h index a83c5a9e..ab9d394 100644 --- a/ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.h +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_ #import <UIKit/UIKit.h> @@ -20,4 +20,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_
diff --git a/ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.mm b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.mm similarity index 88% rename from ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.mm rename to ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.mm index 4484e0aa..cd2b57a 100644 --- a/ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.mm +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.mm
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h" #import "base/ios/block_types.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_continuation.h" @implementation ChangeProfileObserver { NSArray<id<ChangeProfileContinuation>>* _continuations;
diff --git a/ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.h b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h similarity index 65% rename from ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.h rename to ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h index d7710e4..279e3ff 100644 --- a/ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.h +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_SIGNOUT_CONTINUATION_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_SIGNOUT_CONTINUATION_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_SIGNOUT_CONTINUATION_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_SIGNOUT_CONTINUATION_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_continuation.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h" @class MDCSnackbarMessage; @@ -27,4 +27,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_SIGNOUT_CONTINUATION_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_SIGNOUT_CONTINUATION_H_
diff --git a/ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.mm b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.mm rename to ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.mm index a5f01ea5..eda5866 100644 --- a/ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.mm +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.mm
@@ -2,8 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/browser/browser_provider.h" @@ -12,7 +13,6 @@ #import "ios/chrome/browser/shared/public/commands/snackbar_commands.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" namespace {
diff --git a/ios/chrome/browser/ui/authentication/enterprise/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/enterprise/BUILD.gn similarity index 100% rename from ios/chrome/browser/ui/authentication/enterprise/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/enterprise/BUILD.gn
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/BUILD.gn similarity index 100% rename from ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/BUILD.gn
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h similarity index 73% rename from ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h index f0efa5a..ad4dc9b4 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_COORDINATOR_H_ #import <Foundation/Foundation.h> +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_type.h" #import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_type.h" // Delegate for the coordinator. @protocol EnterprisePromptCoordinatorDelegate @@ -36,4 +36,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.mm index 0268718e..d338128 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.mm
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/shared/public/commands/open_new_tab_command.h" #import "ios/chrome/browser/shared/public/commands/policy_change_commands.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h" #import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_action_handler.h" #import "url/gurl.h"
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_type.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_type.h similarity index 64% rename from ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_type.h rename to ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_type.h index 3f0651d7..1cb77b9 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_type.h +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_type.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_TYPE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_TYPE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_TYPE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_TYPE_H_ #import <Foundation/Foundation.h> @@ -17,4 +17,4 @@ EnterprisePromptTypeSyncDisabled, }; -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_TYPE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_TYPE_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h new file mode 100644 index 0000000..4a723d5 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h
@@ -0,0 +1,19 @@ +// Copyright 2022 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_VIEW_CONTROLLER_H_ + +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_type.h" +#import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h" + +// ViewController that contains enterprise prompt information. +@interface EnterprisePromptViewController : ConfirmationAlertViewController + +// Initializes this alert with its `promptType`. +- (instancetype)initWithpromptType:(EnterprisePromptType)promptType; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.mm index 4fbba11f..9001684 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h new file mode 100644 index 0000000..9f77f2d --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h
@@ -0,0 +1,13 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_UTILS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_UTILS_H_ + +#import <UIKit/UIKit.h> + +// Returns YES if some account restrictions are set. +bool IsRestrictAccountsToPatternsEnabled(); + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_ENTERPRISE_UTILS_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.mm similarity index 86% rename from ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm rename to ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.mm index f8108bc..9942324 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" #import "base/values.h" #import "components/prefs/pref_service.h"
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/BUILD.gn similarity index 95% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/BUILD.gn index 8c9faf3..bd590cf6 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/BUILD.gn
@@ -18,6 +18,7 @@ "//components/signin/public/base:base", "//components/signin/public/identity_manager:identity_manager", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/shared/coordinator/chrome_coordinator:chrome_coordinator", "//ios/chrome/browser/shared/model/application_context:application_context", "//ios/chrome/browser/shared/model/browser:browser", @@ -29,7 +30,6 @@ "//ios/chrome/browser/shared/ui/table_view:table_view", "//ios/chrome/browser/shared/ui/table_view:utils", "//ios/chrome/browser/signin/model:model", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common:string_util", "//ios/chrome/common/ui/colors:colors", "//ios/chrome/common/ui/promo_style:promo_style",
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h similarity index 70% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h index e71183c..13562d9 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_BROWSING_DATA_MIGRATION_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_BROWSING_DATA_MIGRATION_VIEW_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_BROWSING_DATA_MIGRATION_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_BROWSING_DATA_MIGRATION_VIEW_CONTROLLER_H_ #import <UIKit/UIKit.h> @@ -31,4 +31,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_BROWSING_DATA_MIGRATION_VIEW_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_BROWSING_DATA_MIGRATION_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.mm index 0f8b522..8fb5dcb 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.mm
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h" #import "base/apple/foundation_util.h" #import "base/notreached.h" #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/shared/ui/list_model/list_model.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_info_button_cell.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/shared/ui/table_view/chrome_table_view_controller.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_consumer.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_consumer.h new file mode 100644 index 0000000..a41dae76 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_consumer.h
@@ -0,0 +1,19 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_CONSUMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_CONSUMER_H_ + +#import <UIKit/UIKit.h> + +// Handles managed profile creation screen UI updates. +@protocol ManagedProfileCreationConsumer <NSObject> + +@property(nonatomic, assign) BOOL canShowBrowsingDataMigration; + +- (void)setKeepBrowsingDataSeparate:(BOOL)keepSeparate; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h similarity index 81% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h index fafe2ed..b4c02e1 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_COORDINATOR_H_ #import "base/ios/block_types.h" #import "components/signin/public/base/signin_metrics.h" @@ -43,4 +43,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.mm similarity index 91% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.mm index b5a0bb6..d54689f 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.mm
@@ -2,19 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h" #import "base/apple/foundation_util.h" #import "base/ios/block_types.h" #import "base/strings/sys_string_conversions.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h" -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.h" -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h" @interface ManagedProfileCreationCoordinator () < ManagedProfileCreationViewControllerDelegate,
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.h similarity index 64% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.h index 72e8da4..1b18cc3 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_MEDIATOR_H_ #import <Foundation/Foundation.h> #import "base/ios/block_types.h" #import "components/signin/public/base/signin_metrics.h" -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/browsing_data_migration_view_controller.h" @protocol ManagedProfileCreationConsumer; @@ -35,4 +35,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.mm similarity index 89% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.mm index dd104a9..1f19da3 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.mm
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_mediator.h" #import "components/signin/public/base/consent_level.h" #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_consumer.h" #import "ios/chrome/browser/shared/public/features/features.h" -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_consumer.h" @interface ManagedProfileCreationMediator () { BOOL _canShowBrowsingDataMigration;
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h similarity index 66% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h index 04c715e..b0d44e2 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_VIEW_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_VIEW_CONTROLLER_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_consumer.h" #import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" // Delegate of Managed profile creation view controller. @@ -34,4 +34,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_VIEW_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.mm index 911e2fa..a2dfb8a 100644 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.mm
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_view_controller.h" #import "base/notreached.h" #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/shared/ui/list_model/list_model.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_multi_detail_text_item.h" #import "ios/chrome/browser/shared/ui/table_view/chrome_table_view_controller.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h"
diff --git a/ios/chrome/browser/ui/authentication/history_sync/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/history_sync/BUILD.gn similarity index 83% rename from ios/chrome/browser/ui/authentication/history_sync/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/history_sync/BUILD.gn index 2781a5d..ebe2445f 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/BUILD.gn
@@ -28,6 +28,10 @@ "//components/signin/public/identity_manager/objc", "//components/sync/service", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/history_sync/resources", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/first_run/model", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/profile", @@ -37,14 +41,10 @@ "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/history_sync/resources", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common/ui/promo_style:promo_style", "//ui/base", ] - public_deps = [ "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator" ] + public_deps = [ "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator" ] } source_set("ui") { @@ -59,10 +59,10 @@ "//components/signin/public/base:signin_switches", "//components/signin/public/identity_manager", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/elements:elements_internal", "//ios/chrome/browser/shared/ui/symbols", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common/ui/promo_style", "//ios/chrome/common/ui/util", "//ui/base", @@ -79,7 +79,7 @@ "//components/signin/public/base:signin_switches", "//components/signin/public/identity_manager", "//components/signin/public/identity_manager/objc", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", ] } @@ -102,8 +102,8 @@ "//components/signin/public/identity_manager", "//components/signin/public/identity_manager:test_support", "//components/signin/public/identity_manager/objc", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/shared/model/profile/test", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/web/public/test", "//testing/gtest", ]
diff --git a/ios/chrome/browser/ui/authentication/history_sync/OWNERS b/ios/chrome/browser/authentication/ui_bundled/history_sync/OWNERS similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/OWNERS rename to ios/chrome/browser/authentication/ui_bundled/history_sync/OWNERS
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.h similarity index 78% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.h rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.h index 45d1072..689b93b 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.h +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_CAPABILITIES_FETCHER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_CAPABILITIES_FETCHER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_CAPABILITIES_FETCHER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_CAPABILITIES_FETCHER_H_ #import <Foundation/Foundation.h> @@ -40,4 +40,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_CAPABILITIES_FETCHER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_CAPABILITIES_FETCHER_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.mm b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.mm rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.mm index ddb5ad42..23eb1023 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.mm +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.h" #import "base/check.h" #import "base/check_op.h" @@ -16,7 +16,7 @@ #import "components/signin/public/identity_manager/account_info.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" using signin::Tribool;
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher_unittest.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher_unittest.mm index 5eb700d9..9bf0985 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.h" #import "base/run_loop.h" #import "base/test/bind.h" @@ -15,8 +15,8 @@ #import "components/signin/public/identity_manager/identity_test_environment.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "components/signin/public/identity_manager/tribool.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/platform_test.h"
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_consumer.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_consumer.h similarity index 74% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_consumer.h rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_consumer.h index 10e25d5..d897f11 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_consumer.h +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_consumer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_CONSUMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_CONSUMER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_CONSUMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_CONSUMER_H_ #import <UIKit/UIKit.h> @@ -27,4 +27,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_CONSUMER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h similarity index 83% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h index 76b280a..d62a1ae3 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_COORDINATOR_H_ #import "base/ios/block_types.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" @class HistorySyncCoordinator; namespace history_sync { @@ -16,7 +16,6 @@ enum class AccessPoint : int; } // namespace signin_metrics - // Delegate for the history sync coordinator. @protocol HistorySyncCoordinatorDelegate <NSObject> @@ -55,4 +54,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.mm index cdb5248..ab203e73 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" #import "base/memory/raw_ptr.h" #import "base/metrics/histogram_functions.h" @@ -11,6 +11,11 @@ #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/first_run/model/first_run_metrics.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" @@ -19,11 +24,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" @interface HistorySyncCoordinator () <HistorySyncMediatorDelegate,
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.h similarity index 84% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.h index 481b1b0..b6ed28b 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_MEDIATOR_H_ #import <UIKit/UIKit.h> @@ -55,4 +55,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.mm index 03d6496..93cd4c5 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_mediator.h" #import "base/check.h" #import "base/check_op.h" @@ -13,12 +13,12 @@ #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_capabilities_fetcher.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_consumer.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_capabilities_fetcher.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_consumer.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h similarity index 81% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h index 4a9b872c..d49c9c9a 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_POPUP_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_POPUP_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_POPUP_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_POPUP_COORDINATOR_H_ -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" namespace signin_metrics { enum class AccessPoint : int; @@ -46,4 +46,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_POPUP_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_POPUP_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.mm index eb1b516..b2a7d0f 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h" #import <UIKit/UIKit.h> @@ -10,15 +10,15 @@ #import "base/memory/raw_ptr.h" #import "base/metrics/user_metrics.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" @interface HistorySyncPopupCoordinator () < HistorySyncCoordinatorDelegate,
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h similarity index 85% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h index c5196dd..87b2ab0 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_UTILS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_UTILS_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_UTILS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_UTILS_H_ class AuthenticationService; class PrefService; @@ -51,4 +51,4 @@ } // namespace history_sync -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_UTILS_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_UTILS_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.mm b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.mm rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.mm index 4485424..720dac0e 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.mm +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" #import "base/time/time.h" #import "components/pref_registry/pref_registry_syncable.h" @@ -10,9 +10,9 @@ #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.h" #import "ios/chrome/browser/shared/public/features/system_flags.h" #import "ios/chrome/browser/signin/model/authentication_service.h" -#import "ios/chrome/browser/ui/authentication/history_sync/pref_names.h" namespace {
diff --git a/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.h new file mode 100644 index 0000000..5c537a4 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.h
@@ -0,0 +1,17 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_VIEW_CONTROLLER_H_ + +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_consumer.h" +#import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" + +// View controller for history sync. +@interface HistorySyncViewController + : PromoStyleViewController <HistorySyncConsumer> + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_HISTORY_SYNC_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.mm index b5fa59d8..d8651d3 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.mm
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.h" #import "base/metrics/histogram_functions.h" #import "base/notreached.h" #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/tribool.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/history_sync/pref_names.cc b/ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.cc similarity index 90% rename from ios/chrome/browser/ui/authentication/history_sync/pref_names.cc rename to ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.cc index 923182e..aaa32ef 100644 --- a/ios/chrome/browser/ui/authentication/history_sync/pref_names.cc +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ios/chrome/browser/ui/authentication/history_sync/pref_names.h" +#include "ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.h" namespace history_sync_prefs {
diff --git a/ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.h b/ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.h new file mode 100644 index 0000000..894e4c0 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.h
@@ -0,0 +1,15 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_PREF_NAMES_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_PREF_NAMES_H_ + +namespace history_sync_prefs { + +extern const char kHistorySyncSuccessiveDeclineCount[]; +extern const char kHistorySyncLastDeclinedTimestamp[]; + +} // namespace history_sync_prefs + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_HISTORY_SYNC_PREF_NAMES_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/Contents.json b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/Contents.json b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background.pdf b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background.pdf similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background.pdf rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background.pdf
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background_dark.pdf b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background_dark.pdf similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background_dark.pdf rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/history_sync_opt_in_background.imageset/history_sync_opt_in_background_dark.pdf
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/Contents.json b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background.png b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background.png similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background.png rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@2x.png b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@2x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@2x.png rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@3x.png b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@3x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@3x.png rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark.png b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark.png similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark.png rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@2x.png b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@2x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@2x.png rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@3x.png b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@3x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@3x.png rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/Assets.xcassets/sync_opt_in_background.imageset/sync_opt_in_background_dark@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/history_sync/resources/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/history_sync/resources/BUILD.gn similarity index 100% rename from ios/chrome/browser/ui/authentication/history_sync/resources/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/history_sync/resources/BUILD.gn
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/BUILD.gn similarity index 87% rename from ios/chrome/browser/ui/authentication/identity_chooser/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/BUILD.gn index abf664d0..328a706 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/BUILD.gn
@@ -17,14 +17,14 @@ "//base", "//components/prefs", "//components/signin/public/identity_manager/objc", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/profile", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", ] } @@ -50,6 +50,9 @@ "//base:i18n", "//components/google/core/common", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/keyboard/ui_bundled", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/list_model", @@ -57,9 +60,6 @@ "//ios/chrome/browser/shared/ui/table_view:styler", "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/shared/ui/util/image", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/identity_chooser/resources", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/util", @@ -76,13 +76,13 @@ ":identity_chooser", "//base", "//base/test:test_support", + "//ios/chrome/browser/authentication/ui_bundled/identity_chooser:identity_chooser_ui", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser/test:test_support", "//ios/chrome/browser/shared/model/profile/test", "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:fake_system_identity_manager", - "//ios/chrome/browser/ui/authentication/identity_chooser:identity_chooser_ui", "//ios/chrome/test:test_support", "//ios/web/public/test", "//ios/web/public/test/fakes",
diff --git a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.h new file mode 100644 index 0000000..10b5504 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.h
@@ -0,0 +1,16 @@ +// Copyright 2018 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ADD_ACCOUNT_ITEM_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ADD_ACCOUNT_ITEM_H_ + +#import <UIKit/UIKit.h> + +#import "ios/chrome/browser/shared/ui/table_view/cells/table_view_item.h" + +// IdentityChooserAddAccountItem holds the model data for "Add Account…" cell. +@interface IdentityChooserAddAccountItem : TableViewItem +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ADD_ACCOUNT_ITEM_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.mm similarity index 86% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.mm index 5c1ed1c..a7310e5 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.mm
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.h similarity index 60% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.h rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.h index 03a9b95..da55da6 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.h +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ANIMATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ANIMATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ANIMATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ANIMATOR_H_ #import <UIKit/UIKit.h> // Animator, taking care of the animation of the IdentityChooser. @interface IdentityChooserAnimator - : NSObject<UIViewControllerAnimatedTransitioning> + : NSObject <UIViewControllerAnimatedTransitioning> // Whether the IdentityChooser is `appearing`. @property(nonatomic, assign) BOOL appearing; @@ -20,4 +20,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ANIMATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ANIMATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.mm similarity index 90% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.mm index 9a7bccc1..cd50a2b 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.h" namespace { const CGFloat kAnimationDuration = 0.25; @@ -41,8 +41,8 @@ if (self.appearing) { if (!CGPointEqualToPoint(self.origin, CGPointZero)) { - presentedView.center = - [containerView convertPoint:self.origin fromView:nil]; + presentedView.center = [containerView convertPoint:self.origin + fromView:nil]; } presentedView.alpha = 0; presentedView.transform = scaleDown;
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_consumer.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_consumer.h similarity index 67% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_consumer.h rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_consumer.h index 5f7f085..2cf7842c 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_consumer.h +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_consumer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_CONSUMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_CONSUMER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_CONSUMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_CONSUMER_H_ @class TableViewIdentityItem; @@ -21,4 +21,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_CONSUMER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.h similarity index 70% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.h index 1dc2216e..63c3950 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_H_ #import <UIKit/UIKit.h> @@ -24,4 +24,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.mm similarity index 89% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.mm index 6c174cd..9940567 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.h" #import <ostream> @@ -10,15 +10,15 @@ #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" #import "base/notreached.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller_presentation_delegate.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_delegate.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller_presentation_delegate.h" namespace { @@ -38,7 +38,7 @@ } // namespace -@interface IdentityChooserCoordinator ()< +@interface IdentityChooserCoordinator () < IdentityChooserViewControllerPresentationDelegate> // Mediator.
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_delegate.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_delegate.h similarity index 72% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_delegate.h index d2de99ea..80c4287 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_DELEGATE_H_ #import <UIKit/UIKit.h> @@ -11,7 +11,7 @@ @protocol SystemIdentity; // Delegate protocol for IdentityChooserCoordinator. -@protocol IdentityChooserCoordinatorDelegate<NSObject> +@protocol IdentityChooserCoordinatorDelegate <NSObject> // Called when the view controller is closed. - (void)identityChooserCoordinatorDidClose: @@ -31,4 +31,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_COORDINATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_unittest.mm similarity index 91% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_unittest.mm index bfcd8bf..2403ddd6 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_unittest.mm
@@ -2,19 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.h" #import <UIKit/UIKit.h> #import "base/apple/foundation_util.h" #import "base/test/task_environment.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller_presentation_delegate.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller_presentation_delegate.h" #import "ios/chrome/test/scoped_key_window.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/gtest_mac.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.h new file mode 100644 index 0000000..8bd9b211 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.h
@@ -0,0 +1,17 @@ +// Copyright 2018 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_HEADER_ITEM_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_HEADER_ITEM_H_ + +#import <UIKit/UIKit.h> + +#import "ios/chrome/browser/shared/ui/table_view/cells/table_view_header_footer_item.h" + +// IdentityChooserHeaderItem holds the model data for "Choose an Account" header +// cell. +@interface IdentityChooserHeaderItem : TableViewHeaderFooterItem +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_HEADER_ITEM_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm index de75acb..e504e24e 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h"
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.h similarity index 78% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.h index 255f111e..47e9825 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_MEDIATOR_H_ #import <UIKit/UIKit.h> @@ -42,4 +42,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.mm index 04c3748..5186b87 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.mm
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_mediator.h" #import "base/containers/contains.h" #import "base/strings/sys_string_conversions.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_consumer.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface IdentityChooserMediator () <ChromeAccountManagerServiceObserver, IdentityManagerObserverBridgeDelegate> { @@ -71,8 +71,9 @@ } - (void)setSelectedIdentity:(id<SystemIdentity>)selectedIdentity { - if ([_selectedIdentity isEqual:selectedIdentity]) + if ([_selectedIdentity isEqual:selectedIdentity]) { return; + } TableViewIdentityItem* previousSelectedItem = [self.consumer tableViewIdentityItemWithGaiaID:_selectedIdentity.gaiaID]; if (previousSelectedItem) {
diff --git a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.h new file mode 100644 index 0000000..a7cfa59 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.h
@@ -0,0 +1,16 @@ +// Copyright 2018 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_PRESENTATION_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_PRESENTATION_CONTROLLER_H_ + +#import <UIKit/UIKit.h> + +// Presentation controller for presenting the IdentityChooser. It is presenting +// it as a Modal. +@interface IdentityChooserPresentationController : UIPresentationController + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_PRESENTATION_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.mm index 3cbaba9..2df7334 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.h" #import "ios/chrome/browser/shared/ui/util/accessibility_close_menu_button.h" #import "ios/chrome/browser/shared/ui/util/image/image_util.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.h new file mode 100644 index 0000000..a0701a4 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.h
@@ -0,0 +1,19 @@ +// Copyright 2018 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_TRANSITION_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_TRANSITION_DELEGATE_H_ + +#import <UIKit/UIKit.h> + +// Transition Delegate for the IdentityChooser. It is presenting it as a modal. +@interface IdentityChooserTransitionDelegate + : NSObject <UIViewControllerTransitioningDelegate> + +// Origin of the animation. Must be in the window coordinates. +@property(nonatomic, assign) CGPoint origin; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_TRANSITION_DELEGATE_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.mm new file mode 100644 index 0000000..03f2796 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.mm
@@ -0,0 +1,44 @@ +// Copyright 2018 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_transition_delegate.h" + +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_animator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_presentation_controller.h" + +@implementation IdentityChooserTransitionDelegate + +@synthesize origin = _origin; + +#pragma mark - UIViewControllerTransitioningDelegate + +- (UIPresentationController*) + presentationControllerForPresentedViewController: + (UIViewController*)presented + presentingViewController: + (UIViewController*)presenting + sourceViewController:(UIViewController*)source { + return [[IdentityChooserPresentationController alloc] + initWithPresentedViewController:presented + presentingViewController:presenting]; +} + +- (id<UIViewControllerAnimatedTransitioning>) + animationControllerForPresentedController:(UIViewController*)presented + presentingController:(UIViewController*)presenting + sourceController:(UIViewController*)source { + IdentityChooserAnimator* animator = [[IdentityChooserAnimator alloc] init]; + animator.appearing = YES; + animator.origin = self.origin; + return animator; +} + +- (id<UIViewControllerAnimatedTransitioning>) + animationControllerForDismissedController:(UIViewController*)dismissed { + IdentityChooserAnimator* animator = [[IdentityChooserAnimator alloc] init]; + animator.appearing = NO; + return animator; +} + +@end
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.h similarity index 63% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.h rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.h index b76d758..62e654f 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_H_ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_consumer.h" #import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_controller.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_consumer.h" @protocol IdentityChooserViewControllerPresentationDelegate; @@ -24,4 +24,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.mm similarity index 86% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.mm index f1d2e068..b5e12b3 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.mm
@@ -2,21 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller.h" #import "base/apple/foundation_util.h" #import "base/check_op.h" #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" #import "base/notreached.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_add_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_header_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller_presentation_delegate.h" #import "ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/list_model/list_item+Controller.h" #import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_styler.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller_presentation_delegate.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" namespace { @@ -111,8 +111,9 @@ } - (void)itemHasChanged:(TableViewItem*)changedItem { - if (![self.tableViewModel hasItem:changedItem]) + if (![self.tableViewModel hasItem:changedItem]) { return; + } [self reconfigureCellsForItems:@[ changedItem ]]; } @@ -120,12 +121,14 @@ - (TableViewIdentityItem*)tableViewIdentityItemWithGaiaID:(NSString*)gaiaID { for (TableViewIdentityItem* item in [self.tableViewModel itemsInSectionWithIdentifier:IdentitiesSectionIdentifier]) { - if (item.type != IdentityItemType) + if (item.type != IdentityItemType) { continue; + } TableViewIdentityItem* identityItem = base::apple::ObjCCastStrict<TableViewIdentityItem>(item); - if ([identityItem.gaiaID isEqualToString:gaiaID]) + if ([identityItem.gaiaID isEqualToString:gaiaID]) { return identityItem; + } } return nil; }
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller_presentation_delegate.h b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller_presentation_delegate.h similarity index 64% rename from ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller_presentation_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller_presentation_delegate.h index c4e3535a..9ae24c7 100644 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_view_controller_presentation_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_view_controller_presentation_delegate.h
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_PRESENTATION_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_PRESENTATION_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_PRESENTATION_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_PRESENTATION_DELEGATE_H_ #import <UIKit/UIKit.h> @class IdentityChooserViewController; // Delegate protocol for presentation events of IdentityChooserViewController. -@protocol IdentityChooserViewControllerPresentationDelegate<NSObject> +@protocol IdentityChooserViewControllerPresentationDelegate <NSObject> // Called when IdentityChooserViewController disappear. - (void)identityChooserViewControllerDidDisappear: @@ -27,4 +27,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_PRESENTATION_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_IDENTITY_CHOOSER_IDENTITY_CHOOSER_VIEW_CONTROLLER_PRESENTATION_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/Contents.json b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/Contents.json b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account.png b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account.png similarity index 100% rename from ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account.png rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@2x.png b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@2x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@2x.png rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@3x.png b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@3x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@3x.png rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/Assets.xcassets/identity_chooser_add_account.imageset/identity_chooser_add_account@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/resources/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/BUILD.gn similarity index 100% rename from ios/chrome/browser/ui/authentication/identity_chooser/resources/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/identity_chooser/resources/BUILD.gn
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h b/ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h similarity index 89% rename from ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h index a1ad648d..f0abc4d9 100644 --- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_RE_SIGNIN_INFOBAR_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_RE_SIGNIN_INFOBAR_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_RE_SIGNIN_INFOBAR_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_RE_SIGNIN_INFOBAR_DELEGATE_H_ #import <memory> #import <string> @@ -62,4 +62,4 @@ identity_manager_observer_{this}; }; -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_RE_SIGNIN_INFOBAR_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_RE_SIGNIN_INFOBAR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm b/ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm rename to ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.mm index ad00374..d1c62a2 100644 --- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.mm +++ b/ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h" #import <UIKit/UIKit.h> @@ -14,10 +14,10 @@ #import "components/infobars/core/infobar_manager.h" #import "components/signin/public/base/signin_metrics.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/shared/public/commands/show_signin_command.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/signin/model/authentication_service.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate_unittest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate_unittest.mm index 91d3ecda9..b753854 100644 --- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h" #import <memory> @@ -12,6 +12,7 @@ #import "components/infobars/core/infobar.h" #import "components/signin/public/base/signin_metrics.h" #import "components/sync_preferences/testing_pref_service_syncable.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/infobars/model/infobar_ios.h" #import "ios/chrome/browser/infobars/model/infobar_manager_impl.h" #import "ios/chrome/browser/infobars/model/infobar_utils.h" @@ -26,7 +27,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/fakes/fake_navigation_manager.h" #import "ios/web/public/test/fakes/fake_web_state.h"
diff --git a/ios/chrome/browser/ui/authentication/resources/Assets.xcassets/Contents.json b/ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/Assets.xcassets/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/Contents.json b/ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more.png b/ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more.png similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more.png rename to ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@2x.png b/ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@2x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@2x.png rename to ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@3x.png b/ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@3x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@3x.png rename to ios/chrome/browser/authentication/ui_bundled/resources/Assets.xcassets/signin_confirmation_more.imageset/signin_confirmation_more@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/resources/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/resources/BUILD.gn similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/resources/BUILD.gn
diff --git a/ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/Contents.json b/ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color.png b/ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color.png similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color.png rename to ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@2x.png b/ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@2x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@2x.png rename to ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@3x.png b/ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@3x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@3x.png rename to ios/chrome/browser/authentication/ui_bundled/resources/signin_promo_logo_chrome_color.imageset/signin_promo_logo_chrome_color@3x.png Binary files differ
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/BUILD.gn index 4072110..65fa61ca 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/BUILD.gn
@@ -1,9 +1,205 @@ -# Copyright 2024 The Chromium Authors +# Copyright 2020 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -source_set("constants") { - sources = [ "signin_constants.h" ] +import("//build/config/chrome_build.gni") - public_deps = [ "//ios/chrome/browser/ui/authentication/signin:constants" ] +# Public target. +group("signin") { + public_deps = [ ":signin_headers" ] + deps = [ ":signin_impl" ] +} + +# Contains public headers. +source_set("signin_headers") { + sources = [ + "signin_coordinator.h", + "signin_utils.h", + ] + public_deps = [ + ":constants", + "//base", + "//components/signin/public/base", + "//components/signin/public/identity_manager", + "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator", + "//ios/chrome/browser/shared/coordinator/chrome_coordinator", + "//ios/chrome/browser/shared/model/profile", + "//ios/chrome/browser/signin/model:capabilities_types", + "//ios/chrome/browser/signin/model:system_identity", + ] +} + +source_set("interruptible_chrome_coordinator") { + sources = [ + "interruptible_chrome_coordinator.h", + "interruptible_chrome_coordinator.mm", + ] + deps = [ + "//base", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/shared/coordinator/chrome_coordinator", + ] + frameworks = [ "UIKit.framework" ] +} + +source_set("signin_protected") { + sources = [ "signin_coordinator+protected.h" ] + deps = [ ":signin_headers" ] +} + +# Contains sign-in implementation. +source_set("signin_impl") { + sources = [ + "signin_coordinator.mm", + "signin_utils.mm", + ] + public_deps = [ ":constants" ] + deps = [ + ":signin_headers", + ":signin_protected", + ":signin_screen_provider", + "//components/policy:generated", + "//components/policy/core/common:common_constants", + "//components/pref_registry", + "//components/prefs", + "//components/signin/ios/browser", + "//components/sync/base:features", + "//components/sync/service", + "//ios/chrome/app:change_profile_commands", + "//ios/chrome/app:tests_hook", + "//ios/chrome/app/application_delegate:app_state", + "//ios/chrome/app/profile", + "//ios/chrome/browser/authentication/ui_bundled/account_menu", + "//ios/chrome/browser/authentication/ui_bundled/change_profile", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator", + "//ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin", + "//ios/chrome/browser/authentication/ui_bundled/signin/forced_signin", + "//ios/chrome/browser/authentication/ui_bundled/signin/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin/instant_signin", + "//ios/chrome/browser/authentication/ui_bundled/signin/logging", + "//ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication", + "//ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin", + "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", + "//ios/chrome/browser/shared/model/application_context", + "//ios/chrome/browser/shared/model/browser", + "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/shared/public/features:system_flags", + "//ios/chrome/browser/signin/model", + "//ios/chrome/browser/signin/model:authentication_service", + "//ios/chrome/browser/signin/model:authentication_service_factory", + "//ios/chrome/browser/signin/model:signin_util", + "//ios/chrome/browser/signin/model:system_identity", + "//ios/chrome/browser/sync/model", + ] +} + +source_set("signin_screen_provider") { + sources = [ + "signin_screen_provider.h", + "signin_screen_provider.mm", + "uno_signin_screen_provider.h", + "uno_signin_screen_provider.mm", + ] + deps = [ + "//base", + "//components/sync/base:features", + "//ios/chrome/browser/first_run/ui_bundled:field_trial", + "//ios/chrome/browser/screen/ui_bundled:screen_provider", + "//ios/chrome/browser/screen/ui_bundled:screen_provider_protected", + "//ios/chrome/browser/screen/ui_bundled:screen_type", + ] +} + +source_set("unit_tests") { + testonly = true + sources = [ "signin_utils_unittest.mm" ] + deps = [ + ":signin_impl", + "//base", + "//base/test:test_support", + "//components/pref_registry", + "//components/sync/base", + "//components/sync/service", + "//components/sync_preferences", + "//components/sync_preferences:test_support", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/policy/model:policy_util", + "//ios/chrome/browser/shared/model/application_context", + "//ios/chrome/browser/shared/model/browser/test:test_support", + "//ios/chrome/browser/shared/model/prefs:browser_prefs", + "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/model/profile/test", + "//ios/chrome/browser/signin/model", + "//ios/chrome/browser/signin/model:authentication_service", + "//ios/chrome/browser/signin/model:authentication_service_factory", + "//ios/chrome/browser/signin/model:fake_system_identity", + "//ios/chrome/browser/signin/model:fake_system_identity_manager", + "//ios/chrome/browser/signin/model:signin_util", + "//ios/chrome/browser/signin/model:test_support", + "//ios/chrome/browser/sync/model", + "//ios/chrome/test:test_support", + "//ios/web/public/test", + "//net", + "//testing/gtest", + "//third_party/ocmock", + ] +} + +source_set("constants") { + sources = [ + "signin_constants.h", + "signin_constants.mm", + ] + deps = [ "//base" ] + frameworks = [ "Foundation.framework" ] +} + +source_set("eg2_tests") { + configs += [ "//build/config/ios:xctest_config" ] + testonly = true + sources = [ "signin_coordinator_egtest.mm" ] + deps = [ + ":constants", + "//base", + "//base/test:test_support", + "//components/policy:generated", + "//components/signin/internal/identity_manager", + "//components/signin/ios/browser:features", + "//components/signin/public/base", + "//components/signin/public/identity_manager", + "//components/strings", + "//components/sync/base", + "//components/sync/base:features", + "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", + "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", + "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/metrics/model:eg_test_support+eg2", + "//ios/chrome/browser/ntp/ui_bundled:constants", + "//ios/chrome/browser/ntp/ui_bundled:feature_flags", + "//ios/chrome/browser/policy/model:eg_test_support+eg2", + "//ios/chrome/browser/policy/model:policy_util", + "//ios/chrome/browser/recent_tabs/ui_bundled:ui_constants", + "//ios/chrome/browser/settings/ui_bundled:constants", + "//ios/chrome/browser/settings/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/settings/ui_bundled/google_services:constants", + "//ios/chrome/browser/shared/model/prefs:pref_names", + "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/shared/ui/elements:constants", + "//ios/chrome/browser/signin/model:capabilities_types", + "//ios/chrome/browser/signin/model:fake_system_identity", + "//ios/chrome/browser/signin/model:system_identity_manager", + "//ios/chrome/browser/signin/model:test_constants", + "//ios/chrome/test/earl_grey:eg_test_support+eg2", + "//ios/testing/earl_grey:eg_test_support+eg2", + "//ios/testing/earl_grey:launch_configuration", + "//net:test_support", + "//ui/base", + ] + frameworks = [ "UIKit.framework" ] }
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/BUILD.gn similarity index 83% rename from ios/chrome/browser/ui/authentication/signin/add_account_signin/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/BUILD.gn index b1e7faa..d335230 100644 --- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/BUILD.gn
@@ -18,6 +18,9 @@ "//components/strings", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", "//ios/chrome/browser/main/model", "//ios/chrome/browser/shared/coordinator/alert", "//ios/chrome/browser/shared/model/application_context", @@ -28,14 +31,11 @@ "//ios/chrome/browser/signin/model:signin_util", "//ios/chrome/browser/signin/model:system_identity_manager", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", "//ui/base", ] public_deps = [ - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", ] }
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h similarity index 70% rename from ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h index 75ceddd4..4efddaa4 100644 --- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_COORDINATOR_H_ -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_enums.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_enums.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" // Coordinates adding an account with different intents: // + adding account from the settings @@ -34,4 +34,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.mm index edc6933..2db6906c 100644 --- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h" #import "base/feature_list.h" #import "base/strings/sys_string_conversions.h" @@ -10,6 +10,13 @@ #import "components/signin/public/base/signin_pref_names.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" #import "ios/chrome/browser/shared/coordinator/alert/alert_coordinator.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser.h" @@ -23,13 +30,6 @@ #import "ios/chrome/browser/signin/model/system_identity_interaction_manager.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_enums.h b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_enums.h similarity index 74% rename from ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_enums.h rename to ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_enums.h index 9b8eb4b..56a9891 100644 --- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_enums.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_enums.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_ENUMS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_ENUMS_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_ENUMS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_ENUMS_H_ #import <Foundation/Foundation.h> @@ -25,4 +25,4 @@ kResignin, }; -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_ENUMS_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_ENUMS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.h b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.h similarity index 81% rename from ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.h rename to ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.h index cf27cef2..27bcf23 100644 --- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_MANAGER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_MANAGER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_MANAGER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_MANAGER_H_ #import <UIKit/UIKit.h> #import "base/ios/block_types.h" -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_enums.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_enums.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" namespace signin { class IdentityManager; @@ -67,4 +67,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_MANAGER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_ADD_ACCOUNT_SIGNIN_ADD_ACCOUNT_SIGNIN_MANAGER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.mm b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.mm index e0771349..bf6a26e 100644 --- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.mm
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.h" #import "base/strings/sys_string_conversions.h" #import "components/prefs/pref_service.h" #import "components/signin/public/base/signin_pref_names.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" #import "ios/chrome/browser/signin/model/signin_util.h" #import "ios/chrome/browser/signin/model/system_identity_interaction_manager.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" @interface AddAccountSigninManager ()
diff --git a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager_unittest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager_unittest.mm index acdd539..78b398d 100644 --- a/ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_manager.h" #import <UIKit/UIKit.h>
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/BUILD.gn similarity index 78% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/BUILD.gn index d6b4e6a0..d0a3bb1b 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/BUILD.gn
@@ -17,6 +17,12 @@ "//components/signin/ios/browser:features", "//components/signin/public/identity_manager/objc", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/shared/coordinator/alert", "//ios/chrome/browser/shared/model/browser", @@ -30,18 +36,12 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:constants", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/util", "//ui/base", ] public_deps = - [ "//ios/chrome/browser/ui/authentication/signin:signin_headers" ] + [ "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers" ] } source_set("layout") { @@ -59,6 +59,8 @@ "//components/signin/public/identity_manager", "//components/signin/public/identity_manager/objc", "//components/sync_preferences:test_support", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/model/profile/test", @@ -68,7 +70,6 @@ "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:fake_system_identity_manager", "//ios/chrome/browser/signin/model:test_support", - "//ios/chrome/browser/ui/authentication/authentication_flow", "//ios/chrome/test:test_support", "//ios/web/public/test", "//testing/gtest", @@ -85,11 +86,11 @@ "//base/test:test_support", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//net",
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/BUILD.gn similarity index 80% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/BUILD.gn index 0c23b80..28be404 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/BUILD.gn
@@ -23,6 +23,11 @@ deps = [ "//components/signin/public/identity_manager/objc", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin:layout", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", @@ -33,11 +38,6 @@ "//ios/chrome/browser/shared/ui/table_view:utils", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin:layout", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet", "//ios/chrome/common/ui/colors", "//ui/base", ]
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h new file mode 100644 index 0000000..23a0589 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h
@@ -0,0 +1,23 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_CONSUMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_CONSUMER_H_ + +#import <Foundation/Foundation.h> + +@class IdentityItemConfigurator; + +// Consumer for consistency default account. +@protocol ConsistencyAccountChooserConsumer <NSObject> + +// Invoked when all identities have to be reloaded. +- (void)reloadAllIdentities; +// Invoked when an identity has to be updated. +- (void)reloadIdentityForIdentityItemConfigurator: + (IdentityItemConfigurator*)configurator; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h similarity index 75% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h index 7cc09cf..71516b45 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_COORDINATOR_H_ #import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h" @@ -41,4 +41,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.mm similarity index 85% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.mm index 9953522..4809539 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.mm
@@ -2,10 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h" #import "base/metrics/user_metrics.h" #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h" @@ -15,9 +18,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h" @interface ConsistencyAccountChooserCoordinator () < ConsistencyAccountChooserTableViewControllerActionDelegate>
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h similarity index 63% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h index e14067e..889b842 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_MEDIATOR_H_ #import <Foundation/Foundation.h> -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h" class ChromeAccountManagerService; @protocol ConsistencyAccountChooserConsumer; @@ -38,4 +38,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm similarity index 92% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm index 7483fe90..a13b001c 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.mm
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_mediator.h" #import "base/memory/raw_ptr.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface ConsistencyAccountChooserMediator () < ChromeAccountManagerServiceObserver,
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h new file mode 100644 index 0000000..2fb76f5d --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h
@@ -0,0 +1,29 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_H_ + +#import <UIKit/UIKit.h> + +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h" +#import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_controller.h" + +@protocol ConsistencyAccountChooserTableViewControllerActionDelegate; +@protocol ConsistencyAccountChooserTableViewControllerModelDelegate; + +// View controller for ConsistencyAccountChooserCoordinator. +@interface ConsistencyAccountChooserTableViewController + : LegacyChromeTableViewController <ConsistencyAccountChooserConsumer> + +@property(nonatomic, weak) + id<ConsistencyAccountChooserTableViewControllerActionDelegate> + actionDelegate; +@property(nonatomic, weak) + id<ConsistencyAccountChooserTableViewControllerModelDelegate> + modelDelegate; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm similarity index 87% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm index efd6293..f3b824f 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.mm
@@ -2,21 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h" #import "base/apple/foundation_util.h" #import "base/check.h" #import "base/notreached.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/net/model/crurl.h" #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_image_item.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_link_header_footer_item.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h" @@ -98,8 +98,9 @@ - (CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section { - if ([self.tableViewModel footerForSectionIndex:section]) + if ([self.tableViewModel footerForSectionIndex:section]) { return UITableViewAutomaticDimension; + } return kSectionFooterHeight; }
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h similarity index 61% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h index 3228bb9c..7fe2ee7 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_action_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_ACTION_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_ACTION_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_ACTION_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_ACTION_DELEGATE_H_ #import <Foundation/Foundation.h> @@ -25,4 +25,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_ACTION_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_ACTION_DELEGATE_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h new file mode 100644 index 0000000..ac50b31 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h
@@ -0,0 +1,20 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_ + +#import <Foundation/Foundation.h> + +@class ConsistencyAccountChooserViewController; + +// Protocol to get the model. +@protocol ConsistencyAccountChooserTableViewControllerModelDelegate <NSObject> + +// Returns all the configurators to generate model items. +@property(nonatomic, strong, readonly) NSArray* sortedIdentityItemConfigurators; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h similarity index 60% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h index c93f570..9314288 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_VIEW_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_VIEW_CONTROLLER_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h" @protocol ConsistencyAccountChooserTableViewControllerActionDelegate; @protocol ConsistencyAccountChooserTableViewControllerModelDelegate; @@ -30,4 +30,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_VIEW_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.mm similarity index 89% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.mm index 58472a8..a939ec7 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.mm
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_view_controller.h" #import "base/check.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_layout_delegate.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h new file mode 100644 index 0000000..b6e9c9da --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h
@@ -0,0 +1,25 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_IDENTITY_ITEM_CONFIGURATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_IDENTITY_ITEM_CONFIGURATOR_H_ + +#import <UIKit/UIKit.h> + +@class TableViewIdentityItem; + +// This class configures TableViewIdentityItem instances. +@interface IdentityItemConfigurator : NSObject + +@property(nonatomic, strong) NSString* gaiaID; +@property(nonatomic, strong) NSString* name; +@property(nonatomic, strong) NSString* email; +@property(nonatomic, strong) UIImage* avatar; +@property(nonatomic, assign) BOOL selected; + +- (void)configureIdentityChooser:(TableViewIdentityItem*)item; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_IDENTITY_ITEM_CONFIGURATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.mm similarity index 73% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.mm index 534716f..216f407 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.mm
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" @implementation IdentityItemConfigurator
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/BUILD.gn similarity index 77% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/BUILD.gn index 6b376e9..33e0fc5 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/BUILD.gn
@@ -21,6 +21,11 @@ "//components/sync/base", "//components/sync/service", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin:layout", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/keyboard/ui_bundled", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", "//ios/chrome/browser/shared/model/browser", @@ -30,11 +35,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication:authentication", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin:layout", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/util", "//ui/base",
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h similarity index 68% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h index f375a66..eb7b33d 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_CONSUMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_CONSUMER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_CONSUMER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_CONSUMER_H_ #import <Foundation/Foundation.h> @@ -30,4 +30,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_CONSUMER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h similarity index 83% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h index 8968461..e28c6a5a 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_COORDINATOR_H_ #import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h" @@ -62,4 +62,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.mm similarity index 86% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.mm index e95b5a9..4043aaa 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.mm
@@ -2,8 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" @@ -11,9 +14,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h" @interface ConsistencyDefaultAccountCoordinator () < ConsistencyDefaultAccountActionDelegate>
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h similarity index 73% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h index 90f097e..28ea52f0 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_MEDIATOR_H_ #import <Foundation/Foundation.h> @@ -45,4 +45,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm index ec51ca42..59aa66e 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_mediator.h" #import <UIKit/UIKit.h> @@ -14,12 +14,12 @@ #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h similarity index 66% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h index 1691c62..3e437b9c 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_VIEW_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_VIEW_CONTROLLER_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h" @class ConsistencyDefaultAccountViewController; @protocol ConsistencyLayoutDelegate; @@ -50,4 +50,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_VIEW_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_DEFAULT_ACCOUNT_CONSISTENCY_DEFAULT_ACCOUNT_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm index 069f766..ae52cce 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_view_controller.h" #import "base/check.h" #import "base/metrics/user_metrics.h" @@ -11,12 +11,12 @@ #import "base/strings/sys_string_conversions.h" #import "components/signin/public/base/signin_metrics.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_layout_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_view.h" #import "ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" -#import "ios/chrome/browser/ui/authentication/views/identity_view.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/button_util.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_layout_delegate.h similarity index 66% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_layout_delegate.h index 6f1cc202..8c0ecc21 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_layout_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_LAYOUT_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_LAYOUT_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_LAYOUT_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_LAYOUT_DELEGATE_H_ #import <UIKit/UIKit.h> @@ -23,4 +23,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_LAYOUT_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_LAYOUT_DELEGATE_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h new file mode 100644 index 0000000..a38bf5d --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h
@@ -0,0 +1,25 @@ +// Copyright 2020 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_ + +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" + +namespace signin_metrics { +enum class AccessPoint : int; +} + +// Coordinates various Identity options in Chrome including signing in +// using accounts on the device, opening Incognito, and adding an account. +@interface ConsistencyPromoSigninCoordinator : SigninCoordinator + ++ (instancetype) + coordinatorWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser + accessPoint:(signin_metrics::AccessPoint)accessPoint; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm similarity index 92% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm index db11cfa..4e60764 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm
@@ -2,13 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h" #import "base/metrics/user_metrics.h" #import "base/strings/sys_string_conversions.h" #import "components/prefs/pref_service.h" #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_layout_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/coordinator/alert/alert_coordinator.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" @@ -21,19 +34,6 @@ #import "ios/chrome/browser/signin/model/constants.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_default_account/consistency_default_account_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h" @@ -96,7 +96,6 @@ accessPoint:accessPoint]; } - #pragma mark - SigninCoordinator - (void)interruptWithAction:(SigninCoordinatorInterrupt)action
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm index c918906f..9772ea00 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm
@@ -3,13 +3,13 @@ // found in the LICENSE file. #import "base/test/ios/wait_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.h similarity index 86% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.h index 2fe47af..2a72a12 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_MEDIATOR_H_ #import <Foundation/Foundation.h> #import "base/ios/block_types.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" @class AuthenticationFlow; class AuthenticationService; @@ -19,7 +19,7 @@ namespace signin { class IdentityManager; -} // signin +} // namespace signin namespace signin_metrics { enum class AccessPoint : int; @@ -88,4 +88,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm index 43cc7036..35f4316 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.h" #import "base/cancelable_callback.h" #import "base/task/single_thread_task_runner.h" @@ -10,13 +10,13 @@ #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" namespace { @@ -219,8 +219,9 @@ // Cancels sign-in and calls the delegate to display the error. - (void)cancelSigninWithError:(ConsistencyPromoSigninMediatorError)error { - if (!self.authenticationService) + if (!self.authenticationService) { return; + } self.signingIdentity = nil; _authenticationFlow = nil; switch (error) {
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm index 8677bf5..a8a35da8 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_mediator.h" #import <UIKit/UIKit.h> @@ -12,6 +12,7 @@ #import "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "components/sync_preferences/testing_pref_service_syncable.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h" @@ -22,7 +23,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/platform_test.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/BUILD.gn similarity index 78% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/BUILD.gn index edcdeb7..eae68d5 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/BUILD.gn
@@ -17,14 +17,14 @@ "consistency_sheet_slide_transition_animator.mm", ] deps = [ + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin:layout", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/shared/ui/util/image", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin:layout", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/util", ] public_deps = - [ "//ios/chrome/browser/ui/authentication/signin:signin_headers" ] + [ "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers" ] }
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h new file mode 100644 index 0000000..dc84ffd --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h
@@ -0,0 +1,20 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CHILD_CONSISTENCY_SHEET_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CHILD_CONSISTENCY_SHEET_VIEW_CONTROLLER_H_ + +#import <UIKit/UIKit.h> + +// Protocol to implement for view controller pushed to +// ConsistencySheetNavigationController. +@protocol ChildConsistencySheetViewController <NSObject> + +// Returns the desired height for `viewController` to fit. The height needs to +// include safe area insets. +- (CGFloat)layoutFittingHeightForWidth:(CGFloat)width; + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CHILD_CONSISTENCY_SHEET_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h new file mode 100644 index 0000000..2c52a87 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h
@@ -0,0 +1,13 @@ +// Copyright 2021 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_CONSTANTS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_CONSTANTS_H_ + +#import <UIKit/UIKit.h> + +// Maximum height ratio for the bottom sheet container view. +extern const CGFloat kMaxBottomSheetHeightRatioWithWindow; + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.mm similarity index 60% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.mm index d6d02b4..b149ba7f 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.mm
@@ -2,6 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h" const CGFloat kMaxBottomSheetHeightRatioWithWindow = 0.75;
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h similarity index 75% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h index ce311f4..0ee2390 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_NAVIGATION_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_NAVIGATION_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_NAVIGATION_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_NAVIGATION_CONTROLLER_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_layout_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_layout_delegate.h" // Delegate for updating navigation controller content. @protocol ConsistencySheetNavigationControllerLayoutDelegate <NSObject> @@ -45,4 +45,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_NAVIGATION_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_NAVIGATION_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.mm similarity index 92% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.mm index d9091fb..0ac6a09 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.mm
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" #import <algorithm> #import "base/check.h" #import "base/notreached.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/common/ui/util/background_util.h" namespace {
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h similarity index 69% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h index 1a8d65a..9180d114 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_PRESENTATION_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_PRESENTATION_CONTROLLER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_PRESENTATION_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_PRESENTATION_CONTROLLER_H_ #import <UIKit/UIKit.h> @@ -27,4 +27,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_PRESENTATION_CONTROLLER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_PRESENTATION_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.mm index 22a2322..cc2c307 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.mm
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_presentation_controller.h" #import "base/check_op.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" #import "ios/chrome/browser/shared/ui/util/accessibility_close_menu_button.h" #import "ios/chrome/browser/shared/ui/util/image/image_util.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" namespace {
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h similarity index 72% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h index 6ae55018..f33351d 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_SLIDE_TRANSITION_ANIMATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_SLIDE_TRANSITION_ANIMATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_SLIDE_TRANSITION_ANIMATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_SLIDE_TRANSITION_ANIMATOR_H_ #import <UIKit/UIKit.h> @@ -35,4 +35,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_SLIDE_TRANSITION_ANIMATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_SLIDE_TRANSITION_ANIMATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.mm index 2ea4061d..a545706 100644 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.mm
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_slide_transition_animator.h" #import "base/i18n/rtl.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_navigation_controller.h" namespace {
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/BUILD.gn similarity index 83% rename from ios/chrome/browser/ui/authentication/signin/forced_signin/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/BUILD.gn index 1222d110..0212671 100644 --- a/ios/chrome/browser/ui/authentication/signin/forced_signin/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/BUILD.gn
@@ -10,6 +10,8 @@ deps = [ "//base", "//components/signin/public/identity_manager:identity_manager", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", "//ios/chrome/browser/first_run/ui_bundled:screen_delegate", "//ios/chrome/browser/first_run/ui_bundled:utils", "//ios/chrome/browser/first_run/ui_bundled/signin", @@ -18,8 +20,6 @@ "//ios/chrome/browser/screen/ui_bundled:screen_type", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", ] } @@ -36,6 +36,10 @@ "//components/signin/ios/browser:features", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/account_menu:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/first_run/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/ntp/ui_bundled:constants", @@ -49,10 +53,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:test_constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/account_menu:constants", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/common:string_util", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/OWNERS b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/OWNERS similarity index 100% rename from ios/chrome/browser/ui/authentication/signin/forced_signin/OWNERS rename to ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/OWNERS
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.h similarity index 73% rename from ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.h index 1c4b6832..ee4cca2 100644 --- a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_FORCED_SIGNIN_FORCED_SIGNIN_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_FORCED_SIGNIN_FORCED_SIGNIN_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_FORCED_SIGNIN_FORCED_SIGNIN_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_FORCED_SIGNIN_FORCED_SIGNIN_COORDINATOR_H_ -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" @class ScreenProvider; @@ -30,4 +30,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_FORCED_SIGNIN_FORCED_SIGNIN_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_FORCED_SIGNIN_FORCED_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.mm index 866926a8..c2b8d5e 100644 --- a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.mm
@@ -2,12 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.h" #import <UIKit/UIKit.h> #import "base/notreached.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_screen_delegate.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_util.h" #import "ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.h" @@ -17,9 +20,6 @@ #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" @interface ForcedSigninCoordinator () <FirstRunScreenDelegate>
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_egtest.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_egtest.mm index a9b839b..9008ed0 100644 --- a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_egtest.mm
@@ -11,6 +11,12 @@ #import "components/policy/core/common/policy_loader_ios_constants.h" #import "components/policy/policy_constants.h" #import "components/signin/ios/browser/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" @@ -23,12 +29,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_branded_strings.h" @@ -809,8 +809,9 @@ // Tests that the sign-in prompt is shown on the other window when the window // presenting the forced sign-in screen is closed. - (void)testSigninScreenTransferToOtherWindow { - if (![ChromeEarlGrey areMultipleWindowsSupported]) + if (![ChromeEarlGrey areMultipleWindowsSupported]) { EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened."); + } // Add account. FakeSystemIdentity* fakeIdentity1 = [FakeSystemIdentity fakeIdentity1]; @@ -839,8 +840,9 @@ // opened, can be shown on dynamic policy update when on an incognito browser // tab. - (void)testSignInScreenOnIncognitoWithMultiWindows { - if (![ChromeEarlGrey areMultipleWindowsSupported]) + if (![ChromeEarlGrey areMultipleWindowsSupported]) { EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened."); + } // TODO(crbug.com/40868899): Test is failing on iPad devices and simulator. if ([ChromeEarlGrey isIPadIdiom]) { @@ -887,8 +889,9 @@ // opened, can be shown on dynamic policy update when on the tab switcher. // TODO(crbug.com/384874382): Flaky test. - (void)DISABLED_testSignInScreenOnTabSwitcherWithMultiWindows { - if (![ChromeEarlGrey areMultipleWindowsSupported]) + if (![ChromeEarlGrey areMultipleWindowsSupported]) { EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened."); + } // Restart the app to reset the policies. [self restartAppWithoutEnterprisePolicy]; @@ -930,8 +933,9 @@ // sign-in prompt. The policy is applied while the regular sign-in prompt is // shown. - (void)testSignInScreenOnRegularSigninPromptMultiWindows { - if (![ChromeEarlGrey areMultipleWindowsSupported]) + if (![ChromeEarlGrey areMultipleWindowsSupported]) { EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened."); + } // TODO(crbug.com/40210654). if ([ChromeEarlGrey isNewOverflowMenuEnabled]) { @@ -981,8 +985,9 @@ // when a browser modal is displayed on top of the browser view when there are // multiple windows. - (void)testSignInScreenOnModalMultiWindows { - if (![ChromeEarlGrey areMultipleWindowsSupported]) + if (![ChromeEarlGrey areMultipleWindowsSupported]) { EARL_GREY_TEST_DISABLED(@"Multiple windows can't be opened."); + } // TODO(crbug.com/40210654). if ([ChromeEarlGrey isNewOverflowMenuEnabled]) {
diff --git a/ios/chrome/browser/ui/authentication/signin/history_sync/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/history_sync/BUILD.gn similarity index 72% rename from ios/chrome/browser/ui/authentication/signin/history_sync/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/history_sync/BUILD.gn index 6286643..f64856a 100644 --- a/ios/chrome/browser/ui/authentication/signin/history_sync/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/history_sync/BUILD.gn
@@ -10,13 +10,13 @@ deps = [ "//base", "//components/sync/service", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", ] }
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.h new file mode 100644 index 0000000..2e995de --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.h
@@ -0,0 +1,16 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_HISTORY_SYNC_HISTORY_SYNC_SIGNIN_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_HISTORY_SYNC_HISTORY_SYNC_SIGNIN_COORDINATOR_H_ + +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" + +// Coordinator to present the History Sync Opt-In screen. +// This requires the user to be signed in already. +@interface HistorySyncSigninCoordinator : SigninCoordinator + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_HISTORY_SYNC_HISTORY_SYNC_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.mm similarity index 89% rename from ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.mm index 8418cbd..ae6b6db 100644 --- a/ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.mm
@@ -2,20 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" @interface HistorySyncSigninCoordinator () <HistorySyncPopupCoordinatorDelegate> @end
diff --git a/ios/chrome/browser/ui/authentication/signin/instant_signin/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/BUILD.gn similarity index 66% rename from ios/chrome/browser/ui/authentication/signin/instant_signin/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/BUILD.gn index 8ec1014b..c4147637 100644 --- a/ios/chrome/browser/ui/authentication/signin/instant_signin/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/BUILD.gn
@@ -14,6 +14,10 @@ deps = [ "//components/sync/base:features", "//components/sync/service", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/identity_chooser", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", "//ios/chrome/browser/main/model", "//ios/chrome/browser/shared/coordinator/alert", "//ios/chrome/browser/shared/model/application_context", @@ -21,14 +25,10 @@ "//ios/chrome/browser/shared/ui/elements:activity_overlay", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/identity_chooser", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", "//ui/base", ] public_deps = [ - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", ] }
diff --git a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.h similarity index 78% rename from ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.h index b2a1ab0..2aa41bc3 100644 --- a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_COORDINATOR_H_ -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" namespace signin_metrics { enum class AccessPoint; @@ -39,4 +39,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.mm index 226f09de..dcbcf48 100644 --- a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.mm
@@ -2,12 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.h" #import "base/notreached.h" #import "base/strings/sys_string_conversions.h" #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" #import "ios/chrome/browser/shared/coordinator/alert/alert_coordinator.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/public/features/features.h" @@ -15,14 +23,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" @interface InstantSigninCoordinator () <AuthenticationFlowDelegate, IdentityChooserCoordinatorDelegate,
diff --git a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.h b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.h similarity index 78% rename from ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.h index f94e93a..53eb0aac 100644 --- a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_MEDIATOR_H_ #import <UIKit/UIKit.h> #import "base/ios/block_types.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" @class AuthenticationFlow; @class InstantSigninMediator; @@ -50,4 +50,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INSTANT_SIGNIN_INSTANT_SIGNIN_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.mm similarity index 85% rename from ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.mm index 4a2100a..51635de 100644 --- a/ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.mm
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_mediator.h" #import "base/memory/raw_ptr.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" using signin_metrics::AccessPoint; using signin_metrics::PromoAction;
diff --git a/ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h similarity index 81% rename from ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h index 417f7323..d32dcd5 100644 --- a/ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INTERRUPTIBLE_CHROME_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INTERRUPTIBLE_CHROME_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INTERRUPTIBLE_CHROME_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INTERRUPTIBLE_CHROME_COORDINATOR_H_ #import "base/feature_list.h" #import "base/ios/block_types.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" // If `kInterruptibleChromeAlwaysDismissed` is is disabled, // `UIShutdownNoDismiss` is returned. Otherwise `DismissWithoutAnimation`. @@ -39,4 +39,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_INTERRUPTIBLE_CHROME_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_INTERRUPTIBLE_CHROME_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.mm similarity index 92% rename from ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.mm index 6fccd42..b49ee14 100644 --- a/ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" BASE_FEATURE(kIOSInterruptibleCoordinatorAlwaysDismissed, "IOSInterruptibleCoordinatorAlwaysDismissed",
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/logging/BUILD.gn similarity index 81% rename from ios/chrome/browser/ui/authentication/signin/logging/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/logging/BUILD.gn index 793d075..e75afcfd 100644 --- a/ios/chrome/browser/ui/authentication/signin/logging/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/BUILD.gn
@@ -22,7 +22,7 @@ "//ios/chrome/browser/signin/model", ] public_deps = [ - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", ] }
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.h b/ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.h new file mode 100644 index 0000000..f532ad3 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.h
@@ -0,0 +1,15 @@ +// Copyright 2020 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_FIRST_RUN_SIGNIN_LOGGER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_FIRST_RUN_SIGNIN_LOGGER_H_ + +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.h" + +// Logs metrics for Chrome first-run operations. +@interface FirstRunSigninLogger : UserSigninLogger + +@end + +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_FIRST_RUN_SIGNIN_LOGGER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.mm b/ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.mm similarity index 90% rename from ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.mm index 3eef6424..76613da 100644 --- a/ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.h" #import "base/metrics/histogram_functions.h" #import "ios/chrome/browser/first_run/model/first_run_metrics.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/signin_logger.h b/ios/chrome/browser/authentication/ui_bundled/signin/logging/signin_logger.h similarity index 71% rename from ios/chrome/browser/ui/authentication/signin/logging/signin_logger.h rename to ios/chrome/browser/authentication/ui_bundled/signin/logging/signin_logger.h index bd6994c3..374fc08 100644 --- a/ios/chrome/browser/ui/authentication/signin/logging/signin_logger.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/signin_logger.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_SIGNIN_LOGGER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_SIGNIN_LOGGER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_SIGNIN_LOGGER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_SIGNIN_LOGGER_H_ #import <UIKit/UIKit.h> @@ -23,4 +23,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_SIGNIN_LOGGER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_SIGNIN_LOGGER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.h b/ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.h similarity index 71% rename from ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.h rename to ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.h index f0d9cdb..b4068c7 100644 --- a/ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_UPGRADE_SIGNIN_LOGGER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_UPGRADE_SIGNIN_LOGGER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_UPGRADE_SIGNIN_LOGGER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_UPGRADE_SIGNIN_LOGGER_H_ -#import "ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.h" class ChromeAccountManagerService; @@ -34,4 +34,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_UPGRADE_SIGNIN_LOGGER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_UPGRADE_SIGNIN_LOGGER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.mm b/ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.mm index b32a203..5e04ac3b 100644 --- a/ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.mm
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.h" #import "base/metrics/histogram_macros.h" #import "base/metrics/user_metrics.h" #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "components/version_info/version_info.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/public/features/features.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "net/base/network_change_notifier.h" using signin_metrics::AccessPoint;
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.h b/ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.h similarity index 67% rename from ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.h rename to ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.h index 6cb8d88..b805dc2 100644 --- a/ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_USER_SIGNIN_LOGGER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_USER_SIGNIN_LOGGER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_USER_SIGNIN_LOGGER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_USER_SIGNIN_LOGGER_H_ #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" -#import "ios/chrome/browser/ui/authentication/signin/logging/signin_logger.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" // SigninLogger for user-initiated sign-in flows. @interface UserSigninLogger : NSObject <SigninLogger> @@ -27,4 +27,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_USER_SIGNIN_LOGGER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_LOGGING_USER_SIGNIN_LOGGER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.mm b/ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.mm index 5abb7ce..043679e 100644 --- a/ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.mm
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.h" #import "base/metrics/user_metrics.h" using base::RecordAction; using base::UserMetricsAction; using signin_metrics::AccessPoint; -using signin_metrics::LogSigninAccessPointStarted; using signin_metrics::LogSigninAccessPointCompleted; +using signin_metrics::LogSigninAccessPointStarted; using signin_metrics::PromoAction; @implementation UserSigninLogger
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h b/ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h index 97524ba..7aefc1c 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h
@@ -1,10 +1,156 @@ -// Copyright 2024 The Chromium Authors +// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_CONSTANTS_H_ #define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_CONSTANTS_H_ -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import <Foundation/Foundation.h> + +#import "base/time/time.h" + +@protocol SystemIdentity; + +// Sign-in result returned Sign-in result. +typedef NS_ENUM(NSUInteger, SigninCoordinatorResult) { + // Sign-in has been canceled by the user or by another reason. + SigninCoordinatorResultCanceledByUser, + // The flow was interrupted, e.g. because the user opened a new URL or the app + // was terminated. + // Sign-in might have finished or not. + SigninCoordinatorResultInterrupted, + // Sign-in has been done, the user has explicitly accepted sign-in. + SigninCoordinatorResultSuccess, + // Sign-in did not complete because it is disabled. This can happen if + // enterprise policies are updated after sign-in is started. + SigninCoordinatorResultDisabled, + // Sign-in cannot start as the UI is not available. In this case, no + // SigninCoordinator object is created. + // Only triggered by `SceneController` when processing a ShowSigninCommand + // and when the UI is not ready to present any signin coordinator. + SigninCoordinatorUINotAvailable, +}; + +// Called when the sign-in dialog is closed. +// `result` is the sign-in result state. +// `signinCompletionIdentity` the identity that was used if any. +using SigninCoordinatorCompletionCallback = + void (^)(SigninCoordinatorResult result, id<SystemIdentity> identity); + +// User's signed-in state as defined by AuthenticationService. +// TODO(crbug.com/40066949): Revisit after phase 3 migration of syncing users. +typedef NS_ENUM(NSUInteger, IdentitySigninState) { + IdentitySigninStateSignedOut, + IdentitySigninStateSignedInWithSyncDisabled, + IdentitySigninStateSignedInWithSyncEnabled, +}; + +// Action to do when the sign-in dialog needs to be interrupted. +enum class SigninCoordinatorInterrupt { + // Stops the sign-in coordinator without dismissing the view. The sign-in + // completion block and the interrupt completion block will be called + // synchronously. + // This should be only used when UI shutdown. + // See crbug.com/1455216. + UIShutdownNoDismiss, + // Stops the sign-in coordinator and dismisses the view without animation. + DismissWithoutAnimation, + // Stops the sign-in coordinator and dismisses the view with animation. + DismissWithAnimation, +}; + +// Name of accessibility identifier for the skip sign-in button. +extern NSString* const kSkipSigninAccessibilityIdentifier; +// Name of accessibility identifier for the add account button in the sign-in +// flow. +extern NSString* const kAddAccountAccessibilityIdentifier; +// Name of accessibility identifier for the confirmation "Yes I'm In" sign-in +// button. +extern NSString* const kConfirmationAccessibilityIdentifier; +// Name of the accessibility identifier for the History Sync view. +extern NSString* const kHistorySyncViewAccessibilityIdentifier; +// Name of accessibility identifier for the more button in the sign-in flow. +extern NSString* const kMoreAccessibilityIdentifier; +// Name of accessibility identifier for the web sign-in consistency sheet. +extern NSString* const kWebSigninAccessibilityIdentifier; +// Name of accessibility identifier for the primary button that signs in +// the user for the web sign-in consistency sheet. +extern NSString* const kWebSigninPrimaryButtonAccessibilityIdentifier; +// Name of accessibility identifier for "Skip" button in the web sign-in +// consistency sheet. +extern NSString* const kWebSigninSkipButtonAccessibilityIdentifier; +// Name of the accessibility identifier for the Tangible Sync view. +extern NSString* const kTangibleSyncViewAccessibilityIdentifier; +// Name of the accessibility identifier for the "add account" button in the +// consistency account chooser. +extern NSString* const kConsistencyAccountChooserAddAccountIdentifier; + +// Name of the accessibility identifier for the managed profile creation screen. +extern NSString* const kManagedProfileCreationScreenAccessibilityIdentifier; + +// Name of the accessibility identifier for the keep browsing data separate +// cell. +extern NSString* const kKeepBrowsingDataSeparateCellId; + +// Name of the accessibility identifier for the merge browsing data cell. +extern NSString* const kMergeBrowsingDataCellId; + +// Intent for TrustedVaultReauthenticationCoordinator to display either +// the reauthentication or degraded recoverability dialog. +typedef NS_ENUM(NSUInteger, SigninTrustedVaultDialogIntent) { + // Show reauthentication dialog for fetch keys. + SigninTrustedVaultDialogIntentFetchKeys, + // Show reauthentication degraded recoverability dialog (to enroll additional + // recovery factors). + SigninTrustedVaultDialogIntentDegradedRecoverability, +}; + +// Max dismissal count for web sign-in consistency dialog (the dismissal value +// is reset as soon as the user shows sign-in intent). +extern const int kDefaultWebSignInDismissalCount; + +// Values of the UMA SSORecallPromo.PromoAction histogram. +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. When you add a new entry or when you +// deprecate an existing one, also update SSOPromoUserAction in enums.xml and +// SyncDataType suffix in histograms.xml. +typedef NS_ENUM(NSUInteger, UserSigninPromoAction) { + PromoActionDismissed = 0, + PromoActionEnabledSSOAccount = 1, + PromoActionAddedAnotherAccount = 2, + PromoActionCount = 3, +}; + +// Key in the UserDefaults to record the version of the application when the +// sign-in promo has been displayed. The value is set on the first cold start to +// make sure the sign-in promo is not triggered right after the FRE. +// Exposed for testing. +extern NSString* const kDisplayedSSORecallForMajorVersionKey; +// Key in the UserDefaults to record the GAIA id list when the sign-in promo +// was shown. +// Exposed for testing. +extern NSString* const kLastShownAccountGaiaIdVersionKey; +// Key in the UserDefaults to record the number of times the sign-in promo has +// been shown. +// TODO(crbug.com/40831586): Need to merge with +// kDisplayedSSORecallPromoCountKey. Exposed for testing. +extern NSString* const kSigninPromoViewDisplayCountKey; +// Key in the UserDefaults to track how many times the SSO Recall promo has been +// displayed. +// TODO(crbug.com/40831586): Need to merge with kSigninPromoViewDisplayCountKey. +// Exposed for testing. +extern NSString* const kDisplayedSSORecallPromoCountKey; +// Name of the UMA SSO Recall histogram. +extern const char* const kUMASSORecallPromoAction; +// Name of the histogram recording how many accounts were available on the +// device when the promo was shown. +extern const char* const kUMASSORecallAccountsAvailable; +// Name of the histogram recording how many times the promo has been shown. +extern const char* const kUMASSORecallPromoSeenCount; + +// Default timeout to wait for fetching account capabilities, which determine +// minor mode restrictions status. +inline constexpr base::TimeDelta kMinorModeRestrictionsFetchDeadline = + base::Milliseconds(500); #endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_constants.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/signin/signin_constants.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.mm index 7e04b26..f6ebbdf 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_constants.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" NSString* const kSkipSigninAccessibilityIdentifier = @"SkipSigninAccessibilityIdentifier";
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h similarity index 63% rename from ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h index db36b22..18516cc 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_COORDINATOR_PROTECTED_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_COORDINATOR_PROTECTED_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_COORDINATOR_PROTECTED_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_COORDINATOR_PROTECTED_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" // Methods available only for subclasses of SigninCoordinator. @interface SigninCoordinator (Protected) @@ -21,4 +21,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_COORDINATOR_PROTECTED_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_COORDINATOR_PROTECTED_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h similarity index 95% rename from ios/chrome/browser/ui/authentication/signin/signin_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h index bb2245e..58a5b54 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_COORDINATOR_H_ #import <UIKit/UIKit.h> #import "base/ios/block_types.h" #import "components/signin/public/base/signin_metrics.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" class Browser; @protocol SystemIdentity; @@ -217,4 +217,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.mm similarity index 89% rename from ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.mm index 514d343c..233c0bb 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.mm
@@ -2,30 +2,30 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" #import "base/notreached.h" #import "base/strings/sys_string_conversions.h" #import "components/pref_registry/pref_registry_syncable.h" #import "components/prefs/pref_service.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/forced_signin/forced_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/history_sync/history_sync_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_screen_provider.h" -#import "ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.h" using signin_metrics::AccessPoint; using signin_metrics::PromoAction;
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator_egtest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator_egtest.mm index c879d00..774d371 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator_egtest.mm
@@ -13,6 +13,11 @@ #import "components/signin/public/base/signin_switches.h" #import "components/strings/grit/components_strings.h" #import "components/sync/base/user_selectable_type.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_ui.h" @@ -30,11 +35,6 @@ #import "ios/chrome/browser/signin/model/capabilities_types.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" @@ -74,8 +74,9 @@ namespace { -// Duplicated from ios/chrome/browser/ui/authentication/authentication_flow.mm, -// which is fine since the enum values should never be renumbered. +// Duplicated from +// ios/chrome/browser/authentication/ui_bundled/authentication_flow.mm, which is +// fine since the enum values should never be renumbered. enum class SigninAccountType { kRegular = 0, kManaged = 1, @@ -290,7 +291,8 @@ // Tests that signing out of a managed account from the Settings works // correctly. // TODO(crbug.com/369617405): Disabled due to flakiness. -- (void)DISABLED_testSignInDisconnectFromChromeManaged_ClearDataFeatureDisabled { +- (void) + DISABLED_testSignInDisconnectFromChromeManaged_ClearDataFeatureDisabled { // Sign-in with a managed account. FakeSystemIdentity* fakeIdentity = [FakeSystemIdentity fakeManagedIdentity]; [SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity];
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/BUILD.gn new file mode 100644 index 0000000..c189242 --- /dev/null +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/BUILD.gn
@@ -0,0 +1,28 @@ +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/chrome_build.gni") + +source_set("signin_history_sync") { + sources = [ + "signin_and_history_sync_coordinator.h", + "signin_and_history_sync_coordinator.mm", + ] + deps = [ + "//components/sync/service", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_screen_provider", + "//ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin", + "//ios/chrome/browser/authentication/ui_bundled/signin/instant_signin", + "//ios/chrome/browser/shared/model/browser", + "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/signin/model", + "//ios/chrome/browser/signin/model:authentication_service", + "//ios/chrome/browser/signin/model:authentication_service_factory", + "//ios/chrome/browser/sync/model", + ] +}
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.h similarity index 71% rename from ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.h index 43178a3..ea968f5a 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_HISTORY_SYNC_SIGNIN_AND_HISTORY_SYNC_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_HISTORY_SYNC_SIGNIN_AND_HISTORY_SYNC_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_HISTORY_SYNC_SIGNIN_AND_HISTORY_SYNC_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_HISTORY_SYNC_SIGNIN_AND_HISTORY_SYNC_COORDINATOR_H_ -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" namespace signin_metrics { enum class AccessPoint : int; @@ -32,4 +32,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_HISTORY_SYNC_SIGNIN_AND_HISTORY_SYNC_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_HISTORY_SYNC_SIGNIN_AND_HISTORY_SYNC_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.mm similarity index 92% rename from ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.mm index 81b2895..29a0376 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.mm
@@ -2,10 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/signin_history_sync/signin_and_history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_history_sync/signin_and_history_sync_coordinator.h" #import "base/strings/sys_string_conversions.h" #import "components/sync/service/sync_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/instant_signin/instant_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/public/features/features.h" @@ -14,13 +21,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/add_account_signin/add_account_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/instant_signin/instant_signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" namespace {
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.h b/ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.h similarity index 61% rename from ios/chrome/browser/ui/authentication/signin/signin_screen_provider.h rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.h index 540de921..e7ca21c 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_SCREEN_PROVIDER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_SCREEN_PROVIDER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_SCREEN_PROVIDER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_SCREEN_PROVIDER_H_ #import <Foundation/Foundation.h> @@ -16,4 +16,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_SCREEN_PROVIDER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_SCREEN_PROVIDER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.mm similarity index 85% rename from ios/chrome/browser/ui/authentication/signin/signin_screen_provider.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.mm index 81f5e9e..2c90e40 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_screen_provider.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/signin_screen_provider.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_screen_provider.h" #import "ios/chrome/browser/screen/ui_bundled/screen_provider+protected.h" #import "ios/chrome/browser/screen/ui_bundled/screen_type.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils.h b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h similarity index 90% rename from ios/chrome/browser/ui/authentication/signin/signin_utils.h rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h index 8e85b3b..ba515438 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_utils.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_UTILS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_UTILS_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_UTILS_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_UTILS_H_ #import <UIKit/UIKit.h> #import "base/ios/block_types.h" #import "components/signin/public/identity_manager/tribool.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/signin/model/capabilities_types.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" class Browser; class ChromeAccountManagerService; @@ -25,7 +25,7 @@ namespace base { class TimeDelta; class Version; -} +} // namespace base namespace signin { @@ -87,4 +87,4 @@ } // namespace signin -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_UTILS_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_SIGNIN_UTILS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/signin/signin_utils.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.mm index 521b8492..78e979d 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_utils.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "base/command_line.h" #import "base/strings/sys_string_conversions.h" @@ -19,6 +19,11 @@ #import "ios/chrome/app/change_profile_commands.h" #import "ios/chrome/app/profile/profile_state.h" #import "ios/chrome/app/tests_hook.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h" +#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/browser.h" @@ -37,11 +42,6 @@ #import "ios/chrome/browser/signin/model/signin_util.h" #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_observer.h" -#import "ios/chrome/browser/ui/authentication/change_profile/change_profile_signout_continuation.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "net/base/network_change_notifier.h" namespace {
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils_unittest.mm similarity index 99% rename from ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/signin_utils_unittest.mm index 39ac923..4b788c5e 100644 --- a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import <UIKit/UIKit.h>
diff --git a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/BUILD.gn similarity index 91% rename from ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/BUILD.gn index 2677ab6..c6322ac9 100644 --- a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/BUILD.gn
@@ -13,17 +13,17 @@ "//components/strings", "//components/sync", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", "//ios/chrome/browser/shared/coordinator/alert", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:trusted_vault", "//ios/chrome/browser/signin/model:trusted_vault_factory", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", "//ui/base", ] public_deps = - [ "//ios/chrome/browser/ui/authentication/signin:signin_headers" ] + [ "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers" ] } source_set("unit_tests") {
diff --git a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/DEPS b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/DEPS similarity index 100% rename from ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/DEPS rename to ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/DEPS
diff --git a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h similarity index 76% rename from ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h index 42f3963..4b18a1c 100644 --- a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_TRUSTED_VAULT_REAUTHENTICATION_TRUSTED_VAULT_REAUTHENTICATION_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_TRUSTED_VAULT_REAUTHENTICATION_TRUSTED_VAULT_REAUTHENTICATION_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_TRUSTED_VAULT_REAUTHENTICATION_TRUSTED_VAULT_REAUTHENTICATION_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_TRUSTED_VAULT_REAUTHENTICATION_TRUSTED_VAULT_REAUTHENTICATION_COORDINATOR_H_ -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" namespace syncer { enum class TrustedVaultUserActionTriggerForUMA; @@ -42,4 +42,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_TRUSTED_VAULT_REAUTHENTICATION_TRUSTED_VAULT_REAUTHENTICATION_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_TRUSTED_VAULT_REAUTHENTICATION_TRUSTED_VAULT_REAUTHENTICATION_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.mm index ae6cbf6..7bfa2cf 100644 --- a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.mm
@@ -2,12 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator.h" #import "base/strings/sys_string_conversions.h" #import "components/strings/grit/components_strings.h" #import "components/sync/service/sync_service_utils.h" #import "components/trusted_vault/trusted_vault_server_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" #import "ios/chrome/browser/shared/coordinator/alert/alert_coordinator.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" @@ -15,8 +17,6 @@ #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/trusted_vault_client_backend.h" #import "ios/chrome/browser/signin/model/trusted_vault_client_backend_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm index 11261aa..2066799 100644 --- a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm
@@ -5,6 +5,9 @@ #import "base/test/ios/wait_util.h" #import "components/sync/service/sync_service_utils.h" #import "components/trusted_vault/trusted_vault_server_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h" @@ -14,9 +17,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/browser/signin/model/trusted_vault_client_backend_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/chrome/test/providers/signin/fake_trusted_vault_client_backend.h" #import "ios/chrome/test/scoped_key_window.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/BUILD.gn similarity index 79% rename from ios/chrome/browser/ui/authentication/signin/two_screens_signin/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/BUILD.gn index 14eeaca..83c1052 100644 --- a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/BUILD.gn
@@ -11,6 +11,11 @@ "//base", "//components/signin/public/identity_manager", "//components/sync/base:features", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_protected", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_screen_provider", + "//ios/chrome/browser/authentication/ui_bundled/signin/logging", "//ios/chrome/browser/first_run/ui_bundled:screen_delegate", "//ios/chrome/browser/first_run/ui_bundled:utils", "//ios/chrome/browser/first_run/ui_bundled/signin", @@ -20,11 +25,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", - "//ios/chrome/browser/ui/authentication/signin:signin_screen_provider", - "//ios/chrome/browser/ui/authentication/signin/logging", ] } @@ -35,6 +35,8 @@ ":two_screens_signin", "//base/test:test_support", "//components/sync/base:features", + "//ios/chrome/browser/authentication/ui_bundled/history_sync:ui", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/first_run/ui_bundled/signin:signin_ui", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser/test:test_support", @@ -46,8 +48,6 @@ "//ios/chrome/browser/signin/model:test_support", "//ios/chrome/browser/sync/model", "//ios/chrome/browser/sync/model:test_support", - "//ios/chrome/browser/ui/authentication/history_sync:ui", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/test:test_support", "//ios/web/public/test", ] @@ -63,6 +63,9 @@ "//components/signin/internal/identity_manager", "//components/signin/ios/browser:features", "//components/sync/base:features", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/flags:system_flags", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled:constants", @@ -70,9 +73,6 @@ "//ios/chrome/browser/signin/model:capabilities_types", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:system_identity_manager", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/chrome/test/earl_grey:switches",
diff --git a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.h similarity index 75% rename from ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.h index cfbf5bbf..e6b9a01 100644 --- a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_TWO_SCREENS_SIGNIN_TWO_SCREENS_SIGNIN_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_TWO_SCREENS_SIGNIN_TWO_SCREENS_SIGNIN_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_TWO_SCREENS_SIGNIN_TWO_SCREENS_SIGNIN_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_TWO_SCREENS_SIGNIN_TWO_SCREENS_SIGNIN_COORDINATOR_H_ +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_screen_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" namespace signin_metrics { enum class AccessPoint : int; @@ -36,4 +36,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_TWO_SCREENS_SIGNIN_TWO_SCREENS_SIGNIN_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_TWO_SCREENS_SIGNIN_TWO_SCREENS_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.mm similarity index 94% rename from ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.mm index 4335ac2..f3286d6 100644 --- a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.h" #import <UIKit/UIKit.h> @@ -10,6 +10,12 @@ #import "base/notreached.h" #import "base/strings/sys_string_conversions.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/upgrade_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator+protected.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_util.h" #import "ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.h" #import "ios/chrome/browser/screen/ui_bundled/screen_provider.h" @@ -20,12 +26,6 @@ #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/logging/upgrade_signin_logger.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator+protected.h" -#import "ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.h" using base::RecordAction; using base::UserMetricsAction;
diff --git a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator_unittest.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator_unittest.mm index 1c5fe133..92c5d63 100644 --- a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/two_screens_signin/two_screens_signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/two_screens_signin_coordinator.h" #import <UIKit/UIKit.h> @@ -11,6 +11,8 @@ #import "base/test/ios/wait_util.h" #import "base/test/metrics/histogram_tester.h" #import "base/test/metrics/user_action_tester.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_view_controller.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_view_controller.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" @@ -22,8 +24,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/browser/sync/model/mock_sync_service_utils.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/gtest_mac.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/upgrade_signin_promo_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/upgrade_signin_promo_egtest.mm similarity index 95% rename from ios/chrome/browser/ui/authentication/signin/two_screens_signin/upgrade_signin_promo_egtest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/upgrade_signin_promo_egtest.mm index f3f3bd9..ef7acb0 100644 --- a/ios/chrome/browser/ui/authentication/signin/two_screens_signin/upgrade_signin_promo_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/upgrade_signin_promo_egtest.mm
@@ -6,15 +6,15 @@ #import "base/test/ios/wait_util.h" #import "components/signin/internal/identity_manager/account_capabilities_constants.h" #import "components/signin/public/base/signin_switches.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/flags/chrome_switches.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/signin/model/capabilities_types.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.h b/ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.h similarity index 60% rename from ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.h rename to ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.h index e4ed13d..c5ba62ad 100644 --- a/ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_UNO_SIGNIN_SCREEN_PROVIDER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_UNO_SIGNIN_SCREEN_PROVIDER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_UNO_SIGNIN_SCREEN_PROVIDER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_UNO_SIGNIN_SCREEN_PROVIDER_H_ #import <Foundation/Foundation.h> @@ -16,4 +16,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_UNO_SIGNIN_SCREEN_PROVIDER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_UNO_SIGNIN_SCREEN_PROVIDER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.mm b/ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.mm similarity index 84% rename from ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.mm rename to ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.mm index c1ed59d2..a44efadd 100644 --- a/ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin/uno_signin_screen_provider.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/uno_signin_screen_provider.h" #import "ios/chrome/browser/screen/ui_bundled/screen_provider+protected.h" #import "ios/chrome/browser/screen/ui_bundled/screen_type.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h index 1c67007..2f29da13 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h
@@ -1,10 +1,131 @@ -// Copyright 2024 The Chromium Authors +// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_H_ #define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_H_ -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" +#import <Foundation/Foundation.h> + +#import "components/sync/base/user_selectable_type.h" +#import "ios/testing/earl_grey/base_eg_test_helper_impl.h" + +@protocol GREYMatcher; +@class FakeSystemIdentity; + +namespace signin { +enum class ConsentLevel; +} + +class GURL; + +#define SigninEarlGrey \ + [SigninEarlGreyImpl invokedFromFile:@"" __FILE__ lineNumber:__LINE__] + +// Methods used for the EarlGrey tests. +// TODO(crbug.com/41465348): Consider moving these into ChromeEarlGrey. +@interface SigninEarlGreyImpl : BaseEGTestHelperImpl + +// Calls -[SigninEarlGreyImpl addFakeIdentity:withUnknownCapabilities:NO]. +- (void)addFakeIdentity:(FakeSystemIdentity*)fakeIdentity; + +// Adds `fakeIdentity` to the fake identity service with capabilities set or +// unset. Does nothing if the identity is already added. +- (void)addFakeIdentity:(FakeSystemIdentity*)fakeIdentity + withUnknownCapabilities:(BOOL)usingUnknownCapabilities; + +// Adds `fakeIdentity` and set the capabilities before firing the list changed +// notification. +- (void)addFakeIdentity:(FakeSystemIdentity*)fakeIdentity + withCapabilities:(NSDictionary<NSString*, NSNumber*>*)capabilities; + +// Calls -[SigninEarlGreyImpl +// addFakeIdentityForSSOAuthAddAccountFlow:withUnknownCapabilities:NO]. +- (void)addFakeIdentityForSSOAuthAddAccountFlow: + (FakeSystemIdentity*)fakeIdentity; + +// Adds `fakeIdentity` to the fake system identity interaction manager with +// capabilities set or unset. This is used to simulate adding the `fakeIdentity` +// through the fake SSO Auth flow done by +// `FakeSystemIdentityInteractionManager`. See +// `kFakeAuthAddAccountButtonIdentifier` to trigger the add account flow. +- (void)addFakeIdentityForSSOAuthAddAccountFlow: + (FakeSystemIdentity*)fakeIdentity + withUnknownCapabilities:(BOOL)usingUnknownCapabilities; + +// Removes `fakeIdentity` from the fake identity service asynchronously to +// simulate identity removal from the device. +- (void)forgetFakeIdentity:(FakeSystemIdentity*)fakeIdentity; + +// Returns YES if the identity was added to the fake identity service. +- (BOOL)isIdentityAdded:(FakeSystemIdentity*)fakeIdentity; + +// Returns the gaia ID of the signed-in account. +// If there is no signed-in account returns an empty string. +- (NSString*)primaryAccountGaiaID; + +// Checks that no identity is signed in. +- (BOOL)isSignedOut; + +// Signs the user out of the primary account. Induces a GREYAssert if the +// app fails to sign out. +- (void)signOut; + +// Signs in with the fake identity and access point Settings. +// Adds the fake-identity to the identity manager if necessary. +// Only intended for tests requiring sign-in but not covering the sign-in UI +// behavior to speed up and simplify those tests. +// Will bypass the usual verifications before signin and other +// entry-point-implemented behavior (e.g. history & tabs sync will be disabled, +// no check for management status, sign-in related +// metrics will not be sent) +// Note that, when sync-the-feature is enabled, this function differs from +// `[SigninEarlGreyUI signinWithFakeIdentity:identity]`. The +// UI function enable sync too. +// TODO(crbug.com/40067025): Remove this last remark when sync is disabled. +- (void)signinWithFakeIdentity:(FakeSystemIdentity*)identity; + +// TODO(crbug.com/40066949): Remove all tests invoking this when deleting the +// MaybeMigrateSyncingUserToSignedIn() call on //ios (not right after launching +// kMigrateSyncingUserToSignedIn). +- (void)signinAndEnableLegacySyncFeature:(FakeSystemIdentity*)identity; + +// Signs in with `identity` without history sync consent. +- (void)signInWithoutHistorySyncWithFakeIdentity:(FakeSystemIdentity*)identity; + +// Triggers the web sign-in consistency dialog. This is done by calling +// directly the current SceneController. +// `url` that triggered the web sign-in/consistency dialog. +- (void)triggerConsistencyPromoSigninDialogWithURL:(GURL)url; + +// Triggers the reauth dialog. This is done by sending ShowSigninCommand to +// SceneController, without any UI interaction to open the dialog. +// TODO(crbug.com/40916763): To be consistent, this method should be renamed to +// `triggerSigninAndSyncReauthWithFakeIdentity:`. +- (void)triggerReauthDialogWithFakeIdentity:(FakeSystemIdentity*)identity; + +// Induces a GREYAssert if `fakeIdentity` is not signed in to the active +// profile. +- (void)verifySignedInWithFakeIdentity:(FakeSystemIdentity*)fakeIdentity; + +// Induces a GREYAssert if the user is not signed in with `expectedEmail`. +- (void)verifyPrimaryAccountWithEmail:(NSString*)expectedEmail + consent:(signin::ConsentLevel)consent; + +// Induces a GREYAssert if an identity is signed in. +- (void)verifySignedOut; + +// Induces a GREYAssert if the Sync state does not match `enabled`. +- (void)verifySyncUIEnabled:(BOOL)enabled; + +// Induces a GREYAssert if the Sync cell is not hidden. +- (void)verifySyncUIIsHidden; + +- (void)setSelectedType:(syncer::UserSelectableType)type enabled:(BOOL)enabled; + +// Returns if the data type is enabled for the sync service. +- (BOOL)isSelectedTypeEnabled:(syncer::UserSelectableType)type; + +@end #endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey.mm b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin_earl_grey.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.mm index 34aa88e..2806fc4a 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.mm
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "base/test/ios/wait_util.h" #import "components/signin/public/base/consent_level.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/testing/earl_grey/earl_grey_test.h" #import "net/base/apple/url_conversions.h"
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h similarity index 93% rename from ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h rename to ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h index 185059d..925868e9 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_APP_INTERFACE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_APP_INTERFACE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_APP_INTERFACE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_APP_INTERFACE_H_ #import <UIKit/UIKit.h> @@ -103,4 +103,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_APP_INTERFACE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_APP_INTERFACE_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.mm b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.mm index fa49384a..a5d3a0b 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h" #import <map> #import <string> @@ -22,6 +22,7 @@ #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_cell.h" #import "ios/chrome/browser/bookmarks/model/bookmarks_utils.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_controller.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" @@ -36,7 +37,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_cell.h" #import "ios/chrome/test/app/chrome_test_util.h" #import "ios/chrome/test/app/signin_test_util.h" #import "ios/testing/earl_grey/earl_grey_app.h"
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface_stub.mm b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface_stub.mm similarity index 77% rename from ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface_stub.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface_stub.mm index 695c9663..44878913 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface_stub.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface_stub.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h" #import "ios/third_party/earl_grey2/src/CommonLib/DistantObject/GREYTestApplicationDistantObject.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h index a0143e6c..b0f3492 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h
@@ -1,10 +1,81 @@ -// Copyright 2024 The Chromium Authors +// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_UI_TEST_UTIL_H_ #define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_UI_TEST_UTIL_H_ -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" +#import <Foundation/Foundation.h> + +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" + +@class FakeSystemIdentity; + +typedef NS_ENUM(NSInteger, SignOutConfirmationChoice) { + SignOutConfirmationChoiceClearData, + SignOutConfirmationChoiceKeepData, + SignOutConfirmationChoiceNotSyncing +}; + +// Test methods that perform sign in actions on Chrome UI. +@interface SigninEarlGreyUI : NSObject + +// Calls +// +[SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableHistorySync:NO]. +// `fakeIdentity` is added if it was not added yet. ++ (void)signinWithFakeIdentity:(FakeSystemIdentity*)fakeIdentity; + +// Signs the account for `fakeIdentity` into Chrome through the Settings screen, +// with history/tab sync enabled or not according to `enableHistorySync` (most +// tests should not require it). +// There will be a GREYAssert if the tools menus is open when calling this +// method or if the account is not successfully signed in. +// `fakeIdentity` is added if it was not added yet. ++ (void)signinWithFakeIdentity:(FakeSystemIdentity*)fakeIdentity + enableHistorySync:(BOOL)enableHistorySync; + +// Signs the primary account out of Chrome through the accounts list screen. +// Taps the "Sign Out" button and dismisses the confirmation snackbar. ++ (void)signOut; + +// dismisses the confirmation snackbar on sign-out. ++ (void)dismissSignoutSnackbar; + +// Opens the confirmation dialog to remove an account from the device, without +// confirming it. ++ (void)openRemoveAccountConfirmationDialogWithFakeIdentity: + (FakeSystemIdentity*)fakeIdentity; + +// Taps "Remove from this device" button and follow-up confirmation. +// Assumes the user is on the Settings screen. ++ (void)tapRemoveAccountFromDeviceWithFakeIdentity: + (FakeSystemIdentity*)fakeIdentity; + +// Opens the recent tabs and tap in the primary sign-in button. ++ (void)tapPrimarySignInButtonInRecentTabs; + +// Opens the tab switcher and tap in the primary sign-in button. ++ (void)tapPrimarySignInButtonInTabSwitcher; + +// Checks that the sign-in promo view (with a close button) is visible using the +// right mode. ++ (void)verifySigninPromoVisibleWithMode:(SigninPromoViewMode)mode; + +// Checks that the sign-in promo view is visible using the right mode. If +// `closeButton` is set to YES, the close button in the sign-in promo has to be +// visible. ++ (void)verifySigninPromoVisibleWithMode:(SigninPromoViewMode)mode + closeButton:(BOOL)closeButton; + +// Checks that the sign-in promo view is not visible. ++ (void)verifySigninPromoNotVisible; + +// Checks that the web sign-in consistency sheet visibility matches `isVisible`. ++ (void)verifyWebSigninIsVisible:(BOOL)isVisible; + +// Submits encryption passphrase, if the user is on the Encryption page. ++ (void)submitSyncPassphrase:(NSString*)passphrase; + +@end #endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_EARL_GREY_UI_TEST_UTIL_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.mm b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.mm similarity index 96% rename from ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.mm index 736f26c..eb4a16c 100644 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.mm
@@ -2,22 +2,22 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "base/apple/foundation_util.h" #import "base/test/ios/wait_util.h" #import "base/time/time.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_constants.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_constants.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_view_controller_constants.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_constants.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_navigation_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" @@ -28,12 +28,12 @@ #import "ui/base/l10n/l10n_util_mac.h" using chrome_test_util::ButtonWithAccessibilityLabel; +using chrome_test_util::IdentityCellMatcherForEmail; using chrome_test_util::PrimarySignInButton; using chrome_test_util::SecondarySignInButton; using chrome_test_util::SettingsAccountButton; using chrome_test_util::SettingsDoneButton; using chrome_test_util::SignOutAccountsButton; -using chrome_test_util::IdentityCellMatcherForEmail; namespace {
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin_matchers.h b/ios/chrome/browser/authentication/ui_bundled/signin_matchers.h index 573cd45..576ed01 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin_matchers.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin_matchers.h
@@ -1,10 +1,53 @@ -// Copyright 2024 The Chromium Authors +// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_MATCHERS_H_ #define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_MATCHERS_H_ -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" +#import <Foundation/Foundation.h> + +@protocol GREYAction; +@protocol GREYMatcher; + +namespace chrome_test_util { + +// Returns a matcher for a TableViewIdentityCell based on the `email`. +id<GREYMatcher> IdentityCellMatcherForEmail(NSString* email); + +// Returns a matcher for the skip button in the web sign-in consistency dialog. +id<GREYMatcher> WebSigninSkipButtonMatcher(); + +// Returns a matcher for the primary button in the web sign-in consistency +// dialog. +id<GREYMatcher> WebSigninPrimaryButtonMatcher(); + +// Returns matcher for the Sync Settings button on the main Settings screen. +// For users who are signed-in but not syncing, this button leads to the sync +// consent dialog instead. +id<GREYMatcher> GoogleSyncSettingsButton(); + +// Matcher for the sign-in screens (like history sync opt-in, upgrade promo…). +id<GREYMatcher> SigninScreenPromoMatcher(); + +// Matcher for the primary button ("Yes, I'm In") in sign-in screens (like +// history sync opt-in, upgrade promo…). +id<GREYMatcher> SigninScreenPromoPrimaryButtonMatcher(); + +// Matcher for the secondary button ("No Thanks") in sign-in screens (like +// history sync opt-in, upgrade promo…). +id<GREYMatcher> SigninScreenPromoSecondaryButtonMatcher(); + +// Matcher for the Settings row which, upon tap, leads the user to sign-in. The +// row is only shown to signed-out users. +id<GREYMatcher> SettingsSignInRowMatcher(); + +// Matcher for the history opt-in screen. +id<GREYMatcher> HistoryOptInPromoMatcher(); + +// Action for searching an UI element in the history opt-in screen.. +id<GREYAction> HistoryOptInScrollDown(); + +} // namespace chrome_test_util #endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_MATCHERS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_matchers.mm b/ios/chrome/browser/authentication/ui_bundled/signin_matchers.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/signin_matchers.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_matchers.mm index 1b39978..df46109 100644 --- a/ios/chrome/browser/ui/authentication/signin_matchers.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_matchers.mm
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/testing/earl_grey/earl_grey_test.h"
diff --git a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h b/ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.h similarity index 87% rename from ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h rename to ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.h index fbb21b1d..b086a88 100644 --- a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_ #import <memory> #import <string> @@ -68,4 +68,4 @@ __weak UIViewController* base_view_controller_ = nil; }; -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_NOTIFICATION_INFOBAR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm b/ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.mm index f3fc8d2..0f8582a 100644 --- a/ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.h" #import <UIKit/UIKit.h>
diff --git a/ios/chrome/browser/ui/authentication/signin_presenter.h b/ios/chrome/browser/authentication/ui_bundled/signin_presenter.h similarity index 62% rename from ios/chrome/browser/ui/authentication/signin_presenter.h rename to ios/chrome/browser/authentication/ui_bundled/signin_presenter.h index e1711f2f..be9487f 100644 --- a/ios/chrome/browser/ui/authentication/signin_presenter.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin_presenter.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_PRESENTER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_PRESENTER_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_PRESENTER_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_PRESENTER_H_ @class ShowSigninCommand; @@ -13,4 +13,4 @@ - (void)showSignin:(ShowSigninCommand*)command; @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_PRESENTER_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_PRESENTER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h b/ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h similarity index 92% rename from ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h rename to ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h index 829727f7..4123cbb9 100644 --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_PROMO_VIEW_MEDIATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_PROMO_VIEW_MEDIATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_PROMO_VIEW_MEDIATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_PROMO_VIEW_MEDIATOR_H_ #import <Foundation/Foundation.h> #import "components/sync/base/data_type.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_delegate.h" class AuthenticationService; class ChromeAccountManagerService; @@ -73,7 +73,7 @@ // the view. The consumer will receive notification if default identity is // changed or updated. // TODO(crbug.com/40898970): This class needs to be split with a coordinator. -@interface SigninPromoViewMediator : NSObject<SigninPromoViewDelegate> +@interface SigninPromoViewMediator : NSObject <SigninPromoViewDelegate> // Consumer to handle identity update notifications. @property(nonatomic, weak) id<SigninPromoViewConsumer> consumer; @@ -158,4 +158,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_PROMO_VIEW_MEDIATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNIN_PROMO_VIEW_MEDIATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.mm index 10754bc4..39b4060 100644 --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import <memory> @@ -18,6 +18,12 @@ #import "components/signin/public/identity_manager/identity_manager.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/discover_feed/model/feed_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" @@ -30,12 +36,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/sync/model/sync_observer_bridge.h" -#import "ios/chrome/browser/ui/authentication/account_settings_presenter.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h" @@ -1014,8 +1014,9 @@ << base::SysNSStringToUTF8([self description]); const char* displayedCountPreferenceKey = DisplayedCountPreferenceKey(self.accessPoint); - if (!displayedCountPreferenceKey) + if (!displayedCountPreferenceKey) { return; + } int displayedCount = self.prefService->GetInteger(displayedCountPreferenceKey); RecordImpressionsTilSigninButtonsHistogramForAccessPoint(self.accessPoint,
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator_unittest.mm similarity index 97% rename from ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator_unittest.mm index e122a7fd..3d9569c 100644 --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "base/functional/callback_helpers.h" #import "base/run_loop.h" @@ -15,6 +15,13 @@ #import "components/sync/test/mock_sync_service.h" #import "components/sync_preferences/pref_service_mock_factory.h" #import "components/sync_preferences/pref_service_syncable.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/policy/model/policy_util.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" @@ -33,13 +40,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/mock_sync_service_utils.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/account_settings_presenter.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" @@ -705,7 +705,8 @@ // Tests that promo setup with kSigninWithNoDefaultIdentity creates the expected // configurator and promo. -TEST_F(SigninPromoViewMediatorTest, SigninPromoWithSigninWithNoDefaultIdentity) { +TEST_F(SigninPromoViewMediatorTest, + SigninPromoWithSigninWithNoDefaultIdentity) { AddDefaultIdentity(); CreateMediator(signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS); ExpectConfiguratorNotification(NO /* identity changed */);
diff --git a/ios/chrome/browser/ui/authentication/signout_action_sheet/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/BUILD.gn similarity index 94% rename from ios/chrome/browser/ui/authentication/signout_action_sheet/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/BUILD.gn index 8b805ac..97a42d1 100644 --- a/ios/chrome/browser/ui/authentication/signout_action_sheet/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/BUILD.gn
@@ -17,6 +17,8 @@ "//components/sync/base:features", "//components/sync/service", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/model/profile", @@ -30,8 +32,6 @@ "//ios/chrome/browser/signin/model:constants", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/third_party/material_components_ios", "//ui/base", ] @@ -82,13 +82,13 @@ "//components/policy/core/common:common_constants", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", "//ios/chrome/browser/settings/ui_bundled/google_services:constants", "//ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts:constants", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:launch_configuration",
diff --git a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h similarity index 90% rename from ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h rename to ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h index f0a268d..7d64f81 100644 --- a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h +++ b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNOUT_ACTION_SHEET_SIGNOUT_ACTION_SHEET_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNOUT_ACTION_SHEET_SIGNOUT_ACTION_SHEET_COORDINATOR_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNOUT_ACTION_SHEET_SIGNOUT_ACTION_SHEET_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNOUT_ACTION_SHEET_SIGNOUT_ACTION_SHEET_COORDINATOR_H_ #import <UIKit/UIKit.h> @@ -80,4 +80,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNOUT_ACTION_SHEET_SIGNOUT_ACTION_SHEET_COORDINATOR_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_SIGNOUT_ACTION_SHEET_SIGNOUT_ACTION_SHEET_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.mm rename to ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.mm index 27c39865..0ef632d 100644 --- a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import <MaterialComponents/MaterialSnackbar.h> @@ -19,6 +19,8 @@ #import "components/strings/grit/components_strings.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" @@ -32,8 +34,6 @@ #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/sync/model/enterprise_utils.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util_mac.h" @@ -582,8 +582,9 @@ // Signs the user out of the primary account and clears the data from their // device if specified to do so. - (void)handleSignOutWithForceClearData:(BOOL)forceClearData { - if (!self.browser) + if (!self.browser) { return; + } if (!self.authenticationService->HasPrimaryIdentity( signin::ConsentLevel::kSignin)) {
diff --git a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator_unittest.mm b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator_unittest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator_unittest.mm rename to ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator_unittest.mm index 79d98ec..18f09fa 100644 --- a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator_unittest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator_unittest.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import <UIKit/UIKit.h>
diff --git a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_egtest.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_egtest.mm rename to ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_egtest.mm index fe3c002f..b33db4e39 100644 --- a/ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_egtest.mm
@@ -5,6 +5,8 @@ #import "base/strings/strcat.h" #import "base/strings/sys_string_conversions.h" #import "components/policy/core/common/policy_loader_ios_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_constants.h" @@ -12,8 +14,6 @@ #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_constants.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/authentication/ui_bundled/views/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/views/BUILD.gn index e1c93317..0bacf9dd 100644 --- a/ios/chrome/browser/authentication/ui_bundled/views/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/views/BUILD.gn
@@ -1,9 +1,32 @@ -# Copyright 2024 The Chromium Authors +# Copyright 2021 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chrome_build.gni") + +source_set("views") { + sources = [ + "identity_button_control.h", + "identity_button_control.mm", + "identity_view.h", + "identity_view.mm", + ] + deps = [ + ":views_constants", + "//base", + "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", + "//ios/chrome/browser/authentication/ui_bundled/views/resources", + "//ios/chrome/browser/shared/ui/util", + "//ios/chrome/common/ui/colors", + "//ios/chrome/common/ui/util", + "//ui/base", + ] +} + source_set("views_constants") { - sources = [ "views_constants.h" ] - public_deps = - [ "//ios/chrome/browser/ui/authentication/views:views_constants" ] + sources = [ + "views_constants.h", + "views_constants.mm", + ] }
diff --git a/ios/chrome/browser/ui/authentication/views/identity_button_control.h b/ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h similarity index 81% rename from ios/chrome/browser/ui/authentication/views/identity_button_control.h rename to ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h index ca5b08e..be4c2ae8 100644 --- a/ios/chrome/browser/ui/authentication/views/identity_button_control.h +++ b/ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_IDENTITY_BUTTON_CONTROL_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_IDENTITY_BUTTON_CONTROL_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_IDENTITY_BUTTON_CONTROL_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_IDENTITY_BUTTON_CONTROL_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" // Enum to choose the arrow on the right of IdentityButtonControl. typedef NS_ENUM(NSInteger, IdentityButtonControlArrowDirection) { @@ -44,4 +44,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_IDENTITY_BUTTON_CONTROL_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_IDENTITY_BUTTON_CONTROL_H_
diff --git a/ios/chrome/browser/ui/authentication/views/identity_button_control.mm b/ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.mm similarity index 93% rename from ios/chrome/browser/ui/authentication/views/identity_button_control.mm rename to ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.mm index 00cb488..a4b49dcd 100644 --- a/ios/chrome/browser/ui/authentication/views/identity_button_control.mm +++ b/ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.mm
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" #import "base/check.h" #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" -#import "ios/chrome/browser/ui/authentication/views/identity_view.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/common/ui/util/pointer_interaction_util.h" @@ -118,8 +118,9 @@ - (void)setIdentityViewStyle:(IdentityViewStyle)style { self.identityView.style = style; - if (!self.highlighted) + if (!self.highlighted) { [self setUnhighlightedBackgroundColor]; + } } - (IdentityViewStyle)identityViewStyle {
diff --git a/ios/chrome/browser/ui/authentication/views/identity_view.h b/ios/chrome/browser/authentication/ui_bundled/views/identity_view.h similarity index 82% rename from ios/chrome/browser/ui/authentication/views/identity_view.h rename to ios/chrome/browser/authentication/ui_bundled/views/identity_view.h index 5a4ebc3..0ee2d55 100644 --- a/ios/chrome/browser/ui/authentication/views/identity_view.h +++ b/ios/chrome/browser/authentication/ui_bundled/views/identity_view.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_IDENTITY_VIEW_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_IDENTITY_VIEW_H_ +#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_IDENTITY_VIEW_H_ +#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_IDENTITY_VIEW_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" // View with the avatar on the leading side, a title and a subtitle. Only the // title is required. The title contains the user name if it exists, or the @@ -45,4 +45,4 @@ @end -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_IDENTITY_VIEW_H_ +#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_IDENTITY_VIEW_H_
diff --git a/ios/chrome/browser/ui/authentication/views/identity_view.mm b/ios/chrome/browser/authentication/ui_bundled/views/identity_view.mm similarity index 98% rename from ios/chrome/browser/ui/authentication/views/identity_view.mm rename to ios/chrome/browser/authentication/ui_bundled/views/identity_view.mm index f7774f27..ce79dd9 100644 --- a/ios/chrome/browser/ui/authentication/views/identity_view.mm +++ b/ios/chrome/browser/authentication/ui_bundled/views/identity_view.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/views/identity_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_view.h" #import "base/check.h" #import "base/check_op.h" @@ -230,8 +230,9 @@ } - (void)setStyle:(IdentityViewStyle)style { - if (_style == style) + if (_style == style) { return; + } _style = style; [self updateStyle]; }
diff --git a/ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/Contents.json b/ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/Contents.json b/ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@2x.png b/ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@2x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@2x.png rename to ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@3x.png b/ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@3x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@3x.png rename to ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_down.imageset/identity_picker_view_arrow_down@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/Contents.json b/ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/Contents.json similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/Contents.json rename to ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/Contents.json
diff --git a/ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@2x.png b/ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@2x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@2x.png rename to ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@3x.png b/ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@3x.png similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@3x.png rename to ios/chrome/browser/authentication/ui_bundled/views/resources/Assets.xcassets/identity_picker_view_arrow_right.imageset/identity_picker_view_arrow_right@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/authentication/views/resources/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/views/resources/BUILD.gn similarity index 100% rename from ios/chrome/browser/ui/authentication/views/resources/BUILD.gn rename to ios/chrome/browser/authentication/ui_bundled/views/resources/BUILD.gn
diff --git a/ios/chrome/browser/authentication/ui_bundled/views/views_constants.h b/ios/chrome/browser/authentication/ui_bundled/views/views_constants.h index de0418ce..799454a5 100644 --- a/ios/chrome/browser/authentication/ui_bundled/views/views_constants.h +++ b/ios/chrome/browser/authentication/ui_bundled/views/views_constants.h
@@ -1,10 +1,27 @@ -// Copyright 2024 The Chromium Authors +// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_VIEWS_CONSTANTS_H_ #define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_VIEWS_CONSTANTS_H_ -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" +#import <Foundation/Foundation.h> + +// Accessibility identifier for the identity picker view. +extern NSString* const kIdentityButtonControlIdentifier; +// Accessibility identifier for "Add Account" button in the identity picker +// view. +extern NSString* const kIdentityPickerAddAccountIdentifier; + +// Style for the identity view (modify the avatar size, font sizes and some +// margins). +typedef NS_ENUM(NSInteger, IdentityViewStyle) { + // Default style. + IdentityViewStyleDefault, + // Style for the identity chooser from the signin view. + IdentityViewStyleIdentityChooser, + // Style for the consistency view. + IdentityViewStyleConsistency, +}; #endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_VIEWS_VIEWS_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/views/views_constants.mm b/ios/chrome/browser/authentication/ui_bundled/views/views_constants.mm similarity index 80% rename from ios/chrome/browser/ui/authentication/views/views_constants.mm rename to ios/chrome/browser/authentication/ui_bundled/views/views_constants.mm index c9ebf6d..cf215bdf 100644 --- a/ios/chrome/browser/ui/authentication/views/views_constants.mm +++ b/ios/chrome/browser/authentication/ui_bundled/views/views_constants.mm
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" NSString* const kIdentityButtonControlIdentifier = @"IdentityButtonControlIdentifier";
diff --git a/ios/chrome/browser/autofill/ui_bundled/BUILD.gn b/ios/chrome/browser/autofill/ui_bundled/BUILD.gn index a46fa10..36710c7 100644 --- a/ios/chrome/browser/autofill/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/autofill/ui_bundled/BUILD.gn
@@ -179,6 +179,7 @@ "//components/strings", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled/address_editor:constants", "//ios/chrome/browser/autofill/ui_bundled/bottom_sheet:constants", "//ios/chrome/browser/badges/ui_bundled:public", @@ -187,7 +188,6 @@ "//ios/chrome/browser/infobars/ui_bundled/modals:public", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/BUILD.gn b/ios/chrome/browser/autofill/ui_bundled/manual_fill/BUILD.gn index 74b91e0..097a891 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/BUILD.gn +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/BUILD.gn
@@ -346,6 +346,7 @@ "//components/plus_addresses/resources/strings", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled/form_input_accessory:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled/manual_fill:eg_test_support+eg2", @@ -362,7 +363,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/util:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common/ui/elements:form_input_accessory", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_unittest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_unittest.mm index 846efda..8663a43f 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_unittest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_unittest.mm
@@ -107,7 +107,8 @@ [[ManualFillPlusAddressItem alloc] initWithPlusAddress:nil contentInjector:nil menuActions:@[] - cellIndexAccessibilityLabel:nil]; + cellIndexAccessibilityLabel:nil + isAddressManualFallbackUI:YES]; [address_view_controller presentPlusAddresses:@[ item ]]; // Override the type for the test. item.type = kItemTypeSampleTwo;
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.h b/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.h index 8c5864c..04be685 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.h +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.h
@@ -37,6 +37,7 @@ (id<ManualFillContentInjector>)contentInjector menuActions:(NSArray<UIAction*>*)menuActions cellIndexAccessibilityLabel:(NSString*)cellIndexAccessibilityLabel + isAddressManualFallbackUI:(BOOL)isAddressManualFallbackUI NS_DESIGNATED_INITIALIZER; - (instancetype)initWithType:(NSInteger)type NS_UNAVAILABLE; @@ -58,7 +59,8 @@ - (void)setUpWithPlusAddress:(ManualFillPlusAddress*)plusAddress contentInjector:(id<ManualFillContentInjector>)contentInjector menuActions:(NSArray<UIAction*>*)menuActions - cellIndexAccessibilityLabel:(NSString*)cellIndexAccessibilityLabel; + cellIndexAccessibilityLabel:(NSString*)cellIndexAccessibilityLabel + isAddressManualFallbackUI:(BOOL)isAddressManualFallbackUI; // Configures the cell for the passed favicon attributes. - (void)configureWithFaviconAttributes:(FaviconAttributes*)attributes;
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.mm index 0d7b33a..a1501fd 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_cell.mm
@@ -54,19 +54,25 @@ @end -@implementation ManualFillPlusAddressItem +@implementation ManualFillPlusAddressItem { + // If `YES`, the manual fallback UI was triggered for addresses, otherwise it + // was triggered for passwords. + BOOL _isAddressManualFallbackUI; +} - (instancetype)initWithPlusAddress:(ManualFillPlusAddress*)plusAddress contentInjector: (id<ManualFillContentInjector>)contentInjector menuActions:(NSArray<UIAction*>*)menuActions - cellIndexAccessibilityLabel:(NSString*)cellIndexAccessibilityLabel { + cellIndexAccessibilityLabel:(NSString*)cellIndexAccessibilityLabel + isAddressManualFallbackUI:(BOOL)isAddressManualFallbackUI { self = [super initWithType:kItemTypeEnumZero]; if (self) { _manualFillPlusAddress = plusAddress; _contentInjector = contentInjector; _menuActions = menuActions; _cellIndexAccessibilityLabel = cellIndexAccessibilityLabel; + _isAddressManualFallbackUI = isAddressManualFallbackUI; self.cellClass = [ManualFillPlusAddressCell class]; } return self; @@ -78,7 +84,8 @@ [cell setUpWithPlusAddress:self.manualFillPlusAddress contentInjector:self.contentInjector menuActions:self.menuActions - cellIndexAccessibilityLabel:_cellIndexAccessibilityLabel]; + cellIndexAccessibilityLabel:_cellIndexAccessibilityLabel + isAddressManualFallbackUI:_isAddressManualFallbackUI]; } - (const GURL&)faviconURL { @@ -137,7 +144,11 @@ @end -@implementation ManualFillPlusAddressCell +@implementation ManualFillPlusAddressCell { + // If `YES`, the manual fallback UI was triggered for addresses, otherwise it + // was triggered for passwords. + BOOL _isAddressManualFallbackUI; +} #pragma mark - Public @@ -160,17 +171,20 @@ self.plusAddress = nil; self.grayLine.hidden = NO; + _isAddressManualFallbackUI = NO; } - (void)setUpWithPlusAddress:(ManualFillPlusAddress*)plusAddress contentInjector:(id<ManualFillContentInjector>)contentInjector menuActions:(NSArray<UIAction*>*)menuActions - cellIndexAccessibilityLabel:(NSString*)cellIndexAccessibilityLabel { + cellIndexAccessibilityLabel:(NSString*)cellIndexAccessibilityLabel + isAddressManualFallbackUI:(BOOL)isAddressManualFallbackUI { if (self.contentView.subviews.count == 0) { [self createViewHierarchy]; } self.contentInjector = contentInjector; self.plusAddress = plusAddress; + _isAddressManualFallbackUI = isAddressManualFallbackUI; // Holds the views whose leading anchor is constrained relative to the cell's // leading anchor. @@ -295,8 +309,16 @@ } - (void)userDidTapPlusAddressButton:(UIButton*)button { - base::RecordAction( - base::UserMetricsAction("ManualFallback_PlusAddress_SelectPlusAddress")); + if (_isAddressManualFallbackUI) { + base::RecordAction(base::UserMetricsAction( + "PlusAddresses." + "StandaloneFillSuggestionOnAddressManualFallbackAccepted")); + } else { + base::RecordAction(base::UserMetricsAction( + "PlusAddresses." + "StandaloneFillSuggestionOnPasswordManualFallbackAccepted")); + } + [self.contentInjector userDidPickContent:self.plusAddress.plusAddress passwordField:NO requiresHTTPS:NO];
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_mediator.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_mediator.mm index f06fd1b..1193815 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_mediator.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_plus_address_mediator.mm
@@ -224,7 +224,8 @@ initWithPlusAddress:plusAddresses[i] contentInjector:self menuActions:menuActions - cellIndexAccessibilityLabel:cellIndexAccessibilityLabel]; + cellIndexAccessibilityLabel:cellIndexAccessibilityLabel + isAddressManualFallbackUI:_isAddressManualFallbackUI]; [items addObject:item]; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm index 92de973..67152fb 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm
@@ -8,6 +8,8 @@ #import "base/test/ios/wait_util.h" #import "components/password_manager/core/browser/password_ui_utils.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h" #import "ios/chrome/browser/autofill/ui_bundled/form_input_accessory/form_input_accessory_app_interface.h" #import "ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_constants.h" @@ -21,8 +23,6 @@ #import "ios/chrome/browser/settings/ui_bundled/password/passwords_table_view_constants.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_unittest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_unittest.mm index 60a991f6..282b1cda 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_unittest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_unittest.mm
@@ -116,7 +116,8 @@ [[ManualFillPlusAddressItem alloc] initWithPlusAddress:plus_address contentInjector:nil menuActions:@[] - cellIndexAccessibilityLabel:nil]; + cellIndexAccessibilityLabel:nil + isAddressManualFallbackUI:NO]; [password_view_controller presentPlusAddresses:@[ item ]]; // Override the type for the test. item.type = kItemTypeSampleTwo; @@ -204,7 +205,8 @@ [[ManualFillPlusAddressItem alloc] initWithPlusAddress:plus_address contentInjector:nil menuActions:@[] - cellIndexAccessibilityLabel:nil]; + cellIndexAccessibilityLabel:nil + isAddressManualFallbackUI:NO]; [password_view_controller presentPlusAddresses:@[ plus_address_item ]]; // Override the type for the test. plus_address_item.type = kItemTypeSampleTwo;
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/plus_address_manual_fill_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/plus_address_manual_fill_egtest.mm index 9450f0f..336b4710 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/plus_address_manual_fill_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/plus_address_manual_fill_egtest.mm
@@ -11,14 +11,14 @@ #import "components/plus_addresses/grit/plus_addresses_strings.h" #import "components/plus_addresses/plus_address_test_utils.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h" #import "ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_constants.h" #import "ios/chrome/browser/autofill/ui_bundled/manual_fill/manual_fill_matchers.h" #import "ios/chrome/browser/plus_addresses/ui/plus_address_app_interface.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/autofill/ui_bundled/save_profile_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/save_profile_egtest.mm index 0caa4d4..37d42cf 100644 --- a/ios/chrome/browser/autofill/ui_bundled/save_profile_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/save_profile_egtest.mm
@@ -11,6 +11,8 @@ #import "components/autofill/core/common/autofill_features.h" #import "components/autofill/ios/common/features.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/autofill/ui_bundled/address_editor/autofill_constants.h" #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h" #import "ios/chrome/browser/autofill/ui_bundled/bottom_sheet/bottom_sheet_constants.h" @@ -19,8 +21,6 @@ #import "ios/chrome/browser/infobars/ui_bundled/infobar_earl_grey_ui_test_util.h" #import "ios/chrome/browser/infobars/ui_bundled/modals/infobar_address_profile_modal_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h"
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/BUILD.gn b/ios/chrome/browser/bookmarks/ui_bundled/BUILD.gn index 6b9b5c1..dbc3748 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/bookmarks/ui_bundled/BUILD.gn
@@ -141,13 +141,13 @@ "//components/sync/base:features", "//components/url_formatter", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/cells:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", "//ios/chrome/browser/policy/model:eg_test_support+eg2", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/cells:constants", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/DEPS b/ios/chrome/browser/bookmarks/ui_bundled/DEPS index 44738a4f..d3a7728b 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/DEPS +++ b/ios/chrome/browser/bookmarks/ui_bundled/DEPS
@@ -1,7 +1,7 @@ include_rules = [ "+ios/chrome/browser/signin/model", "+ios/chrome/browser/sync/model", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/ui/legacy_bookmarks", "+ios/chrome/browser/ui/popup_menu/popup_menu_constants.h", "+ios/chrome/browser/keyboard/ui_bundled",
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/cells/BUILD.gn b/ios/chrome/browser/bookmarks/ui_bundled/cells/BUILD.gn index a99674928..7744d47 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/cells/BUILD.gn +++ b/ios/chrome/browser/bookmarks/ui_bundled/cells/BUILD.gn
@@ -22,6 +22,8 @@ "//components/bookmarks/browser", "//components/url_formatter", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/bookmarks/ui_bundled:constants", "//ios/chrome/browser/bookmarks/ui_bundled:utils", "//ios/chrome/browser/ntp/ui_bundled:logo", @@ -29,8 +31,6 @@ "//ios/chrome/browser/shared/ui/symbols:icons", "//ios/chrome/browser/shared/ui/table_view:styler", "//ios/chrome/browser/shared/ui/table_view/cells", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/common/ui/util", "//ios/third_party/material_components_ios", "//ui/base",
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/BUILD.gn b/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/BUILD.gn index 5c50099..e25bc87 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/BUILD.gn +++ b/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/BUILD.gn
@@ -124,11 +124,11 @@ "//components/strings", "//components/sync/base:features", "//ios/chrome/app/strings:ios_strings_grit", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", "//ios/chrome/browser/bookmarks/ui_bundled:constants", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//net:test_support",
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/bookmarks_folder_chooser_egtest.mm b/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/bookmarks_folder_chooser_egtest.mm index efaa406..0dd80bec 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/bookmarks_folder_chooser_egtest.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/folder_chooser/bookmarks_folder_chooser_egtest.mm
@@ -11,13 +11,13 @@ #import "base/strings/sys_string_conversions.h" #import "base/strings/utf_string_conversions.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_ui.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_ui_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/BUILD.gn b/ios/chrome/browser/bookmarks/ui_bundled/home/BUILD.gn index faa9fb38..318e8cc8 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/BUILD.gn +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/BUILD.gn
@@ -30,6 +30,11 @@ "//components/strings:components_strings_grit", "//ios/chrome/app:tests_hook", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:account_settings_presenter", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", "//ios/chrome/browser/bookmarks/model", "//ios/chrome/browser/bookmarks/model:model_utils", "//ios/chrome/browser/bookmarks/ui_bundled:constants", @@ -78,11 +83,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/sync/model", "//ios/chrome/browser/tabs/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:account_settings_presenter", - "//ios/chrome/browser/ui/authentication:signin_presenter", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", "//ios/chrome/browser/url_loading/model", "//ios/chrome/browser/window_activities/model", "//ios/chrome/common/ui/colors", @@ -132,6 +132,10 @@ "//components/sync/base", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/cells:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", "//ios/chrome/browser/bookmarks/ui_bundled:constants", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", @@ -143,10 +147,6 @@ "//ios/chrome/browser/shared/ui/elements:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:test_constants", - "//ios/chrome/browser/ui/authentication:authentication_constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/cells:constants", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//net:test_support",
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmark_promo_controller.mm b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmark_promo_controller.mm index 57bb9db..10f4ee8 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmark_promo_controller.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmark_promo_controller.mm
@@ -13,6 +13,10 @@ #import "components/signin/public/identity_manager/identity_manager.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "components/sync/service/sync_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_utils_ios.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" @@ -21,10 +25,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/account_settings_presenter.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h" -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" @interface BookmarkPromoController () <SigninPromoViewConsumer, IdentityManagerObserverBridgeDelegate>
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_account_storage_promo_egtest.mm b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_account_storage_promo_egtest.mm index f991c83..ce72cb9 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_account_storage_promo_egtest.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_account_storage_promo_egtest.mm
@@ -9,6 +9,11 @@ #import "components/bookmarks/common/bookmark_features.h" #import "components/signin/public/base/consent_level.h" #import "components/signin/public/base/signin_pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_ui.h" @@ -16,11 +21,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/elements/activity_overlay_egtest_util.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm index add8ee7..9b4ab3b 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm
@@ -9,6 +9,8 @@ #import "base/ios/ios_util.h" #import "base/strings/sys_string_conversions.h" #import "components/signin/public/base/signin_pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_ui.h" @@ -18,8 +20,6 @@ #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_mediator.mm b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_mediator.mm index ec480c0..120106f 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_mediator.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_mediator.mm
@@ -27,6 +27,10 @@ #import "components/sync/service/local_data_description.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "ios/chrome/browser/bookmarks/model/bookmark_model_bridge_observer.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/model/bookmarks_utils.h" @@ -50,10 +54,6 @@ #import "ios/chrome/browser/shared/ui/table_view/table_view_model.h" #import "ios/chrome/browser/sync/model/sync_observer_bridge.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/account_settings_presenter.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_view_controller.mm b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_view_controller.mm index f4c1575..b75fae2 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_view_controller.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_view_controller.mm
@@ -28,6 +28,8 @@ #import "components/prefs/pref_service.h" #import "components/strings/grit/components_strings.h" #import "ios/chrome/app/tests_hook.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h" #import "ios/chrome/browser/bookmarks/model/bookmark_model_bridge_observer.h" #import "ios/chrome/browser/bookmarks/model/bookmark_model_factory.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" @@ -82,8 +84,6 @@ #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h" #import "ios/chrome/browser/url_loading/model/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/model/url_loading_params.h" #import "ios/chrome/browser/window_activities/model/window_activity_helpers.h"
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_promo_egtest.mm b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_promo_egtest.mm index 5b85883..1d73862f 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_promo_egtest.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_promo_egtest.mm
@@ -11,6 +11,11 @@ #import "components/policy/core/common/policy_loader_ios_constants.h" #import "components/policy/policy_constants.h" #import "components/sync/base/user_selectable_type.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_ui.h" @@ -21,11 +26,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/bring_android_tabs/ui_bundled/BUILD.gn b/ios/chrome/browser/bring_android_tabs/ui_bundled/BUILD.gn index 0de1e52..0b6c45b 100644 --- a/ios/chrome/browser/bring_android_tabs/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/bring_android_tabs/ui_bundled/BUILD.gn
@@ -159,9 +159,9 @@ "//base", "//components/sync/base", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/first_run/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/bring_android_tabs/ui_bundled/DEPS b/ios/chrome/browser/bring_android_tabs/ui_bundled/DEPS index 29c2747..2ddfe1a 100644 --- a/ios/chrome/browser/bring_android_tabs/ui_bundled/DEPS +++ b/ios/chrome/browser/bring_android_tabs/ui_bundled/DEPS
@@ -1,6 +1,6 @@ specific_include_rules = { "bring_android_tabs_test_utils\.mm": [ - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/first_run/ui_bundled/first_run_app_interface.h", ], }
diff --git a/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_no_initial_alert_egtest.mm b/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_no_initial_alert_egtest.mm index 660f569..a30e2e1 100644 --- a/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_no_initial_alert_egtest.mm +++ b/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_no_initial_alert_egtest.mm
@@ -3,10 +3,10 @@ // found in the LICENSE file. #import "components/sync/base/user_selectable_type.h" -#import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_test_session.h" #import "ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_test_utils.h" +#import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_test_utils.mm b/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_test_utils.mm index 81b3d814..8c984f20 100644 --- a/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_test_utils.mm +++ b/ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_test_utils.mm
@@ -7,13 +7,13 @@ #import <memory> #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_app_interface.h" #import "ios/chrome/browser/bring_android_tabs/ui_bundled/bring_android_tabs_test_session.h" #import "ios/chrome/browser/bring_android_tabs/ui_bundled/constants.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_app_interface.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/browser_view/ui_bundled/BUILD.gn b/ios/chrome/browser/browser_view/ui_bundled/BUILD.gn index d3d0f96..a83e78d 100644 --- a/ios/chrome/browser/browser_view/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/browser_view/ui_bundled/BUILD.gn
@@ -42,6 +42,7 @@ "//components/signin/core/browser", "//components/signin/ios/browser", "//components/strings", + "//components/supervised_user/core/common:features", "//components/translate/core/browser", "//components/ukm/ios:ukm_url_recorder", "//components/url_formatter", @@ -51,6 +52,9 @@ "//ios/chrome/browser/ai_prototyping/coordinator", "//ios/chrome/browser/app_launcher/model", "//ios/chrome/browser/app_store_rating/ui_bundled:features", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", + "//ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt", "//ios/chrome/browser/autofill/model:model_internal", "//ios/chrome/browser/autofill/model/bottom_sheet", "//ios/chrome/browser/autofill/ui_bundled:coordinator", @@ -218,6 +222,8 @@ "//ios/chrome/browser/ssl/model", "//ios/chrome/browser/start_surface/ui_bundled:feature_flags", "//ios/chrome/browser/store_kit/model", + "//ios/chrome/browser/supervised_user/coordinator", + "//ios/chrome/browser/supervised_user/model", "//ios/chrome/browser/sync/model:sync_error_browser_agent", "//ios/chrome/browser/tab_insertion/model", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/coordinator", @@ -239,9 +245,6 @@ "//ios/chrome/browser/toolbar/ui_bundled/fullscreen:fullscreen_broadcasting_util", "//ios/chrome/browser/toolbar/ui_bundled/public", "//ios/chrome/browser/translate/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:signin_presenter", - "//ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt", "//ios/chrome/browser/ui/content_suggestions", "//ios/chrome/browser/ui/content_suggestions:content_suggestions_constant", "//ios/chrome/browser/ui/fullscreen",
diff --git a/ios/chrome/browser/browser_view/ui_bundled/DEPS b/ios/chrome/browser/browser_view/ui_bundled/DEPS index 7f09115..7991e447 100644 --- a/ios/chrome/browser/browser_view/ui_bundled/DEPS +++ b/ios/chrome/browser/browser_view/ui_bundled/DEPS
@@ -2,6 +2,7 @@ "+components/trusted_vault/trusted_vault_server_constants.h", "+ios/chrome/browser/app_launcher/model", "+ios/chrome/browser/app_store_rating/ui_bundled/features.h", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/autofill/model", "+ios/chrome/browser/autofill/ui_bundled", "+ios/chrome/browser/bookmarks/model/bookmark_model_factory.h", @@ -83,6 +84,7 @@ "+ios/chrome/browser/spotlight_debugger/ui_bundled/spotlight_debugger_coordinator.h", "+ios/chrome/browser/ssl/model/captive_portal_tab_helper.h", "+ios/chrome/browser/store_kit/model", + "+ios/chrome/browser/supervised_user", "+ios/chrome/browser/sync/model/sync_error_browser_agent.h", "+ios/chrome/browser/tab_insertion/model/tab_insertion_browser_agent.h", "+ios/chrome/browser/tab_switcher/ui_bundled",
diff --git a/ios/chrome/browser/browser_view/ui_bundled/browser_coordinator.mm b/ios/chrome/browser/browser_view/ui_bundled/browser_coordinator.mm index a37f1ed..aea5300 100644 --- a/ios/chrome/browser/browser_view/ui_bundled/browser_coordinator.mm +++ b/ios/chrome/browser/browser_view/ui_bundled/browser_coordinator.mm
@@ -29,10 +29,14 @@ #import "components/profile_metrics/browser_profile_type.h" #import "components/safe_browsing/core/common/features.h" #import "components/segmentation_platform/embedder/home_modules/tips_manager/signal_constants.h" +#import "components/supervised_user/core/common/features.h" #import "components/translate/core/browser/translate_manager.h" #import "components/trusted_vault/trusted_vault_server_constants.h" #import "ios/chrome/browser/app_launcher/model/app_launcher_tab_helper_browser_presentation_provider.h" #import "ios/chrome/browser/app_store_rating/ui_bundled/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt/enterprise_prompt_type.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/autofill/model/bottom_sheet/autofill_bottom_sheet_tab_helper.h" #import "ios/chrome/browser/autofill/ui_bundled/authentication/card_unmask_authentication_coordinator.h" #import "ios/chrome/browser/autofill/ui_bundled/bottom_sheet/autofill_edit_profile_bottom_sheet_coordinator.h" @@ -188,6 +192,7 @@ #import "ios/chrome/browser/shared/public/commands/omnibox_commands.h" #import "ios/chrome/browser/shared/public/commands/page_info_commands.h" #import "ios/chrome/browser/shared/public/commands/parcel_tracking_opt_in_commands.h" +#import "ios/chrome/browser/shared/public/commands/parent_access_commands.h" #import "ios/chrome/browser/shared/public/commands/password_breach_commands.h" #import "ios/chrome/browser/shared/public/commands/password_protection_commands.h" #import "ios/chrome/browser/shared/public/commands/password_suggestion_commands.h" @@ -228,6 +233,7 @@ #import "ios/chrome/browser/spotlight_debugger/ui_bundled/spotlight_debugger_coordinator.h" #import "ios/chrome/browser/store_kit/model/store_kit_coordinator.h" #import "ios/chrome/browser/store_kit/model/store_kit_coordinator_delegate.h" +#import "ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.h" #import "ios/chrome/browser/sync/model/sync_error_browser_agent.h" #import "ios/chrome/browser/tab_insertion/model/tab_insertion_browser_agent.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/coordinator/tab_strip_coordinator.h" @@ -242,9 +248,6 @@ #import "ios/chrome/browser/toolbar/ui_bundled/accessory/toolbar_accessory_presenter.h" #import "ios/chrome/browser/toolbar/ui_bundled/toolbar_coordinator.h" #import "ios/chrome/browser/translate/model/chrome_ios_translate_client.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_coordinator.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_type.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_coordinator.h" #import "ios/chrome/browser/ui/whats_new/whats_new_coordinator.h" @@ -323,6 +326,7 @@ PageInfoCommands, PageInfoPresentation, ParcelTrackingOptInCommands, + ParentAccessCommands, PasswordBreachCommands, PasswordControllerDelegate, PasswordProtectionCommands, @@ -477,6 +481,10 @@ @property(nonatomic, strong) ParcelTrackingOptInCoordinator* parcelTrackingOptInCoordinator; +// Coordinator to display local web approvals parent access UI in a bottom +// sheet. +@property(nonatomic, strong) ParentAccessCoordinator* parentAccessCoordinator; + // Coordinator for the PassKit UI presentation. @property(nonatomic, strong) PassKitCoordinator* passKitCoordinator; @@ -989,6 +997,7 @@ @protocol(DefaultBrowserGenericPromoCommands), @protocol(MiniMapCommands), @protocol(ParcelTrackingOptInCommands), + @protocol(ParentAccessCommands), @protocol(UnitConversionCommands), @protocol(AddContactsCommands), @protocol(CountryCodePickerCommands), @@ -3058,6 +3067,41 @@ } } +#pragma mark - ParentAccessCommands + +- (void) + showParentAccessBottomSheetForWebState:(web::WebState*)webState + completion: + (void (^)( + supervised_user::LocalApprovalResult)) + completion { + if (!supervised_user::IsLocalWebApprovalsEnabled()) { + return; + } + + if (self.activeWebState != webState) { + // Do not show the sheet if the current tab is not the one where the + // user initiated parent local web approvals. + return; + } + // Close parent access local web approval if it was already opened for another + // URL. + if (self.parentAccessCoordinator) { + [self.parentAccessCoordinator stop]; + } + + self.parentAccessCoordinator = [[ParentAccessCoordinator alloc] + initWithBaseViewController:self.viewController + browser:self.browser + completion:completion]; + [self.parentAccessCoordinator start]; +} + +- (void)hideParentAccessBottomSheet { + [self.parentAccessCoordinator stop]; + self.parentAccessCoordinator = nil; +} + #pragma mark - PasswordBreachCommands - (void)showPasswordBreachForLeakType:(CredentialLeakType)leakType {
diff --git a/ios/chrome/browser/browser_view/ui_bundled/browser_view_controller.mm b/ios/chrome/browser/browser_view/ui_bundled/browser_view_controller.mm index 4ba72a3..40e8a73a9 100644 --- a/ios/chrome/browser/browser_view/ui_bundled/browser_view_controller.mm +++ b/ios/chrome/browser/browser_view/ui_bundled/browser_view_controller.mm
@@ -18,6 +18,7 @@ #import "components/signin/public/identity_manager/identity_manager.h" #import "components/strings/grit/components_strings.h" #import "components/ukm/ios/ukm_url_recorder.h" +#import "ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h" #import "ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_coordinator.h" #import "ios/chrome/browser/browser_container/ui_bundled/browser_container_view_controller.h" #import "ios/chrome/browser/browser_view/ui_bundled/browser_view_controller+private.h" @@ -77,7 +78,6 @@ #import "ios/chrome/browser/toolbar/ui_bundled/fullscreen/toolbar_ui.h" #import "ios/chrome/browser/toolbar/ui_bundled/fullscreen/toolbar_ui_broadcasting_util.h" #import "ios/chrome/browser/toolbar/ui_bundled/toolbar_coordinator.h" -#import "ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h" #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_animator.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_element.h"
diff --git a/ios/chrome/browser/browser_view/ui_bundled/key_commands_provider.mm b/ios/chrome/browser/browser_view/ui_bundled/key_commands_provider.mm index 8624e7c..fb108a8 100644 --- a/ios/chrome/browser/browser_view/ui_bundled/key_commands_provider.mm +++ b/ios/chrome/browser/browser_view/ui_bundled/key_commands_provider.mm
@@ -248,7 +248,7 @@ l10n_util::GetNSStringWithFixup(IDS_IOS_KEYBOARD_EDIT_BOOKMARK); } } - return [super validateCommand:command]; + [super validateCommand:command]; } #pragma mark - Key Command Actions
diff --git a/ios/chrome/browser/browser_view/ui_bundled/tab_lifecycle_mediator.mm b/ios/chrome/browser/browser_view/ui_bundled/tab_lifecycle_mediator.mm index 456f2b3..b3e966d0 100644 --- a/ios/chrome/browser/browser_view/ui_bundled/tab_lifecycle_mediator.mm +++ b/ios/chrome/browser/browser_view/ui_bundled/tab_lifecycle_mediator.mm
@@ -33,6 +33,7 @@ #import "ios/chrome/browser/shared/public/commands/lens_commands.h" #import "ios/chrome/browser/shared/public/commands/mini_map_commands.h" #import "ios/chrome/browser/shared/public/commands/parcel_tracking_opt_in_commands.h" +#import "ios/chrome/browser/shared/public/commands/parent_access_commands.h" #import "ios/chrome/browser/shared/public/commands/snackbar_commands.h" #import "ios/chrome/browser/shared/public/commands/unit_conversion_commands.h" #import "ios/chrome/browser/shared/public/commands/web_content_commands.h" @@ -40,6 +41,7 @@ #import "ios/chrome/browser/side_swipe/ui_bundled/side_swipe_mediator.h" #import "ios/chrome/browser/snapshots/model/snapshot_tab_helper.h" #import "ios/chrome/browser/ssl/model/captive_portal_tab_helper.h" +#import "ios/chrome/browser/supervised_user/model/supervised_user_error_container.h" #import "ios/chrome/browser/tab_insertion/model/tab_insertion_browser_agent.h" #import "ios/chrome/browser/web/model/annotations/annotations_tab_helper.h" #import "ios/chrome/browser/web/model/print/print_tab_helper.h" @@ -103,6 +105,13 @@ passwordTabHelper->GetPasswordGenerationProvider(); bottomSheetTabHelper->SetPasswordGenerationProvider(generationProvider); + SupervisedUserErrorContainer* supervisedUserErrorContainer = + SupervisedUserErrorContainer::FromWebState(webState); + if (supervisedUserErrorContainer) { + supervisedUserErrorContainer->SetParentAccessBottomSheetHandler( + HandlerForProtocol(_commandDispatcher, ParentAccessCommands)); + } + if (ios::provider::IsLensSupported()) { LensTabHelper* lensTabHelper = LensTabHelper::FromWebState(webState); lensTabHelper->SetLensCommandsHandler( @@ -117,6 +126,8 @@ DCHECK(_downloadManagerTabHelperDelegate); DownloadManagerTabHelper::FromWebState(webState)->SetDelegate( _downloadManagerTabHelperDelegate); + DownloadManagerTabHelper::FromWebState(webState)->SetSnackbarHandler( + static_cast<id<SnackbarCommands>>(_commandDispatcher)); DCHECK(_tabHelperDelegate); NetExportTabHelper::GetOrCreateForWebState(webState)->SetDelegate( @@ -222,6 +233,12 @@ AutofillBottomSheetTabHelper::FromWebState(webState); bottomSheetTabHelper->SetAutofillBottomSheetHandler(nil); + SupervisedUserErrorContainer* supervisedUserErrorContainer = + SupervisedUserErrorContainer::FromWebState(webState); + if (supervisedUserErrorContainer) { + supervisedUserErrorContainer->SetParentAccessBottomSheetHandler(nil); + } + LensTabHelper* lensTabHelper = LensTabHelper::FromWebState(webState); if (lensTabHelper) { lensTabHelper->SetLensCommandsHandler(nil); @@ -230,6 +247,7 @@ OverscrollActionsTabHelper::FromWebState(webState)->SetDelegate(nil); DownloadManagerTabHelper::FromWebState(webState)->SetDelegate(nil); + DownloadManagerTabHelper::FromWebState(webState)->SetSnackbarHandler(nil); NetExportTabHelper::GetOrCreateForWebState(webState)->SetDelegate(nil);
diff --git a/ios/chrome/browser/collaboration/model/BUILD.gn b/ios/chrome/browser/collaboration/model/BUILD.gn index f0999196..1c4d8f4 100644 --- a/ios/chrome/browser/collaboration/model/BUILD.gn +++ b/ios/chrome/browser/collaboration/model/BUILD.gn
@@ -6,13 +6,12 @@ sources = [ "ios_collaboration_controller_delegate.h", "ios_collaboration_controller_delegate.mm", - "ios_collaboration_flow_configuration.h", - "ios_collaboration_flow_configuration.mm", ] deps = [ "//base", "//components/collaboration/public", "//components/signin/public/identity_manager", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/saved_tab_groups/model", "//ios/chrome/browser/share_kit/model", "//ios/chrome/browser/share_kit/model:factory", @@ -20,7 +19,6 @@ "//ios/chrome/browser/shared/model/web_state_list", "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/ui/authentication/signin:constants", "//url", ] } @@ -58,7 +56,9 @@ "//base/test:test_support", "//components/collaboration/public", "//components/data_sharing/public", + "//components/saved_tab_groups/test_support", "//ios/chrome/browser/data_sharing/model", + "//ios/chrome/browser/saved_tab_groups/model", "//ios/chrome/browser/share_kit/model:factory", "//ios/chrome/browser/share_kit/model:test_support", "//ios/chrome/browser/shared/model/application_context",
diff --git a/ios/chrome/browser/collaboration/model/DEPS b/ios/chrome/browser/collaboration/model/DEPS index 79c6d37..4fd32ab 100644 --- a/ios/chrome/browser/collaboration/model/DEPS +++ b/ios/chrome/browser/collaboration/model/DEPS
@@ -7,5 +7,11 @@ "+ios/chrome/browser/signin/model", "+ios/chrome/browser/sync/model", "+ios/chrome/browser/share_kit/model", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", ] + +specific_include_rules = { + ".*test\.mm": [ + "+components/saved_tab_groups/test_support", + ] +}
diff --git a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h index 9d187e5..2140a1c 100644 --- a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h +++ b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h
@@ -14,16 +14,13 @@ namespace collaboration { -class CollaborationFlowConfiguration; // iOS implementation of CollaborationControllerDelegate. class IOSCollaborationControllerDelegate : public CollaborationControllerDelegate { public: - IOSCollaborationControllerDelegate( - Browser* browser, - UIViewController* base_view_controller, - std::unique_ptr<CollaborationFlowConfiguration> collaboration_flow); + IOSCollaborationControllerDelegate(Browser* browser, + UIViewController* base_view_controller); IOSCollaborationControllerDelegate( const IOSCollaborationControllerDelegate&) = delete; @@ -40,8 +37,10 @@ void ShowJoinDialog(const data_sharing::GroupToken& token, const data_sharing::SharedDataPreview& preview_data, ResultCallback result) override; - void ShowShareDialog(ResultCallback result) override; - void ShowManageDialog(ResultCallback result) override; + void ShowShareDialog(const tab_groups::EitherGroupID& either_id, + ResultCallback result) override; + void ShowManageDialog(const tab_groups::EitherGroupID& either_id, + ResultCallback result) override; void PromoteTabGroup(const data_sharing::GroupId& group_id, ResultCallback result) override; void PromoteCurrentScreen() override; @@ -50,7 +49,6 @@ raw_ptr<ShareKitService> share_kit_service_; raw_ptr<Browser> browser_; __weak UIViewController* base_view_controller_; - std::unique_ptr<CollaborationFlowConfiguration> flow_config_; NSString* session_id_ = nil; };
diff --git a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm index 31482e2..b21bc13 100644 --- a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm +++ b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.mm
@@ -11,7 +11,7 @@ #import "components/saved_tab_groups/public/saved_tab_group.h" #import "components/saved_tab_groups/public/tab_group_sync_service.h" #import "components/signin/public/identity_manager/identity_manager.h" -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/saved_tab_groups/model/ios_tab_group_action_context.h" #import "ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.h" #import "ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h" @@ -26,17 +26,13 @@ #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/shared/public/commands/show_signin_command.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" namespace collaboration { IOSCollaborationControllerDelegate::IOSCollaborationControllerDelegate( Browser* browser, - UIViewController* base_view_controller, - std::unique_ptr<CollaborationFlowConfiguration> collaboration_flow) - : browser_(browser), - base_view_controller_(base_view_controller), - flow_config_(std::move(collaboration_flow)) { + UIViewController* base_view_controller) + : browser_(browser), base_view_controller_(base_view_controller) { CHECK(browser_); CHECK(base_view_controller_); share_kit_service_ = @@ -108,7 +104,6 @@ const data_sharing::GroupToken& token, const data_sharing::SharedDataPreview& preview_data, ResultCallback result) { - CHECK_EQ(flow_config_->type(), CollaborationFlowConfiguration::Type::kJoin); ShareKitJoinConfiguration* config = [[ShareKitJoinConfiguration alloc] init]; config.token = token; @@ -125,13 +120,33 @@ } void IOSCollaborationControllerDelegate::ShowShareDialog( + const tab_groups::EitherGroupID& either_id, ResultCallback result) { - CHECK_EQ(flow_config_->type(), - CollaborationFlowConfiguration::Type::kShareOrManage); - const CollaborationFlowConfigurationShareOrManage& share_flow = - flow_config_->As<CollaborationFlowConfigurationShareOrManage>(); - base::WeakPtr<const TabGroup> tab_group = share_flow.tab_group(); + tab_groups::TabGroupSyncService* tab_group_sync_service = + tab_groups::TabGroupSyncServiceFactory::GetForProfile( + browser_->GetProfile()); + if (!tab_group_sync_service) { + std::move(result).Run(CollaborationControllerDelegate::Outcome::kFailure); + return; + } + + std::optional<tab_groups::SavedTabGroup> saved_group = + tab_group_sync_service->GetGroup(either_id); + + if (!saved_group.has_value()) { + std::move(result).Run(CollaborationControllerDelegate::Outcome::kFailure); + return; + } + + const TabGroup* tab_group = nullptr; + for (const TabGroup* group : browser_->GetWebStateList()->GetGroups()) { + if (group->tab_group_id() == saved_group->local_group_id()) { + tab_group = group; + break; + } + } + if (!tab_group) { std::move(result).Run(CollaborationControllerDelegate::Outcome::kFailure); return; @@ -139,7 +154,7 @@ ShareKitShareGroupConfiguration* config = [[ShareKitShareGroupConfiguration alloc] init]; - config.tabGroup = tab_group.get(); + config.tabGroup = tab_group; config.baseViewController = base_view_controller_; config.applicationHandler = HandlerForProtocol(browser_->GetCommandDispatcher(), ApplicationCommands); @@ -155,23 +170,14 @@ } void IOSCollaborationControllerDelegate::ShowManageDialog( + const tab_groups::EitherGroupID& either_id, ResultCallback result) { - CHECK_EQ(flow_config_->type(), - CollaborationFlowConfiguration::Type::kShareOrManage); - const CollaborationFlowConfigurationShareOrManage& manage_configuration = - flow_config_->As<CollaborationFlowConfigurationShareOrManage>(); - base::WeakPtr<const TabGroup> tab_group = manage_configuration.tab_group(); - if (!tab_group) { - std::move(result).Run(CollaborationControllerDelegate::Outcome::kFailure); - return; - } - - tab_groups::TabGroupSyncService* sync_service = + tab_groups::TabGroupSyncService* tab_group_sync_service = tab_groups::TabGroupSyncServiceFactory::GetForProfile( browser_->GetProfile()); tab_groups::CollaborationId collaboration_id = - tab_groups::utils::GetTabGroupCollabID(tab_group.get(), sync_service); + tab_groups::utils::GetTabGroupCollabID(either_id, tab_group_sync_service); if (collaboration_id->empty()) { std::move(result).Run(CollaborationControllerDelegate::Outcome::kFailure); return;
diff --git a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate_unittest.mm b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate_unittest.mm index 0c881da..cc30ced9 100644 --- a/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate_unittest.mm +++ b/ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate_unittest.mm
@@ -6,9 +6,14 @@ #import "base/check.h" #import "base/test/mock_callback.h" +#import "base/test/scoped_feature_list.h" +#import "components/data_sharing/public/features.h" #import "components/data_sharing/public/group_data.h" -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" +#import "components/saved_tab_groups/public/saved_tab_group.h" +#import "components/saved_tab_groups/test_support/fake_tab_group_sync_service.h" +#import "components/saved_tab_groups/test_support/saved_tab_group_test_utils.h" #import "ios/chrome/browser/data_sharing/model/data_sharing_service_factory.h" +#import "ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h" #import "ios/chrome/browser/share_kit/model/share_kit_service_factory.h" #import "ios/chrome/browser/share_kit/model/test_share_kit_service.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" @@ -21,6 +26,7 @@ #import "ios/chrome/browser/shared/public/commands/application_commands.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" #import "ios/chrome/browser/shared/public/commands/show_signin_command.h" +#import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/fake_authentication_service_delegate.h" @@ -28,6 +34,7 @@ #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/test/fakes/fake_ui_view_controller.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" +#import "ios/web/public/test/fakes/fake_web_state.h" #import "ios/web/public/test/web_task_environment.h" #import "testing/platform_test.h" #import "third_party/ocmock/OCMock/OCMock.h" @@ -42,6 +49,11 @@ return std::make_unique<TestShareKitService>(data_sharing_service, nullptr, nullptr); } + +std::unique_ptr<KeyedService> BuildFakeTabGroupSyncService( + web::BrowserState* context) { + return std::make_unique<tab_groups::FakeTabGroupSyncService>(); +} } // namespace namespace collaboration { @@ -50,9 +62,15 @@ class IOSCollaborationControllerDelegateTest : public PlatformTest { protected: IOSCollaborationControllerDelegateTest() { - // Create a tabGroup from the `WebStateListBuilderFromDescription`. - EXPECT_TRUE(builder_.BuildWebStateListFromDescription("| a b [ 0 c ] d e")); - tab_group_ = builder_.GetTabGroupForIdentifier('0'); + scoped_feature_list_.InitWithFeatures( + /*enabled_features=*/ + { + kTabGroupSync, + kTabGroupsIPad, + kModernTabStrip, + data_sharing::features::kDataSharingFeature, + }, + /*disable_features=*/{}); // Init the delegate parameters. TestProfileIOS::Builder test_cbs_builder; @@ -61,11 +79,32 @@ AuthenticationServiceFactory::GetFactoryWithDelegate( std::make_unique<FakeAuthenticationServiceDelegate>())); test_cbs_builder.AddTestingFactory( + tab_groups::TabGroupSyncServiceFactory::GetInstance(), + base::BindRepeating(&BuildFakeTabGroupSyncService)); + test_cbs_builder.AddTestingFactory( ShareKitServiceFactory::GetInstance(), base::BindRepeating(&BuildTestShareKitService)); profile_ = std::move(test_cbs_builder).Build(); browser_ = std::make_unique<TestBrowser>(profile_.get()); + web_state_list_ = browser_->GetWebStateList(); + web_state_list_->InsertWebState(std::make_unique<web::FakeWebState>()); + web_state_list_->InsertWebState(std::make_unique<web::FakeWebState>()); + web_state_list_->InsertWebState(std::make_unique<web::FakeWebState>()); + + web_state_list_->CreateGroup({1}, {}, + tab_groups::TabGroupId::GenerateNew()); + + tab_group_ = web_state_list_->GetGroupOfWebStateAt(1); + + tab_groups::SavedTabGroup saved_group = + tab_groups::test::CreateTestSavedTabGroup(); + saved_group.SetLocalGroupId(tab_group_->tab_group_id()); + tab_group_sync_service_ = + tab_groups::TabGroupSyncServiceFactory::GetForProfile(profile_.get()); + + tab_group_sync_service_->AddGroup(saved_group); + CommandDispatcher* command_dispatcher = browser_->GetCommandDispatcher(); application_commands_mock_ = OCMStrictProtocolMock(@protocol(ApplicationCommands)); @@ -76,19 +115,10 @@ base_view_controller_ = [[FakeUIViewController alloc] init]; } - // Init the delegate for a share flow. - void InitShareFlowDelegate() { + // Init the delegate for a flow. + void InitDelegate() { delegate_ = std::make_unique<IOSCollaborationControllerDelegate>( - browser_.get(), base_view_controller_, - std::make_unique<CollaborationFlowConfigurationShareOrManage>( - tab_group_->GetWeakPtr())); - } - - // Init the delegate for a join flow. - void InitJoinFlowDelegate() { - delegate_ = std::make_unique<IOSCollaborationControllerDelegate>( - browser_.get(), base_view_controller_, - std::make_unique<CollaborationFlowConfigurationJoin>()); + browser_.get(), base_view_controller_); } // Sign in in the authentication service with a fake identity. @@ -104,10 +134,10 @@ IOSChromeScopedTestingLocalState scoped_testing_local_state_; web::WebTaskEnvironment task_environment_; + base::test::ScopedFeatureList scoped_feature_list_; + raw_ptr<tab_groups::TabGroupSyncService> tab_group_sync_service_; std::unique_ptr<IOSCollaborationControllerDelegate> delegate_; - FakeWebStateListDelegate web_state_list_delegate_; - WebStateList web_state_list_{&web_state_list_delegate_}; - WebStateListBuilderFromDescription builder_{&web_state_list_}; + raw_ptr<WebStateList> web_state_list_; id<ApplicationCommands> application_commands_mock_; std::unique_ptr<Browser> browser_; std::unique_ptr<TestProfileIOS> profile_; @@ -118,10 +148,11 @@ // Tests `ShowShareDialog` with a valid tabGroup. TEST_F(IOSCollaborationControllerDelegateTest, ShowShareDialogValid) { - InitShareFlowDelegate(); + InitDelegate(); base::MockCallback<CollaborationControllerDelegate::ResultCallback> completion_callback; - delegate_->ShowShareDialog(completion_callback.Get()); + delegate_->ShowShareDialog(tab_group_->tab_group_id(), + completion_callback.Get()); EXPECT_TRUE(base_view_controller_.presentedViewController); // The callback is not expected to be called, as it is called when the // given ShareKit flow returns, i.e. when the presented view controller is @@ -130,22 +161,24 @@ // Tests `ShowShareDialog` with an invalid tabGroup. TEST_F(IOSCollaborationControllerDelegateTest, ShowShareDialogInvalid) { - InitShareFlowDelegate(); + InitDelegate(); + + tab_groups::TabGroupId tab_group_id = tab_group_->tab_group_id(); // Delete the tabGroup. - web_state_list_.DeleteGroup(tab_group_); + web_state_list_->DeleteGroup(tab_group_); base::MockCallback<CollaborationControllerDelegate::ResultCallback> completion_callback; EXPECT_CALL(completion_callback, Run(CollaborationControllerDelegate::Outcome::kFailure)); - delegate_->ShowShareDialog(completion_callback.Get()); + delegate_->ShowShareDialog(tab_group_id, completion_callback.Get()); EXPECT_FALSE(base_view_controller_.presentedViewController); } // Tests `ShowJoinDialog`. TEST_F(IOSCollaborationControllerDelegateTest, ShowJoinDialog) { - InitJoinFlowDelegate(); + InitDelegate(); base::MockCallback<CollaborationControllerDelegate::ResultCallback> completion_callback; data_sharing::SharedDataPreview preview_data; @@ -159,7 +192,7 @@ // Tests `ShowAuthenticationUi` from a share flow. TEST_F(IOSCollaborationControllerDelegateTest, ShowAuthenticationUiShareFlow) { - InitShareFlowDelegate(); + InitDelegate(); base::MockCallback<CollaborationControllerDelegate::ResultCallback> completion_callback; OCMExpect([application_commands_mock_ @@ -174,7 +207,7 @@ // Tests `ShowAuthenticationUi` from a join flow. TEST_F(IOSCollaborationControllerDelegateTest, ShowAuthenticationUiJoinFlow) { - InitJoinFlowDelegate(); + InitDelegate(); base::MockCallback<CollaborationControllerDelegate::ResultCallback> completion_callback; OCMExpect([application_commands_mock_ @@ -191,7 +224,7 @@ TEST_F(IOSCollaborationControllerDelegateTest, ShowAuthenticationUiSyncJoinFlow) { SignIn(); - InitJoinFlowDelegate(); + InitDelegate(); base::MockCallback<CollaborationControllerDelegate::ResultCallback> completion_callback; OCMExpect([application_commands_mock_ @@ -207,7 +240,7 @@ // Tests `NotifySignInAndSyncStatusChange`. TEST_F(IOSCollaborationControllerDelegateTest, NotifySignInAndSyncStatusChange) { - InitJoinFlowDelegate(); + InitDelegate(); delegate_->NotifySignInAndSyncStatusChange(); }
diff --git a/ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h b/ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h deleted file mode 100644 index 041d5f0..0000000 --- a/ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h +++ /dev/null
@@ -1,90 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_COLLABORATION_MODEL_IOS_COLLABORATION_FLOW_CONFIGURATION_H_ -#define IOS_CHROME_BROWSER_COLLABORATION_MODEL_IOS_COLLABORATION_FLOW_CONFIGURATION_H_ - -#import <UIKit/UIKit.h> - -#import "base/memory/raw_ptr.h" -#import "base/memory/weak_ptr.h" -#import "components/saved_tab_groups/public/types.h" - -class TabGroup; - -namespace collaboration { - -// This class is a generic configuration for a collaboration flow. -class CollaborationFlowConfiguration { - public: - // The type of collaboration flow. - enum class Type { - // Share or manage flow. - kShareOrManage, - // Join flow. - kJoin, - }; - - // Non-copyable, non-moveable. - CollaborationFlowConfiguration(const CollaborationFlowConfiguration&) = - delete; - CollaborationFlowConfiguration& operator=( - const CollaborationFlowConfiguration&) = delete; - - virtual ~CollaborationFlowConfiguration() = default; - - // Returns the type of the collaboration flow configuration. - virtual Type type() const = 0; - - // Casts the dialog to the given type. - template <typename T> - const T& As() const { - CHECK(type() == T::kType); - return static_cast<const T&>(*this); - } - - protected: - CollaborationFlowConfiguration() = default; - - private: -}; - -// This class is the configuration for a share or a manage flow. -class CollaborationFlowConfigurationShareOrManage final - : public CollaborationFlowConfiguration { - public: - static constexpr Type kType = Type::kShareOrManage; - - // Constructs a new CollaborationFlowConfigurationShareOrManage object. - explicit CollaborationFlowConfigurationShareOrManage( - base::WeakPtr<const TabGroup> tab_group); - ~CollaborationFlowConfigurationShareOrManage() override; - - // CollaborationFlowConfiguration. - Type type() const final; - - // Returns the tab group associated with the flow configuration. - base::WeakPtr<const TabGroup> tab_group() const { return tab_group_; } - - private: - base::WeakPtr<const TabGroup> tab_group_; -}; - -// This class is the configuration for a join flow. -class CollaborationFlowConfigurationJoin final - : public CollaborationFlowConfiguration { - public: - static constexpr Type kType = Type::kJoin; - - // Constructs a new CollaborationFlowConfigurationJoin object. - explicit CollaborationFlowConfigurationJoin(); - ~CollaborationFlowConfigurationJoin() override; - - // CollaborationFlowConfiguration. - Type type() const final; -}; - -} // namespace collaboration - -#endif // IOS_CHROME_BROWSER_COLLABORATION_MODEL_IOS_COLLABORATION_FLOW_CONFIGURATION_H_
diff --git a/ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.mm b/ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.mm deleted file mode 100644 index 0b3ba02..0000000 --- a/ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.mm +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" - -#import "base/check.h" -#import "base/functional/callback.h" -#import "ios/chrome/browser/share_kit/model/share_kit_service.h" -#import "ios/chrome/browser/shared/model/browser/browser.h" -#import "ios/chrome/browser/shared/model/web_state_list/tab_group.h" -#import "ios/chrome/browser/shared/public/commands/application_commands.h" - -namespace collaboration { - -#pragma mark - CollaborationFlowConfigurationShareOrManage - -CollaborationFlowConfigurationShareOrManage:: - CollaborationFlowConfigurationShareOrManage( - base::WeakPtr<const TabGroup> tab_group) - : tab_group_(tab_group) { - CHECK(tab_group_); -} - -CollaborationFlowConfigurationShareOrManage:: - ~CollaborationFlowConfigurationShareOrManage() {} - -CollaborationFlowConfiguration::Type -CollaborationFlowConfigurationShareOrManage::type() const { - return kType; -} - -#pragma mark - CollaborationFlowConfigurationJoin - -CollaborationFlowConfigurationJoin::CollaborationFlowConfigurationJoin() {} - -CollaborationFlowConfigurationJoin::~CollaborationFlowConfigurationJoin() {} - -CollaborationFlowConfiguration::Type CollaborationFlowConfigurationJoin::type() - const { - return kType; -} - -} // namespace collaboration
diff --git a/ios/chrome/browser/data_sharing/model/data_sharing_ui_delegate_ios.mm b/ios/chrome/browser/data_sharing/model/data_sharing_ui_delegate_ios.mm index 0bc2ea0..481f9b5 100644 --- a/ios/chrome/browser/data_sharing/model/data_sharing_ui_delegate_ios.mm +++ b/ios/chrome/browser/data_sharing/model/data_sharing_ui_delegate_ios.mm
@@ -8,7 +8,6 @@ #import "base/notimplemented.h" #import "components/collaboration/public/collaboration_service.h" #import "ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h" -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" #import "ios/chrome/browser/data_sharing/model/ios_share_url_interception_context.h" #import "ios/chrome/browser/share_kit/model/share_kit_service.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" @@ -18,7 +17,6 @@ #import "ios_share_url_interception_context.h" #import "url/gurl.h" -using collaboration::CollaborationFlowConfigurationJoin; using collaboration::IOSCollaborationControllerDelegate; namespace data_sharing { @@ -60,8 +58,7 @@ std::unique_ptr<IOSCollaborationControllerDelegate> delegate = std::make_unique<IOSCollaborationControllerDelegate>( - browser, base_view_controller, - std::make_unique<CollaborationFlowConfigurationJoin>()); + browser, base_view_controller); collaboration_service_->StartJoinFlow(std::move(delegate), url); }
diff --git a/ios/chrome/browser/default_promo/ui_bundled/BUILD.gn b/ios/chrome/browser/default_promo/ui_bundled/BUILD.gn index b95659f..61058b4 100644 --- a/ios/chrome/browser/default_promo/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/default_promo/ui_bundled/BUILD.gn
@@ -108,10 +108,10 @@ "//components/metrics", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/infobars/ui_bundled/banners:public", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/download/model/BUILD.gn b/ios/chrome/browser/download/model/BUILD.gn index 4731efd..9b223ee2 100644 --- a/ios/chrome/browser/download/model/BUILD.gn +++ b/ios/chrome/browser/download/model/BUILD.gn
@@ -45,21 +45,33 @@ deps = [ "//base", + "//components/keyed_service/core", + "//components/keyed_service/ios", + "//components/policy/core/common", + "//components/prefs", "//components/strings", "//ios/chrome/app/strings", "//ios/chrome/browser/download/ui_bundled:features", + "//ios/chrome/browser/drive/model:drive_availability", + "//ios/chrome/browser/drive/model:drive_service_factory", + "//ios/chrome/browser/drive/model:drive_service_factory", "//ios/chrome/browser/drive/model:drive_tab_helper", + "//ios/chrome/browser/drive/model:policy", "//ios/chrome/browser/drive/model:upload_task", "//ios/chrome/browser/overlays/model", "//ios/chrome/browser/overlays/model/public/common/confirmation", "//ios/chrome/browser/overlays/model/public/common/confirmation:util", "//ios/chrome/browser/prerender/model", + "//ios/chrome/browser/shared/model/browser", + "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/model/profile", "//ios/chrome/browser/shared/model/profile:profile_keyed_service_factory", "//ios/chrome/browser/shared/model/url:constants", "//ios/chrome/browser/shared/model/utils", + "//ios/chrome/browser/shared/model/web_state_list:utils", "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/shared/public/features", + "//ios/chrome/browser/signin/model", "//ios/chrome/browser/ui/fullscreen", "//ios/chrome/browser/ui/fullscreen:ui", "//ios/web/common", @@ -105,13 +117,25 @@ deps = [ ":test_support", "//base/test:test_support", + "//components/policy/core/common:common_constants", + "//components/prefs:test_support", "//ios/chrome/browser/download/model", "//ios/chrome/browser/download/ui_bundled:features", "//ios/chrome/browser/drive/model:drive_tab_helper", + "//ios/chrome/browser/drive/model:policy", + "//ios/chrome/browser/shared/model/application_context", + "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/model/profile/test", "//ios/chrome/browser/shared/model/utils", + "//ios/chrome/browser/shared/public/commands", + "//ios/chrome/browser/signin/model:authentication_service", + "//ios/chrome/browser/signin/model:authentication_service_factory", + "//ios/chrome/browser/signin/model:fake_system_identity", + "//ios/chrome/browser/signin/model:fake_system_identity_manager", + "//ios/chrome/browser/signin/model:test_support", "//ios/chrome/browser/ui/fullscreen:internal", "//ios/chrome/browser/ui/fullscreen/test", + "//ios/chrome/test:test_support", "//ios/chrome/test/fakes", "//ios/web/public", "//ios/web/public/download",
diff --git a/ios/chrome/browser/download/model/DEPS b/ios/chrome/browser/download/model/DEPS index 7d25f33..610a7d4e 100644 --- a/ios/chrome/browser/download/model/DEPS +++ b/ios/chrome/browser/download/model/DEPS
@@ -3,6 +3,7 @@ "+ios/chrome/browser/overlays/model/public", "+ios/chrome/browser/optimization_guide/model", "+ios/chrome/browser/drive/model", + "+ios/chrome/browser/signin/model", ] specific_include_rules = {
diff --git a/ios/chrome/browser/download/model/document_download_tab_helper.mm b/ios/chrome/browser/download/model/document_download_tab_helper.mm index 4e52df2d..eac0da15 100644 --- a/ios/chrome/browser/download/model/document_download_tab_helper.mm +++ b/ios/chrome/browser/download/model/document_download_tab_helper.mm
@@ -188,6 +188,10 @@ GURL url = web_state->GetLastCommittedURL(); should_trigger = should_trigger && url.SchemeIsHTTPOrHTTPS(); + // Only trigger when download is not restricted. + should_trigger = should_trigger && + !DownloadManagerTabHelper::ShouldRestrictDownload(web_state); + if (should_trigger) { base::UmaHistogramEnumeration(kIOSDocumentDownloadMimeType, GetDownloadMimeTypeResultFromMimeType(
diff --git a/ios/chrome/browser/download/model/document_download_tab_helper_unittest.mm b/ios/chrome/browser/download/model/document_download_tab_helper_unittest.mm index af9d008..a00e38a3 100644 --- a/ios/chrome/browser/download/model/document_download_tab_helper_unittest.mm +++ b/ios/chrome/browser/download/model/document_download_tab_helper_unittest.mm
@@ -5,9 +5,13 @@ #import "ios/chrome/browser/download/model/document_download_tab_helper.h" #import "base/test/metrics/histogram_tester.h" +#import "components/policy/core/common/policy_pref_names.h" +#import "components/prefs/testing_pref_service.h" #import "ios/chrome/browser/download/model/document_download_tab_helper_metrics.h" #import "ios/chrome/browser/download/model/download_manager_tab_helper.h" #import "ios/chrome/browser/download/model/download_mimetype_util.h" +#import "ios/chrome/browser/drive/model/drive_policy.h" +#import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h" #import "ios/chrome/test/fakes/fake_download_manager_tab_helper_delegate.h" #import "ios/web/public/download/download_controller.h" @@ -70,6 +74,40 @@ DocumentDownloadState::kNotStarted, 1); } +// Tests that loading a PDF will not trigger a download task when download +// restriction is enabled. +TEST_F(DocumentDownloadTabHelperTest, + NoDownloadPDFWhenDownloadRestrictionEnabled) { + PrefService* pref_service = profile_->GetPrefs(); + pref_service->SetInteger( + policy::policy_prefs::kDownloadRestrictions, + static_cast<int>(policy::DownloadRestriction::ALL_FILES)); + pref_service->SetInteger( + prefs::kIosSaveToDriveDownloadManagerPolicySettings, + static_cast<int>(SaveToDrivePolicySettings::kDisabled)); + base::HistogramTester histogram_tester; + web_state_.SetContentsMimeType("application/pdf"); + web_state_.SetCurrentURL(GURL("https://foo.test")); + web_state_.SetContentIsHTML(false); + web_state_.OnPageLoaded(web::PageLoadCompletionStatus::SUCCESS); + EXPECT_EQ(nullptr, download_manager_delegate_.state); + + web::FakeNavigationContext context; + web_state_.OnNavigationStarted(&context); + + histogram_tester.ExpectUniqueSample( + kIOSDocumentDownloadMimeType, + DownloadMimeTypeResult::AdobePortableDocumentFormat, 0); + histogram_tester.ExpectUniqueSample(kIOSDocumentDownloadSizeInMB, 0, 0); + histogram_tester.ExpectUniqueSample( + kIOSDocumentDownloadConflictResolution, + DocumentDownloadConflictResolution::kNoConflict, 0); + histogram_tester.ExpectUniqueSample(kIOSDocumentDownloadStateAtNavigation, + DocumentDownloadState::kNotStarted, 0); + histogram_tester.ExpectUniqueSample(kIOSDocumentDownloadFinalState, + DocumentDownloadState::kNotStarted, 0); +} + // Tests that loading an HTML page will not trigger a download task. TEST_F(DocumentDownloadTabHelperTest, NoPDFNoDownload) { base::HistogramTester histogram_tester;
diff --git a/ios/chrome/browser/download/model/download_manager_tab_helper.h b/ios/chrome/browser/download/model/download_manager_tab_helper.h index 2a1178001..fd4b88a 100644 --- a/ios/chrome/browser/download/model/download_manager_tab_helper.h +++ b/ios/chrome/browser/download/model/download_manager_tab_helper.h
@@ -14,6 +14,8 @@ #include "ios/web/public/web_state_observer.h" #include "ios/web/public/web_state_user_data.h" +@protocol SnackbarCommands; + namespace web { class DownloadTask; class WebState; @@ -30,6 +32,15 @@ ~DownloadManagerTabHelper() override; + // Returns whether downloads should be restricted. It checks if downloads + // should be restricted based on the download restriction policy for files, + // save to drive policy, and incognito. + static bool ShouldRestrictDownload(web::WebState* web_state); + + // Returns whether downloads to file should be restricted. It checks if + // downloads should be restricted based on the download restriction policy. + static bool ShouldRestrictDownloadToFile(web::WebState* web_state); + // Set the current download task for this tab. virtual void SetCurrentDownload(std::unique_ptr<web::DownloadTask> task); @@ -43,6 +54,9 @@ // Sets the delegate. The tab helper will no-op if the delegate is nil. void SetDelegate(id<DownloadManagerTabHelperDelegate> delegate); + // Sets the snackbar handler. + void SetSnackbarHandler(id<SnackbarCommands> snackbar_handler); + // Starts the current download task. Asserts that `task == task_`. virtual void StartDownload(web::DownloadTask* task); @@ -77,8 +91,12 @@ void OnDownloadPolicyDecision(std::unique_ptr<web::DownloadTask> task, NewDownloadPolicy policy); + // Displays a snackbar when download is restricted. + void ShowRestrictDownloadSnackbar(); + raw_ptr<web::WebState> web_state_ = nullptr; __weak id<DownloadManagerTabHelperDelegate> delegate_ = nil; + __weak id<SnackbarCommands> snackbar_handler_ = nil; std::unique_ptr<web::DownloadTask> task_; bool delegate_started_ = false;
diff --git a/ios/chrome/browser/download/model/download_manager_tab_helper.mm b/ios/chrome/browser/download/model/download_manager_tab_helper.mm index fd8c8e5..de8efa0 100644 --- a/ios/chrome/browser/download/model/download_manager_tab_helper.mm +++ b/ios/chrome/browser/download/model/download_manager_tab_helper.mm
@@ -8,11 +8,27 @@ #import "base/feature_list.h" #import "base/functional/callback_helpers.h" #import "base/memory/ptr_util.h" +#import "components/policy/core/common/policy_pref_names.h" +#import "components/prefs/pref_service.h" #import "ios/chrome/browser/download/model/download_manager_tab_helper_delegate.h" +#import "ios/chrome/browser/drive/model/drive_availability.h" +#import "ios/chrome/browser/drive/model/drive_policy.h" +#import "ios/chrome/browser/drive/model/drive_service_factory.h" #import "ios/chrome/browser/drive/model/drive_tab_helper.h" #import "ios/chrome/browser/drive/model/upload_task.h" +#import "ios/chrome/browser/shared/model/browser/browser.h" +#import "ios/chrome/browser/shared/model/browser/browser_list.h" +#import "ios/chrome/browser/shared/model/browser/browser_list_factory.h" +#import "ios/chrome/browser/shared/model/prefs/pref_names.h" +#import "ios/chrome/browser/shared/model/profile/profile_ios.h" +#import "ios/chrome/browser/shared/model/web_state_list/browser_util.h" +#import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" +#import "ios/chrome/browser/shared/public/commands/snackbar_commands.h" #import "ios/chrome/browser/shared/public/features/features.h" +#import "ios/chrome/browser/signin/model/identity_manager_factory.h" +#import "ios/chrome/grit/ios_strings.h" #import "ios/web/public/download/download_task.h" +#import "ui/base/l10n/l10n_util_mac.h" DownloadManagerTabHelper::DownloadManagerTabHelper(web::WebState* web_state) : web_state_(web_state) { @@ -34,8 +50,39 @@ #pragma mark - Public methods +// static +bool DownloadManagerTabHelper::ShouldRestrictDownloadToFile( + web::WebState* web_state) { + ProfileIOS* profile = + ProfileIOS::FromBrowserState(web_state->GetBrowserState()); + PrefService* pref_service = profile->GetPrefs(); + return static_cast<policy::DownloadRestriction>(pref_service->GetInteger( + policy::policy_prefs::kDownloadRestrictions)) == + policy::DownloadRestriction::ALL_FILES; +} + +// static +bool DownloadManagerTabHelper::ShouldRestrictDownload( + web::WebState* web_state) { + ProfileIOS* profile = + ProfileIOS::FromBrowserState(web_state->GetBrowserState()); + PrefService* pref_service = profile->GetPrefs(); + bool is_save_to_drive_available = drive::IsSaveToDriveAvailable( + profile->IsOffTheRecord(), IdentityManagerFactory::GetForProfile(profile), + drive::DriveServiceFactory::GetForProfile(profile), pref_service); + return ShouldRestrictDownloadToFile(web_state) && !is_save_to_drive_available; +} + void DownloadManagerTabHelper::SetCurrentDownload( std::unique_ptr<web::DownloadTask> task) { + // Check if the download should be restricted. + if (task && ShouldRestrictDownload(web_state_)) { + if (web_state_->IsVisible()) { + ShowRestrictDownloadSnackbar(); + } + return; + } + // If downloads are persistent, they cannot be lost once completed. if (!task_ || (task_->GetState() == web::DownloadTask::State::kComplete && !WillDownloadTaskBeSavedToDrive())) { @@ -44,6 +91,14 @@ return; } + // If there is no new task and an existing task is present, remove the + // observer and reset the task. + if (!task) { + task_->RemoveObserver(this); + task_ = nullptr; + return; + } + // Capture a raw pointer to `task` before moving it into `callback`. web::DownloadTask* task_ptr = task.get(); auto callback = @@ -71,6 +126,11 @@ delegate_ = delegate; } +void DownloadManagerTabHelper::SetSnackbarHandler( + id<SnackbarCommands> snackbar_handler) { + snackbar_handler_ = snackbar_handler; +} + void DownloadManagerTabHelper::StartDownload(web::DownloadTask* task) { DCHECK_EQ(task, task_.get()); [delegate_ downloadManagerTabHelper:this wantsToStartDownload:task_.get()]; @@ -99,6 +159,11 @@ void DownloadManagerTabHelper::WasShown(web::WebState* web_state) { if (task_ && delegate_ && !delegate_started_) { + if (ShouldRestrictDownload(web_state_)) { + SetCurrentDownload(nullptr); + return; + } + delegate_started_ = true; [delegate_ downloadManagerTabHelper:this didShowDownload:task_.get() @@ -175,4 +240,19 @@ } } +void DownloadManagerTabHelper::ShowRestrictDownloadSnackbar() { + if (!snackbar_handler_) { + return; + } + + [snackbar_handler_ + showSnackbarWithMessage:l10n_util::GetNSString( + IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_TEXT) + buttonText: + l10n_util::GetNSString( + IDS_IOS_DOWNLOAD_RESTRICTION_SNACKBAR_BUTTON_TEXT) + messageAction:nil + completionAction:nil]; +} + WEB_STATE_USER_DATA_KEY_IMPL(DownloadManagerTabHelper)
diff --git a/ios/chrome/browser/download/model/download_manager_tab_helper_unittest.mm b/ios/chrome/browser/download/model/download_manager_tab_helper_unittest.mm index 5aaae1af..4f73d68 100644 --- a/ios/chrome/browser/download/model/download_manager_tab_helper_unittest.mm +++ b/ios/chrome/browser/download/model/download_manager_tab_helper_unittest.mm
@@ -6,12 +6,30 @@ #import <memory> +#import "components/policy/core/common/policy_pref_names.h" +#import "components/prefs/testing_pref_service.h" +#import "download_manager_tab_helper.h" +#import "ios/chrome/browser/drive/model/drive_policy.h" #import "ios/chrome/browser/drive/model/drive_tab_helper.h" +#import "ios/chrome/browser/shared/model/application_context/application_context.h" +#import "ios/chrome/browser/shared/model/prefs/pref_names.h" +#import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h" +#import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" +#import "ios/chrome/browser/shared/public/commands/snackbar_commands.h" +#import "ios/chrome/browser/signin/model/authentication_service.h" +#import "ios/chrome/browser/signin/model/authentication_service_factory.h" +#import "ios/chrome/browser/signin/model/fake_authentication_service_delegate.h" +#import "ios/chrome/browser/signin/model/fake_system_identity.h" +#import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/test/fakes/fake_download_manager_tab_helper_delegate.h" +#import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/fakes/fake_download_task.h" #import "ios/web/public/test/fakes/fake_web_state.h" +#import "ios/web/public/test/web_task_environment.h" #import "testing/gtest/include/gtest/gtest.h" #import "testing/platform_test.h" +#import "third_party/ocmock/OCMock/OCMock.h" +#import "third_party/ocmock/gtest_support.h" namespace { char kUrl[] = "https://test.test/"; @@ -24,6 +42,13 @@ DownloadManagerTabHelperTest() : web_state_(std::make_unique<web::FakeWebState>()), delegate_([[FakeDownloadManagerTabHelperDelegate alloc] init]) { + TestProfileIOS::Builder builder; + builder.AddTestingFactory( + AuthenticationServiceFactory::GetInstance(), + AuthenticationServiceFactory::GetFactoryWithDelegate( + std::make_unique<FakeAuthenticationServiceDelegate>())); + profile_ = std::move(builder).Build(); + web_state_->SetBrowserState(profile_.get()); DriveTabHelper::GetOrCreateForWebState(web_state_.get()); DownloadManagerTabHelper::CreateForWebState(web_state_.get()); DownloadManagerTabHelper::FromWebState(web_state_.get()) @@ -44,7 +69,36 @@ return task; } + // Set up download restrictions. + void SetUpDownloadRestrictions() { + PrefService* pref_service = profile_.get()->GetPrefs(); + pref_service->SetInteger( + policy::policy_prefs::kDownloadRestrictions, + static_cast<int>(policy::DownloadRestriction::ALL_FILES)); + pref_service->SetInteger( + prefs::kIosSaveToDriveDownloadManagerPolicySettings, + static_cast<int>(SaveToDrivePolicySettings::kDisabled)); + } + + // Fake a sign in. + void SignIn() { + FakeSystemIdentity* fake_identity = [FakeSystemIdentity fakeIdentity1]; + FakeSystemIdentityManager* system_identity_manager = + FakeSystemIdentityManager::FromSystemIdentityManager( + GetApplicationContext()->GetSystemIdentityManager()); + system_identity_manager->AddIdentity(fake_identity); + AuthenticationService* auth_service = + AuthenticationServiceFactory::GetForProfile(profile_.get()); + auth_service->SignIn(fake_identity, + signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN); + } + + web::WebTaskEnvironment task_environment_; + IOSChromeScopedTestingLocalState scoped_testing_local_state_; std::unique_ptr<web::FakeWebState> web_state_; + std::unique_ptr<TestProfileIOS> profile_; + raw_ptr<AuthenticationService> auth_service_ = nullptr; + FakeSystemIdentity* fake_identity_ = nullptr; FakeDownloadManagerTabHelperDelegate* delegate_; }; @@ -171,3 +225,95 @@ EXPECT_FALSE(tab_helper()->has_download_task()); } +// Tests that download is restricted for a visible web state when the download +// restrictions policy is enabled and the Save to Drive policy is disabled. The +// test verifies that the delegate state remains nil. Additionally, the test +// checks that a snackbar is displayed to the user. +TEST_F(DownloadManagerTabHelperTest, DownloadRestrictedForVisibleWebState) { + SignIn(); + PrefService* pref_service = profile_.get()->GetPrefs(); + pref_service->SetInteger( + policy::policy_prefs::kDownloadRestrictions, + static_cast<int>(policy::DownloadRestriction::ALL_FILES)); + pref_service->SetInteger( + prefs::kIosSaveToDriveDownloadManagerPolicySettings, + static_cast<int>(SaveToDrivePolicySettings::kDisabled)); + + web_state_->WasShown(); + id mock_snackbar_command_handler_ = + OCMProtocolMock(@protocol(SnackbarCommands)); + + OCMExpect([mock_snackbar_command_handler_ showSnackbarWithMessage:[OCMArg any] + buttonText:[OCMArg any] + messageAction:nil + completionAction:nil]); + ASSERT_FALSE(delegate_.state); + std::unique_ptr<web::FakeDownloadTask> task = + CreateFakeDownloadTask(GURL(kUrl), kMimeType); + tab_helper()->SetSnackbarHandler(mock_snackbar_command_handler_); + tab_helper()->SetCurrentDownload(std::move(task)); + ASSERT_FALSE(delegate_.state); + EXPECT_OCMOCK_VERIFY(mock_snackbar_command_handler_); +} + +// Tests that download is restricted for a visible web state when the download +// restrictions policy is enabled and browser is incognito. The test verifies +// that the delegate state remains nil. Additionally, the test checks +// that a snackbar is displayed to the user. +TEST_F(DownloadManagerTabHelperTest, + DownloadRestrictedAndIncognitoForVisibleWebState) { + web_state_->SetBrowserState(profile_->GetOffTheRecordProfile()); + SignIn(); + PrefService* pref_service = profile_.get()->GetPrefs(); + pref_service->SetInteger( + policy::policy_prefs::kDownloadRestrictions, + static_cast<int>(policy::DownloadRestriction::ALL_FILES)); + pref_service->SetInteger( + prefs::kIosSaveToDriveDownloadManagerPolicySettings, + static_cast<int>(SaveToDrivePolicySettings::kEnabled)); + web_state_->WasShown(); + id mock_snackbar_command_handler_ = + OCMProtocolMock(@protocol(SnackbarCommands)); + + OCMExpect([mock_snackbar_command_handler_ showSnackbarWithMessage:[OCMArg any] + buttonText:[OCMArg any] + messageAction:nil + completionAction:nil]); + ASSERT_FALSE(delegate_.state); + std::unique_ptr<web::FakeDownloadTask> task = + CreateFakeDownloadTask(GURL(kUrl), kMimeType); + tab_helper()->SetSnackbarHandler(mock_snackbar_command_handler_); + tab_helper()->SetCurrentDownload(std::move(task)); + ASSERT_FALSE(delegate_.state); + EXPECT_OCMOCK_VERIFY(mock_snackbar_command_handler_); +} + +// Tests that download is not restricted for a visible web state when the +// download restrictions policy is enabled but the Save to Drive policy is also +// enable. The test verifies that the delegate state is set. Additionally, the +// test checks that a snackbar is not displayed to the user. +TEST_F(DownloadManagerTabHelperTest, NoDownloadRestrictionForVisibleWebState) { + SignIn(); + PrefService* pref_service = profile_.get()->GetPrefs(); + pref_service->SetInteger( + policy::policy_prefs::kDownloadRestrictions, + static_cast<int>(policy::DownloadRestriction::ALL_FILES)); + pref_service->SetInteger( + prefs::kIosSaveToDriveDownloadManagerPolicySettings, + static_cast<int>(SaveToDrivePolicySettings::kEnabled)); + web_state_->WasShown(); + id mock_snackbar_command_handler_ = + OCMProtocolMock(@protocol(SnackbarCommands)); + + OCMReject([mock_snackbar_command_handler_ showSnackbarWithMessage:[OCMArg any] + buttonText:[OCMArg any] + messageAction:nil + completionAction:nil]); + ASSERT_FALSE(delegate_.state); + std::unique_ptr<web::FakeDownloadTask> task = + CreateFakeDownloadTask(GURL(kUrl), kMimeType); + tab_helper()->SetSnackbarHandler(mock_snackbar_command_handler_); + tab_helper()->SetCurrentDownload(std::move(task)); + ASSERT_TRUE(delegate_.state); + EXPECT_OCMOCK_VERIFY(mock_snackbar_command_handler_); +}
diff --git a/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm b/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm index 7fc66194..1f327d4 100644 --- a/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm +++ b/ios/chrome/browser/download/ui_bundled/download_manager_coordinator_unittest.mm
@@ -90,6 +90,7 @@ OverlayRequestQueue::CreateForWebState(web_state_.get()); DownloadManagerTabHelper::CreateForWebState(web_state_.get()); DocumentDownloadTabHelper::CreateForWebState(web_state_.get()); + web_state_->SetBrowserState(profile_.get()); coordinator_ = [[DownloadManagerCoordinator alloc] initWithBaseViewController:base_view_controller_ browser:browser_.get()];
diff --git a/ios/chrome/browser/drive_file_picker/coordinator/BUILD.gn b/ios/chrome/browser/drive_file_picker/coordinator/BUILD.gn index 73987f3..123350e 100644 --- a/ios/chrome/browser/drive_file_picker/coordinator/BUILD.gn +++ b/ios/chrome/browser/drive_file_picker/coordinator/BUILD.gn
@@ -21,6 +21,8 @@ "//base", "//components/image_fetcher/core", "//ios/chrome/app/strings:ios_strings_grit", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/drive/model:drive_file_downloader", "//ios/chrome/browser/drive/model:drive_list", "//ios/chrome/browser/drive/model:drive_service", @@ -39,8 +41,6 @@ "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/browser/web/model/choose_file", "//ios/chrome/browser/web/model/choose_file:choose_file_file_utils", "//ios/chrome/common/ui/util:image_util",
diff --git a/ios/chrome/browser/drive_file_picker/coordinator/DEPS b/ios/chrome/browser/drive_file_picker/coordinator/DEPS index a1b999f..9a454bb 100644 --- a/ios/chrome/browser/drive_file_picker/coordinator/DEPS +++ b/ios/chrome/browser/drive_file_picker/coordinator/DEPS
@@ -4,7 +4,7 @@ "+ios/chrome/browser/web/model/choose_file/choose_file_tab_helper.h", "+ios/chrome/browser/web/model/choose_file/choose_file_util.h", "+ios/chrome/browser/signin/model", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/drive/model", "+ios/chrome/browser/menu/ui_bundled", ]
diff --git a/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator.mm b/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator.mm index e6bd7f1..966f5d4d 100644 --- a/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator.mm +++ b/ios/chrome/browser/drive_file_picker/coordinator/drive_file_picker_mediator.mm
@@ -16,6 +16,7 @@ #import "base/timer/timer.h" #import "components/image_fetcher/core/image_data_fetcher.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/drive/model/drive_file_downloader.h" #import "ios/chrome/browser/drive/model/drive_list.h" #import "ios/chrome/browser/drive/model/drive_service.h" @@ -30,7 +31,6 @@ #import "ios/chrome/browser/shared/public/commands/drive_file_picker_commands.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/chrome/browser/web/model/choose_file/choose_file_tab_helper.h" #import "ios/chrome/common/ui/util/image_util.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/drive_file_picker/coordinator/root_drive_file_picker_coordinator.mm b/ios/chrome/browser/drive_file_picker/coordinator/root_drive_file_picker_coordinator.mm index 7bd7925..66ec660 100644 --- a/ios/chrome/browser/drive_file_picker/coordinator/root_drive_file_picker_coordinator.mm +++ b/ios/chrome/browser/drive_file_picker/coordinator/root_drive_file_picker_coordinator.mm
@@ -8,6 +8,7 @@ #import "base/memory/weak_ptr.h" #import "components/image_fetcher/core/image_data_fetcher.h" #import "components/signin/public/base/consent_level.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/drive/model/drive_list.h" #import "ios/chrome/browser/drive/model/drive_service_factory.h" #import "ios/chrome/browser/drive_file_picker/coordinator/browse_drive_file_picker_coordinator.h" @@ -30,7 +31,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/browser/web/model/choose_file/choose_file_tab_helper.h" #import "services/network/public/cpp/shared_url_loader_factory.h" #import "ui/base/device_form_factor.h"
diff --git a/ios/chrome/browser/drive_file_picker/test/BUILD.gn b/ios/chrome/browser/drive_file_picker/test/BUILD.gn index c644099b..d18eebc 100644 --- a/ios/chrome/browser/drive_file_picker/test/BUILD.gn +++ b/ios/chrome/browser/drive_file_picker/test/BUILD.gn
@@ -11,10 +11,10 @@ "//base", "//base/test:test_support", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/drive_file_picker/ui:constants", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/drive_file_picker/test/drive_file_picker_egtest.mm b/ios/chrome/browser/drive_file_picker/test/drive_file_picker_egtest.mm index 41e0dda4..5282b21 100644 --- a/ios/chrome/browser/drive_file_picker/test/drive_file_picker_egtest.mm +++ b/ios/chrome/browser/drive_file_picker/test/drive_file_picker_egtest.mm
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/drive_file_picker/test/drive_file_picker_app_interface.h" #import "ios/chrome/browser/drive_file_picker/ui/drive_file_picker_constants.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/first_run/ui_bundled/BUILD.gn b/ios/chrome/browser/first_run/ui_bundled/BUILD.gn index 9891f25..14c1e7a1 100644 --- a/ios/chrome/browser/first_run/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/first_run/ui_bundled/BUILD.gn
@@ -2,6 +2,14 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +source_set("features") { + sources = [ + "features.h", + "features.mm", + ] + deps = [ "//base" ] +} + source_set("field_trial") { sources = [ "ios_first_run_field_trials.cc", @@ -37,6 +45,9 @@ "//components/signin/public/identity_manager", "//ios/chrome/app:tests_hook", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator", "//ios/chrome/browser/docking_promo/coordinator", "//ios/chrome/browser/first_run/model", "//ios/chrome/browser/first_run/ui_bundled/default_browser", @@ -61,9 +72,6 @@ "//ios/chrome/browser/shared/ui/elements:elements_internal", "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/shared/ui/util:terms_util", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator", "//ios/public/provider/chrome/browser/signin:choice_api", "//ui/base", "//ui/gfx", @@ -162,6 +170,10 @@ "//components/sync/service", "//components/unified_consent", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/policy/model:eg_test_support+eg2", @@ -176,10 +188,6 @@ "//ios/chrome/browser/signin/model:capabilities_types", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:test_constants", - "//ios/chrome/browser/ui/authentication:authentication_constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/common:string_util", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/promo_style:constants",
diff --git a/ios/chrome/browser/first_run/ui_bundled/DEPS b/ios/chrome/browser/first_run/ui_bundled/DEPS index e264b6b1..1e6acd5d 100644 --- a/ios/chrome/browser/first_run/ui_bundled/DEPS +++ b/ios/chrome/browser/first_run/ui_bundled/DEPS
@@ -12,9 +12,9 @@ "+ios/chrome/browser/signin/model", "+ios/chrome/browser/start_surface/ui_bundled/start_surface_features.h", "+ios/chrome/browser/sync/model", - "+ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h", - "+ios/chrome/browser/ui/authentication/signin/signin_constants.h", - "+ios/chrome/browser/ui/authentication/signin_sync/signin_sync_coordinator.h", + "+ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h", + "+ios/chrome/browser/authentication/ui_bundled/signin_sync/signin_sync_coordinator.h", "+ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h", "+ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_coordinator.h", "+ios/chrome/browser/settings/ui_bundled/sync/utils/sync_util.h", @@ -28,7 +28,7 @@ "+components/policy/test_support/embedded_policy_test_server.h", ], "first_run_test_case_base\.mm": [ - "+ios/chrome/browser/ui/authentication/signin_matchers.h", - "+ios/chrome/browser/ui/authentication/signin_earl_grey.h", + "+ios/chrome/browser/authentication/ui_bundled/signin_matchers.h", + "+ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h", ], }
diff --git a/ios/chrome/browser/first_run/ui_bundled/default_browser/BUILD.gn b/ios/chrome/browser/first_run/ui_bundled/default_browser/BUILD.gn index a4f749f..d04c4833 100644 --- a/ios/chrome/browser/first_run/ui_bundled/default_browser/BUILD.gn +++ b/ios/chrome/browser/first_run/ui_bundled/default_browser/BUILD.gn
@@ -93,11 +93,11 @@ sources = [ "default_browser_screen_egtest.mm" ] deps = [ "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/first_run/ui_bundled/default_browser/default_browser_screen_egtest.mm b/ios/chrome/browser/first_run/ui_bundled/default_browser/default_browser_screen_egtest.mm index abff478..981a9c3 100644 --- a/ios/chrome/browser/first_run/ui_bundled/default_browser/default_browser_screen_egtest.mm +++ b/ios/chrome/browser/first_run/ui_bundled/default_browser/default_browser_screen_egtest.mm
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/first_run/ui_bundled/features.h b/ios/chrome/browser/first_run/ui_bundled/features.h new file mode 100644 index 0000000..e97d938 --- /dev/null +++ b/ios/chrome/browser/first_run/ui_bundled/features.h
@@ -0,0 +1,33 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_FIRST_RUN_UI_BUNDLED_FEATURES_H_ +#define IOS_CHROME_BROWSER_FIRST_RUN_UI_BUNDLED_FEATURES_H_ + +#import "base/feature_list.h" + +namespace first_run { + +// Enum to represent arms of feature kUpdatedFirstRunSequence. +enum class UpdatedFRESequenceVariationType { + kDisabled, + kDBPromoFirst, + kRemoveSignInSync, + kDBPromoFirstAndRemoveSignInSync, +}; + +// Feature to enable updates to the sequence of the first run screens. +BASE_DECLARE_FEATURE(kUpdatedFirstRunSequence); + +// Name of the param that indicates which variation of the +// kUpdatedFirstRunSequence is enabled. +extern const char kUpdatedFirstRunSequenceParam[]; + +// Returns which variation of the kUpdatedFirstRunSequence feature is enabled or +// `kDisabled` if the feature is disabled. +UpdatedFRESequenceVariationType GetUpdatedFRESequenceVariation(); + +} // namespace first_run + +#endif // IOS_CHROME_BROWSER_FIRST_RUN_UI_BUNDLED_FEATURES_H_
diff --git a/ios/chrome/browser/first_run/ui_bundled/features.mm b/ios/chrome/browser/first_run/ui_bundled/features.mm new file mode 100644 index 0000000..24cbd27 --- /dev/null +++ b/ios/chrome/browser/first_run/ui_bundled/features.mm
@@ -0,0 +1,26 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/first_run/ui_bundled/features.h" + +#import "base/metrics/field_trial_params.h" + +namespace first_run { + +BASE_FEATURE(kUpdatedFirstRunSequence, + "UpdatedFirstRunSequence", + base::FEATURE_DISABLED_BY_DEFAULT); + +const char kUpdatedFirstRunSequenceParam[] = "updated-first-run-sequence-param"; + +UpdatedFRESequenceVariationType GetUpdatedFRESequenceVariation() { + if (!base::FeatureList::IsEnabled(kUpdatedFirstRunSequence)) { + return UpdatedFRESequenceVariationType::kDisabled; + } + return static_cast<UpdatedFRESequenceVariationType>( + base::GetFieldTrialParamByFeatureAsInt(kUpdatedFirstRunSequence, + kUpdatedFirstRunSequenceParam, 1)); +} + +} // namespace first_run
diff --git a/ios/chrome/browser/first_run/ui_bundled/first_run_coordinator.mm b/ios/chrome/browser/first_run/ui_bundled/first_run_coordinator.mm index f3d6139d..bf5d51f 100644 --- a/ios/chrome/browser/first_run/ui_bundled/first_run_coordinator.mm +++ b/ios/chrome/browser/first_run/ui_bundled/first_run_coordinator.mm
@@ -12,6 +12,8 @@ #import "base/notreached.h" #import "base/time/time.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/docking_promo/coordinator/docking_promo_coordinator.h" #import "ios/chrome/browser/first_run/model/first_run_metrics.h" #import "ios/chrome/browser/first_run/ui_bundled/default_browser/default_browser_screen_coordinator.h" @@ -23,8 +25,6 @@ #import "ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_coordinator.h" #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/public/provider/chrome/browser/signin/choice_api.h" @interface FirstRunCoordinator () <FirstRunScreenDelegate,
diff --git a/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm b/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm index e6a124b1..9c50d92 100644 --- a/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm +++ b/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm
@@ -8,6 +8,8 @@ #import "components/search_engines/search_engine_choice/search_engine_choice_utils.h" #import "components/search_engines/search_engines_switches.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_app_interface.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" @@ -17,8 +19,6 @@ #import "ios/chrome/browser/settings/ui_bundled/settings_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm b/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm index acf25c1..40b233e 100644 --- a/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm +++ b/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm
@@ -10,12 +10,12 @@ #import "components/policy/policy_constants.h" #import "components/sync/service/sync_prefs.h" #import "components/unified_consent/pref_names.h" -#import "ios/chrome/browser/metrics/model/metrics_app_interface.h" -#import "ios/chrome/browser/policy/model/policy_util.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_app_interface.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" +#import "ios/chrome/browser/metrics/model/metrics_app_interface.h" +#import "ios/chrome/browser/policy/model/policy_util.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/first_run/ui_bundled/first_run_without_search_engine_choice_egtest.mm b/ios/chrome/browser/first_run/ui_bundled/first_run_without_search_engine_choice_egtest.mm index 3857a35..385e63320 100644 --- a/ios/chrome/browser/first_run/ui_bundled/first_run_without_search_engine_choice_egtest.mm +++ b/ios/chrome/browser/first_run/ui_bundled/first_run_without_search_engine_choice_egtest.mm
@@ -14,6 +14,11 @@ #import "components/strings/grit/components_strings.h" #import "components/sync/base/user_selectable_type.h" #import "components/unified_consent/pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_app_interface.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" @@ -29,11 +34,6 @@ #import "ios/chrome/browser/signin/model/capabilities_types.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h"
diff --git a/ios/chrome/browser/first_run/ui_bundled/omnibox_position/BUILD.gn b/ios/chrome/browser/first_run/ui_bundled/omnibox_position/BUILD.gn index 982ee3a5..814edc6 100644 --- a/ios/chrome/browser/first_run/ui_bundled/omnibox_position/BUILD.gn +++ b/ios/chrome/browser/first_run/ui_bundled/omnibox_position/BUILD.gn
@@ -14,6 +14,7 @@ "//components/feature_engagement/public", "//components/prefs", "//components/segmentation_platform/embedder/home_modules/tips_manager:signal_constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator", "//ios/chrome/browser/feature_engagement/model", "//ios/chrome/browser/first_run/ui_bundled:screen_delegate", "//ios/chrome/browser/ntp/model:set_up_list_item_type", @@ -28,7 +29,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/tips_manager/model:factory", "//ios/chrome/browser/tips_manager/model:tips_manager", - "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator", ] } @@ -96,11 +96,11 @@ "//build:branding_buildflags", "//components/search_engines:search_engines_switches", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/promos_manager/model:features", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/chrome/test/earl_grey:switches",
diff --git a/ios/chrome/browser/first_run/ui_bundled/omnibox_position/omnibox_position_egtest.mm b/ios/chrome/browser/first_run/ui_bundled/omnibox_position/omnibox_position_egtest.mm index 72f74d20..76f40da 100644 --- a/ios/chrome/browser/first_run/ui_bundled/omnibox_position/omnibox_position_egtest.mm +++ b/ios/chrome/browser/first_run/ui_bundled/omnibox_position/omnibox_position_egtest.mm
@@ -7,12 +7,12 @@ #import "base/strings/sys_string_conversions.h" #import "build/branding_buildflags.h" #import "components/search_engines/search_engines_switches.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/first_run/ui_bundled/omnibox_position/omnibox_position_choice_app_interface.h" #import "ios/chrome/browser/promos_manager/model/features.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h"
diff --git a/ios/chrome/browser/first_run/ui_bundled/signin/BUILD.gn b/ios/chrome/browser/first_run/ui_bundled/signin/BUILD.gn index b25f1d2..046bcea 100644 --- a/ios/chrome/browser/first_run/ui_bundled/signin/BUILD.gn +++ b/ios/chrome/browser/first_run/ui_bundled/signin/BUILD.gn
@@ -15,6 +15,12 @@ "//components/prefs", "//components/signin/public/identity_manager/objc", "//components/web_resource", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/identity_chooser", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin/logging", "//ios/chrome/browser/first_run/model", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/first_run/ui_bundled:screen_delegate", @@ -31,11 +37,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/identity_chooser", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/signin/logging", ] } @@ -48,6 +49,7 @@ deps = [ "//components/signin/public/base:signin_switches", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/first_run/ui_bundled:field_trial", "//ios/chrome/browser/first_run/ui_bundled:utils", @@ -56,7 +58,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/elements:elements_internal", "//ios/chrome/browser/shared/ui/symbols", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common:string_util", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/elements:popover_label_view_controller", @@ -64,5 +65,5 @@ "//ios/chrome/common/ui/util", "//ui/base", ] - public_deps = [ "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator" ] + public_deps = [ "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator" ] }
diff --git a/ios/chrome/browser/first_run/ui_bundled/signin/DEPS b/ios/chrome/browser/first_run/ui_bundled/signin/DEPS index 4bf11f6..96bbb2ce 100644 --- a/ios/chrome/browser/first_run/ui_bundled/signin/DEPS +++ b/ios/chrome/browser/first_run/ui_bundled/signin/DEPS
@@ -1,3 +1,3 @@ include_rules = [ -"+ios/chrome/browser/ui/authentication", +"+ios/chrome/browser/authentication/ui_bundled", ]
diff --git a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.h b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.h index 6df12f1d4..73c8435b 100644 --- a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.h +++ b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.h
@@ -5,7 +5,7 @@ #ifndef IOS_CHROME_BROWSER_FIRST_RUN_UI_BUNDLED_SIGNIN_SIGNIN_SCREEN_COORDINATOR_H_ #define IOS_CHROME_BROWSER_FIRST_RUN_UI_BUNDLED_SIGNIN_SIGNIN_SCREEN_COORDINATOR_H_ -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" @protocol FirstRunScreenDelegate; namespace signin_metrics {
diff --git a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.mm b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.mm index 8565b6d..85b0cec 100644 --- a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.mm +++ b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_coordinator.mm
@@ -6,6 +6,12 @@ #import "base/apple/foundation_util.h" #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/identity_chooser/identity_chooser_coordinator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" #import "ios/chrome/browser/first_run/model/first_run_metrics.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_screen_delegate.h" @@ -26,12 +32,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_coordinator_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" @interface SigninScreenCoordinator () <IdentityChooserCoordinatorDelegate, SigninScreenViewControllerDelegate,
diff --git a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm index 8f22fe7b..a494394 100644 --- a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm +++ b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_mediator.mm
@@ -14,6 +14,10 @@ #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "components/sync/service/sync_service.h" #import "components/web_resource/web_resource_pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/first_run_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/logging/user_signin_logger.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/first_run/model/first_run_metrics.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_util.h" #import "ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_consumer.h" @@ -23,10 +27,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/sync/model/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.h" -#import "ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface SigninScreenMediator () <ChromeAccountManagerServiceObserver, IdentityManagerObserverBridgeDelegate> {
diff --git a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_view_controller.mm b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_view_controller.mm index 4e0140a1..baefb6b 100644 --- a/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_view_controller.mm +++ b/ios/chrome/browser/first_run/ui_bundled/signin/signin_screen_view_controller.mm
@@ -6,13 +6,13 @@ #import "base/notreached.h" #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/settings/ui_bundled/elements/enterprise_info_popover_view_controller.h" #import "ios/chrome/browser/shared/public/commands/tos_commands.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/elements/activity_overlay_view.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/elements/popover_label_view_controller.h"
diff --git a/ios/chrome/browser/flags/BUILD.gn b/ios/chrome/browser/flags/BUILD.gn index 9989efd..74c155d 100644 --- a/ios/chrome/browser/flags/BUILD.gn +++ b/ios/chrome/browser/flags/BUILD.gn
@@ -65,6 +65,7 @@ "//ios/chrome/app:background_mode_buildflags", "//ios/chrome/app/strings", "//ios/chrome/browser/app_store_rating/ui_bundled:features", + "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator", "//ios/chrome/browser/browsing_data/model:feature_flags", "//ios/chrome/browser/crash_report/model", "//ios/chrome/browser/credential_provider/model:features", @@ -72,6 +73,7 @@ "//ios/chrome/browser/download/ui_bundled:features", "//ios/chrome/browser/drag_and_drop/model", "//ios/chrome/browser/find_in_page/model:util", + "//ios/chrome/browser/first_run/ui_bundled:features", "//ios/chrome/browser/first_run/ui_bundled:field_trial", "//ios/chrome/browser/follow/model:feature_flags", "//ios/chrome/browser/incognito_reauth/ui_bundled:features", @@ -98,7 +100,6 @@ "//ios/chrome/browser/start_surface/ui_bundled:feature_flags", "//ios/chrome/browser/tabs/model/inactive_tabs:features", "//ios/chrome/browser/text_selection/model:model_utils", - "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator", "//ios/chrome/browser/ui/popup_menu/overflow_menu:feature_flags", "//ios/chrome/browser/ui/whats_new:util", "//ios/chrome/browser/web/model:feature_flags",
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 8c490e0f..8af716b 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -75,12 +75,14 @@ #import "components/translate/core/browser/translate_prefs.h" #import "components/translate/core/common/translate_util.h" #import "ios/chrome/app/background_mode_buildflags.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" #import "ios/chrome/browser/browsing_data/model/browsing_data_features.h" #import "ios/chrome/browser/crash_report/model/features.h" #import "ios/chrome/browser/credential_provider/model/features.h" #import "ios/chrome/browser/default_browser/model/utils.h" #import "ios/chrome/browser/download/ui_bundled/features.h" #import "ios/chrome/browser/find_in_page/model/util.h" +#import "ios/chrome/browser/first_run/ui_bundled/features.h" #import "ios/chrome/browser/flags/chrome_switches.h" #import "ios/chrome/browser/flags/ios_chrome_flag_descriptions.h" #import "ios/chrome/browser/follow/model/follow_features.h" @@ -105,7 +107,6 @@ #import "ios/chrome/browser/start_surface/ui_bundled/start_surface_features.h" #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h" #import "ios/chrome/browser/text_selection/model/text_selection_util.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" #import "ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.h" #import "ios/chrome/browser/ui/whats_new/whats_new_util.h" #import "ios/chrome/browser/web/model/features.h" @@ -1200,6 +1201,22 @@ {" - 7 Days", kSetUpListDuration7Days, std::size(kSetUpListDuration7Days), nullptr}}; +const FeatureEntry::FeatureParam kUpdatedFirstRunSequenceArm1[] = { + {first_run::kUpdatedFirstRunSequenceParam, "1"}}; +const FeatureEntry::FeatureParam kUpdatedFirstRunSequenceArm2[] = { + {first_run::kUpdatedFirstRunSequenceParam, "2"}}; +const FeatureEntry::FeatureParam kUpdatedFirstRunSequenceArm3[] = { + {first_run::kUpdatedFirstRunSequenceParam, "3"}}; + +const FeatureEntry::FeatureVariation kUpdatedFirstRunSequenceVariations[] = { + {" - Default browser promo first", kUpdatedFirstRunSequenceArm1, + std::size(kUpdatedFirstRunSequenceArm1), nullptr}, + {" - Remove sign in & sync conditionally", kUpdatedFirstRunSequenceArm2, + std::size(kUpdatedFirstRunSequenceArm2), nullptr}, + {" - DB promo first and remove sign in & sync", + kUpdatedFirstRunSequenceArm3, std::size(kUpdatedFirstRunSequenceArm3), + nullptr}}; + // To add a new entry, add to the end of kFeatureEntries. There are four // distinct types of entries: // . ENABLE_DISABLE_VALUE: entry is either enabled, disabled, or uses the @@ -2272,6 +2289,11 @@ flag_descriptions::kLensOverlayEnableLocationBarEntrypointOnSRPDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(kLensOverlayEnableLocationBarEntrypointOnSRP)}, + {"updated-fre-screens-sequence", flag_descriptions::kUpdatedFRESequenceName, + flag_descriptions::kUpdatedFRESequenceDescription, flags_ui::kOsIos, + FEATURE_WITH_PARAMS_VALUE_TYPE(first_run::kUpdatedFirstRunSequence, + kUpdatedFirstRunSequenceVariations, + "UpdatedFirstRunSequence")}, }; bool SkipConditionalFeatureEntry(const flags_ui::FeatureEntry& entry) {
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 864f239..0e9cfff 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -1245,6 +1245,12 @@ "Enables the reverse-migration of syncing users who were previously " "migrated to the signed-in, non-syncing state."; +const char kUpdatedFRESequenceName[] = + "Update the sequence of the First Run screens"; +const char kUpdatedFRESequenceDescription[] = + "Updates the sequence of the FRE screens to show the DB promo first, " + "remove the Sin-In & Sync screens, or both."; + const char kWaitThresholdMillisecondsForCapabilitiesApiName[] = "Maximum wait time (in seconds) for a response from the Account " "Capabilities API";
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index fa5c3ab..7e79d3a6 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -1106,6 +1106,10 @@ extern const char kUndoMigrationOfSyncingUserToSignedInName[]; extern const char kUndoMigrationOfSyncingUserToSignedInDescription[]; +// Title and description for the flag to update the sequence of the FRE screens. +extern const char kUpdatedFRESequenceName[]; +extern const char kUpdatedFRESequenceDescription[]; + // Title and description for the flag to control the maximum wait time (in // seconds) for a response from the Account Capabilities API. extern const char kWaitThresholdMillisecondsForCapabilitiesApiName[];
diff --git a/ios/chrome/browser/history/ui_bundled/BUILD.gn b/ios/chrome/browser/history/ui_bundled/BUILD.gn index 0eccc9e..cf1423ae 100644 --- a/ios/chrome/browser/history/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/history/ui_bundled/BUILD.gn
@@ -179,6 +179,7 @@ "//components/sync/base", "//components/url_formatter", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/menu/ui_bundled:menu_action_type", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/cells:clear_browsing_data_constants", @@ -186,7 +187,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/table_view:constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/common:string_util", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm b/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm index ab5fa26c..2e6f03bd 100644 --- a/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm +++ b/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm
@@ -14,6 +14,8 @@ #import "components/browsing_data/core/pref_names.h" #import "components/sync/base/command_line_switches.h" #import "components/url_formatter/elide_url.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/history/ui_bundled/history_ui_constants.h" #import "ios/chrome/browser/menu/ui_bundled/menu_action_type.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" @@ -21,8 +23,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.mm b/ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.mm index 3f3f2ad..d688db142 100644 --- a/ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.mm +++ b/ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.mm
@@ -261,21 +261,30 @@ } + (UIKeyCommand*)cr_select1 { - return [self keyCommandWithInput:@"1" - modifierFlags:Command - action:@selector(keyCommand_select1)]; + UIKeyCommand* keyCommand = + [self keyCommandWithInput:@"1" + modifierFlags:Command + action:@selector(keyCommand_select1)]; + keyCommand.allowsAutomaticLocalization = NO; + return keyCommand; } + (UIKeyCommand*)cr_select2 { - return [self keyCommandWithInput:@"2" - modifierFlags:Command - action:@selector(keyCommand_select2)]; + UIKeyCommand* keyCommand = + [self keyCommandWithInput:@"2" + modifierFlags:Command + action:@selector(keyCommand_select2)]; + keyCommand.allowsAutomaticLocalization = NO; + return keyCommand; } + (UIKeyCommand*)cr_select3 { - return [self keyCommandWithInput:@"3" - modifierFlags:Command - action:@selector(keyCommand_select3)]; + UIKeyCommand* keyCommand = + [self keyCommandWithInput:@"3" + modifierFlags:Command + action:@selector(keyCommand_select3)]; + keyCommand.allowsAutomaticLocalization = NO; + return keyCommand; } + (UIKeyCommand*)cr_select4 {
diff --git a/ios/chrome/browser/keyboard/ui_bundled/menu_builder.mm b/ios/chrome/browser/keyboard/ui_bundled/menu_builder.mm index cd2b458..b153263a 100644 --- a/ios/chrome/browser/keyboard/ui_bundled/menu_builder.mm +++ b/ios/chrome/browser/keyboard/ui_bundled/menu_builder.mm
@@ -81,6 +81,8 @@ UIKeyCommand.cr_showNextTab, UIKeyCommand.cr_showPreviousTab, UIKeyCommand.cr_select1, + UIKeyCommand.cr_select2, + UIKeyCommand.cr_select3, UIKeyCommand.cr_select9, UIKeyCommand.cr_showDownloads, UIKeyCommand.cr_showSettings,
diff --git a/ios/chrome/browser/lens/ui_bundled/lens_coordinator.mm b/ios/chrome/browser/lens/ui_bundled/lens_coordinator.mm index 588525ca..4dabcb4 100644 --- a/ios/chrome/browser/lens/ui_bundled/lens_coordinator.mm +++ b/ios/chrome/browser/lens/ui_bundled/lens_coordinator.mm
@@ -196,9 +196,9 @@ if (lens_availability::IsLensContextMenuUnifiedExperienceEnabled()) { id<LensOverlayCommands> handler = HandlerForProtocol( self.browser->GetCommandDispatcher(), LensOverlayCommands); - [handler - searchImageWithLens:command.image - entrypoint:LensOverlayEntrypoint::kSearchImageContextMenu]; + [handler searchImageWithLens:command.image + entrypoint:LensOverlayEntrypoint::kSearchImageContextMenu + completion:nil]; return; } @@ -221,6 +221,10 @@ } } +- (void)lensOverlayDismissed { + // NO-OP +} + - (void)openLensInputSelection:(OpenLensInputSelectionCommand*)command { // Cancel any omnibox editing. Browser* browser = self.browser;
diff --git a/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator.mm b/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator.mm index 9c6e50e0..a80f6ab 100644 --- a/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator.mm +++ b/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator.mm
@@ -53,6 +53,7 @@ #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" +#import "ios/chrome/browser/shared/public/commands/lens_commands.h" #import "ios/chrome/browser/shared/public/commands/lens_overlay_commands.h" #import "ios/chrome/browser/shared/public/commands/load_query_commands.h" #import "ios/chrome/browser/shared/public/commands/open_new_tab_command.h" @@ -274,17 +275,19 @@ #pragma mark - LensOverlayCommands - (void)searchImageWithLens:(UIImage*)image - entrypoint:(LensOverlayEntrypoint)entrypoint { + entrypoint:(LensOverlayEntrypoint)entrypoint + completion:(void (^)(BOOL))completion { [self prepareOverlayWithEntrypoint:entrypoint]; // Even if the image is already prepared at this point, the snapshotting // infrastructure still needs to be built to allow the restoration window to // be displayed when exiting and re-entering the experience. [self prepareSnapshotCapturingInfrastructure]; - _shouldResetSelectionToInitialPositionOnExit = NO; + _shouldResetSelectionToInitialPositionOnExit = + (entrypoint == LensOverlayEntrypoint::kLVFCameraCapture); [self handleOverlayImageCaptured:image entrypoint:entrypoint animated:YES - completion:nil]; + completion:completion]; } - (void)createAndShowLensUI:(BOOL)animated @@ -315,19 +318,20 @@ BOOL success = [self createUIWithSnapshot:snapshot entrypoint:entrypoint]; if (success) { - [self showLensUI:animated]; + [self showLensUI:animated completion:completion]; } else { [self destroyLensUI:NO reason:lens::LensOverlayDismissalSource:: kErrorScreenshotCreationFailed]; - } - - if (completion) { - completion(success); + completion(NO); } } - (void)showLensUI:(BOOL)animated { + [self showLensUI:animated completion:nil]; +} + +- (void)showLensUI:(BOOL)animated completion:(void (^)(BOOL))completion { if (!self.isUICreated || self.isLensOverlayVisible) { return; } @@ -347,6 +351,9 @@ presentContainerAnimated:animated sceneState:self.browser->GetSceneState() completion:^{ + if (completion) { + completion(YES); + } [weakSelf onContainerViewControllerPresented]; }]; } @@ -407,7 +414,12 @@ _associatedTabHelper->UpdateSnapshotStorage(); [self dismissRestorationWindow]; - [_containerPresenter dismissContainerAnimated:animated completion:nil]; + __weak id<LensCommands> weakCommands = + HandlerForProtocol(self.browser->GetCommandDispatcher(), LensCommands); + [_containerPresenter dismissContainerAnimated:animated + completion:^{ + [weakCommands lensOverlayDismissed]; + }]; } - (void)destroyLensUI:(BOOL)animated @@ -445,8 +457,11 @@ // the cleanup process. Exiting fullscreen has to happen on destruction to // ensure a smooth transition back to the content. __weak __typeof(self) weakSelf = self; + __weak id<LensCommands> weakCommands = + HandlerForProtocol(self.browser->GetCommandDispatcher(), LensCommands); void (^onAnimationFinished)() = ^{ [weakSelf dismissLensOverlayWithCompletion:^{ + [weakCommands lensOverlayDismissed]; [weakSelf destroyViewControllersAndMediators]; }]; };
diff --git a/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator_unittest.mm b/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator_unittest.mm index d17a00f..04c731db 100644 --- a/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator_unittest.mm +++ b/ios/chrome/browser/lens_overlay/coordinator/lens_overlay_coordinator_unittest.mm
@@ -23,6 +23,7 @@ #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" #import "ios/chrome/browser/shared/public/commands/application_commands.h" #import "ios/chrome/browser/shared/public/commands/command_dispatcher.h" +#import "ios/chrome/browser/shared/public/commands/lens_commands.h" #import "ios/chrome/browser/shared/public/commands/lens_overlay_commands.h" #import "ios/chrome/browser/shared/public/commands/load_query_commands.h" #import "ios/chrome/browser/shared/public/features/features.h" @@ -103,6 +104,11 @@ [dispatcher_ startDispatchingToTarget:coordinator_ forProtocol:@protocol(LensOverlayCommands)]; + lens_commands_handler_ = OCMProtocolMock(@protocol(LensCommands)); + [browser_->GetCommandDispatcher() + startDispatchingToTarget:lens_commands_handler_ + forProtocol:@protocol(LensCommands)]; + application_handler_ = OCMProtocolMock(@protocol(ApplicationCommands)); [browser_->GetCommandDispatcher() startDispatchingToTarget:application_handler_ @@ -196,6 +202,7 @@ raw_ptr<LensOverlayTabHelper> tab_helper_; id<ApplicationCommands> application_handler_; id<LoadQueryCommands> load_query_handler_; + id<LensCommands> lens_commands_handler_; variations::ScopedVariationsIdsProvider scoped_variations_ids_provider_{ variations::VariationsIdsProvider::Mode::kUseSignedInState};
diff --git a/ios/chrome/browser/lens_overlay/coordinator/lens_view_finder_coordinator.mm b/ios/chrome/browser/lens_overlay/coordinator/lens_view_finder_coordinator.mm index 0b280ab..c3121cb 100644 --- a/ios/chrome/browser/lens_overlay/coordinator/lens_view_finder_coordinator.mm +++ b/ios/chrome/browser/lens_overlay/coordinator/lens_view_finder_coordinator.mm
@@ -29,18 +29,22 @@ } } +// The corner radius to be applied on the bottom of the image passed to post +// capture +const CGFloat kBottomCornerRadius = 108.0; + } // namespace -@interface LensViewFinderCoordinator () <LensCommands, - ChromeLensControllerDelegate> +@interface LensViewFinderCoordinator () < + LensCommands, + ChromeLensViewFinderDelegate, + UIViewControllerTransitioningDelegate, + UIAdaptivePresentationControllerDelegate> @end @implementation LensViewFinderCoordinator { - // Controls the lens view finder experience. - id<ChromeLensController> _lensController; - // The user interface to be presented. - __weak UIViewController* _lensViewController; + UIViewController<ChromeLensViewFinderController>* _lensViewController; // Manages the presenting & dismissal of the LVF user interface. LensViewFinderTransitionManager* _transitionManager; @@ -73,7 +77,8 @@ self.browser->GetCommandDispatcher(), LensOverlayCommands); [_lensOverlayCommands searchImageWithLens:command.image - entrypoint:LensOverlayEntrypoint::kSearchImageContextMenu]; + entrypoint:LensOverlayEntrypoint::kSearchImageContextMenu + completion:nil]; } - (void)openLensInputSelection:(OpenLensInputSelectionCommand*)command { @@ -87,40 +92,108 @@ initWithLVFTransitionType:TransitionFromPresentationStyle( command.presentationStyle)]; - _lensController = ios::provider::NewChromeLensController(configuration); - _lensController.delegate = self; + _lensViewController = + ios::provider::NewChromeLensViewFinderController(configuration); + [_lensViewController setLensViewFinderDelegate:self]; - _lensViewController = _lensController.inputSelectionViewController; _lensViewController.transitioningDelegate = _transitionManager; _lensViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext; _lensViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; + [self.baseViewController presentViewController:_lensViewController animated:YES completion:nil]; } -#pragma mark - ChromeLensControllerDelegate - -- (void)lensControllerDidGenerateImage:(UIImage*)image { +- (void)lensOverlayDismissed { + [self exitLensViewFinder]; } -- (void)lensControllerDidGenerateLoadParams: - (const web::NavigationManager::WebLoadParams&)params { +#pragma mark - ChromeLensViewFinderDelegate + +- (void)lensController:(id<ChromeLensViewFinderController>)lensController + didSelectImage:(UIImage*)image + serializedViewportState:(NSString*)viewportState + isCameraImage:(BOOL)isCameraImage { + BOOL isPortrait = image.size.height > image.size.width; + if (isCameraImage && isPortrait) { + image = [self infilledImageForPortraitCameraCapture:image]; + } + + LensOverlayEntrypoint entrypoint = + isCameraImage ? LensOverlayEntrypoint::kLVFCameraCapture + : LensOverlayEntrypoint::kLVFImagePicker; + + id<LensOverlayCommands> _lensOverlayCommands = HandlerForProtocol( + self.browser->GetCommandDispatcher(), LensOverlayCommands); + __weak id<ChromeLensViewFinderController> weakLensViewController = + _lensViewController; + + // Once post capture is presented, the live camera can be torn down. + [_lensOverlayCommands + searchImageWithLens:image + entrypoint:entrypoint + completion:^(BOOL success) { + [weakLensViewController tearDownCaptureInfrastructure]; + }]; } -- (void)lensControllerDidSelectURL:(NSURL*)url { +- (void)lensController:(id<ChromeLensViewFinderController>)lensController + didSelectURL:(GURL)url { + // NO-OP } -- (void)lensControllerDidTapDismissButton { +- (void)lensControllerDidTapDismissButton: + (id<ChromeLensViewFinderController>)lensController { + [self exitLensViewFinder]; +} + +#pragma mark - Private +- (void)exitLensViewFinder { if (self.baseViewController.presentedViewController == _lensViewController) { [self.baseViewController dismissViewControllerAnimated:YES completion:nil]; } } -- (CGRect)webContentFrame { - return [UIScreen mainScreen].bounds; +// Rounds the bottom corners of the image and pads the bottom edge to match the +// size of the viewport. +- (UIImage*)infilledImageForPortraitCameraCapture:(UIImage*)image { + UIGraphicsImageRendererFormat* format = + [UIGraphicsImageRendererFormat preferredFormat]; + format.scale = 1; + + CGSize screenSize = [UIScreen mainScreen].bounds.size; + CGFloat scale = 3; + CGSize scaledScreenSize = + CGSizeMake(screenSize.width * scale, screenSize.height * scale); + + CGFloat originalAspectRatio = image.size.width / image.size.height; + + UIGraphicsImageRenderer* renderer = + [[UIGraphicsImageRenderer alloc] initWithSize:scaledScreenSize + format:format]; + + CGRect imageDrawRect = + CGRectMake(0, 0, scaledScreenSize.width, + scaledScreenSize.width / originalAspectRatio); + + UIBezierPath* path = [UIBezierPath + bezierPathWithRoundedRect:imageDrawRect + byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight + cornerRadii:CGSizeMake(kBottomCornerRadius, + kBottomCornerRadius)]; + + UIImage* imageWithInfill = + [renderer imageWithActions:^(UIGraphicsImageRendererContext* context) { + [[UIColor whiteColor] setFill]; + UIRectFill(context.format.bounds); + [path addClip]; + [image drawInRect:imageDrawRect]; + }]; + + return imageWithInfill; } @end
diff --git a/ios/chrome/browser/lens_overlay/model/lens_overlay_configuration_factory.mm b/ios/chrome/browser/lens_overlay/model/lens_overlay_configuration_factory.mm index 829a2cc1..d3c4545a 100644 --- a/ios/chrome/browser/lens_overlay/model/lens_overlay_configuration_factory.mm +++ b/ios/chrome/browser/lens_overlay/model/lens_overlay_configuration_factory.mm
@@ -25,6 +25,10 @@ return LensEntrypoint::LensOverlayOverflowMenu; case LensOverlayEntrypoint::kSearchImageContextMenu: return LensEntrypoint::ContextMenu; + case LensOverlayEntrypoint::kLVFCameraCapture: + case LensOverlayEntrypoint::kLVFImagePicker: + // TODO: Add the correct entrypoint once validated. + return LensEntrypoint::ContextMenu; } }
diff --git a/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.h b/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.h index d8eb358..1c50a96 100644 --- a/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.h +++ b/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.h
@@ -15,6 +15,10 @@ kOverflowMenu, // Search image button from context menu. kSearchImageContextMenu, + // Image captured by LVF camera. + kLVFCameraCapture, + // Image retrieved from gallery. + kLVFImagePicker, }; namespace lens {
diff --git a/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.mm b/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.mm index 9aa59a4f..73de61b 100644 --- a/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.mm +++ b/ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.mm
@@ -14,6 +14,9 @@ case LensOverlayEntrypoint::kOverflowMenu: case LensOverlayEntrypoint::kSearchImageContextMenu: return LensOverlayInvocationSource::kAppMenu; + case LensOverlayEntrypoint::kLVFImagePicker: + case LensOverlayEntrypoint::kLVFCameraCapture: + return LensOverlayInvocationSource::kAppMenu; } }
diff --git a/ios/chrome/browser/lens_overlay/ui/lens_overlay_container_presenter.mm b/ios/chrome/browser/lens_overlay/ui/lens_overlay_container_presenter.mm index fe35cfd..e0377b8 100644 --- a/ios/chrome/browser/lens_overlay/ui/lens_overlay_container_presenter.mm +++ b/ios/chrome/browser/lens_overlay/ui/lens_overlay_container_presenter.mm
@@ -65,9 +65,14 @@ _containerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; - [_baseViewController presentViewController:_containerViewController - animated:animated - completion:completion]; + UIViewController* presentingBase = + _baseViewController.presentedViewController == nil + ? _baseViewController + : _baseViewController.presentedViewController; + + [presentingBase presentViewController:_containerViewController + animated:animated + completion:completion]; } - (void)dismissContainerAnimated:(BOOL)animated
diff --git a/ios/chrome/browser/main/ui_bundled/DEPS b/ios/chrome/browser/main/ui_bundled/DEPS index 6b2d972..001e25d 100644 --- a/ios/chrome/browser/main/ui_bundled/DEPS +++ b/ios/chrome/browser/main/ui_bundled/DEPS
@@ -1,7 +1,7 @@ include_rules = [ "+ios/chrome/browser/ui", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h", "+ios/chrome/browser/blocking_overlay/ui_bundled/blocking_overlay_view_controller.h",
diff --git a/ios/chrome/browser/metrics/model/BUILD.gn b/ios/chrome/browser/metrics/model/BUILD.gn index 22d219a..10545de 100644 --- a/ios/chrome/browser/metrics/model/BUILD.gn +++ b/ios/chrome/browser/metrics/model/BUILD.gn
@@ -343,8 +343,8 @@ "//components/metrics/demographics", "//components/strings", "//components/ukm", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/metrics/model/demographics_egtest.mm b/ios/chrome/browser/metrics/model/demographics_egtest.mm index ae5d3b6..483ba7f6 100644 --- a/ios/chrome/browser/metrics/model/demographics_egtest.mm +++ b/ios/chrome/browser/metrics/model/demographics_egtest.mm
@@ -5,10 +5,10 @@ #import "base/time/time.h" #import "components/metrics/demographics/demographic_metrics_provider.h" #import "components/ukm/ukm_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_test_case.h" #import "ios/testing/earl_grey/app_launch_configuration.h"
diff --git a/ios/chrome/browser/metrics/model/ukm_egtest.mm b/ios/chrome/browser/metrics/model/ukm_egtest.mm index dc922f6..cbc8a6171 100644 --- a/ios/chrome/browser/metrics/model/ukm_egtest.mm +++ b/ios/chrome/browser/metrics/model/ukm_egtest.mm
@@ -3,10 +3,10 @@ // found in the LICENSE file. #import "base/ios/ios_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/ntp/ui_bundled/BUILD.gn b/ios/chrome/browser/ntp/ui_bundled/BUILD.gn index c4b9a92..3b19599 100644 --- a/ios/chrome/browser/ntp/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/ntp/ui_bundled/BUILD.gn
@@ -108,6 +108,8 @@ "//components/supervised_user/core/common:features", "//ios/chrome/app/profile", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/account_menu", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", "//ios/chrome/browser/bubble/ui_bundled", "//ios/chrome/browser/context_menu/ui_bundled/link_preview", "//ios/chrome/browser/discover_feed/model", @@ -153,8 +155,6 @@ "//ios/chrome/browser/sync/model", "//ios/chrome/browser/toolbar/ui_bundled/public", "//ios/chrome/browser/toolbar/ui_bundled/tab_groups/coordinator", - "//ios/chrome/browser/ui/authentication/account_menu", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", "//ios/chrome/browser/ui/content_suggestions", "//ios/chrome/browser/ui/content_suggestions:content_suggestions_ui", "//ios/chrome/browser/ui/content_suggestions:content_suggestions_ui_util", @@ -411,10 +411,10 @@ deps = [ "//components/prefs", "//components/variations/service", + "//ios/chrome/browser/authentication/ui_bundled/cells:constants", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", - "//ios/chrome/browser/ui/authentication/cells:constants", ] public_deps = [ "//base" ] }
diff --git a/ios/chrome/browser/ntp/ui_bundled/DEPS b/ios/chrome/browser/ntp/ui_bundled/DEPS index 98fba4f..ec932e8 100644 --- a/ios/chrome/browser/ntp/ui_bundled/DEPS +++ b/ios/chrome/browser/ntp/ui_bundled/DEPS
@@ -6,7 +6,7 @@ "+ios/chrome/browser/start_surface/ui_bundled", "+ios/chrome/browser/ui/content_suggestions", "+ios/chrome/browser/first_run/ui_bundled/ios_first_run_field_trials.h", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/first_run/ui_bundled/first_run_util.h", "+ios/chrome/browser/overscroll_actions/ui_bundled", "+ios/chrome/browser/toolbar/ui_bundled/buttons",
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_management/BUILD.gn b/ios/chrome/browser/ntp/ui_bundled/feed_management/BUILD.gn index f085e21..1477207e 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_management/BUILD.gn +++ b/ios/chrome/browser/ntp/ui_bundled/feed_management/BUILD.gn
@@ -45,9 +45,9 @@ sources = [ "feed_management_egtest.mm" ] deps = [ "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", ]
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_management/feed_management_egtest.mm b/ios/chrome/browser/ntp/ui_bundled/feed_management/feed_management_egtest.mm index f46a760..aab9df88 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_management/feed_management_egtest.mm +++ b/ios/chrome/browser/ntp/ui_bundled/feed_management/feed_management_egtest.mm
@@ -5,10 +5,10 @@ #import <UIKit/UIKit.h> #import <XCTest/XCTest.h> +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/BUILD.gn b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/BUILD.gn index 52f1919..06d7a0b 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/BUILD.gn +++ b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/BUILD.gn
@@ -30,6 +30,9 @@ "//components/signin/public/identity_manager/objc", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/content_notification/model:util", "//ios/chrome/browser/discover_feed/model:constants", "//ios/chrome/browser/ntp/ui_bundled", @@ -56,9 +59,6 @@ "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:signin_presenter", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/browser/ui/content_suggestions/set_up_list:utils", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/util",
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_coordinator.mm b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_coordinator.mm index 4146200..69e8301 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_coordinator.mm +++ b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_coordinator.mm
@@ -12,6 +12,8 @@ #import "components/search_engines/template_url_prepopulate_data.h" #import "components/search_engines/template_url_service.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/notifications_promo_view_constants.h" @@ -35,8 +37,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.h b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.h index ead3f05..cdba6d84 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.h +++ b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.h
@@ -6,7 +6,8 @@ #define IOS_CHROME_BROWSER_NTP_UI_BUNDLED_FEED_TOP_SECTION_FEED_TOP_SECTION_MEDIATOR_H_ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h" + +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mutator.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller_delegate.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/notifications_promo_view_constants.h"
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.mm b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.mm index d1912e0..f8a9cbe 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.mm +++ b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mediator.mm
@@ -14,6 +14,7 @@ #import "components/prefs/pref_service.h" #import "components/signin/public/identity_manager/identity_manager.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "ios/chrome/browser/content_notification/model/content_notification_util.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_consumer.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_delegate.h" @@ -29,7 +30,6 @@ #import "ios/chrome/browser/shared/public/features/system_flags.h" #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/utils.h" using base::RecordAction;
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.h b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.h index ac843df..5aadaf4 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.h +++ b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.h
@@ -7,7 +7,7 @@ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_delegate.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_consumer.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_mutator.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller_delegate.h"
diff --git a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.mm b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.mm index 00d8766..5c4c926 100644 --- a/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.mm +++ b/ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.mm
@@ -5,16 +5,16 @@ #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/feed_top_section_view_controller.h" #import "base/check.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/discover_feed/model/feed_constants.h" -#import "ios/chrome/browser/shared/public/features/features.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/discover_feed_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/notifications_promo_view.h" #import "ios/chrome/browser/ntp/ui_bundled/feed_top_section/notifications_promo_view_constants.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_delegate.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" +#import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #import "ios/chrome/grit/ios_branded_strings.h"
diff --git a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm index 3e5fc93..decd414 100644 --- a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm +++ b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_coordinator.mm
@@ -30,6 +30,8 @@ #import "ios/chrome/app/profile/profile_init_stage.h" #import "ios/chrome/app/profile/profile_state.h" #import "ios/chrome/app/profile/profile_state_observer.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" #import "ios/chrome/browser/bubble/ui_bundled/bubble_view_controller_presenter.h" #import "ios/chrome/browser/context_menu/ui_bundled/link_preview/link_preview_coordinator.h" #import "ios/chrome/browser/discover_feed/model/discover_feed_observer_bridge.h" @@ -114,8 +116,6 @@ #import "ios/chrome/browser/sync/model/sync_service_factory.h" #import "ios/chrome/browser/toolbar/ui_bundled/public/fakebox_focuser.h" #import "ios/chrome/browser/toolbar/ui_bundled/tab_groups/coordinator/tab_group_indicator_coordinator.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_utils.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_delegate.h"
diff --git a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.mm b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.mm index 0ee23dd..b063053 100644 --- a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.mm +++ b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.mm
@@ -8,10 +8,10 @@ #import "base/metrics/field_trial_params.h" #import "components/prefs/pref_service.h" #import "components/variations/service/variations_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" #pragma mark - Constants
diff --git a/ios/chrome/browser/overlays/model/public/infobar_banner/BUILD.gn b/ios/chrome/browser/overlays/model/public/infobar_banner/BUILD.gn index 505099a3..3af56f3 100644 --- a/ios/chrome/browser/overlays/model/public/infobar_banner/BUILD.gn +++ b/ios/chrome/browser/overlays/model/public/infobar_banner/BUILD.gn
@@ -23,6 +23,7 @@ "//components/password_manager/core/common:features", "//components/translate/core/browser", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", "//ios/chrome/browser/infobars/model", "//ios/chrome/browser/infobars/model/overlays:overlay_type", "//ios/chrome/browser/overlays/model", @@ -33,7 +34,6 @@ "//ios/chrome/browser/permissions/model:infobar_delegate", "//ios/chrome/browser/safe_browsing/model/tailored_security:infobar_delegates", "//ios/chrome/browser/settings/model/sync/utils", - "//ios/chrome/browser/ui/authentication", "//ios/chrome/browser/web/model", "//ios/web/public/permissions", "//ui/base",
diff --git a/ios/chrome/browser/overlays/model/public/infobar_banner/DEPS b/ios/chrome/browser/overlays/model/public/infobar_banner/DEPS index e7725dd..fb4992b5 100644 --- a/ios/chrome/browser/overlays/model/public/infobar_banner/DEPS +++ b/ios/chrome/browser/overlays/model/public/infobar_banner/DEPS
@@ -4,7 +4,7 @@ "+ios/chrome/browser/reading_list/ui_bundled/ios_add_to_reading_list_infobar_delegate.h", ], "^confirm_infobar_banner_overlay_request_config.mm": [ - "+ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h", + "+ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.h", ], "^sync_error_infobar_banner_overlay_request_config.mm": [ "+ios/chrome/browser/settings/ui_bundled/sync/utils/sync_error_infobar_delegate.h",
diff --git a/ios/chrome/browser/overlays/model/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm b/ios/chrome/browser/overlays/model/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm index 031f6d0..389e8aa 100644 --- a/ios/chrome/browser/overlays/model/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm +++ b/ios/chrome/browser/overlays/model/public/infobar_banner/confirm_infobar_banner_overlay_request_config.mm
@@ -6,10 +6,10 @@ #import "components/infobars/core/confirm_infobar_delegate.h" #import "components/infobars/core/infobar.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.h" #import "ios/chrome/browser/infobars/model/infobar_ios.h" #import "ios/chrome/browser/infobars/model/overlays/infobar_overlay_type.h" #import "ios/chrome/browser/overlays/model/public/common/infobars/infobar_overlay_request_config.h" -#import "ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h" namespace confirm_infobar_overlays {
diff --git a/ios/chrome/browser/passwords/model/BUILD.gn b/ios/chrome/browser/passwords/model/BUILD.gn index caab063..4d014df 100644 --- a/ios/chrome/browser/passwords/model/BUILD.gn +++ b/ios/chrome/browser/passwords/model/BUILD.gn
@@ -326,12 +326,12 @@ "//components/sync/base", "//components/sync/service", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/infobars/ui_bundled/banners:public", "//ios/chrome/browser/passwords/ui_bundled/bottom_sheet:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/google_services:constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/passwords/model/password_controller_egtest.mm b/ios/chrome/browser/passwords/model/password_controller_egtest.mm index 9b11b2b52..fc57f9eb 100644 --- a/ios/chrome/browser/passwords/model/password_controller_egtest.mm +++ b/ios/chrome/browser/passwords/model/password_controller_egtest.mm
@@ -20,14 +20,14 @@ #import "components/strings/grit/components_strings.h" #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_prefs.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h" #import "ios/chrome/browser/infobars/ui_bundled/banners/infobar_banner_constants.h" #import "ios/chrome/browser/passwords/model/password_manager_app_interface.h" #import "ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/passwords/ui_bundled/BUILD.gn b/ios/chrome/browser/passwords/ui_bundled/BUILD.gn index 105552a..db094b2 100644 --- a/ios/chrome/browser/passwords/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/passwords/ui_bundled/BUILD.gn
@@ -117,6 +117,7 @@ "//components/strings", "//components/url_formatter", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/passwords/model:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support+eg2", @@ -125,7 +126,6 @@ "//ios/chrome/browser/settings/ui_bundled/password/password_checkup:password_checkup_constants", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/BUILD.gn b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/BUILD.gn index ec391775..4642723 100644 --- a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/BUILD.gn +++ b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/BUILD.gn
@@ -107,6 +107,7 @@ "//components/password_manager/core/common:features", "//components/url_formatter", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/passwords/model:eg_test_support+eg2", "//ios/chrome/browser/passwords/model/metrics", @@ -115,7 +116,6 @@ "//ios/chrome/browser/settings/ui_bundled/password:password_constants", "//ios/chrome/browser/settings/ui_bundled/password/password_details:password_details_table_view_constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm index eb23bd0..1f37b87c 100644 --- a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm +++ b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm
@@ -10,6 +10,8 @@ #import "components/password_manager/core/browser/features/password_features.h" #import "components/password_manager/core/common/password_manager_features.h" #import "components/url_formatter/elide_url.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/passwords/model/metrics/ios_password_manager_metrics.h" #import "ios/chrome/browser/passwords/model/password_manager_app_interface.h" @@ -19,8 +21,6 @@ #import "ios/chrome/browser/settings/ui_bundled/password/password_settings_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/password/passwords_table_view_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h"
diff --git a/ios/chrome/browser/passwords/ui_bundled/password_suggestion_egtest.mm b/ios/chrome/browser/passwords/ui_bundled/password_suggestion_egtest.mm index ae65954c..d97bc740 100644 --- a/ios/chrome/browser/passwords/ui_bundled/password_suggestion_egtest.mm +++ b/ios/chrome/browser/passwords/ui_bundled/password_suggestion_egtest.mm
@@ -10,14 +10,14 @@ #import "base/time/time.h" #import "components/password_manager/core/browser/features/password_features.h" #import "components/password_manager/core/common/password_manager_features.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/passwords/model/password_manager_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest_utils.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_manager_ui_features.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_settings_app_interface.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h"
diff --git a/ios/chrome/browser/permissions/ui_bundled/BUILD.gn b/ios/chrome/browser/permissions/ui_bundled/BUILD.gn index 664715fb..6260019 100644 --- a/ios/chrome/browser/permissions/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/permissions/ui_bundled/BUILD.gn
@@ -77,6 +77,7 @@ "//components/signin/internal/identity_manager:capabilities", "//components/supervised_user/core/common:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/badges/ui_bundled:public", "//ios/chrome/browser/infobars/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/infobars/ui_bundled/banners:public", @@ -85,7 +86,6 @@ "//ios/chrome/browser/permissions/ui_bundled:constants", "//ios/chrome/browser/permissions/ui_bundled:permission_info", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/permissions/ui_bundled/permissions_egtest.mm b/ios/chrome/browser/permissions/ui_bundled/permissions_egtest.mm index c7fb77b..3286f75 100644 --- a/ios/chrome/browser/permissions/ui_bundled/permissions_egtest.mm +++ b/ios/chrome/browser/permissions/ui_bundled/permissions_egtest.mm
@@ -10,6 +10,8 @@ #import "base/strings/utf_string_conversions.h" #import "base/test/ios/wait_util.h" #import "components/signin/internal/identity_manager/account_capabilities_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/badges/ui_bundled/badge_constants.h" #import "ios/chrome/browser/infobars/ui_bundled/banners/infobar_banner_constants.h" #import "ios/chrome/browser/infobars/ui_bundled/infobar_earl_grey_ui_test_util.h" @@ -18,8 +20,6 @@ #import "ios/chrome/browser/permissions/ui_bundled/permissions_app_interface.h" #import "ios/chrome/browser/permissions/ui_bundled/permissions_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/plus_addresses/ui/BUILD.gn b/ios/chrome/browser/plus_addresses/ui/BUILD.gn index 29af5f5..7fb376d95 100644 --- a/ios/chrome/browser/plus_addresses/ui/BUILD.gn +++ b/ios/chrome/browser/plus_addresses/ui/BUILD.gn
@@ -50,13 +50,13 @@ "//components/plus_addresses/metrics", "//components/plus_addresses/resources/strings", "//components/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/plus_addresses/ui:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled:constants", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common:string_util", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm b/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm index 8c8b4e5..07f9486 100644 --- a/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm +++ b/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm
@@ -12,14 +12,14 @@ #import "components/plus_addresses/metrics/plus_address_metrics.h" #import "components/plus_addresses/plus_address_test_utils.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/plus_addresses/ui/plus_address_app_interface.h" #import "ios/chrome/browser/plus_addresses/ui/plus_address_bottom_sheet_constants.h" #import "ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_actions_app_interface.h"
diff --git a/ios/chrome/browser/policy/model/BUILD.gn b/ios/chrome/browser/policy/model/BUILD.gn index 0c5227ab..a8877d7 100644 --- a/ios/chrome/browser/policy/model/BUILD.gn +++ b/ios/chrome/browser/policy/model/BUILD.gn
@@ -90,6 +90,7 @@ "//components/variations/service", "//components/version_info:version_info", "//ios/chrome/app/profile", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser", @@ -100,7 +101,6 @@ "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/common", "//ios/web/public/thread", "//services/network/public/cpp", @@ -124,6 +124,7 @@ "//components/sync/base", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/browser", @@ -132,7 +133,6 @@ "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/web/public/thread", ] } @@ -254,6 +254,7 @@ "//google_apis", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", + "//ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_prompt", "//ios/chrome/browser/flags:system_flags", "//ios/chrome/browser/prefs/model", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", @@ -272,7 +273,6 @@ "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:fake_system_identity_manager", "//ios/chrome/browser/signin/model:test_support", - "//ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt", "//ios/chrome/test:test_support", "//ios/web/public/test:test", "//net", @@ -314,6 +314,9 @@ "//components/sync/base:features", "//google_apis", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/ntp/ui_bundled:constants", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", @@ -334,9 +337,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid:tab_grid_metrics", "//ios/chrome/browser/toolbar/ui_bundled/public:constants", "//ios/chrome/browser/translate/model:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/browser/ui/content_suggestions:constants", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/common/ui/confirmation_alert:constants",
diff --git a/ios/chrome/browser/policy/model/DEPS b/ios/chrome/browser/policy/model/DEPS index a63aafe0..44994110 100644 --- a/ios/chrome/browser/policy/model/DEPS +++ b/ios/chrome/browser/policy/model/DEPS
@@ -7,7 +7,7 @@ specific_include_rules = { # TODO(crbug.com/40820398): Remove this dependency. "^policy_watcher_browser_agent.mm": [ - "+ios/chrome/browser/ui/authentication/signin/signin_utils.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h", "+ios/chrome/browser/shared/coordinator/scene/scene_state.h", ], "^policy_egtest.mm": [
diff --git a/ios/chrome/browser/policy/model/policy_egtest.mm b/ios/chrome/browser/policy/model/policy_egtest.mm index 1d46b189..b53f50e 100644 --- a/ios/chrome/browser/policy/model/policy_egtest.mm +++ b/ios/chrome/browser/policy/model/policy_egtest.mm
@@ -17,6 +17,8 @@ #import "components/policy/test_support/signature_provider.h" #import "components/safe_browsing/core/common/features.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_constants.h" #import "ios/chrome/browser/policy/model/cloud/user_policy_constants.h" #import "ios/chrome/browser/policy/model/policy_app_interface.h" @@ -35,8 +37,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/translate/model/translate_app_interface.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h"
diff --git a/ios/chrome/browser/policy/model/policy_watcher_browser_agent.mm b/ios/chrome/browser/policy/model/policy_watcher_browser_agent.mm index 3b4f6337..d9d7629 100644 --- a/ios/chrome/browser/policy/model/policy_watcher_browser_agent.mm +++ b/ios/chrome/browser/policy/model/policy_watcher_browser_agent.mm
@@ -18,6 +18,7 @@ #import "components/sync/base/pref_names.h" #import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/policy/model/policy_watcher_browser_agent_observer.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" @@ -25,7 +26,6 @@ #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/public/commands/policy_change_commands.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/web/public/thread/web_task_traits.h" NSString* kSyncDisabledAlertShownKey = @"SyncDisabledAlertShown";
diff --git a/ios/chrome/browser/policy/model/user_policy_egtest.mm b/ios/chrome/browser/policy/model/user_policy_egtest.mm index 8a54446..a7f4fb4 100644 --- a/ios/chrome/browser/policy/model/user_policy_egtest.mm +++ b/ios/chrome/browser/policy/model/user_policy_egtest.mm
@@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import "ios/testing/earl_grey/earl_grey_test.h" - #import <memory> #import "base/functional/bind.h" @@ -25,16 +23,16 @@ #import "components/policy/test_support/signature_provider.h" #import "components/strings/grit/components_strings.h" #import "google_apis/gaia/gaia_switches.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/policy/model/cloud/user_policy_constants.h" #import "ios/chrome/browser/policy/model/policy_app_interface.h" #import "ios/chrome/browser/policy/model/policy_earl_grey_utils.h" #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" @@ -46,6 +44,7 @@ #import "ios/chrome/test/scoped_eg_synchronization_disabler.h" #import "ios/testing/earl_grey/app_launch_configuration.h" #import "ios/testing/earl_grey/app_launch_manager.h" +#import "ios/testing/earl_grey/earl_grey_test.h" #import "net/test/embedded_test_server/embedded_test_server.h" #import "net/test/embedded_test_server/http_request.h" #import "net/test/embedded_test_server/http_response.h"
diff --git a/ios/chrome/browser/policy/ui_bundled/BUILD.gn b/ios/chrome/browser/policy/ui_bundled/BUILD.gn index 191163a..0eae716 100644 --- a/ios/chrome/browser/policy/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/policy/ui_bundled/BUILD.gn
@@ -36,6 +36,7 @@ "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin", "//ios/chrome/browser/policy/model", "//ios/chrome/browser/policy/model:browser_agent", "//ios/chrome/browser/policy/model:constants", @@ -51,7 +52,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/signin", "//ui/base", ] public_deps = [ ":user_policy_util" ]
diff --git a/ios/chrome/browser/policy/ui_bundled/DEPS b/ios/chrome/browser/policy/ui_bundled/DEPS index 04a7bee..a51943e 100644 --- a/ios/chrome/browser/policy/ui_bundled/DEPS +++ b/ios/chrome/browser/policy/ui_bundled/DEPS
@@ -3,6 +3,6 @@ "+ios/chrome/browser/enterprise/model/idle", "+ios/chrome/browser/signin/model", "+ios/chrome/browser/scoped_ui_blocker/ui_bundled", - "+ios/chrome/browser/ui/authentication/signin/signin_utils.h", - "+ios/chrome/browser/ui/authentication/authentication_ui_util.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h", + "+ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h", ]
diff --git a/ios/chrome/browser/policy/ui_bundled/idle/BUILD.gn b/ios/chrome/browser/policy/ui_bundled/idle/BUILD.gn index 0325ed8..bd46210 100644 --- a/ios/chrome/browser/policy/ui_bundled/idle/BUILD.gn +++ b/ios/chrome/browser/policy/ui_bundled/idle/BUILD.gn
@@ -57,6 +57,8 @@ "//components/signin/public/base", "//ios/chrome/app:launch_screen_ui", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/signin", "//ios/chrome/browser/enterprise/model/idle", "//ios/chrome/browser/policy/model", "//ios/chrome/browser/policy/model/resources", @@ -67,8 +69,6 @@ "//ios/chrome/browser/shared/ui/elements:activity_overlay", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/signin", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/confirmation_alert", "//ios/chrome/common/ui/confirmation_alert:constants", @@ -141,12 +141,12 @@ "//components/policy:policy_code_generate", "//components/policy/core/common:common_constants", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/policy/model:eg_test_support+eg2", "//ios/chrome/browser/policy/model:policy_util", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common:string_util", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm b/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm index 5dd1beaf..67ed4cb 100644 --- a/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm +++ b/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm
@@ -12,14 +12,14 @@ #import "components/enterprise/idle/idle_pref_names.h" #import "components/policy/core/common/policy_loader_ios_constants.h" #import "components/policy/policy_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/policy/model/policy_app_interface.h" #import "ios/chrome/browser/policy/model/policy_earl_grey_utils.h" #import "ios/chrome/browser/policy/model/policy_util.h" -#import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/policy/ui_bundled/idle/constants.h" +#import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_branded_strings.h"
diff --git a/ios/chrome/browser/policy/ui_bundled/signin_policy_scene_agent.mm b/ios/chrome/browser/policy/ui_bundled/signin_policy_scene_agent.mm index cc4a473..b1c30ca 100644 --- a/ios/chrome/browser/policy/ui_bundled/signin_policy_scene_agent.mm +++ b/ios/chrome/browser/policy/ui_bundled/signin_policy_scene_agent.mm
@@ -11,6 +11,7 @@ #import "ios/chrome/app/profile/profile_init_stage.h" #import "ios/chrome/app/profile/profile_state.h" #import "ios/chrome/app/profile/profile_state_observer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/policy/model/policy_util.h" #import "ios/chrome/browser/policy/model/policy_watcher_browser_agent.h" #import "ios/chrome/browser/policy/model/policy_watcher_browser_agent_observer_bridge.h" @@ -27,7 +28,6 @@ #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/authentication_service_observer_bridge.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface SigninPolicySceneAgent () <AuthenticationServiceObserving, IdentityManagerObserverBridgeDelegate,
diff --git a/ios/chrome/browser/policy/ui_bundled/user_policy/BUILD.gn b/ios/chrome/browser/policy/ui_bundled/user_policy/BUILD.gn index 84aefbff..bcc40e7 100644 --- a/ios/chrome/browser/policy/ui_bundled/user_policy/BUILD.gn +++ b/ios/chrome/browser/policy/ui_bundled/user_policy/BUILD.gn
@@ -17,6 +17,9 @@ "//base", "//components/signin/public/base", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/signin", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/policy/model", "//ios/chrome/browser/policy/model/resources", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", @@ -25,9 +28,6 @@ "//ios/chrome/browser/shared/ui/elements:activity_overlay", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/signin", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/confirmation_alert", "//ui/base",
diff --git a/ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_coordinator.mm b/ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_coordinator.mm index 004c3be..fd341cb 100644 --- a/ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_coordinator.mm +++ b/ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_coordinator.mm
@@ -5,18 +5,17 @@ #import "ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_coordinator.h" #import "base/strings/sys_string_conversions.h" -#import "ios/chrome/browser/shared/model/browser/browser.h" -#import "ios/chrome/browser/shared/ui/elements/activity_overlay_coordinator.h" -#import "ios/chrome/browser/signin/model/authentication_service.h" -#import "ios/chrome/browser/signin/model/authentication_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" #import "ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_coordinator_delegate.h" #import "ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_mediator.h" #import "ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_presenter.h" #import "ios/chrome/browser/policy/ui_bundled/user_policy/user_policy_prompt_view_controller.h" +#import "ios/chrome/browser/shared/model/browser/browser.h" +#import "ios/chrome/browser/shared/ui/elements/activity_overlay_coordinator.h" +#import "ios/chrome/browser/signin/model/authentication_service.h" +#import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_action_handler.h" - namespace { constexpr CGFloat kHalfSheetCornerRadius = 20; } // namespace
diff --git a/ios/chrome/browser/post_restore_signin/ui_bundled/BUILD.gn b/ios/chrome/browser/post_restore_signin/ui_bundled/BUILD.gn index 19946980..030771c 100644 --- a/ios/chrome/browser/post_restore_signin/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/post_restore_signin/ui_bundled/BUILD.gn
@@ -15,6 +15,9 @@ "//base", "//components/feature_engagement/public", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/promos_manager/model", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", "//ios/chrome/browser/shared/model/application_context", @@ -26,9 +29,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:signin_util", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication:authentication_constants", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common/ui/confirmation_alert", "//ios/chrome/common/ui/promo_style:promo_style", "//ios/public/provider/chrome/browser/branded_images:branded_images_api",
diff --git a/ios/chrome/browser/post_restore_signin/ui_bundled/DEPS b/ios/chrome/browser/post_restore_signin/ui_bundled/DEPS index dd1feea..2edaf8b 100644 --- a/ios/chrome/browser/post_restore_signin/ui_bundled/DEPS +++ b/ios/chrome/browser/post_restore_signin/ui_bundled/DEPS
@@ -3,6 +3,6 @@ "+ios/chrome/browser/signin/model", "+ios/chrome/browser/sync/model/sync_service_factory.h", "+ios/chrome/browser/promos_manager/ui_bundled", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/search_engine_choice/ui_bundled", ]
diff --git a/ios/chrome/browser/post_restore_signin/ui_bundled/post_restore_signin_provider.mm b/ios/chrome/browser/post_restore_signin/ui_bundled/post_restore_signin_provider.mm index 7c6c188..31ba5c61 100644 --- a/ios/chrome/browser/post_restore_signin/ui_bundled/post_restore_signin_provider.mm +++ b/ios/chrome/browser/post_restore_signin/ui_bundled/post_restore_signin_provider.mm
@@ -14,6 +14,7 @@ #import "components/signin/public/identity_manager/identity_manager.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/post_restore_signin/ui_bundled/metrics.h" #import "ios/chrome/browser/promos_manager/model/constants.h" #import "ios/chrome/browser/promos_manager/model/promo_config.h" @@ -26,7 +27,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/signin_util.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/price_notifications/ui_bundled/BUILD.gn b/ios/chrome/browser/price_notifications/ui_bundled/BUILD.gn index 1a1ed60..0af8ab9 100644 --- a/ios/chrome/browser/price_notifications/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/price_notifications/ui_bundled/BUILD.gn
@@ -152,9 +152,9 @@ "//components/commerce/core:feature_list", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/shared/ui/table_view:constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//ui/base",
diff --git a/ios/chrome/browser/price_notifications/ui_bundled/price_notifications_price_tracking_egtest.mm b/ios/chrome/browser/price_notifications/ui_bundled/price_notifications_price_tracking_egtest.mm index 8b29b90..83cf5be 100644 --- a/ios/chrome/browser/price_notifications/ui_bundled/price_notifications_price_tracking_egtest.mm +++ b/ios/chrome/browser/price_notifications/ui_bundled/price_notifications_price_tracking_egtest.mm
@@ -3,10 +3,10 @@ // found in the LICENSE file. #import "components/commerce/core/commerce_feature_list.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_navigation_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" #import "ios/chrome/test/earl_grey/chrome_matchers.h"
diff --git a/ios/chrome/browser/push_notification/ui_bundled/BUILD.gn b/ios/chrome/browser/push_notification/ui_bundled/BUILD.gn index c617d863..f02b9b6 100644 --- a/ios/chrome/browser/push_notification/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/push_notification/ui_bundled/BUILD.gn
@@ -50,6 +50,7 @@ "//components/signin/public/base", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/content_notification/model:util", "//ios/chrome/browser/ntp/model:set_up_list_item_type", "//ios/chrome/browser/ntp/model:set_up_list_prefs", @@ -66,7 +67,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common/ui/promo_style", "//ui/base", ] @@ -144,14 +144,16 @@ "//base", "//base/test:test_support", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/ntp/model:features", "//ios/chrome/browser/settings/ui_bundled/notifications:constants", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/tips_notifications/model:utils", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/browser/ui/content_suggestions:constants", "//ios/chrome/browser/ui/content_suggestions:eg_test_support+eg2", "//ios/chrome/browser/ui/content_suggestions/set_up_list:constants",
diff --git a/ios/chrome/browser/push_notification/ui_bundled/DEPS b/ios/chrome/browser/push_notification/ui_bundled/DEPS index 1891c0ce..eed4ffb 100644 --- a/ios/chrome/browser/push_notification/ui_bundled/DEPS +++ b/ios/chrome/browser/push_notification/ui_bundled/DEPS
@@ -1,5 +1,5 @@ include_rules = [ - "+ios/chrome/browser/ui/authentication/signin", + "+ios/chrome/browser/authentication/ui_bundled/signin", "+ios/chrome/browser/alert_view/ui_bundled", "+ios/chrome/browser/content_notification/model/content_notification_util.h", "+ios/chrome/browser/ntp/model",
diff --git a/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_coordinator.mm b/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_coordinator.mm index a276b4b0..5309afc 100644 --- a/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_coordinator.mm +++ b/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_coordinator.mm
@@ -8,6 +8,7 @@ #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/content_notification/model/content_notification_util.h" #import "ios/chrome/browser/push_notification/model/push_notification_client_id.h" #import "ios/chrome/browser/push_notification/ui_bundled/metrics.h" @@ -26,7 +27,6 @@ #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_egtest.mm b/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_egtest.mm index dc9a5fc..37e039ee 100644 --- a/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_egtest.mm +++ b/ios/chrome/browser/push_notification/ui_bundled/notifications_opt_in_egtest.mm
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/ntp/model/features.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/tips_notifications/model/utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/browser/ui/content_suggestions/new_tab_page_app_interface.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/constants.h" #import "ios/chrome/common/ui/promo_style/constants.h"
diff --git a/ios/chrome/browser/reading_list/ui_bundled/BUILD.gn b/ios/chrome/browser/reading_list/ui_bundled/BUILD.gn index 47d14b9..6ed3fd1 100644 --- a/ios/chrome/browser/reading_list/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/reading_list/ui_bundled/BUILD.gn
@@ -37,6 +37,11 @@ "//components/ukm/ios:ukm_url_recorder", "//components/url_formatter", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:account_settings_presenter", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", "//ios/chrome/browser/favicon/model", "//ios/chrome/browser/favicon/ui_bundled", "//ios/chrome/browser/feature_engagement/model", @@ -67,11 +72,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/sync/model", "//ios/chrome/browser/tabs/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:account_settings_presenter", - "//ios/chrome/browser/ui/authentication:signin_presenter", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", "//ios/chrome/browser/url_loading/model", "//ios/chrome/browser/window_activities/model", "//ios/chrome/common/ui/favicon", @@ -147,6 +147,7 @@ "//components/url_formatter", "//ios/chrome/app:tests_hook", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/drag_and_drop/model", "//ios/chrome/browser/intents:intents_donation_helper", "//ios/chrome/browser/keyboard/ui_bundled", @@ -161,7 +162,6 @@ "//ios/chrome/browser/shared/ui/table_view:utils", "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/common", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/favicon", @@ -195,6 +195,7 @@ "//components/sync:test_support", "//components/sync/base", "//components/url_formatter", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/favicon/model", "//ios/chrome/browser/feature_engagement/model", "//ios/chrome/browser/net/model:crurl", @@ -202,7 +203,6 @@ "//ios/chrome/browser/shared/ui/table_view:styler", "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/tabs/model", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/test/fakes", "//ios/web", "//ios/web/public/test", @@ -229,6 +229,9 @@ "//components/sync/base", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/reading_list/model:constants", "//ios/chrome/browser/settings/ui_bundled:constants", "//ios/chrome/browser/settings/ui_bundled/google_services:constants", @@ -237,9 +240,6 @@ "//ios/chrome/browser/shared/ui/symbols", "//ios/chrome/browser/shared/ui/table_view:constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:authentication_constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/common/ui/table_view:cells_constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/reading_list/ui_bundled/DEPS b/ios/chrome/browser/reading_list/ui_bundled/DEPS index 5bb4bd1..128e53a 100644 --- a/ios/chrome/browser/reading_list/ui_bundled/DEPS +++ b/ios/chrome/browser/reading_list/ui_bundled/DEPS
@@ -1,5 +1,5 @@ include_rules = [ - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/settings/ui_bundled", "+ios/chrome/browser/drag_and_drop/model", "+ios/chrome/browser/favicon/model",
diff --git a/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm b/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm index 33743c5..924db96 100644 --- a/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm +++ b/ios/chrome/browser/reading_list/ui_bundled/reading_list_account_storage_egtest.mm
@@ -7,6 +7,11 @@ #import "components/reading_list/features/reading_list_switches.h" #import "components/signin/public/base/consent_level.h" #import "components/signin/public/base/signin_pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/reading_list/model/reading_list_constants.h" #import "ios/chrome/browser/reading_list/ui_bundled/reading_list_app_interface.h" #import "ios/chrome/browser/reading_list/ui_bundled/reading_list_constants.h" @@ -16,11 +21,6 @@ #import "ios/chrome/browser/shared/ui/elements/activity_overlay_egtest_util.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_navigation_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/reading_list/ui_bundled/reading_list_coordinator.mm b/ios/chrome/browser/reading_list/ui_bundled/reading_list_coordinator.mm index ef2827b..8c59fc6 100644 --- a/ios/chrome/browser/reading_list/ui_bundled/reading_list_coordinator.mm +++ b/ios/chrome/browser/reading_list/ui_bundled/reading_list_coordinator.mm
@@ -21,6 +21,11 @@ #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_settings_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "ios/chrome/browser/favicon/model/ios_chrome_favicon_loader_factory.h" #import "ios/chrome/browser/favicon/model/ios_chrome_large_icon_service_factory.h" #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" @@ -59,11 +64,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/account_settings_presenter.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" #import "ios/chrome/browser/url_loading/model/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/model/url_loading_params.h" #import "ios/chrome/browser/window_activities/model/window_activity_helpers.h"
diff --git a/ios/chrome/browser/reading_list/ui_bundled/reading_list_egtest.mm b/ios/chrome/browser/reading_list/ui_bundled/reading_list_egtest.mm index 62a09dcb..5cc8599d 100644 --- a/ios/chrome/browser/reading_list/ui_bundled/reading_list_egtest.mm +++ b/ios/chrome/browser/reading_list/ui_bundled/reading_list_egtest.mm
@@ -18,6 +18,9 @@ #import "base/strings/utf_string_conversions.h" #import "base/test/ios/wait_util.h" #import "components/sync/base/user_selectable_type.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/reading_list/ui_bundled/reading_list_app_interface.h" #import "ios/chrome/browser/reading_list/ui_bundled/reading_list_constants.h" #import "ios/chrome/browser/reading_list/ui_bundled/reading_list_egtest_utils.h" @@ -26,9 +29,6 @@ #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/reading_list/ui_bundled/reading_list_table_view_controller.mm b/ios/chrome/browser/reading_list/ui_bundled/reading_list_table_view_controller.mm index 70286b6..2b5782a 100644 --- a/ios/chrome/browser/reading_list/ui_bundled/reading_list_table_view_controller.mm +++ b/ios/chrome/browser/reading_list/ui_bundled/reading_list_table_view_controller.mm
@@ -12,6 +12,9 @@ #import "base/metrics/user_metrics_action.h" #import "components/strings/grit/components_strings.h" #import "ios/chrome/app/tests_hook.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h" #import "ios/chrome/browser/drag_and_drop/model/drag_item_util.h" #import "ios/chrome/browser/drag_and_drop/model/table_view_url_drag_drop_handler.h" #import "ios/chrome/browser/intents/intents_donation_helper.h" @@ -37,9 +40,6 @@ #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_delegate.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util_mac.h" #import "ui/strings/grit/ui_strings.h"
diff --git a/ios/chrome/browser/recent_tabs/ui_bundled/BUILD.gn b/ios/chrome/browser/recent_tabs/ui_bundled/BUILD.gn index 9b44fbc9..ba5c5d70 100644 --- a/ios/chrome/browser/recent_tabs/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/recent_tabs/ui_bundled/BUILD.gn
@@ -22,6 +22,7 @@ "//components/signin/public/identity_manager", "//components/signin/public/identity_manager/objc", "//components/sync", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", "//ios/chrome/browser/default_browser/model:default_browser_interest_signals", "//ios/chrome/browser/favicon/model", "//ios/chrome/browser/feature_engagement/model", @@ -51,7 +52,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid:grid_toolbars_mutator", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/toolbars", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/toolbars:toolbars_ui", - "//ios/chrome/browser/ui/authentication/history_sync", "//ios/chrome/browser/url_loading/model", "//ios/chrome/browser/url_loading/model:url_loading_params_header", "//ios/chrome/common/ui/favicon:favicon_constants", @@ -88,6 +88,12 @@ "//components/sync", "//ios/chrome/app:tests_hook", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/drag_and_drop/model", "//ios/chrome/browser/intents:intents_donation_helper", "//ios/chrome/browser/keyboard/ui_bundled", @@ -116,12 +122,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/suggested_actions/resources", "//ios/chrome/browser/tabs_search/model", "//ios/chrome/browser/tabs_search/model:model_factory", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:signin_presenter", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/browser/url_loading/model", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/favicon", @@ -224,6 +224,9 @@ "//components/sync/service", "//components/unified_consent", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/cells:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/history/ui_bundled:constants", "//ios/chrome/browser/policy/model:eg_test_support+eg2", "//ios/chrome/browser/policy/model:policy_util", @@ -234,9 +237,6 @@ "//ios/chrome/browser/signin/model:test_constants", "//ios/chrome/browser/tabs/ui_bundled/tests:eg_test_support+eg2", "//ios/chrome/browser/tabs/ui_bundled/tests:fake_distant_tab", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/cells:constants", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/recent_tabs/ui_bundled/DEPS b/ios/chrome/browser/recent_tabs/ui_bundled/DEPS index fd75ba2..bf40ca0 100644 --- a/ios/chrome/browser/recent_tabs/ui_bundled/DEPS +++ b/ios/chrome/browser/recent_tabs/ui_bundled/DEPS
@@ -16,7 +16,7 @@ "+ios/chrome/browser/sync/model", "+ios/chrome/browser/synced_sessions/model", "+ios/chrome/browser/tabs_search/model", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/menu/ui_bundled", "+ios/chrome/browser/settings/ui_bundled/sync/utils", "+ios/chrome/browser/sharing/ui_bundled",
diff --git a/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_coordinator.mm b/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_coordinator.mm index c8b6550..bbc47c3 100644 --- a/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_coordinator.mm +++ b/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_coordinator.mm
@@ -11,6 +11,9 @@ #import "base/metrics/user_metrics_action.h" #import "components/signin/public/base/signin_metrics.h" #import "components/sync/service/sync_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" #import "ios/chrome/browser/favicon/model/ios_chrome_favicon_loader_factory.h" #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" #import "ios/chrome/browser/menu/ui_bundled/action_factory.h" @@ -43,9 +46,6 @@ #import "ios/chrome/browser/sync/model/sync_service_factory.h" #import "ios/chrome/browser/synced_sessions/model/distant_session.h" #import "ios/chrome/browser/synced_sessions/model/synced_sessions_util.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" #import "ios/chrome/browser/url_loading/model/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/model/url_loading_params.h"
diff --git a/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_egtest.mm b/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_egtest.mm index 11a5ce3..0531ee1 100644 --- a/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_egtest.mm +++ b/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_egtest.mm
@@ -14,6 +14,11 @@ #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_prefs.h" #import "components/unified_consent/pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/history/ui_bundled/history_ui_constants.h" #import "ios/chrome/browser/policy/model/policy_app_interface.h" #import "ios/chrome/browser/policy/model/policy_earl_grey_utils.h" @@ -27,11 +32,6 @@ #import "ios/chrome/browser/signin/model/test_constants.h" #import "ios/chrome/browser/tabs/ui_bundled/tests/distant_tabs_app_interface.h" #import "ios/chrome/browser/tabs/ui_bundled/tests/fake_distant_tab.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_table_view_controller.mm b/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_table_view_controller.mm index 14b08dd..319245c3 100644 --- a/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_table_view_controller.mm +++ b/ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_table_view_controller.mm
@@ -28,6 +28,15 @@ #import "components/sync_sessions/session_sync_service.h" #import "components/trusted_vault/trusted_vault_server_constants.h" #import "ios/chrome/app/tests_hook.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_consumer.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "ios/chrome/browser/drag_and_drop/model/drag_item_util.h" #import "ios/chrome/browser/drag_and_drop/model/table_view_url_drag_drop_handler.h" #import "ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.h" @@ -81,15 +90,6 @@ #import "ios/chrome/browser/synced_sessions/model/synced_sessions.h" #import "ios/chrome/browser/tabs_search/model/tabs_search_service.h" #import "ios/chrome/browser/tabs_search/model/tabs_search_service_factory.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_consumer.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" #import "ios/chrome/browser/url_loading/model/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/model/url_loading_params.h" #import "ios/chrome/browser/url_loading/model/url_loading_util.h"
diff --git a/ios/chrome/browser/save_to_drive/ui_bundled/BUILD.gn b/ios/chrome/browser/save_to_drive/ui_bundled/BUILD.gn index ff77f74..040d3aa 100644 --- a/ios/chrome/browser/save_to_drive/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/save_to_drive/ui_bundled/BUILD.gn
@@ -20,6 +20,7 @@ "//ios/chrome/browser/account_picker/ui_bundled:account_picker_configuration", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_consumer", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_logger", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/download/model", "//ios/chrome/browser/drive/model:drive_file_uploader", "//ios/chrome/browser/drive/model:drive_service", @@ -33,7 +34,6 @@ "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/web/public", "//ios/web/public/download", "//ui/base", @@ -97,6 +97,8 @@ "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser/account_picker/ui_bundled", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_configuration", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/download/model", "//ios/chrome/browser/drive/model:drive_service_factory", "//ios/chrome/browser/drive/model:drive_tab_helper", @@ -110,8 +112,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/test/fakes", "//ios/web/public/download", "//ios/web/public/test/fakes", @@ -131,6 +131,8 @@ "//ios/chrome/app/strings", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation:constants", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_screen:account_picker_screen", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/download/ui_bundled:constants", "//ios/chrome/browser/drive/model:policy", "//ios/chrome/browser/drive/model:test_constants", @@ -138,8 +140,6 @@ "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing:embedded_test_server_support",
diff --git a/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_coordinator_unittest.mm b/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_coordinator_unittest.mm index ea5b525..52bdf16 100644 --- a/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_coordinator_unittest.mm +++ b/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_coordinator_unittest.mm
@@ -9,6 +9,7 @@ #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_configuration.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_coordinator.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_coordinator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/drive/model/drive_service_factory.h" #import "ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_coordinator.h" #import "ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_mediator.h" @@ -26,7 +27,6 @@ #import "ios/chrome/browser/shared/public/commands/show_signin_command.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/fakes/fake_ui_view_controller.h" #import "ios/web/public/test/fakes/fake_download_task.h"
diff --git a/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_egtest.mm b/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_egtest.mm index 6a0f477d..09b7f562 100644 --- a/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_egtest.mm +++ b/ios/chrome/browser/save_to_drive/ui_bundled/save_to_drive_egtest.mm
@@ -9,6 +9,10 @@ #import "components/policy/policy_constants.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_confirmation/account_picker_confirmation_screen_constants.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_screen/account_picker_screen_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/download/ui_bundled/download_manager_constants.h" #import "ios/chrome/browser/drive/model/drive_policy.h" #import "ios/chrome/browser/drive/model/test_constants.h" @@ -18,10 +22,6 @@ #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_matchers.h"
diff --git a/ios/chrome/browser/save_to_photos/ui_bundled/BUILD.gn b/ios/chrome/browser/save_to_photos/ui_bundled/BUILD.gn index 9f9637a..f6411c1 100644 --- a/ios/chrome/browser/save_to_photos/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/save_to_photos/ui_bundled/BUILD.gn
@@ -19,6 +19,8 @@ "//ios/chrome/browser/account_picker/ui_bundled", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_configuration", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_logger", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/drive/model:manage_storage_url_util", "//ios/chrome/browser/photos/model", "//ios/chrome/browser/photos/model:metrics", @@ -35,8 +37,6 @@ "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/store_kit/model", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/browser/web/model/image_fetch", "//ios/web/public", "//ios/web/public/navigation:referrer", @@ -62,6 +62,8 @@ "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser/account_picker/ui_bundled", "//ios/chrome/browser/account_picker/ui_bundled:account_picker_configuration", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/photos/model:metrics", "//ios/chrome/browser/photos/model:photos_service_factory", "//ios/chrome/browser/shared/coordinator/alert", @@ -78,8 +80,6 @@ "//ios/chrome/browser/signin/model:fake_system_identity_manager", "//ios/chrome/browser/signin/model:test_support", "//ios/chrome/browser/store_kit/model", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/browser/web/model/image_fetch", "//ios/chrome/test:test_support", "//ios/chrome/test/fakes",
diff --git a/ios/chrome/browser/save_to_photos/ui_bundled/save_to_photos_coordinator_unittest.mm b/ios/chrome/browser/save_to_photos/ui_bundled/save_to_photos_coordinator_unittest.mm index d7a4d327..255bf62 100644 --- a/ios/chrome/browser/save_to_photos/ui_bundled/save_to_photos_coordinator_unittest.mm +++ b/ios/chrome/browser/save_to_photos/ui_bundled/save_to_photos_coordinator_unittest.mm
@@ -12,6 +12,7 @@ #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_configuration.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_coordinator.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_coordinator_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/photos/model/photos_service_factory.h" #import "ios/chrome/browser/save_to_photos/ui_bundled/save_to_photos_coordinator.h" #import "ios/chrome/browser/save_to_photos/ui_bundled/save_to_photos_mediator.h" @@ -34,7 +35,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/identity_test_environment_browser_state_adaptor.h" #import "ios/chrome/browser/store_kit/model/store_kit_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/test/fakes/fake_ui_view_controller.h" #import "ios/web/public/test/fakes/fake_web_state.h" #import "testing/gtest_mac.h"
diff --git a/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.h b/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.h index 289d755c..057389d 100644 --- a/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.h +++ b/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.h
@@ -90,6 +90,12 @@ const TabGroup* tab_group, TabGroupSyncService* tab_group_sync_service); +// Returns the collabID of the given `tab_group_id` if it's shared. +// Otherwise returns an empty collabID. +CollaborationId GetTabGroupCollabID( + const tab_groups::EitherGroupID& tab_group_id, + TabGroupSyncService* tab_group_sync_service); + } // namespace utils } // namespace tab_groups
diff --git a/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.mm b/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.mm index 7aa5ae0..84e14ab 100644 --- a/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.mm +++ b/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.mm
@@ -304,9 +304,18 @@ CollaborationId GetTabGroupCollabID( const TabGroup* tab_group, TabGroupSyncService* tab_group_sync_service) { - if (tab_group_sync_service && tab_group) { + if (!tab_group) { + return CollaborationId(); + } + return GetTabGroupCollabID(tab_group->tab_group_id(), tab_group_sync_service); +} + +CollaborationId GetTabGroupCollabID( + const tab_groups::EitherGroupID& tab_group_id, + TabGroupSyncService* tab_group_sync_service) { + if (tab_group_sync_service) { std::optional<tab_groups::SavedTabGroup> saved_group = - tab_group_sync_service->GetGroup(tab_group->tab_group_id()); + tab_group_sync_service->GetGroup(tab_group_id); if (saved_group.has_value() && saved_group->collaboration_id().has_value()) { return saved_group->collaboration_id().value();
diff --git a/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util_unittest.mm b/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util_unittest.mm index 5870617..c356801 100644 --- a/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util_unittest.mm +++ b/ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util_unittest.mm
@@ -533,7 +533,7 @@ } // Tests the `GetTabGroupCollabID` method with a shared group. -TEST_F(TabGroupSyncUtilTest, GetTabGroupCollabIDwithShared) { +TEST_F(TabGroupSyncUtilTest, GetTabGroupCollabIDWithShared) { TabGroupId tab_group_id = TabGroupId::GenerateNew(); WebStateList* web_state_list = browser_->GetWebStateList(); const TabGroup* local_group = @@ -543,7 +543,8 @@ /*urls=*/{}, /*position=*/std::nullopt); saved_group.SetCollaborationId(CollaborationId("collaboration")); - EXPECT_CALL(*mock_service_, GetGroup(tab_group_id)) + tab_groups::EitherGroupID either_id = tab_group_id; + EXPECT_CALL(*mock_service_, GetGroup(either_id)) .WillOnce(testing::Return(saved_group)); EXPECT_EQ(GetTabGroupCollabID(local_group, mock_service_).value(), @@ -552,7 +553,7 @@ } // Tests the `GetTabGroupCollabID` method with a non shared group. -TEST_F(TabGroupSyncUtilTest, GetTabGroupCollabIDwithNonShared) { +TEST_F(TabGroupSyncUtilTest, GetTabGroupCollabIDWithNonShared) { TabGroupId tab_group_id = TabGroupId::GenerateNew(); WebStateList* web_state_list = browser_->GetWebStateList(); const TabGroup* local_group = @@ -561,7 +562,8 @@ SavedTabGroup saved_group(u"title", tab_groups::TabGroupColorId::kGrey, /*urls=*/{}, /*position=*/std::nullopt); - EXPECT_CALL(*mock_service_, GetGroup(tab_group_id)) + tab_groups::EitherGroupID either_id = tab_group_id; + EXPECT_CALL(*mock_service_, GetGroup(either_id)) .WillOnce(testing::Return(saved_group)); EXPECT_NE(GetTabGroupCollabID(local_group, mock_service_).value(),
diff --git a/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h b/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h index 02c76097..30b3324 100644 --- a/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h +++ b/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h
@@ -20,6 +20,10 @@ static TabGroupSyncService* GetForProfile(ProfileIOS* profile); static TabGroupSyncServiceFactory* GetInstance(); + // Returns the default factory used to build TabGroupSyncService-s. Can be + // registered with SetTestingFactory to use real instances during testing. + static TestingFactory GetDefaultFactory(); + private: friend class base::NoDestructor<TabGroupSyncServiceFactory>;
diff --git a/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.mm b/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.mm index 4f71058..0b33c76 100644 --- a/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.mm +++ b/ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.mm
@@ -30,37 +30,9 @@ namespace tab_groups { -// static -TabGroupSyncService* TabGroupSyncServiceFactory::GetForProfile( - ProfileIOS* profile) { - return static_cast<TabGroupSyncService*>( - GetInstance()->GetServiceForBrowserState(profile, true)); -} - -TabGroupSyncServiceFactory* TabGroupSyncServiceFactory::GetInstance() { - static base::NoDestructor<TabGroupSyncServiceFactory> instance; - return instance.get(); -} - -TabGroupSyncServiceFactory::TabGroupSyncServiceFactory() - : ProfileKeyedServiceFactoryIOS("TabGroupSyncServiceFactory", - ServiceCreation::kCreateWithProfile) { - DependsOn(BrowserListFactory::GetInstance()); - DependsOn(DataTypeStoreServiceFactory::GetInstance()); - DependsOn(DeviceInfoSyncServiceFactory::GetInstance()); - DependsOn(SessionRestorationServiceFactory::GetInstance()); - DependsOn(OptimizationGuideServiceFactory::GetInstance()); - // The dependency on IdentityManager is only for the purpose of recording "on - // signin" metrics. - DependsOn(IdentityManagerFactory::GetInstance()); - DependsOn(data_sharing::DataSharingServiceFactory::GetInstance()); -} - -TabGroupSyncServiceFactory::~TabGroupSyncServiceFactory() = default; - -std::unique_ptr<KeyedService> -TabGroupSyncServiceFactory::BuildServiceInstanceFor( - web::BrowserState* context) const { +namespace { +// Builds the service. +std::unique_ptr<KeyedService> BuildService(web::BrowserState* context) { if (!IsTabGroupSyncEnabled()) { return nullptr; } @@ -100,5 +72,47 @@ sync_service->SetTabGroupSyncDelegate(std::move(delegate)); return sync_service; } +} // namespace + +// static +TabGroupSyncService* TabGroupSyncServiceFactory::GetForProfile( + ProfileIOS* profile) { + return static_cast<TabGroupSyncService*>( + GetInstance()->GetServiceForBrowserState(profile, true)); +} + +// static +TabGroupSyncServiceFactory* TabGroupSyncServiceFactory::GetInstance() { + static base::NoDestructor<TabGroupSyncServiceFactory> instance; + return instance.get(); +} + +// static +BrowserStateKeyedServiceFactory::TestingFactory +TabGroupSyncServiceFactory::GetDefaultFactory() { + return base::BindOnce(&BuildService); +} + +TabGroupSyncServiceFactory::TabGroupSyncServiceFactory() + : ProfileKeyedServiceFactoryIOS("TabGroupSyncServiceFactory", + ServiceCreation::kCreateWithProfile) { + DependsOn(BrowserListFactory::GetInstance()); + DependsOn(DataTypeStoreServiceFactory::GetInstance()); + DependsOn(DeviceInfoSyncServiceFactory::GetInstance()); + DependsOn(SessionRestorationServiceFactory::GetInstance()); + DependsOn(OptimizationGuideServiceFactory::GetInstance()); + // The dependency on IdentityManager is only for the purpose of recording "on + // signin" metrics. + DependsOn(IdentityManagerFactory::GetInstance()); + DependsOn(data_sharing::DataSharingServiceFactory::GetInstance()); +} + +TabGroupSyncServiceFactory::~TabGroupSyncServiceFactory() = default; + +std::unique_ptr<KeyedService> +TabGroupSyncServiceFactory::BuildServiceInstanceFor( + web::BrowserState* context) const { + return BuildService(context); +} } // namespace tab_groups
diff --git a/ios/chrome/browser/send_tab_to_self/ui_bundled/BUILD.gn b/ios/chrome/browser/send_tab_to_self/ui_bundled/BUILD.gn index 0cf7cdd..79149e7 100644 --- a/ios/chrome/browser/send_tab_to_self/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/send_tab_to_self/ui_bundled/BUILD.gn
@@ -13,6 +13,8 @@ "//components/send_tab_to_self", "//components/signin/public/identity_manager", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/infobars/ui_bundled/presentation", "//ios/chrome/browser/main/model", "//ios/chrome/browser/send_tab_to_self/model", @@ -27,8 +29,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication:signin_presenter", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/third_party/material_components_ios", "//ui/base", "//url", @@ -75,10 +75,10 @@ "//base", "//components/send_tab_to_self", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//net:test_support",
diff --git a/ios/chrome/browser/send_tab_to_self/ui_bundled/DEPS b/ios/chrome/browser/send_tab_to_self/ui_bundled/DEPS index 1c6b0f7..42111708 100644 --- a/ios/chrome/browser/send_tab_to_self/ui_bundled/DEPS +++ b/ios/chrome/browser/send_tab_to_self/ui_bundled/DEPS
@@ -3,6 +3,6 @@ "+ios/chrome/browser/overlays/ui_bundled", "+ios/chrome/browser/signin/model", "+ios/chrome/browser/sync/model", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/settings/ui_bundled/cells", ]
diff --git a/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator.mm b/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator.mm index deee5d8e..6dcb30d 100644 --- a/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator.mm +++ b/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator.mm
@@ -24,6 +24,8 @@ #import "components/signin/public/base/signin_metrics.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_service_observer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/infobars/ui_bundled/presentation/infobar_modal_positioner.h" #import "ios/chrome/browser/send_tab_to_self/model/send_tab_to_self_browser_agent.h" #import "ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_modal_delegate.h" @@ -48,8 +50,6 @@ #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/sync/model/send_tab_to_self_sync_service_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator_egtest.mm b/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator_egtest.mm index 20615d6..a132834 100644 --- a/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator_egtest.mm +++ b/ios/chrome/browser/send_tab_to_self/ui_bundled/send_tab_to_self_coordinator_egtest.mm
@@ -3,11 +3,11 @@ // found in the LICENSE file. #import "base/functional/bind.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/settings/model/sync/utils/BUILD.gn b/ios/chrome/browser/settings/model/sync/utils/BUILD.gn index 7cd5bc5..98d7e09 100644 --- a/ios/chrome/browser/settings/model/sync/utils/BUILD.gn +++ b/ios/chrome/browser/settings/model/sync/utils/BUILD.gn
@@ -83,6 +83,7 @@ "//components/browser_sync:switches", "//components/sync/base", "//ios/chrome/app/strings:ios_strings_grit", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", @@ -93,7 +94,6 @@ "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/ui/table_view:constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/chrome/test/earl_grey:switches", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/settings/model/sync/utils/sync_fake_server_egtest.mm b/ios/chrome/browser/settings/model/sync/utils/sync_fake_server_egtest.mm index a769d81..558b244 100644 --- a/ios/chrome/browser/settings/model/sync/utils/sync_fake_server_egtest.mm +++ b/ios/chrome/browser/settings/model/sync/utils/sync_fake_server_egtest.mm
@@ -10,6 +10,8 @@ #import "components/sync/base/command_line_switches.h" #import "components/sync/base/data_type.h" #import "components/sync/base/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" @@ -21,8 +23,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_navigation_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/BUILD.gn index 1d450708..9b272ac 100644 --- a/ios/chrome/browser/settings/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/BUILD.gn
@@ -116,6 +116,11 @@ "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/autofill/model", "//ios/chrome/browser/autofill/ui_bundled:util", "//ios/chrome/browser/autofill/ui_bundled/cells", @@ -216,11 +221,6 @@ "//ios/chrome/browser/sync/model", "//ios/chrome/browser/tabs/model/inactive_tabs:features", "//ios/chrome/browser/translate/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:signin_presenter", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/browser/ui/content_suggestions/cells", "//ios/chrome/browser/upgrade/model:public", "//ios/chrome/browser/voice/model", @@ -238,7 +238,8 @@ "//ui/base", "//url", ] - allow_circular_includes_from = [ "//ios/chrome/browser/ui/authentication" ] + allow_circular_includes_from = + [ "//ios/chrome/browser/authentication/ui_bundled" ] public_deps = [ "//ios/third_party/material_components_ios" ] frameworks = [ "UIKit.framework" ] } @@ -343,6 +344,7 @@ "//components/variations", "//components/variations/service", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/browsing_data/model", "//ios/chrome/browser/browsing_data/model:counters", "//ios/chrome/browser/content_settings/model", @@ -377,7 +379,6 @@ "//ios/chrome/browser/sync/model:test_support", "//ios/chrome/browser/tabs/model/inactive_tabs:features", "//ios/chrome/browser/translate/model", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/browser/voice/model", "//ios/chrome/browser/voice/model:prefs", "//ios/chrome/browser/web/model", @@ -484,6 +485,10 @@ "//components/sync/base", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/cells:constants", + "//ios/chrome/browser/authentication/ui_bundled/history_sync:pref_names", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/policy/model:eg_test_support+eg2", "//ios/chrome/browser/policy/model:policy_util", "//ios/chrome/browser/search_engine_choice/ui_bundled:earl_grey_ui_test_util", @@ -496,10 +501,6 @@ "//ios/chrome/browser/shared/ui/elements:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:test_constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/cells:constants", - "//ios/chrome/browser/ui/authentication/history_sync:pref_names", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/common/ui/table_view:cells_constants",
diff --git a/ios/chrome/browser/settings/ui_bundled/DEPS b/ios/chrome/browser/settings/ui_bundled/DEPS index d9b98e4..43bbf00 100644 --- a/ios/chrome/browser/settings/ui_bundled/DEPS +++ b/ios/chrome/browser/settings/ui_bundled/DEPS
@@ -41,7 +41,7 @@ "+ios/chrome/browser/sync/model", "+ios/chrome/browser/tabs/model/inactive_tabs", "+ios/chrome/browser/translate/model", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h", "+ios/chrome/browser/upgrade/model", "+ios/chrome/browser/voice/model",
diff --git a/ios/chrome/browser/settings/ui_bundled/autofill/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/autofill/BUILD.gn index bb2c44f..a052de1 100644 --- a/ios/chrome/browser/settings/ui_bundled/autofill/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/autofill/BUILD.gn
@@ -154,13 +154,13 @@ "//components/strings", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled/address_editor:constants", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled:settings_root_constants", "//ios/chrome/browser/shared/ui/elements:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:launch_configuration",
diff --git a/ios/chrome/browser/settings/ui_bundled/autofill/autofill_profile_settings_egtest.mm b/ios/chrome/browser/settings/ui_bundled/autofill/autofill_profile_settings_egtest.mm index 8d3ee7d3..9537aa0 100644 --- a/ios/chrome/browser/settings/ui_bundled/autofill/autofill_profile_settings_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/autofill/autofill_profile_settings_egtest.mm
@@ -8,13 +8,13 @@ #import "base/test/ios/wait_util.h" #import "components/autofill/core/common/autofill_features.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/autofill/ui_bundled/address_editor/autofill_constants.h" #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/autofill/autofill_settings_constants.h" #import "ios/chrome/browser/shared/ui/elements/activity_overlay_egtest_util.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/cells/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/cells/BUILD.gn index b034540..e58aa0b 100644 --- a/ios/chrome/browser/settings/ui_bundled/cells/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/cells/BUILD.gn
@@ -42,6 +42,7 @@ "//components/strings", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", "//ios/chrome/browser/search_engine_choice/ui_bundled:constants", "//ios/chrome/browser/settings/ui_bundled:constants", "//ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing:safe_browsing_promo_delegate", @@ -53,7 +54,6 @@ "//ios/chrome/browser/shared/ui/table_view:styler", "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/ui/authentication:authentication_constants", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/favicon", "//ios/chrome/common/ui/table_view:cells_constants",
diff --git a/ios/chrome/browser/settings/ui_bundled/cells/account_sign_in_item.mm b/ios/chrome/browser/settings/ui_bundled/cells/account_sign_in_item.mm index 58faa7e..967e7e2 100644 --- a/ios/chrome/browser/settings/ui_bundled/cells/account_sign_in_item.mm +++ b/ios/chrome/browser/settings/ui_bundled/cells/account_sign_in_item.mm
@@ -4,11 +4,11 @@ #import "ios/chrome/browser/settings/ui_bundled/cells/account_sign_in_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" #import "ios/chrome/browser/settings/ui_bundled/cells/settings_image_detail_text_cell.h" #import "ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_constants.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/BUILD.gn index 2034a3b..d5f65ee 100644 --- a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/BUILD.gn
@@ -52,6 +52,8 @@ "//components/strings", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet", "//ios/chrome/browser/browsing_data/model", "//ios/chrome/browser/browsing_data/model:counters", "//ios/chrome/browser/browsing_data/model:feature_flags", @@ -88,8 +90,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/sync/model", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid:tab_grid_ui", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/signout_action_sheet", "//ios/chrome/common", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/confirmation_alert", @@ -203,6 +203,7 @@ "//components/strings", "//components/sync/base", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/autofill/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/recent_tabs/ui_bundled:ui_constants", @@ -217,7 +218,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups:tab_groups_constant", "//ios/chrome/browser/tab_switcher/ui_bundled/test:utils", "//ios/chrome/browser/tabs/model/inactive_tabs:features", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_egtest.mm b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_egtest.mm index 291f888..9317dac2 100644 --- a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_egtest.mm
@@ -9,14 +9,14 @@ #import "components/browsing_data/core/browsing_data_utils.h" #import "components/browsing_data/core/pref_names.h" #import "components/signin/internal/identity_manager/account_capabilities_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/settings/ui_bundled/cells/clear_browsing_data_constants.h" #import "ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_ui_constants.h" #import "ios/chrome/browser/settings/ui_bundled/clear_browsing_data/features.h" #import "ios/chrome/browser/shared/ui/elements/activity_overlay_egtest_util.h" #import "ios/chrome/browser/shared/ui/elements/elements_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_table_view_controller.mm index f507a9f..749ba60e 100644 --- a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/clear_browsing_data_table_view_controller.mm
@@ -12,6 +12,7 @@ #import "components/prefs/pref_service.h" #import "components/signin/public/base/signin_metrics.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/browsing_data/model/browsing_data_features.h" #import "ios/chrome/browser/browsing_data/model/browsing_data_remove_mask.h" #import "ios/chrome/browser/browsing_data/model/browsing_data_remover.h" @@ -42,7 +43,6 @@ #import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_styler.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" #import "ios/chrome/grit/ios_branded_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm index 5253ac8..242ed91 100644 --- a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm
@@ -11,12 +11,12 @@ #import "components/signin/public/base/signin_metrics.h" #import "components/strings/grit/components_strings.h" #import "components/sync/base/command_line_switches.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/cells/clear_browsing_data_constants.h" #import "ios/chrome/browser/settings/ui_bundled/clear_browsing_data/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data_coordinator.mm b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data_coordinator.mm index 4f45808..3b6e872 100644 --- a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data_coordinator.mm +++ b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browsing_data_coordinator.mm
@@ -6,6 +6,7 @@ #import "components/browsing_data/core/browsing_data_utils.h" #import "components/signin/public/base/signin_metrics.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/browsing_data/model/browsing_data_remover_factory.h" #import "ios/chrome/browser/discover_feed/model/discover_feed_service_factory.h" #import "ios/chrome/browser/settings/ui_bundled/clear_browsing_data/browsing_data_counter_wrapper_producer.h" @@ -17,7 +18,6 @@ #import "ios/chrome/browser/shared/model/browser/browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" @interface QuickDeleteBrowsingDataCoordinator () < QuickDeleteBrowsingDataViewControllerDelegate,
diff --git a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_egtest.mm b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_egtest.mm index 36774860..04dc75e 100644 --- a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_egtest.mm
@@ -13,6 +13,8 @@ #import "components/signin/internal/identity_manager/account_capabilities_constants.h" #import "components/strings/grit/components_strings.h" #import "components/sync/base/command_line_switches.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/autofill/ui_bundled/autofill_app_interface.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_constants.h" @@ -26,8 +28,6 @@ #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/grid_constants.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_constants.h" #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/downloads/BUILD.gn index 26a09a3..84b803b 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/downloads/BUILD.gn
@@ -16,6 +16,9 @@ ":identity_button_cell", "//components/prefs", "//ios/chrome/app/strings:ios_strings_grit", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/settings/ui_bundled:settings_root", "//ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos", "//ios/chrome/browser/shared/coordinator/chrome_coordinator", @@ -27,9 +30,6 @@ "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/views", "//ui/base", ] frameworks = [ "UIKit.framework" ] @@ -43,9 +43,9 @@ "identity_button_item.mm", ] deps = [ + "//ios/chrome/browser/authentication/ui_bundled/views", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/shared/ui/table_view/cells", - "//ios/chrome/browser/ui/authentication/views", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/common/ui/util", ] frameworks = [ "UIKit.framework" ] @@ -62,6 +62,11 @@ "//base/test:test_support", "//components/signin/public/identity_manager:test_support", "//ios/chrome/app/strings:ios_strings_grit", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/settings/ui_bundled/downloads:identity_button_cell", "//ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos", "//ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos:test_support", @@ -75,11 +80,6 @@ "//ios/chrome/browser/signin/model:fake_system_identity_manager", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/signin/model:test_support", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common/ui/colors", "//ios/chrome/test/fakes", "//testing/gtest",
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator.mm b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator.mm index 2f98613f..9206b3d 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator.mm
@@ -4,6 +4,7 @@ #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_action_delegate.h" @@ -20,7 +21,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" @interface DownloadsSettingsCoordinator () < DownloadsSettingsTableViewControllerActionDelegate,
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator_unittest.mm b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator_unittest.mm index 5d7b4a63..0823e95 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_coordinator_unittest.mm
@@ -7,6 +7,7 @@ #import "base/apple/foundation_util.h" #import "base/test/task_environment.h" #import "components/signin/public/identity_manager/identity_test_environment.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_action_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_presentation_delegate.h" @@ -26,7 +27,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/signin/model/identity_test_environment_browser_state_adaptor.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/test/fakes/fake_ui_navigation_controller.h" #import "ios/chrome/test/fakes/fake_ui_view_controller.h" #import "testing/platform_test.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.mm index a59b81f..0dd18f212 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.mm
@@ -5,6 +5,7 @@ #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.h" #import "base/apple/foundation_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_action_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_presentation_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.h" @@ -17,7 +18,6 @@ #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_model.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_unittest.mm b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_unittest.mm index ff4b837..4e12c3f 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_unittest.mm
@@ -5,6 +5,7 @@ #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller.h" #import "base/apple/foundation_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_action_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/downloads_settings_table_view_controller_presentation_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.h" @@ -13,7 +14,6 @@ #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mutator.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_switch_cell.h" #import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_controller_test.h" -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" #import "ios/chrome/grit/ios_strings.h" #import "testing/gtest_mac.h" #import "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.mm b/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.mm index 39c8543..44bf14b8 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.mm
@@ -4,7 +4,7 @@ #import "ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.h" -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" @implementation IdentityButtonCell
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.h b/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.h index 12ee344..23135e2c 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.h +++ b/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.h
@@ -7,8 +7,8 @@ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_item.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" typedef NS_ENUM(NSInteger, IdentityButtonControlArrowDirection);
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.mm b/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.mm index 1c8e8b2..8f0a4484 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.mm
@@ -4,8 +4,8 @@ #import "ios/chrome/browser/settings/ui_bundled/downloads/identity_button_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/identity_button_control.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/identity_button_cell.h" -#import "ios/chrome/browser/ui/authentication/views/identity_button_control.h" namespace {
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/BUILD.gn index 0831a1f..b8c0d0c 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/BUILD.gn
@@ -22,6 +22,9 @@ "//components/signin/public/identity_manager/objc", "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_selection:identity_item_configurator", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/views", "//ios/chrome/browser/settings/ui_bundled:settings_root", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", @@ -29,9 +32,6 @@ "//ios/chrome/browser/shared/ui/table_view:utils", "//ios/chrome/browser/shared/ui/table_view/cells", "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/views", "//ios/chrome/common/ui/colors", "//ui/base", ] @@ -61,6 +61,7 @@ "//components/signin/public/identity_manager:test_support", "//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/browser/account_picker/ui_bundled/account_picker_selection:identity_item_configurator", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/shared/model/application_context", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/model/profile/test", @@ -70,7 +71,6 @@ "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:fake_system_identity_manager", "//ios/chrome/browser/signin/model:test_support", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/common/ui/colors", "//testing/gtest", "//ui/base",
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller.mm index c5df61e..5479653 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller.mm
@@ -6,6 +6,7 @@ #import "base/apple/foundation_util.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_action_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_presentation_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mutator.h" @@ -13,7 +14,6 @@ #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_header_footer_item.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_model.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_unittest.mm b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_unittest.mm index a8b7467..1e8a0a4 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_unittest.mm
@@ -6,13 +6,13 @@ #import "base/apple/foundation_util.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_identity_item.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/fake_save_to_photos_settings_mutator.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_action_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_view_controller_presentation_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mutator.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_image_item.h" #import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_controller_test.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_identity_item.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "testing/gtest_mac.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mediator.mm b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mediator.mm index acd3c81c..8cbba02 100644 --- a/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mediator.mm +++ b/ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mediator.mm
@@ -10,13 +10,13 @@ #import "components/prefs/pref_service.h" #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "ios/chrome/browser/account_picker/ui_bundled/account_picker_selection/account_picker_selection_screen_identity_item_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_confirmation_consumer.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_account_selection_consumer.h" #import "ios/chrome/browser/settings/ui_bundled/downloads/save_to_photos/save_to_photos_settings_mediator_delegate.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/chrome_account_manager_service_observer_bridge.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" @interface SaveToPhotosSettingsMediator () < ChromeAccountManagerServiceObserver,
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/google_services/BUILD.gn index a6b2716..9b4db7bb 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/google_services/BUILD.gn
@@ -50,6 +50,13 @@ "//components/unified_consent", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet", "//ios/chrome/browser/commerce/model:model", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", @@ -98,13 +105,6 @@ "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/signin/model:system_identity_manager", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:authentication_constants", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signout_action_sheet", "//ios/chrome/browser/url_loading/model", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/table_view:cells_constants", @@ -236,6 +236,8 @@ "//components/sync/base:features", "//components/variations", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", @@ -256,8 +258,6 @@ "//ios/chrome/browser/shared/ui/elements:constants", "//ios/chrome/browser/shared/ui/elements:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/chrome/test/earl_grey:switches", @@ -294,6 +294,7 @@ "//components/variations:test_support", "//google_apis", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/parcel_tracking:opt_in_status", "//ios/chrome/browser/settings/ui_bundled/cells", "//ios/chrome/browser/settings/ui_bundled/google_services:constants", @@ -317,7 +318,6 @@ "//ios/chrome/browser/signin/model:test_support", "//ios/chrome/browser/sync/model", "//ios/chrome/browser/sync/model:test_support", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/test:test_support", "//ios/web/public/test", "//testing/gtest",
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_command_handler.h b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_command_handler.h index 8cef998..5581f50 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_command_handler.h +++ b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_command_handler.h
@@ -5,8 +5,8 @@ #ifndef IOS_CHROME_BROWSER_SETTINGS_UI_BUNDLED_GOOGLE_SERVICES_GOOGLE_SERVICES_SETTINGS_COMMAND_HANDLER_H_ #define IOS_CHROME_BROWSER_SETTINGS_UI_BUNDLED_GOOGLE_SERVICES_GOOGLE_SERVICES_SETTINGS_COMMAND_HANDLER_H_ +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" #import "ios/chrome/browser/signin/model/constants.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" // Protocol to communicate user actions from the mediator to its coordinator. @protocol GoogleServicesSettingsCommandHandler <NSObject>
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_coordinator.mm b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_coordinator.mm index 442566b..5769cd7 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_coordinator.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_coordinator.mm
@@ -10,6 +10,9 @@ #import "components/strings/grit/components_strings.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_command_handler.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_mediator.h" @@ -33,9 +36,6 @@ #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_egtest.mm b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_egtest.mm index f17bda55..6e2b449 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_egtest.mm
@@ -11,6 +11,9 @@ #import "components/signin/public/base/signin_switches.h" #import "components/supervised_user/core/common/features.h" #import "components/variations/pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_ui.h" @@ -25,9 +28,6 @@ #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_mediator.mm b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_mediator.mm index cdc49dc..019c313 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_mediator.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_mediator.mm
@@ -19,6 +19,8 @@ #import "components/supervised_user/core/common/features.h" #import "components/sync/service/sync_service.h" #import "components/unified_consent/pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" #import "ios/chrome/browser/parcel_tracking/features.h" #import "ios/chrome/browser/parcel_tracking/parcel_tracking_opt_in_status.h" #import "ios/chrome/browser/policy/model/policy_util.h" @@ -41,8 +43,6 @@ #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/system_identity.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" #import "ios/chrome/grit/ios_branded_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/BUILD.gn index 1eca429..1960295 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/BUILD.gn
@@ -22,6 +22,11 @@ "//components/sync/service", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", "//ios/chrome/browser/settings/model/sync/utils", @@ -48,11 +53,6 @@ "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/signin/model:system_identity_manager", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/signout_action_sheet", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/reauthentication", "//ios/third_party/material_components_ios", @@ -83,6 +83,11 @@ "//components/sync/service", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet:signout_action_sheet", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/settings/model/sync/utils", "//ios/chrome/browser/settings/model/sync/utils:identity_error_util", @@ -110,11 +115,6 @@ "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/signin/model:system_identity_manager", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/signout_action_sheet:signout_action_sheet", "//ios/chrome/common/ui/colors", "//ui/base", ] @@ -144,6 +144,8 @@ "//base/test:test_support", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/views:views_constants", "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/ntp/ui_bundled:feature_flags", @@ -155,8 +157,6 @@ "//ios/chrome/browser/shared/ui/elements:eg_test_support+eg2", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:test_constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/views:views_constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//net:test_support", @@ -185,6 +185,7 @@ "//components/variations:test_support", "//google_apis", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/settings/ui_bundled/cells", "//ios/chrome/browser/settings/ui_bundled/google_services", "//ios/chrome/browser/settings/ui_bundled/google_services:constants", @@ -209,7 +210,6 @@ "//ios/chrome/browser/signin/model:test_support", "//ios/chrome/browser/sync/model", "//ios/chrome/browser/sync/model:test_support", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/test:test_support", "//ios/web/public/test", "//testing/gtest",
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_egtest.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_egtest.mm index 846abb4..d4f2185 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_egtest.mm
@@ -6,6 +6,9 @@ #import "base/test/ios/wait_util.h" #import "base/time/time.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_ui.h" @@ -18,9 +21,6 @@ #import "ios/chrome/browser/shared/ui/elements/elements_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_view_controller.mm index 996ebf1..59b62db 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_view_controller.mm
@@ -17,6 +17,11 @@ #import "components/sync/service/sync_service_utils.h" #import "components/trusted_vault/trusted_vault_server_constants.h" #import "ios/chrome/app/application_delegate/app_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/enterprise/enterprise_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/net/model/crurl.h" #import "ios/chrome/browser/settings/model/sync/utils/account_error_ui_info.h" #import "ios/chrome/browser/settings/model/sync/utils/identity_error_util.h" @@ -55,11 +60,6 @@ #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_coordinator.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_coordinator.mm index cf9ad8f..45526ca4 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_coordinator.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_coordinator.mm
@@ -10,6 +10,9 @@ #import "components/strings/grit/components_strings.h" #import "components/sync/service/sync_service.h" #import "ios/chrome/app/application_delegate/app_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/scoped_ui_blocker/ui_bundled/scoped_ui_blocker.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/legacy_accounts_table_view_controller.h" @@ -36,9 +39,6 @@ #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_ui_util.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_mediator.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_mediator.mm index aa10b00..8ce26cc0 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_mediator.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_mediator.mm
@@ -9,6 +9,7 @@ #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_service_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/settings/model/sync/utils/account_error_ui_info.h" #import "ios/chrome/browser/settings/model/sync/utils/identity_error_util.h" @@ -32,7 +33,6 @@ #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_observer_bridge.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_egtest.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_egtest.mm index f95d674c..5ebedf4 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_egtest.mm
@@ -5,14 +5,14 @@ #import <UIKit/UIKit.h> #import "base/test/ios/wait_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_view_controller_constants.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_view_controller.mm index 8ce9cce..1dc63b2 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_table_view_controller.mm
@@ -7,6 +7,7 @@ #import "base/apple/foundation_util.h" #import "base/metrics/user_metrics.h" #import "base/notreached.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/identity_view_item.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_model_identity_data_source.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts/manage_accounts_mutator.h" @@ -14,7 +15,6 @@ #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" #import "ios/chrome/browser/signin/model/constants.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_coordinator.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_coordinator.mm index 59d8595a..f3e9266 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_coordinator.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_coordinator.mm
@@ -18,6 +18,7 @@ #import "components/sync/service/sync_user_settings.h" #import "components/trusted_vault/trusted_vault_server_constants.h" #import "ios/chrome/app/application_delegate/app_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/browser/search_engines/model/template_url_service_factory.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/bulk_upload/bulk_upload_coordinator.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/bulk_upload/bulk_upload_coordinator_delegate.h" @@ -57,7 +58,6 @@ #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_observer_bridge.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/signout_action_sheet/signout_action_sheet_coordinator.h" #import "ios/chrome/grit/ios_strings.h" #import "net/base/apple/url_conversions.h" #import "ui/base/l10n/l10n_util.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_egtest.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_egtest.mm index b5877c1..fe85174 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_egtest.mm
@@ -9,6 +9,11 @@ #import "components/strings/grit/components_strings.h" #import "components/sync/base/features.h" #import "components/sync/base/user_selectable_type.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" +#import "ios/chrome/browser/authentication/ui_bundled/views/views_constants.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h" @@ -25,11 +30,6 @@ #import "ios/chrome/browser/settings/ui_bundled/password/password_settings_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" -#import "ios/chrome/browser/ui/authentication/views/views_constants.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator.mm index a25752b..e8fa92d02 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator.mm
@@ -28,6 +28,8 @@ #import "components/sync/service/local_data_description.h" #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" #import "ios/chrome/browser/net/model/crurl.h" #import "ios/chrome/browser/policy/ui_bundled/management_util.h" #import "ios/chrome/browser/settings/model/sync/utils/account_error_ui_info.h" @@ -57,8 +59,6 @@ #import "ios/chrome/browser/signin/model/constants.h" #import "ios/chrome/browser/sync/model/enterprise_utils.h" #import "ios/chrome/browser/sync/model/sync_observer_bridge.h" -#import "ios/chrome/browser/ui/authentication/cells/central_account_view.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" #import "ios/chrome/grit/ios_branded_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator_unittest.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator_unittest.mm index 818a3a2..491072c 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_mediator_unittest.mm
@@ -14,6 +14,7 @@ #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_service.h" #import "components/sync/test/mock_sync_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h" #import "ios/chrome/browser/settings/ui_bundled/cells/settings_image_detail_text_item.h" #import "ios/chrome/browser/settings/ui_bundled/cells/sync_switch_item.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/features.h" @@ -38,7 +39,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/mock_sync_service_utils.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/cells/central_account_view.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm index 2e10ede..4fd12f51 100644 --- a/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.mm
@@ -5,6 +5,7 @@ #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_table_view_controller.h" #import "base/apple/foundation_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/central_account_view.h" #import "ios/chrome/browser/net/model/crurl.h" #import "ios/chrome/browser/policy/model/management_state.h" #import "ios/chrome/browser/settings/ui_bundled/cells/settings_image_detail_text_cell.h" @@ -17,7 +18,6 @@ #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_info_button_cell.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_switch_cell.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_utils.h" -#import "ios/chrome/browser/ui/authentication/cells/central_account_view.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/grit/ios_strings.h" #import "net/base/apple/url_conversions.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/password/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/password/BUILD.gn index 79b153e1..d55f0288 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/password/BUILD.gn
@@ -321,6 +321,7 @@ "//components/sync/base:features", "//components/sync/service", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/passwords/model/metrics", "//ios/chrome/browser/policy/model:eg_test_support+eg2", @@ -334,7 +335,6 @@ "//ios/chrome/browser/settings/ui_bundled/password/widget_promo_instructions:widget_promo_instructions_constants", "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/common/ui/reauthentication", "//ios/chrome/common/ui/table_view:cells_constants",
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_checkup/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/password/password_checkup/BUILD.gn index 73a802b..4e5fb823 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_checkup/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/password/password_checkup/BUILD.gn
@@ -141,11 +141,11 @@ ":password_checkup_constants", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/password/password_details:password_details_table_view_constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//ui/base",
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_checkup/password_checkup_egtest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_checkup/password_checkup_egtest.mm index c523f4e..e60e789 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_checkup/password_checkup_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_checkup/password_checkup_egtest.mm
@@ -4,13 +4,13 @@ #import "base/strings/sys_string_conversions.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_checkup/password_checkup_constants.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_constants.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest_utils.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_settings_app_interface.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm index b0666fd..3c10c13 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm
@@ -21,6 +21,9 @@ #import "components/sync/base/features.h" #import "components/sync/base/user_selectable_type.h" #import "components/sync/service/sync_prefs.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/passwords/model/metrics/ios_password_manager_metrics.h" #import "ios/chrome/browser/policy/model/policy_earl_grey_utils.h" @@ -35,9 +38,6 @@ #import "ios/chrome/browser/settings/ui_bundled/password/widget_promo_instructions/widget_promo_instructions_constants.h" #import "ios/chrome/browser/settings/ui_bundled/settings_root_table_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/common/ui/reauthentication/reauthentication_event.h" #import "ios/chrome/common/ui/reauthentication/reauthentication_protocol.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/BUILD.gn index aa36db1..fbe72df 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/BUILD.gn
@@ -47,6 +47,7 @@ "//components/version_info:channel", "//ios/chrome/app:tests_hook", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", "//ios/chrome/browser/favicon/model", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/passwords/model:sharing_factory", @@ -62,7 +63,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication:authentication_constants", "//ios/chrome/common:common", "//ios/chrome/common/ui/confirmation_alert", "//ios/chrome/common/ui/favicon:favicon_constants", @@ -102,6 +102,7 @@ "//components/password_manager/core/browser/sharing", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/settings/ui_bundled/cells", "//ios/chrome/browser/settings/ui_bundled/password/password_sharing/resources", @@ -109,7 +110,6 @@ "//ios/chrome/browser/shared/ui/symbols", "//ios/chrome/browser/shared/ui/table_view", "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/ui/authentication:authentication_constants", "//ios/chrome/common:string_util", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/confirmation_alert", @@ -159,13 +159,13 @@ "//components/password_manager/core/common", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/elements:constants", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/password/password_details:password_details_table_view_constants", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common:string_util", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2", @@ -194,6 +194,7 @@ "//components/password_manager/core/browser", "//components/password_manager/core/browser/sharing", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:authentication_constants", "//ios/chrome/browser/favicon/model", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/settings/ui_bundled/cells", @@ -212,7 +213,6 @@ "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/signin/model:fake_system_identity_manager", "//ios/chrome/browser/signin/model:test_support", - "//ios/chrome/browser/ui/authentication:authentication_constants", "//ios/chrome/test:test_support", "//ios/chrome/test/fakes", "//ios/web/public/test",
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/family_picker_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/family_picker_view_controller.mm index 8c5919c..00a80f5 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/family_picker_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/family_picker_view_controller.mm
@@ -5,6 +5,7 @@ #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/family_picker_view_controller.h" #import "base/check.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" #import "ios/chrome/browser/settings/ui_bundled/cells/settings_image_detail_text_item.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/family_picker_view_controller_presentation_delegate.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_constants.h" @@ -12,7 +13,6 @@ #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/table_view/cells/table_view_link_header_footer_item.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/elements/popover_label_view_controller.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_egtest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_egtest.mm index 0cc2738..f06b7de 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_egtest.mm
@@ -6,6 +6,8 @@ #import "build/branding_buildflags.h" #import "components/password_manager/core/common/password_manager_pref_names.h" #import "components/sync/base/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/settings/ui_bundled/elements/elements_constants.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_details/password_details_table_view_constants.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest_utils.h" @@ -13,8 +15,6 @@ #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_constants.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_branded_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/recipient_info.mm b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/recipient_info.mm index c04b2d8b..90d5229 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/recipient_info.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/recipient_info.mm
@@ -6,8 +6,8 @@ #import "base/strings/sys_string_conversions.h" #import "components/password_manager/core/browser/sharing/recipient_info.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" #import "ios/chrome/browser/shared/ui/symbols/symbols.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" @implementation RecipientInfoForIOSDisplay
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_mediator_unittest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_mediator_unittest.mm index 3bd1201..707bd71 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_mediator_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_mediator_unittest.mm
@@ -6,6 +6,7 @@ #import "base/strings/sys_string_conversions.h" #import "components/password_manager/core/browser/sharing/recipients_fetcher.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" #import "ios/chrome/browser/favicon/model/ios_chrome_favicon_loader_factory.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/recipient_info.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_consumer.h" @@ -20,7 +21,6 @@ #import "ios/chrome/browser/signin/model/fake_authentication_service_delegate.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" #import "ios/web/public/test/web_task_environment.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_view_controller.mm index 68b7e77..3cd30679 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_sharing/sharing_status_view_controller.mm
@@ -6,6 +6,7 @@ #import "base/strings/sys_string_conversions.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" #import "ios/chrome/browser/net/model/crurl.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_constants.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_sharing/password_sharing_metrics.h" @@ -13,7 +14,6 @@ #import "ios/chrome/browser/shared/ui/symbols/symbols.h" #import "ios/chrome/browser/shared/ui/table_view/table_view_favicon_data_source.h" #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/ui/authentication/authentication_constants.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/favicon/favicon_container_view.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/password/reauthentication/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/password/reauthentication/BUILD.gn index bacd7b16..6c786d5c 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/reauthentication/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/password/reauthentication/BUILD.gn
@@ -14,6 +14,7 @@ "//base", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/settings/ui_bundled/password:features", "//ios/chrome/browser/settings/ui_bundled/utils", "//ios/chrome/browser/shared/coordinator/alert", @@ -22,7 +23,6 @@ "//ios/chrome/browser/shared/coordinator/scene:scene_state_observer", "//ios/chrome/browser/shared/model/browser", "//ios/chrome/browser/shared/public/commands", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/common/ui/reauthentication", "//ios/public/provider/chrome/browser/passcode_settings:passcode_settings_api", "//ui/base",
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/privacy/BUILD.gn index 58e0fbc..0f33698 100644 --- a/ios/chrome/browser/settings/ui_bundled/privacy/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/privacy/BUILD.gn
@@ -192,10 +192,10 @@ "//components/safe_browsing/core/common:safe_browsing_prefs", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/privacy:privacy_constants", "//ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing:safe_browsing_constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/popup_menu/overflow_menu:feature_flags", "//ios/chrome/common/ui/table_view:cells_constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/lockdown_mode/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/privacy/lockdown_mode/BUILD.gn index f8c72e0..e727f77 100644 --- a/ios/chrome/browser/settings/ui_bundled/privacy/lockdown_mode/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/privacy/lockdown_mode/BUILD.gn
@@ -69,10 +69,10 @@ "//base/test:test_support", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/privacy:privacy_constants", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/popup_menu/overflow_menu:feature_flags", "//ios/chrome/browser/web/model:feature_flags", "//ios/chrome/common/ui/table_view:cells_constants",
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_egtest.mm b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_egtest.mm index a717ab2..ec959902 100644 --- a/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/privacy/privacy_safe_browsing_egtest.mm
@@ -7,12 +7,12 @@ #import "components/safe_browsing/core/common/features.h" #import "components/safe_browsing/core/common/safe_browsing_prefs.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/settings/ui_bundled/privacy/privacy_constants.h" #import "ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/BUILD.gn index dc9eb729..e314204 100644 --- a/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/BUILD.gn
@@ -28,6 +28,9 @@ "//components/signin/public/identity_manager/objc", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", "//ios/chrome/browser/keyboard/ui_bundled", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/settings/ui_bundled:settings_root", @@ -53,8 +56,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", "//ios/chrome/common/ui/colors:colors", "//ui/base", ]
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_standard_protection_coordinator.mm b/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_standard_protection_coordinator.mm index 010b13a..f3924a0 100644 --- a/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_standard_protection_coordinator.mm +++ b/ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_standard_protection_coordinator.mm
@@ -5,6 +5,7 @@ #import "ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_standard_protection_coordinator.h" #import "base/apple/foundation_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" #import "ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_standard_protection_mediator.h" #import "ios/chrome/browser/settings/ui_bundled/privacy/safe_browsing/safe_browsing_standard_protection_view_controller.h" #import "ios/chrome/browser/shared/model/browser/browser.h" @@ -14,7 +15,6 @@ #import "ios/chrome/browser/signin/model/authentication_service.h" #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" @interface SafeBrowsingStandardProtectionCoordinator () < SafeBrowsingStandardProtectionViewControllerPresentationDelegate>
diff --git a/ios/chrome/browser/settings/ui_bundled/safety_check/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/safety_check/BUILD.gn index 8af9cfe..e9439b89 100644 --- a/ios/chrome/browser/settings/ui_bundled/safety_check/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/safety_check/BUILD.gn
@@ -173,11 +173,11 @@ ":constants", "//base/test:test_support", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support", "//ios/chrome/browser/settings/ui_bundled/password:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/password/password_checkup:password_checkup_constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//ui/base",
diff --git a/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_egtest.mm b/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_egtest.mm index 5f670692..961453a 100644 --- a/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_egtest.mm
@@ -4,13 +4,13 @@ #import "base/strings/sys_string_conversions.h" #import "base/time/time.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_checkup/password_checkup_constants.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest_utils.h" #import "ios/chrome/browser/settings/ui_bundled/password/password_settings_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/safety_check/safety_check_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/search_engine_settings_eea_egtest.mm b/ios/chrome/browser/settings/ui_bundled/search_engine_settings_eea_egtest.mm index 4d66be6..2a5a705 100644 --- a/ios/chrome/browser/settings/ui_bundled/search_engine_settings_eea_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/search_engine_settings_eea_egtest.mm
@@ -32,7 +32,8 @@ // Tests that when changing the default search engine, the URL used for the // search is updated. -- (void)testChangeSearchEngine { +// TODO(crbug.com/386926969): Test failing on tablet-device and phone-device. +- (void)DISABLED_testChangeSearchEngine { [self startHTTPServer]; [self addURLRewriter];
diff --git a/ios/chrome/browser/settings/ui_bundled/settings_egtest.mm b/ios/chrome/browser/settings/ui_bundled/settings_egtest.mm index 57f0548..a93decb 100644 --- a/ios/chrome/browser/settings/ui_bundled/settings_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/settings_egtest.mm
@@ -16,13 +16,13 @@ #import "components/browsing_data/core/browsing_data_utils.h" #import "components/browsing_data/core/pref_names.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/settings/ui_bundled/clear_browsing_data/features.h" #import "ios/chrome/browser/settings/ui_bundled/settings_app_interface.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/shared/ui/elements/activity_overlay_egtest_util.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_actions_app_interface.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm index b337c36f..81414d4 100644 --- a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller.mm
@@ -41,6 +41,9 @@ #import "components/sync/service/sync_user_settings.h" #import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/bubble/ui_bundled/bubble_constants.h" #import "ios/chrome/browser/bubble/ui_bundled/bubble_view_controller_presenter.h" #import "ios/chrome/browser/commerce/model/push_notification/push_notification_feature.h" @@ -138,9 +141,6 @@ #import "ios/chrome/browser/sync/model/sync_observer_bridge.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/browser/upgrade/model/upgrade_utils.h" #import "ios/chrome/browser/voice/model/speech_input_locale_config.h" #import "ios/chrome/browser/voice/model/voice_search_prefs.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_unittest.mm b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_unittest.mm index bd80566..aa2247b 100644 --- a/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_unittest.mm +++ b/ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_unittest.mm
@@ -23,6 +23,7 @@ #import "components/variations/service/variations_service.h" #import "components/variations/service/variations_service_client.h" #import "components/variations/synthetic_trial_registry.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" #import "ios/chrome/browser/passwords/model/ios_chrome_profile_password_store_factory.h" #import "ios/chrome/browser/policy/model/policy_util.h" #import "ios/chrome/browser/search_engines/model/template_url_service_factory.h" @@ -50,7 +51,6 @@ #import "ios/chrome/browser/sync/model/mock_sync_service_utils.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" #import "ios/chrome/grit/ios_branded_strings.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/signin_settings_egtest.mm b/ios/chrome/browser/settings/ui_bundled/signin_settings_egtest.mm index 5f8c459..1cb55cb 100644 --- a/ios/chrome/browser/settings/ui_bundled/signin_settings_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/signin_settings_egtest.mm
@@ -4,6 +4,11 @@ #import "components/policy/policy_constants.h" #import "components/sync/base/user_selectable_type.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/policy/model/policy_app_interface.h" #import "ios/chrome/browser/policy/model/policy_earl_grey_utils.h" #import "ios/chrome/browser/policy/model/policy_util.h" @@ -12,11 +17,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/history_sync/pref_names.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/promo_style/constants.h" #import "ios/chrome/grit/ios_branded_strings.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/sync/BUILD.gn b/ios/chrome/browser/settings/ui_bundled/sync/BUILD.gn index 5c0897cb..8d46082 100644 --- a/ios/chrome/browser/settings/ui_bundled/sync/BUILD.gn +++ b/ios/chrome/browser/settings/ui_bundled/sync/BUILD.gn
@@ -22,6 +22,8 @@ "//components/sync", "//components/unified_consent", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/net/model:crurl", "//ios/chrome/browser/scoped_ui_blocker/ui_bundled", "//ios/chrome/browser/settings/model/sync/utils", @@ -45,8 +47,6 @@ "//ios/chrome/browser/signin/model:authentication_service_factory", "//ios/chrome/browser/signin/model:system_identity", "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/table_view:cells_constants", "//ui/base", @@ -104,12 +104,12 @@ "//components/feature_engagement/public", "//components/strings", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled:constants", "//ios/chrome/browser/settings/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/google_services:constants", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//ui/base",
diff --git a/ios/chrome/browser/settings/ui_bundled/sync/sync_encryption_passphrase_table_view_controller_egtest.mm b/ios/chrome/browser/settings/ui_bundled/sync/sync_encryption_passphrase_table_view_controller_egtest.mm index fd3ae27b..da0f432 100644 --- a/ios/chrome/browser/settings/ui_bundled/sync/sync_encryption_passphrase_table_view_controller_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/sync/sync_encryption_passphrase_table_view_controller_egtest.mm
@@ -7,14 +7,14 @@ #import "base/ios/ios_util.h" #import "components/feature_engagement/public/feature_list.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_matchers.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/google_services_settings_constants.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_constants.h" #import "ios/chrome/browser/settings/ui_bundled/settings_table_view_controller_constants.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" -#import "ios/chrome/browser/ui/authentication/signin_matchers.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/settings/ui_bundled/table_cell_catalog_view_controller.mm b/ios/chrome/browser/settings/ui_bundled/table_cell_catalog_view_controller.mm index 304300a..a66b241e1 100644 --- a/ios/chrome/browser/settings/ui_bundled/table_cell_catalog_view_controller.mm +++ b/ios/chrome/browser/settings/ui_bundled/table_cell_catalog_view_controller.mm
@@ -5,6 +5,9 @@ #import "ios/chrome/browser/settings/ui_bundled/table_cell_catalog_view_controller.h" #import "base/apple/foundation_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_configurator.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_account_item.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/table_view_signin_promo_item.h" #import "ios/chrome/browser/net/model/crurl.h" #import "ios/chrome/browser/settings/ui_bundled/address_bar_preference/cells/address_bar_options_item.h" #import "ios/chrome/browser/settings/ui_bundled/cells/account_sign_in_item.h" @@ -39,9 +42,6 @@ #import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/signin/model/constants.h" #import "ios/chrome/browser/signin/model/signin_util.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_configurator.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_account_item.h" -#import "ios/chrome/browser/ui/authentication/cells/table_view_signin_promo_item.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" #import "ios/chrome/common/ui/util/image_util.h" #import "ios/public/provider/chrome/browser/signin/signin_resources_api.h"
diff --git a/ios/chrome/browser/shared/coordinator/DEPS b/ios/chrome/browser/shared/coordinator/DEPS index 269bce8f..ef3a265 100644 --- a/ios/chrome/browser/shared/coordinator/DEPS +++ b/ios/chrome/browser/shared/coordinator/DEPS
@@ -3,8 +3,8 @@ # moved. "+ios/chrome/browser/ui", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h", ]
diff --git a/ios/chrome/browser/shared/coordinator/scene/BUILD.gn b/ios/chrome/browser/shared/coordinator/scene/BUILD.gn index 001fa12..3ffd4fa 100644 --- a/ios/chrome/browser/shared/coordinator/scene/BUILD.gn +++ b/ios/chrome/browser/shared/coordinator/scene/BUILD.gn
@@ -96,6 +96,10 @@ "//ios/chrome/browser/app_store_rating/ui_bundled", "//ios/chrome/browser/app_store_rating/ui_bundled:features", "//ios/chrome/browser/appearance/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/account_menu", + "//ios/chrome/browser/authentication/ui_bundled/enterprise:enterprise_utils", + "//ios/chrome/browser/authentication/ui_bundled/signin", "//ios/chrome/browser/blocking_overlay/ui_bundled", "//ios/chrome/browser/browser_view/ui_bundled", "//ios/chrome/browser/browsing_data/model", @@ -178,10 +182,6 @@ "//ios/chrome/browser/tab_insertion/model", "//ios/chrome/browser/tab_switcher/ui_bundled:utils", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/account_menu", - "//ios/chrome/browser/ui/authentication/enterprise:enterprise_utils", - "//ios/chrome/browser/ui/authentication/signin", "//ios/chrome/browser/ui/whats_new/promo", "//ios/chrome/browser/url_loading/model", "//ios/chrome/browser/web/model:page_placeholder",
diff --git a/ios/chrome/browser/shared/coordinator/scene/DEPS b/ios/chrome/browser/shared/coordinator/scene/DEPS index 44184bd..d511903 100644 --- a/ios/chrome/browser/shared/coordinator/scene/DEPS +++ b/ios/chrome/browser/shared/coordinator/scene/DEPS
@@ -44,4 +44,5 @@ "+ios/chrome/browser/web/model", "+ios/chrome/browser/web_state_list/model", "+ios/chrome/browser/window_activities/model", + "+ios/chrome/browser/authentication/ui_bundled", ]
diff --git a/ios/chrome/browser/shared/coordinator/scene/scene_controller.mm b/ios/chrome/browser/shared/coordinator/scene/scene_controller.mm index d2e096f..db31472 100644 --- a/ios/chrome/browser/shared/coordinator/scene/scene_controller.mm +++ b/ios/chrome/browser/shared/coordinator/scene/scene_controller.mm
@@ -53,6 +53,11 @@ #import "ios/chrome/browser/app_store_rating/ui_bundled/app_store_rating_scene_agent.h" #import "ios/chrome/browser/app_store_rating/ui_bundled/features.h" #import "ios/chrome/browser/appearance/ui_bundled/appearance_customization.h" +#import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_notification_infobar_delegate.h" #import "ios/chrome/browser/browser_view/ui_bundled/browser_view_controller.h" #import "ios/chrome/browser/browsing_data/model/browsing_data_remove_mask.h" #import "ios/chrome/browser/browsing_data/model/browsing_data_remover.h" @@ -167,11 +172,6 @@ #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_coordinator.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_coordinator_delegate.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_utils.h" -#import "ios/chrome/browser/ui/authentication/account_menu/account_menu_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" -#import "ios/chrome/browser/ui/authentication/signin_notification_infobar_delegate.h" #import "ios/chrome/browser/ui/whats_new/promo/whats_new_scene_agent.h" #import "ios/chrome/browser/url_loading/model/scene_url_loading_service.h" #import "ios/chrome/browser/url_loading/model/url_loading_browser_agent.h"
diff --git a/ios/chrome/browser/shared/model/prefs/BUILD.gn b/ios/chrome/browser/shared/model/prefs/BUILD.gn index f156f1f..be2d778f 100644 --- a/ios/chrome/browser/shared/model/prefs/BUILD.gn +++ b/ios/chrome/browser/shared/model/prefs/BUILD.gn
@@ -91,6 +91,9 @@ "//ios/chrome/app:variations_app_state_agent", "//ios/chrome/app/spotlight", "//ios/chrome/browser/app_store_rating/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", + "//ios/chrome/browser/authentication/ui_bundled/signin", "//ios/chrome/browser/bookmarks/ui_bundled:constants", "//ios/chrome/browser/bookmarks/ui_bundled:core", "//ios/chrome/browser/bookmarks/ui_bundled/home:home", @@ -119,9 +122,6 @@ "//ios/chrome/browser/shared/model/profile", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/tips_notifications/model:client", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin", "//ios/chrome/browser/ui/content_suggestions", "//ios/chrome/browser/ui/content_suggestions/price_tracking_promo:price_tracking_promo", "//ios/chrome/browser/ui/content_suggestions/safety_check:prefs",
diff --git a/ios/chrome/browser/shared/model/prefs/DEPS b/ios/chrome/browser/shared/model/prefs/DEPS index af68e2f..5d93b9c 100644 --- a/ios/chrome/browser/shared/model/prefs/DEPS +++ b/ios/chrome/browser/shared/model/prefs/DEPS
@@ -22,6 +22,7 @@ "+components/lens/lens_overlay_permission_utils.h", "+components/sharing_message/sharing_sync_preference.h", "+ios/chrome/browser/settings/ui_bundled", + "+ios/chrome/browser/authentication/ui_bundled", ] specific_include_rules = { @@ -29,7 +30,7 @@ "^browser_prefs.mm": [ "+ios/chrome/browser/bookmarks/ui_bundled", "+ios/chrome/browser/ui", - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", "+ios/chrome/browser/metrics/model/constants.h", "+ios/chrome/browser/upgrade/model/upgrade_constants.h", ],
diff --git a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm index 68f63e51..ad3a0ad 100644 --- a/ios/chrome/browser/shared/model/prefs/browser_prefs.mm +++ b/ios/chrome/browser/shared/model/prefs/browser_prefs.mm
@@ -83,6 +83,9 @@ #import "components/web_resource/web_resource_pref_names.h" #import "ios/chrome/app/spotlight/spotlight_util.h" #import "ios/chrome/app/variations_app_state_agent.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_promo_view_mediator.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_mediator.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_path_cache.h" #import "ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_home_mediator.h" @@ -108,9 +111,6 @@ #import "ios/chrome/browser/shared/model/profile/profile_attributes_storage_ios.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/tips_notifications/model/tips_notification_client.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" -#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.h" #import "ios/chrome/browser/ui/content_suggestions/price_tracking_promo/price_tracking_promo_prefs.h" #import "ios/chrome/browser/ui/content_suggestions/safety_check/safety_check_prefs.h"
diff --git a/ios/chrome/browser/shared/public/DEPS b/ios/chrome/browser/shared/public/DEPS index 5d3386f..685688ca 100644 --- a/ios/chrome/browser/shared/public/DEPS +++ b/ios/chrome/browser/shared/public/DEPS
@@ -2,8 +2,8 @@ # TODO(crbug.com/40259387): Remove this include once the folders have been # moved. "+ios/chrome/browser/ui", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", "+ios/chrome/browser", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h",
diff --git a/ios/chrome/browser/shared/public/commands/BUILD.gn b/ios/chrome/browser/shared/public/commands/BUILD.gn index c71e05b..895f15e6 100644 --- a/ios/chrome/browser/shared/public/commands/BUILD.gn +++ b/ios/chrome/browser/shared/public/commands/BUILD.gn
@@ -43,6 +43,7 @@ "overflow_menu_customization_commands.h", "page_info_commands.h", "parcel_tracking_opt_in_commands.h", + "parent_access_commands.h", "password_breach_commands.h", "password_protection_commands.h", "password_suggestion_commands.h", @@ -88,12 +89,12 @@ deps = [ "//components/lens", "//components/tab_groups", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/browsing_data/model:util", "//ios/chrome/browser/lens_overlay/model:entrypoint", "//ios/chrome/browser/parcel_tracking:parcel_tracking_step", "//ios/chrome/browser/shared/ui/util:url_with_title", "//ios/chrome/browser/tabs/model", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api", "//ios/web/public", "//net", @@ -105,6 +106,7 @@ "//components/browsing_data/core", "//components/password_manager/core/browser", "//components/plus_addresses", + "//components/supervised_user/core/common", "//ios/chrome/browser/browsing_data/model:model_remove_mask", "//ios/chrome/browser/discover_feed/model:constants", "//ios/chrome/browser/promos_manager/model:constants",
diff --git a/ios/chrome/browser/shared/public/commands/lens_commands.h b/ios/chrome/browser/shared/public/commands/lens_commands.h index 82fe9c1..59e2669 100644 --- a/ios/chrome/browser/shared/public/commands/lens_commands.h +++ b/ios/chrome/browser/shared/public/commands/lens_commands.h
@@ -18,6 +18,9 @@ // Opens the input selection UI with the given settings. - (void)openLensInputSelection:(OpenLensInputSelectionCommand*)command; +// Notifies that the associated post capture has been dismissed. +- (void)lensOverlayDismissed; + @end #endif // IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_LENS_COMMANDS_H_
diff --git a/ios/chrome/browser/shared/public/commands/lens_overlay_commands.h b/ios/chrome/browser/shared/public/commands/lens_overlay_commands.h index efb2b29..3d5e3294 100644 --- a/ios/chrome/browser/shared/public/commands/lens_overlay_commands.h +++ b/ios/chrome/browser/shared/public/commands/lens_overlay_commands.h
@@ -20,9 +20,10 @@ completion:(void (^)(BOOL))completion; /// Responds to a search image with Lens request by creating a new Lens UI with -/// the given image. +/// the given image. The completion is called once the UI is presented. - (void)searchImageWithLens:(UIImage*)image - entrypoint:(LensOverlayEntrypoint)entrypoint; + entrypoint:(LensOverlayEntrypoint)entrypoint + completion:(void (^)(BOOL))completion; /// Display the lens overlay, if it exists. - (void)showLensUI:(BOOL)animated;
diff --git a/ios/chrome/browser/shared/public/commands/parent_access_commands.h b/ios/chrome/browser/shared/public/commands/parent_access_commands.h new file mode 100644 index 0000000..e3d8997a --- /dev/null +++ b/ios/chrome/browser/shared/public/commands/parent_access_commands.h
@@ -0,0 +1,34 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_PARENT_ACCESS_COMMANDS_H_ +#define IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_PARENT_ACCESS_COMMANDS_H_ + +#import <Foundation/Foundation.h> + +namespace supervised_user { +enum class LocalApprovalResult; +} + +namespace web { +class WebState; +} + +// Commands related to the Parent Access UI. +@protocol ParentAccessCommands + +// Shows the parent access bottom sheet for local web approvals. +- (void) + showParentAccessBottomSheetForWebState:(web::WebState*)webState + completion: + (void (^)( + supervised_user::LocalApprovalResult)) + completion; + +// Hides the parent access bottom sheet for local web approvals. +- (void)hideParentAccessBottomSheet; + +@end + +#endif // IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_PARENT_ACCESS_COMMANDS_H_
diff --git a/ios/chrome/browser/shared/public/commands/show_signin_command.h b/ios/chrome/browser/shared/public/commands/show_signin_command.h index 0565118..435e627 100644 --- a/ios/chrome/browser/shared/public/commands/show_signin_command.h +++ b/ios/chrome/browser/shared/public/commands/show_signin_command.h
@@ -8,7 +8,7 @@ #import <Foundation/Foundation.h> #include "components/signin/public/base/signin_metrics.h" -#include "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#include "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" @protocol SystemIdentity;
diff --git a/ios/chrome/browser/shared/public/commands/show_signin_command.mm b/ios/chrome/browser/shared/public/commands/show_signin_command.mm index c278a35..9bee77e8 100644 --- a/ios/chrome/browser/shared/public/commands/show_signin_command.mm +++ b/ios/chrome/browser/shared/public/commands/show_signin_command.mm
@@ -5,7 +5,7 @@ #import "ios/chrome/browser/shared/public/commands/show_signin_command.h" #import "base/check.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" @implementation ShowSigninCommand
diff --git a/ios/chrome/browser/shared/ui/DEPS b/ios/chrome/browser/shared/ui/DEPS index fb7c351..77cfaf6 100644 --- a/ios/chrome/browser/shared/ui/DEPS +++ b/ios/chrome/browser/shared/ui/DEPS
@@ -2,8 +2,8 @@ # TODO(crbug.com/40259387): Remove this include once the folders have been # moved. "+ios/chrome/browser/ui", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h", "+ios/chrome/browser/omnibox",
diff --git a/ios/chrome/browser/sharing/model/BUILD.gn b/ios/chrome/browser/sharing/model/BUILD.gn index f43defb..4576f32 100644 --- a/ios/chrome/browser/sharing/model/BUILD.gn +++ b/ios/chrome/browser/sharing/model/BUILD.gn
@@ -12,6 +12,7 @@ deps = [ "//base", "//ios/chrome/app/strings", + "//ios/chrome/browser/download/model", "//ios/chrome/browser/shared/public/features", "//ios/web/public", "//ui/base:base",
diff --git a/ios/chrome/browser/sharing/model/DEPS b/ios/chrome/browser/sharing/model/DEPS new file mode 100644 index 0000000..a069835e --- /dev/null +++ b/ios/chrome/browser/sharing/model/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+ios/chrome/browser/download/model", +]
diff --git a/ios/chrome/browser/sharing/model/share_file_download_tab_helper.mm b/ios/chrome/browser/sharing/model/share_file_download_tab_helper.mm index 9ca620f..2a8e4d6 100644 --- a/ios/chrome/browser/sharing/model/share_file_download_tab_helper.mm +++ b/ios/chrome/browser/sharing/model/share_file_download_tab_helper.mm
@@ -9,6 +9,7 @@ #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" #import "base/strings/sys_string_conversions.h" +#import "ios/chrome/browser/download/model/download_manager_tab_helper.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/web/public/navigation/navigation_context.h" @@ -168,6 +169,10 @@ return false; } + if (DownloadManagerTabHelper::ShouldRestrictDownloadToFile(web_state)) { + return false; + } + std::string mime_type = web_state->GetContentsMimeType(); return (mime_type == content_type::kMimeTypePDF || mime_type == content_type::kMimeTypeMicrosoftWord ||
diff --git a/ios/chrome/browser/sharing/ui_bundled/BUILD.gn b/ios/chrome/browser/sharing/ui_bundled/BUILD.gn index 9a76afb8..599eee1 100644 --- a/ios/chrome/browser/sharing/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/sharing/ui_bundled/BUILD.gn
@@ -64,6 +64,7 @@ "//components/bookmarks/test", "//ios/chrome/browser/bookmarks/model", "//ios/chrome/browser/bookmarks/model:test_support", + "//ios/chrome/browser/download/model", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", "//ios/chrome/browser/shared/model/browser/test:test_support", "//ios/chrome/browser/shared/model/profile",
diff --git a/ios/chrome/browser/sharing/ui_bundled/sharing_coordinator_unittest.mm b/ios/chrome/browser/sharing/ui_bundled/sharing_coordinator_unittest.mm index 932227fe..4f6f1479 100644 --- a/ios/chrome/browser/sharing/ui_bundled/sharing_coordinator_unittest.mm +++ b/ios/chrome/browser/sharing/ui_bundled/sharing_coordinator_unittest.mm
@@ -14,6 +14,7 @@ #import "components/bookmarks/browser/bookmark_node.h" #import "components/bookmarks/test/bookmark_test_helpers.h" #import "ios/chrome/browser/bookmarks/model/bookmark_ios_unit_test_support.h" +#import "ios/chrome/browser/download/model/download_manager_tab_helper.h" #import "ios/chrome/browser/shared/model/browser/test/test_browser.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h" @@ -98,6 +99,7 @@ std::make_unique<web::FakeNavigationManager>()); test_web_state->SetCurrentURL(test_url); test_web_state->SetBrowserState(browser_->GetProfile()); + DownloadManagerTabHelper::CreateForWebState(test_web_state.get()); auto frames_manager = std::make_unique<web::FakeWebFramesManager>(); web::FakeWebFramesManager* frames_manager_ptr = frames_manager.get();
diff --git a/ios/chrome/browser/signin/model/BUILD.gn b/ios/chrome/browser/signin/model/BUILD.gn index ef7b87181..5df839a 100644 --- a/ios/chrome/browser/signin/model/BUILD.gn +++ b/ios/chrome/browser/signin/model/BUILD.gn
@@ -105,7 +105,7 @@ # TODO(crbug.com/325587123): This should depend on # //ios/chrome/browser/sync/model but doing so creates a circular # dependency. - "//ios/chrome/browser/ui/authentication/signin:signin_headers", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", ] public_deps = [ ":constants", @@ -139,6 +139,7 @@ "//components/sync/base", "//components/sync/service", "//google_apis", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/bookmarks/model:model_utils", "//ios/chrome/browser/crash_report/model", "//ios/chrome/browser/policy/model:policy_util", @@ -146,7 +147,6 @@ "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/public/features:system_flags", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/common/app_group", ] } @@ -295,7 +295,7 @@ "//components/signin/public/identity_manager", "//components/signin/public/identity_manager:test_support", "//google_apis", - "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator", + "//ios/chrome/browser/authentication/ui_bundled/signin:interruptible_chrome_coordinator", "//ios/public/provider/chrome/browser/signin:signin_error_api", ] frameworks = [ "Foundation.framework" ] @@ -501,7 +501,7 @@ deps = [ ":fake_system_identity", "//base", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/testing/earl_grey:eg_test_support+eg2", "//ui/base",
diff --git a/ios/chrome/browser/signin/model/DEPS b/ios/chrome/browser/signin/model/DEPS index 17dc315..f3b7616 100644 --- a/ios/chrome/browser/signin/model/DEPS +++ b/ios/chrome/browser/signin/model/DEPS
@@ -10,7 +10,7 @@ "+ios/chrome/browser/browsing_data/model", "+ios/chrome/browser/content_settings/model", "+ios/chrome/browser/crash_report/model", - "+ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h", "+ios/chrome/browser/policy/model", "+ios/chrome/browser/sync/model", "+ios/chrome/browser/web/model",
diff --git a/ios/chrome/browser/signin/model/authentication_service_egtest.mm b/ios/chrome/browser/signin/model/authentication_service_egtest.mm index ede1453..920e8b08 100644 --- a/ios/chrome/browser/signin/model/authentication_service_egtest.mm +++ b/ios/chrome/browser/signin/model/authentication_service_egtest.mm
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/test/earl_grey/chrome_test_case.h" #import "ios/testing/earl_grey/app_launch_manager.h" #import "ios/testing/earl_grey/earl_grey_test.h"
diff --git a/ios/chrome/browser/signin/model/fake_system_identity_interaction_manager.mm b/ios/chrome/browser/signin/model/fake_system_identity_interaction_manager.mm index 54b0cd4..dc62aac 100644 --- a/ios/chrome/browser/signin/model/fake_system_identity_interaction_manager.mm +++ b/ios/chrome/browser/signin/model/fake_system_identity_interaction_manager.mm
@@ -6,10 +6,10 @@ #import <UIKit/UIKit.h> +#import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/fake_system_identity_manager.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/interruptible_chrome_coordinator.h" #import "ios/public/provider/chrome/browser/signin/signin_error_api.h" namespace {
diff --git a/ios/chrome/browser/start_surface/ui_bundled/BUILD.gn b/ios/chrome/browser/start_surface/ui_bundled/BUILD.gn index ccbaf73..f6250aa 100644 --- a/ios/chrome/browser/start_surface/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/start_surface/ui_bundled/BUILD.gn
@@ -36,6 +36,7 @@ "//ios/chrome/app/application_delegate:startup_information", "//ios/chrome/app/profile", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers", "//ios/chrome/browser/ntp/model", "//ios/chrome/browser/ntp/shared/metrics:home_metrics", "//ios/chrome/browser/shared/coordinator/scene:observing_scene_agent", @@ -49,7 +50,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:signin_util", "//ios/chrome/browser/tab_insertion/model", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", "//ios/chrome/browser/ui/content_suggestions:constants", "//ios/web/public", "//ios/web/public:web_state_observer",
diff --git a/ios/chrome/browser/start_surface/ui_bundled/DEPS b/ios/chrome/browser/start_surface/ui_bundled/DEPS index 545d387..2491704 100644 --- a/ios/chrome/browser/start_surface/ui_bundled/DEPS +++ b/ios/chrome/browser/start_surface/ui_bundled/DEPS
@@ -2,7 +2,7 @@ "+ios/chrome/browser/signin/model", "+ios/chrome/browser/ntp/model/new_tab_page_tab_helper.h", "+ios/chrome/browser/tab_insertion/model/tab_insertion_browser_agent.h", - "+ios/chrome/browser/ui/authentication/signin/signin_utils.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h", "+ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h", "+ios/chrome/browser/ntp/shared/metrics/home_metrics.h", ]
diff --git a/ios/chrome/browser/start_surface/ui_bundled/start_surface_scene_agent.mm b/ios/chrome/browser/start_surface/ui_bundled/start_surface_scene_agent.mm index b6363d2c..50d8f46 100644 --- a/ios/chrome/browser/start_surface/ui_bundled/start_surface_scene_agent.mm +++ b/ios/chrome/browser/start_surface/ui_bundled/start_surface_scene_agent.mm
@@ -15,6 +15,7 @@ #import "ios/chrome/app/application_delegate/startup_information.h" #import "ios/chrome/app/profile/profile_state.h" #import "ios/chrome/app/profile/profile_state_observer.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/ntp/model/new_tab_page_tab_helper.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_controller.h" #import "ios/chrome/browser/shared/model/browser/browser.h" @@ -36,7 +37,6 @@ #import "ios/chrome/browser/start_surface/ui_bundled/start_surface_recent_tab_browser_agent.h" #import "ios/chrome/browser/start_surface/ui_bundled/start_surface_util.h" #import "ios/chrome/browser/tab_insertion/model/tab_insertion_browser_agent.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" #import "ios/web/public/navigation/navigation_item.h" #import "ios/web/public/navigation/navigation_manager.h" #import "ios/web/public/web_state.h"
diff --git a/ios/chrome/browser/supervised_user/coordinator/BUILD.gn b/ios/chrome/browser/supervised_user/coordinator/BUILD.gn new file mode 100644 index 0000000..c66e0eb3 --- /dev/null +++ b/ios/chrome/browser/supervised_user/coordinator/BUILD.gn
@@ -0,0 +1,18 @@ +# Copyright 2024 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("coordinator") { + sources = [ + "parent_access_coordinator.h", + "parent_access_coordinator.mm", + ] + deps = [ + "//base", + "//components/supervised_user/core/common", + "//ios/chrome/browser/shared/coordinator/chrome_coordinator", + "//ios/chrome/browser/shared/model/browser", + "//ios/web/public", + ] + frameworks = [ "UIKit.framework" ] +}
diff --git a/ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.h b/ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.h new file mode 100644 index 0000000..7d42e62d --- /dev/null +++ b/ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.h
@@ -0,0 +1,29 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_SUPERVISED_USER_COORDINATOR_PARENT_ACCESS_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_SUPERVISED_USER_COORDINATOR_PARENT_ACCESS_COORDINATOR_H_ + +#import "components/supervised_user/core/common/supervised_user_constants.h" +#import "ios/chrome/browser/shared/coordinator/chrome_coordinator/chrome_coordinator.h" + +typedef void (^ParentAccessCallbackCompletion)( + supervised_user::LocalApprovalResult result); + +// Coordinator for local website approval, allowing parents to authenticate +// to approve website navigation requests from a supervised user. +// This will be presented within the same browser session where the supervised +// user is signed in. +@interface ParentAccessCoordinator : ChromeCoordinator + +- (instancetype)initWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser + completion: + (ParentAccessCallbackCompletion)completion + NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser NS_UNAVAILABLE; +@end + +#endif // IOS_CHROME_BROWSER_SUPERVISED_USER_COORDINATOR_PARENT_ACCESS_COORDINATOR_H_
diff --git a/ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.mm b/ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.mm new file mode 100644 index 0000000..5060885 --- /dev/null +++ b/ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.mm
@@ -0,0 +1,26 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/supervised_user/coordinator/parent_access_coordinator.h" + +#import "ios/chrome/browser/shared/model/browser/browser.h" + +// TODO(crbug.com/384518419): Embed parent access widget into the bottom sheet +// view controller to display the appropriate web page. +@implementation ParentAccessCoordinator { + ParentAccessCallbackCompletion _completion; +} + +- (instancetype)initWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser + completion: + (ParentAccessCallbackCompletion)completion { + self = [super initWithBaseViewController:viewController browser:browser]; + if (self) { + _completion = completion; + } + return self; +} + +@end
diff --git a/ios/chrome/browser/supervised_user/model/BUILD.gn b/ios/chrome/browser/supervised_user/model/BUILD.gn index f9818730..c1e57f1 100644 --- a/ios/chrome/browser/supervised_user/model/BUILD.gn +++ b/ios/chrome/browser/supervised_user/model/BUILD.gn
@@ -41,6 +41,7 @@ "//ios/chrome/browser/shared/model/profile", "//ios/chrome/browser/shared/model/profile:profile_keyed_service_factory", "//ios/chrome/browser/shared/model/web_state_list:web_state_list", + "//ios/chrome/browser/shared/public/commands", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/sync/model", "//ios/chrome/common", @@ -140,6 +141,7 @@ "//components/supervised_user/core/browser", "//components/supervised_user/core/common", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/policy/model:eg_test_support+eg2", "//ios/chrome/browser/policy/model:policy_earl_grey_matchers", @@ -154,7 +156,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid:tab_grid_metrics", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid:tab_grid_ui_constants", "//ios/chrome/browser/toolbar/ui_bundled/public:constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/content_suggestions:constants", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.h b/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.h index 2c5f27a..019cf0b 100644 --- a/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.h +++ b/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.h
@@ -10,6 +10,8 @@ #import "components/supervised_user/core/browser/web_content_handler.h" #import "url/gurl.h" +@protocol ParentAccessCommands; + namespace web { class WebState; } @@ -21,7 +23,9 @@ // iOS-specific implementation of the web content handler. class IOSWebContentHandlerImpl : public supervised_user::WebContentHandler { public: - IOSWebContentHandlerImpl(web::WebState* web_state, bool is_main_frame); + IOSWebContentHandlerImpl(web::WebState* web_state, + id<ParentAccessCommands> commands_handler, + bool is_main_frame); IOSWebContentHandlerImpl(const IOSWebContentHandlerImpl&) = delete; IOSWebContentHandlerImpl& operator=(const IOSWebContentHandlerImpl&) = delete; @@ -38,11 +42,18 @@ void GoBack() override; private: + // Processes the outcome of the local approval request. + void OnLocalApprovalRequestCompleted( + supervised_user::SupervisedUserSettingsService& settings_service, + const GURL& url, + base::TimeTicks start_time, + supervised_user::LocalApprovalResult approval_result); // Closes the tab linked to the web_state_. void Close(); const bool is_main_frame_; raw_ptr<web::WebState> web_state_; + __weak id<ParentAccessCommands> commands_handler_; base::WeakPtrFactory<IOSWebContentHandlerImpl> weak_factory_{this}; };
diff --git a/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.mm b/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.mm index beabb55..4a36561e 100644 --- a/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.mm +++ b/ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.mm
@@ -6,12 +6,24 @@ #import "base/notreached.h" #import "base/task/sequenced_task_runner.h" +#import "components/supervised_user/core/browser/supervised_user_settings_service.h" +#import "components/supervised_user/core/browser/web_content_handler.h" +#import "components/supervised_user/core/common/features.h" +#import "ios/chrome/browser/shared/model/profile/profile_ios.h" +#import "ios/chrome/browser/shared/public/commands/parent_access_commands.h" +#import "ios/chrome/browser/supervised_user/model/supervised_user_settings_service_factory.h" #import "ios/web/public/navigation/navigation_manager.h" #import "ios/web/public/web_state.h" -IOSWebContentHandlerImpl::IOSWebContentHandlerImpl(web::WebState* web_state, - bool is_main_frame) - : is_main_frame_(is_main_frame), web_state_(web_state) {} +IOSWebContentHandlerImpl::IOSWebContentHandlerImpl( + web::WebState* web_state, + id<ParentAccessCommands> commands_handler, + bool is_main_frame) + : is_main_frame_(is_main_frame), + web_state_(web_state), + commands_handler_(commands_handler) { + CHECK(commands_handler_); +} IOSWebContentHandlerImpl::~IOSWebContentHandlerImpl() = default; @@ -20,8 +32,28 @@ const std::u16string& child_display_name, const supervised_user::UrlFormatter& url_formatter, ApprovalRequestInitiatedCallback callback) { - // Method unsupported on iOS. - NOTREACHED(); + CHECK(base::FeatureList::IsEnabled(supervised_user::kLocalWebApprovals)); + + supervised_user::SupervisedUserSettingsService* settings_service = + SupervisedUserSettingsServiceFactory::GetForProfile( + ProfileIOS::FromBrowserState(web_state_->GetBrowserState())); + GURL target_url = url_formatter.FormatUrl(url); + base::OnceCallback<void(supervised_user::LocalApprovalResult)> + completion_callback = base::BindOnce( + &IOSWebContentHandlerImpl::OnLocalApprovalRequestCompleted, + weak_factory_.GetWeakPtr(), std::ref(*settings_service), target_url, + base::TimeTicks::Now()); + + // The command handler must stay alive after initialization. + CHECK(commands_handler_); + [commands_handler_ + showParentAccessBottomSheetForWebState:web_state_ + completion:base::CallbackToBlock(std::move( + completion_callback))]; + + // Runs the `callback` to inform the caller that the flow initiation was + // successful. + std::move(callback).Run(true); } bool IOSWebContentHandlerImpl::IsMainFrame() const { @@ -58,3 +90,12 @@ CHECK(web_state_); web_state_->CloseWebState(); } + +void IOSWebContentHandlerImpl::OnLocalApprovalRequestCompleted( + supervised_user::SupervisedUserSettingsService& settings_service, + const GURL& url, + base::TimeTicks start_time, + supervised_user::LocalApprovalResult approval_result) { + WebContentHandler::OnLocalApprovalRequestCompleted( + settings_service, url, start_time, approval_result); +}
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_error_container.h b/ios/chrome/browser/supervised_user/model/supervised_user_error_container.h index e314875c..7f61941 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_error_container.h +++ b/ios/chrome/browser/supervised_user/model/supervised_user_error_container.h
@@ -21,6 +21,8 @@ #import "ios/web/public/web_state_user_data.h" #import "url/gurl.h" +@protocol ParentAccessCommands; + namespace web { class WebState; } @@ -92,6 +94,10 @@ // SupervisedUserServiceObserver override: void OnURLFilterChanged() override; + // Sets the parent access bottom sheet CommandDispatcher. + void SetParentAccessBottomSheetHandler( + id<ParentAccessCommands> commands_handler); + private: friend class web::WebStateUserData<SupervisedUserErrorContainer>; @@ -105,6 +111,8 @@ supervised_user::SupervisedUserURLFilter::Result result); WEB_STATE_USER_DATA_KEY_DECL(); + // Handler used to request showing the parent access bottom sheet. + __weak id<ParentAccessCommands> commands_handler_; std::unique_ptr<SupervisedUserErrorInfo> supervised_user_error_info_; raw_ref<supervised_user::SupervisedUserService> supervised_user_service_; raw_ptr<web::WebState> web_state_;
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_error_container.mm b/ios/chrome/browser/supervised_user/model/supervised_user_error_container.mm index ec95f8b..a6a672d 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_error_container.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_error_container.mm
@@ -11,6 +11,7 @@ #import "components/supervised_user/core/browser/supervised_user_service.h" #import "components/supervised_user/core/browser/supervised_user_url_filter.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" +#import "ios/chrome/browser/shared/public/commands/parent_access_commands.h" #import "ios/chrome/browser/supervised_user/model/ios_web_content_handler_impl.h" #import "ios/chrome/browser/supervised_user/model/supervised_user_service_factory.h" #import "ios/components/security_interstitials/ios_blocking_page_tab_helper.h" @@ -29,9 +30,9 @@ // a permission request. // The method is invoked as a callback, so it is recommended to // bind a weak pointer to the webstate, in case it has been invalidated. -void OnRequestUrlAccessRemote(base::WeakPtr<web::WebState> weak_web_state, - bool is_main_frame, - bool is_request_successful) { +void OnRequestUrlAccess(base::WeakPtr<web::WebState> weak_web_state, + bool is_main_frame, + bool is_request_successful) { web::WebState* web_state = weak_web_state.get(); if (!web_state) { return; @@ -79,7 +80,7 @@ SupervisedUserErrorContainer::CreateSupervisedUserInterstitial( SupervisedUserErrorInfo& error_info) { std::unique_ptr<IOSWebContentHandlerImpl> web_content_handler = - std::make_unique<IOSWebContentHandlerImpl>(web_state_, + std::make_unique<IOSWebContentHandlerImpl>(web_state_, commands_handler_, error_info.is_main_frame()); std::unique_ptr<supervised_user::SupervisedUserInterstitial> interstitial = @@ -99,12 +100,15 @@ if (command == security_interstitials::SecurityInterstitialCommand:: CMD_REQUEST_SITE_ACCESS_PERMISSION) { RequestUrlAccessRemoteCallback callback = - base::BindOnce(&OnRequestUrlAccessRemote, web_state_->GetWeakPtr(), + base::BindOnce(&OnRequestUrlAccess, web_state_->GetWeakPtr(), interstitial.web_content_handler()->IsMainFrame()); interstitial.RequestUrlAccessRemote( base::BindOnce(&SupervisedUserErrorContainer::OnRequestCreated, weak_ptr_factory_.GetWeakPtr(), std::move(callback), interstitial.url())); + } else if (command == + security_interstitials::SecurityInterstitialCommand::CMD_PROCEED) { + interstitial.RequestUrlAccessLocal(base::DoNothing()); } else if (command == security_interstitials::SecurityInterstitialCommand:: CMD_DONT_PROCEED) { interstitial.GoBack(); @@ -194,6 +198,16 @@ } } +void SupervisedUserErrorContainer::SetParentAccessBottomSheetHandler( + id<ParentAccessCommands> commands_handler) { + if (!commands_handler) { + // Means that the web state has been destroyed therefore dismiss the + // bottom sheet if it's shown. + [commands_handler_ hideParentAccessBottomSheet]; + } + commands_handler_ = commands_handler; +} + SupervisedUserInterstitialBlockingPage::SupervisedUserInterstitialBlockingPage( std::unique_ptr<supervised_user::SupervisedUserInterstitial> interstitial, std::unique_ptr<security_interstitials::IOSBlockingPageControllerClient>
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm b/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm index 3acc443..f4a611d 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm
@@ -6,14 +6,14 @@ #import "components/signin/internal/identity_manager/account_capabilities_constants.h" #import "components/supervised_user/core/common/features.h" #import "components/supervised_user/core/common/supervised_user_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/policy/model/policy_earl_grey_matchers.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_constants.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_metrics.h" #import "ios/chrome/browser/toolbar/ui_bundled/public/toolbar_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_interstitial_java_script_feature.mm b/ios/chrome/browser/supervised_user/model/supervised_user_interstitial_java_script_feature.mm index c839f97..84fb347a 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_interstitial_java_script_feature.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_interstitial_java_script_feature.mm
@@ -18,7 +18,12 @@ std::optional<security_interstitials::SecurityInterstitialCommand> GetEnumCommand(const std::string& command) { - if (command == "requestUrlAccessRemote") { + // TODO(crbug.com/384517702): Check if it is possible to directly tie the + // command names to their respective callbacks rather than a + // `SecurityInterstitialCommand`. + if (command == "requestUrlAccessLocal") { + return security_interstitials::SecurityInterstitialCommand::CMD_PROCEED; + } else if (command == "requestUrlAccessRemote") { return security_interstitials::SecurityInterstitialCommand:: CMD_REQUEST_SITE_ACCESS_PERMISSION; } else if (command == "back") { @@ -60,7 +65,8 @@ const base::Value::Dict& dict = script_message.body()->GetDict(); // Expected valid message body struct is: - // `{"command": "requestUrlAccessRemote"}` or `{"command": "back"}`. + // `{"command": "requestUrlAccessRemote"}`, `{"command": "back"}`, or + // `{"command": "requestUrlAccessLocal"}` const std::string* command = dict.FindString("command"); if (!command) { return;
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm b/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm index b61b804..dbf2e07 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm
@@ -8,6 +8,8 @@ #import "components/signin/internal/identity_manager/account_capabilities_constants.h" #import "components/supervised_user/core/browser/supervised_user_url_filter.h" #import "components/supervised_user/core/common/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/policy/model/policy_app_interface.h" #import "ios/chrome/browser/policy/model/policy_earl_grey_utils.h" @@ -18,8 +20,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/capabilities_types.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/sync/model/BUILD.gn b/ios/chrome/browser/sync/model/BUILD.gn index 09758b8..2079736 100644 --- a/ios/chrome/browser/sync/model/BUILD.gn +++ b/ios/chrome/browser/sync/model/BUILD.gn
@@ -171,6 +171,8 @@ ] deps = [ "//ios/chrome/app/profile", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", "//ios/chrome/browser/infobars/model", "//ios/chrome/browser/settings/model/sync/utils", "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", @@ -180,8 +182,6 @@ "//ios/chrome/browser/shared/ui/util", "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication", - "//ios/chrome/browser/ui/authentication:signin_presenter", "//ui/base", ] public_deps = [ "//ios/web/public" ]
diff --git a/ios/chrome/browser/sync/model/DEPS b/ios/chrome/browser/sync/model/DEPS index 4c1a92e..f67907e 100644 --- a/ios/chrome/browser/sync/model/DEPS +++ b/ios/chrome/browser/sync/model/DEPS
@@ -38,8 +38,8 @@ specific_include_rules = { # TODO(crbug.com/40228056): Remove exceptions as soon as BVC refactoring is complete "sync_error_browser_agent\.mm": [ - "+ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h", - "+ios/chrome/browser/ui/authentication/signin_presenter.h", + "+ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h", + "+ios/chrome/browser/authentication/ui_bundled/signin_presenter.h", "+ios/chrome/browser/settings/ui_bundled/sync/utils/sync_util.h", ], }
diff --git a/ios/chrome/browser/sync/model/prefs/BUILD.gn b/ios/chrome/browser/sync/model/prefs/BUILD.gn index 73cde767..f72bfcfc 100644 --- a/ios/chrome/browser/sync/model/prefs/BUILD.gn +++ b/ios/chrome/browser/sync/model/prefs/BUILD.gn
@@ -27,9 +27,9 @@ "//base/test:test_support", "//components/sync/base", "//components/sync/base:features", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2", "//ios/chrome/test/earl_grey:switches", "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/sync/model/prefs/sync_preferences_egtest.mm b/ios/chrome/browser/sync/model/prefs/sync_preferences_egtest.mm index 745ab0e..2a138ff 100644 --- a/ios/chrome/browser/sync/model/prefs/sync_preferences_egtest.mm +++ b/ios/chrome/browser/sync/model/prefs/sync_preferences_egtest.mm
@@ -11,10 +11,10 @@ #import "base/time/time.h" #import "components/sync/base/command_line_switches.h" #import "components/sync/base/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_matchers.h" #import "ios/chrome/test/earl_grey/chrome_test_case.h"
diff --git a/ios/chrome/browser/sync/model/sync_error_browser_agent.mm b/ios/chrome/browser/sync/model/sync_error_browser_agent.mm index 8b8d829..a99d372b 100644 --- a/ios/chrome/browser/sync/model/sync_error_browser_agent.mm +++ b/ios/chrome/browser/sync/model/sync_error_browser_agent.mm
@@ -6,6 +6,8 @@ #import "ios/chrome/app/profile/profile_init_stage.h" #import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/browser/authentication/ui_bundled/re_signin_infobar_delegate.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/infobars/model/infobar_manager_impl.h" #import "ios/chrome/browser/infobars/model/infobar_utils.h" #import "ios/chrome/browser/settings/model/sync/utils/sync_util.h" @@ -15,8 +17,6 @@ #import "ios/chrome/browser/signin/model/authentication_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_error_browser_agent_profile_state_observer.h" -#import "ios/chrome/browser/ui/authentication/re_signin_infobar_delegate.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" BROWSER_USER_DATA_KEY_IMPL(SyncErrorBrowserAgent)
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/DEPS b/ios/chrome/browser/tab_switcher/ui_bundled/DEPS index acf8536..7a59da2 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/DEPS +++ b/ios/chrome/browser/tab_switcher/ui_bundled/DEPS
@@ -42,9 +42,10 @@ "+ios/chrome/browser/tabs_search/model", "+ios/chrome/browser/url_loading/model", "+ios/chrome/browser/web_state_list/model/web_state_list_favicon_driver_observer.h", + "+ios/chrome/browser/authentication/ui_bundled", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h", ]
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/BUILD.gn b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/BUILD.gn index 832a209c..135d544 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/BUILD.gn +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/BUILD.gn
@@ -31,6 +31,7 @@ "//components/supervised_user/core/browser", "//components/supervised_user/core/common", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", "//ios/chrome/browser/bookmarks/model", "//ios/chrome/browser/bookmarks/ui_bundled:utils", "//ios/chrome/browser/bookmarks/ui_bundled/home", @@ -104,7 +105,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/toolbars:toolbars_ui", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/transitions", "//ios/chrome/browser/tabs/model/inactive_tabs:features", - "//ios/chrome/browser/ui/authentication/history_sync", "//ios/chrome/browser/url_loading/model", "//ui/base", ] @@ -279,6 +279,8 @@ "//components/sync/base:features", "//components/unified_consent:unified_consent", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/bubble/ui_bundled:constants", @@ -299,8 +301,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/inactive_tabs:inactive_tabs_constants", "//ios/chrome/browser/tab_switcher/ui_bundled/test:utils", "//ios/chrome/browser/tabs/model/inactive_tabs:features", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/common/ui/table_view:cells_constants", "//ios/chrome/test:eg_test_support+eg2",
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/base_grid_view_controller.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/base_grid_view_controller.mm index 9542803..28b4c04 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/base_grid_view_controller.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/base_grid_view_controller.mm
@@ -1669,9 +1669,9 @@ cell.title = item.title; cell.accessibilityIdentifier = GroupGridCellAccessibilityIdentifier(index); - cell.facePileParentViewController = self; - cell.facePileViewController = + UIViewController* facePile = [self.gridProvider facePileViewControllerForItem:groupItemIdentifier]; + [cell setFacePileViewController:facePile parentViewController:self]; if (self.mode == TabGridMode::kSelection) { if ([self.gridProvider isItemSelected:groupItemIdentifier]) {
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.h b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.h index efb1979..50708b7 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.h +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.h
@@ -35,15 +35,16 @@ // The current state which the cell should display. @property(nonatomic, assign) GridCellState state; -// The view controller on which the face pile is presented. -@property(nonatomic, weak) UIViewController* facePileParentViewController; -@property(nonatomic, strong) UIViewController* facePileViewController; - // Configures every tab of the group with a given snapshot/favicon pairs and // passes the total tabs count to the bottomTrailingView. - (void)configureWithGroupTabInfos:(NSArray<GroupTabInfo*>*)groupTabInfos totalTabsCount:(NSInteger)totalTabsCount; +// Configures the `facePileViewController`, adding it to `parentViewController`. +// The parent must be non-nil if the face pile is non-nil. +- (void)setFacePileViewController:(UIViewController*)facePileViewController + parentViewController:(UIViewController*)parentViewController; + // Returns all tab views that compose this tab group view in the order they're // presented. - (NSArray<UIView*>*)allGroupTabViews;
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.mm index c07a738..74a74445 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/group_grid_cell.mm
@@ -74,6 +74,8 @@ UIView* _border; TabGroupSnapshotsView* _groupSnapshotsView; + + UIViewController* _facePileViewController; } // `-dequeueReusableCellWithReuseIdentifier:forIndexPath:` calls this method to @@ -210,8 +212,7 @@ self.selected = NO; self.opacity = 1.0; self.hidden = NO; - self.facePileViewController = nil; - self.facePileParentViewController = nil; + [self setFacePileViewController:nil parentViewController:nil]; } #pragma mark - UIAccessibility @@ -319,34 +320,30 @@ super.alpha = _opacity; } -- (void)setFacePileViewController:(UIViewController*)facePileViewController { - // TODO(crbug.com/375590170): Update the UI for the `facePileViewController's - // view` empty state. - if (!_facePileParentViewController || - _facePileViewController == facePileViewController) { +- (void)setFacePileViewController:(UIViewController*)facePileViewController + parentViewController:(UIViewController*)parentViewController { + if (_facePileViewController == facePileViewController) { return; } - if (_facePileViewController) { - [_facePileViewController willMoveToParentViewController:nil]; - [_facePileViewController.view removeFromSuperview]; - [_facePileViewController removeFromParentViewController]; - } + [_facePileViewController willMoveToParentViewController:nil]; + [_facePileViewController.view removeFromSuperview]; + [_facePileViewController removeFromParentViewController]; _facePileViewController = facePileViewController; _groupColorView.hidden = _facePileViewController != nil; if (_facePileViewController) { - [_facePileParentViewController - addChildViewController:_facePileViewController]; + CHECK(parentViewController); + [parentViewController addChildViewController:_facePileViewController]; UIView* facePileView = _facePileViewController.view; [_facePileContainerView addSubview:facePileView]; [_facePileViewController - didMoveToParentViewController:_facePileParentViewController]; + didMoveToParentViewController:parentViewController]; facePileView.translatesAutoresizingMaskIntoConstraints = NO; AddSameConstraints(facePileView, _facePileContainerView); - [self updateTopBarConstraints]; } + [self updateTopBarConstraints]; } #pragma mark - Private @@ -362,9 +359,11 @@ _facePileContainerView = [[UIView alloc] init]; _facePileContainerView.translatesAutoresizingMaskIntoConstraints = NO; - [_facePileContainerView - setContentHuggingPriority:UILayoutPriorityDefaultHigh + 1 - forAxis:UILayoutConstraintAxisHorizontal]; + + NSLayoutConstraint* facePileSmallWidth = + [_facePileContainerView.widthAnchor constraintEqualToConstant:0]; + facePileSmallWidth.priority = UILayoutPriorityDefaultLow; + facePileSmallWidth.active = YES; _titleLabel = [[UILabel alloc] init]; _titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/regular/regular_grid_mediator.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/regular/regular_grid_mediator.mm index d4f920f..d2707c8 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/regular/regular_grid_mediator.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/grid/regular/regular_grid_mediator.mm
@@ -53,7 +53,7 @@ tab_groups::TabGroupSyncService::Observer>; // The preferred size in points for the avatar icons. -constexpr CGFloat kFacePileAvatarSize = 20; +constexpr CGFloat kFacePileAvatarSize = 16; } // namespace
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_coordinator.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_coordinator.mm index 922a10bd..ab7cafaa 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_coordinator.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_coordinator.mm
@@ -22,6 +22,9 @@ #import "components/strings/grit/components_strings.h" #import "components/supervised_user/core/browser/supervised_user_utils.h" #import "components/sync/service/sync_service.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_popup_coordinator.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" #import "ios/chrome/browser/bookmarks/model/bookmark_model_factory.h" #import "ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_coordinator.h" #import "ios/chrome/browser/bring_android_tabs/model/bring_android_tabs_to_ios_service.h" @@ -31,7 +34,6 @@ #import "ios/chrome/browser/bubble/ui_bundled/bubble_constants.h" #import "ios/chrome/browser/collaboration/model/collaboration_service_factory.h" #import "ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h" -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" #import "ios/chrome/browser/commerce/ui_bundled/price_card/price_card_mediator.h" #import "ios/chrome/browser/favicon/model/ios_chrome_favicon_loader_factory.h" #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" @@ -129,9 +131,6 @@ #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/transitions/tab_grid_transition_handler.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_utils.h" #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_popup_coordinator.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" #import "ios/chrome/browser/url_loading/model/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/model/url_loading_params.h" #import "ios/chrome/grit/ios_strings.h" @@ -804,10 +803,7 @@ std::unique_ptr<collaboration::CollaborationControllerDelegate> delegate = std::make_unique<collaboration::IOSCollaborationControllerDelegate>( - browser, self.baseViewController, - std::make_unique< - collaboration::CollaborationFlowConfigurationShareOrManage>( - tabGroup->GetWeakPtr())); + browser, self.baseViewController); collaborationService->StartShareOrManageFlow(std::move(delegate), tabGroup->tab_group_id()); }
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_egtest.mm index c8d9f12..4192c082 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_egtest.mm
@@ -14,6 +14,9 @@ #import "components/bookmarks/common/bookmark_pref_names.h" #import "components/commerce/core/proto/price_tracking.pb.h" #import "components/unified_consent/pref_names.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/bookmarks/model/bookmark_storage_type.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h" #import "ios/chrome/browser/history/ui_bundled/history_ui_constants.h" @@ -31,9 +34,6 @@ #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_constants.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/test/tabs_egtest_util.h" #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/common/ui/table_view/table_view_cells_constants.h" #import "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm index cf9d44a..a6dcd79 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_view_controller.mm
@@ -1977,10 +1977,6 @@ // menu. return @[ UIKeyCommand.cr_openNewRegularTab, - // TODO(crbug.com/40246790): Move it to the menu builder once we have the - // strings. - UIKeyCommand.cr_select2, - UIKeyCommand.cr_select3, ]; } @@ -1996,6 +1992,11 @@ return [self canPerformOpenNewTabActionForDestinationPage:TabGridPageIncognitoTabs]; } + if (sel_isEqual(action, @selector(keyCommand_select1)) || + sel_isEqual(action, @selector(keyCommand_select2)) || + sel_isEqual(action, @selector(keyCommand_select3))) { + return _viewVisible; + } return [super canPerformAction:action withSender:sender]; } @@ -2003,10 +2004,20 @@ if (command.action == @selector(keyCommand_find)) { command.discoverabilityTitle = l10n_util::GetNSStringWithFixup(IDS_IOS_KEYBOARD_SEARCH_TABS); - } else { - // TODO(crbug.com/40246790): Add string for change pane's functions. - return [super validateCommand:command]; } + if (command.action == @selector(keyCommand_select1)) { + command.discoverabilityTitle = l10n_util::GetNSStringWithFixup( + IDS_IOS_KEYBOARD_GO_TO_INCOGNITO_TAB_GRID); + } + if (command.action == @selector(keyCommand_select2)) { + command.discoverabilityTitle = l10n_util::GetNSStringWithFixup( + IDS_IOS_KEYBOARD_GO_TO_REGULAR_TAB_GRID); + } + if (command.action == @selector(keyCommand_select3)) { + command.discoverabilityTitle = + l10n_util::GetNSStringWithFixup(IDS_IOS_KEYBOARD_GO_TO_REMOTE_TAB_GRID); + } + [super validateCommand:command]; } - (void)keyCommand_openNewTab {
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/BUILD.gn b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/BUILD.gn index a33566a..72de8f8 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/BUILD.gn +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/BUILD.gn
@@ -322,6 +322,7 @@ "//components/data_sharing/public", "//components/sync/base", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/incognito_reauth/ui_bundled:incognito_reauth_util", "//ios/chrome/browser/share_kit/model:test_constants", "//ios/chrome/browser/shared/model/prefs:pref_names", @@ -331,7 +332,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/inactive_tabs:inactive_tabs_constants", "//ios/chrome/browser/tab_switcher/ui_bundled/test:utils", "//ios/chrome/browser/tabs/model/inactive_tabs:features", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/common/ui/confirmation_alert:constants", "//ios/chrome/test:eg_test_support+eg2", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/recent_activity_mediator.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/recent_activity_mediator.mm index 8f1ebc57..84ac15b2 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/recent_activity_mediator.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/recent_activity_mediator.mm
@@ -102,9 +102,9 @@ for (auto& log : _messagingService->GetActivityLog(params)) { RecentActivityLogItem* item = [[RecentActivityLogItem alloc] init]; item.type = ConvertCollaborationEvent(log.collaboration_event); - item.title = base::SysUTF8ToNSString(log.title_text); - item.actionDescription = base::SysUTF8ToNSString(log.description_text); - item.timestamp = base::SysUTF8ToNSString(log.timestamp_text); + item.title = base::SysUTF16ToNSString(log.title_text); + item.actionDescription = base::SysUTF16ToNSString(log.description_text); + item.timestamp = base::SysUTF16ToNSString(log.time_delta_text); // Get a favicon from the URL and set it to `item`. if (log.activity_metadata.tab_metadata.has_value()) {
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm index 7d8c9a4..00a4680 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/shared_tab_groups_egtest.mm
@@ -8,14 +8,14 @@ #import "base/strings/sys_string_conversions.h" #import "components/data_sharing/public/features.h" #import "components/sync/base/command_line_switches.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/share_kit/model/test_constants.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_constants.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_eg_utils.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/test/query_title_server_util.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_coordinator.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_coordinator.mm index 9b8179c..e48e176 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_coordinator.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_coordinator.mm
@@ -12,7 +12,6 @@ #import "components/saved_tab_groups/public/saved_tab_group.h" #import "ios/chrome/browser/collaboration/model/collaboration_service_factory.h" #import "ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h" -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" #import "ios/chrome/browser/collaboration/model/messaging/messaging_backend_service_factory.h" #import "ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.h" #import "ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h" @@ -374,10 +373,7 @@ std::unique_ptr<collaboration::CollaborationControllerDelegate> delegate = std::make_unique<collaboration::IOSCollaborationControllerDelegate>( - browser, self.baseViewController, - std::make_unique< - collaboration::CollaborationFlowConfigurationShareOrManage>( - _tabGroup->GetWeakPtr())); + browser, self.baseViewController); collaborationService->StartShareOrManageFlow(std::move(delegate), _tabGroup->tab_group_id()); }
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_egtest.mm index b4ede515..7536bd9 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_egtest.mm
@@ -4,12 +4,12 @@ #import <Foundation/Foundation.h> +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_earl_grey.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_constants.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_eg_utils.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" #import "ios/chrome/test/earl_grey/chrome_matchers.h"
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_signin_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_signin_egtest.mm index 2cc69bd..b10665a 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_signin_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_group_sync_signin_egtest.mm
@@ -9,10 +9,10 @@ #import "base/time/time.h" #import "components/sync/base/command_line_switches.h" #import "components/sync/base/data_type.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_eg_utils.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" #import "ios/chrome/test/earl_grey/chrome_matchers.h"
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_egtest.mm index c8ac2da5..b959416 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_egtest.mm
@@ -4,6 +4,7 @@ #import "base/strings/sys_string_conversions.h" #import "base/test/ios/wait_util.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/incognito_reauth/ui_bundled/incognito_reauth_util.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" @@ -15,7 +16,6 @@ #import "ios/chrome/browser/tab_switcher/ui_bundled/test/query_title_server_util.h" #import "ios/chrome/browser/tab_switcher/ui_bundled/test/tabs_egtest_util.h" #import "ios/chrome/browser/tabs/model/inactive_tabs/features.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.h b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.h index 61d3217..a2fe086 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.h +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.h
@@ -19,15 +19,16 @@ @property(nonatomic, strong, readonly) UILabel* titleLabel; @property(nonatomic, strong, readonly) UILabel* subtitleLabel; -// The view controller on which the face pile is presented. -@property(nonatomic, weak) UIViewController* facePileParentViewController; -@property(nonatomic, strong) UIViewController* facePileViewController; - // Associated item, identifying the represented tab group. @property(nonatomic, strong) TabGroupsPanelItem* item; - (instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE; +// Configures the `facePileViewController` with its `parentViewController`. The +// parent must be non-nil if the face pile is non nil. +- (void)setFacePileViewController:(UIViewController*)facePileViewController + parentViewController:(UIViewController*)parentViewController; + @end #endif // IOS_CHROME_BROWSER_TAB_SWITCHER_UI_BUNDLED_TAB_GRID_TAB_GROUPS_TAB_GROUPS_PANEL_CELL_H_
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm index acd406b..5fff752e 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_cell.mm
@@ -23,6 +23,8 @@ @implementation TabGroupsPanelCell { // The main stack view that contains subviews. UIStackView* _stackView; + // The FacePile. + UIViewController* _facePileViewController; } - (instancetype)initWithFrame:(CGRect)frame { @@ -92,8 +94,7 @@ _faviconsGrid.favicon2 = nil; _faviconsGrid.favicon3 = nil; _faviconsGrid.favicon4 = nil; - self.facePileViewController = nil; - _facePileParentViewController = nil; + [self setFacePileViewController:nil parentViewController:nil]; self.item = nil; } @@ -143,24 +144,21 @@ #pragma mark - Setters -- (void)setFacePileViewController:(UIViewController*)facePileViewController { - // TODO(crbug.com/375590170): Update the UI for the `facePileViewController's - // view` empty state. - if (!_facePileParentViewController || - _facePileViewController == facePileViewController) { +- (void)setFacePileViewController:(UIViewController*)facePileViewController + parentViewController:(UIViewController*)parentViewController { + if (_facePileViewController == facePileViewController) { return; } - if (_facePileViewController) { - [_facePileViewController willMoveToParentViewController:nil]; - [_facePileViewController.view removeFromSuperview]; - [_facePileViewController removeFromParentViewController]; - } + [_facePileViewController willMoveToParentViewController:nil]; + [_facePileViewController.view removeFromSuperview]; + [_facePileViewController removeFromParentViewController]; _facePileViewController = facePileViewController; + if (_facePileViewController) { - [_facePileParentViewController - addChildViewController:_facePileViewController]; + CHECK(parentViewController); + [parentViewController addChildViewController:_facePileViewController]; UIView* facePileView = _facePileViewController.view; NSLayoutConstraint* facePileMinWidthConstraint = [facePileView.widthAnchor constraintEqualToConstant:0]; @@ -168,7 +166,7 @@ facePileMinWidthConstraint.active = YES; [_stackView addArrangedSubview:facePileView]; [_facePileViewController - didMoveToParentViewController:_facePileParentViewController]; + didMoveToParentViewController:parentViewController]; } }
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_view_controller.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_view_controller.mm index 035ec235..3c9a61d 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_view_controller.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups/tab_groups_panel_view_controller.mm
@@ -372,9 +372,9 @@ NSUInteger numberOfTabs = itemData.numberOfTabs; cell.faviconsGrid.numberOfTabs = numberOfTabs; - cell.facePileParentViewController = self; - cell.facePileViewController = + UIViewController* facePile = [_itemDataSource facePileViewControllerForItem:item]; + [cell setFacePileViewController:facePile parentViewController:self]; [_itemDataSource fetchFaviconsForCell:cell]; }
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/coordinator/tab_strip_coordinator.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/coordinator/tab_strip_coordinator.mm index d2d506d..5b5de37 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/coordinator/tab_strip_coordinator.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/coordinator/tab_strip_coordinator.mm
@@ -14,7 +14,6 @@ #import "components/tab_groups/tab_group_visual_data.h" #import "ios/chrome/browser/collaboration/model/collaboration_service_factory.h" #import "ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h" -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" #import "ios/chrome/browser/saved_tab_groups/model/ios_tab_group_sync_util.h" #import "ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h" #import "ios/chrome/browser/share_kit/model/share_kit_manage_configuration.h" @@ -62,8 +61,8 @@ @property(nonatomic, strong) TabStripMediator* mediator; // Helper providing context menu for tab strip items. @property(nonatomic, strong) TabStripContextMenuHelper* contextMenuHelper; - -@property TabStripViewController* tabStripViewController; +// The view controller for the tab strip. +@property(nonatomic, strong) TabStripViewController* tabStripViewController; @end @@ -414,10 +413,7 @@ std::unique_ptr<collaboration::CollaborationControllerDelegate> delegate = std::make_unique<collaboration::IOSCollaborationControllerDelegate>( - browser, self.baseViewController, - std::make_unique< - collaboration::CollaborationFlowConfigurationShareOrManage>( - tabGroup->GetWeakPtr())); + browser, self.baseViewController); collaborationService->StartShareOrManageFlow(std::move(delegate), tabGroup->tab_group_id()); }
diff --git a/ios/chrome/browser/tabs/model/tab_title_util_unittest.mm b/ios/chrome/browser/tabs/model/tab_title_util_unittest.mm index bcb2355..5cc7228 100644 --- a/ios/chrome/browser/tabs/model/tab_title_util_unittest.mm +++ b/ios/chrome/browser/tabs/model/tab_title_util_unittest.mm
@@ -11,10 +11,12 @@ #import "base/strings/utf_string_conversions.h" #import "components/strings/grit/components_strings.h" #import "ios/chrome/browser/download/model/download_manager_tab_helper.h" +#import "ios/chrome/browser/shared/model/profile/test/test_profile_ios.h" #import "ios/web/public/navigation/navigation_item.h" #import "ios/web/public/test/fakes/fake_download_task.h" #import "ios/web/public/test/fakes/fake_navigation_manager.h" #import "ios/web/public/test/fakes/fake_web_state.h" +#import "ios/web/public/test/web_task_environment.h" #import "testing/gtest/include/gtest/gtest.h" #import "testing/gtest_mac.h" #import "testing/platform_test.h" @@ -34,11 +36,14 @@ } web::FakeWebState web_state_; + web::WebTaskEnvironment task_environment_; raw_ptr<web::FakeNavigationManager> navigation_manager_ = nullptr; }; // Tests GetTabTitle when there is a download task in the download manager. TEST_F(TabTitleUtilTest, GetTabTitleWithDownloadTest) { + std::unique_ptr<TestProfileIOS> profile = TestProfileIOS::Builder().Build(); + web_state_.SetBrowserState(profile.get()); DownloadManagerTabHelper* tab_helper = DownloadManagerTabHelper::FromWebState(&web_state_); auto task = std::make_unique<web::FakeDownloadTask>(
diff --git a/ios/chrome/browser/tips_notifications/eg_test/BUILD.gn b/ios/chrome/browser/tips_notifications/eg_test/BUILD.gn index 5fe44323..9d61664e7 100644 --- a/ios/chrome/browser/tips_notifications/eg_test/BUILD.gn +++ b/ios/chrome/browser/tips_notifications/eg_test/BUILD.gn
@@ -9,14 +9,14 @@ deps = [ "//base", "//base/test:test_support", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/push_notification/ui_bundled:test_support", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", "//ios/chrome/browser/tips_notifications/model:utils", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/browser/ui/content_suggestions:eg_test_support+eg2", "//ios/chrome/browser/ui/content_suggestions/set_up_list:constants", "//ios/chrome/common/ui/confirmation_alert:constants",
diff --git a/ios/chrome/browser/tips_notifications/eg_test/tips_notifications_egtest.mm b/ios/chrome/browser/tips_notifications/eg_test/tips_notifications_egtest.mm index 90798a1..71182307 100644 --- a/ios/chrome/browser/tips_notifications/eg_test/tips_notifications_egtest.mm +++ b/ios/chrome/browser/tips_notifications/eg_test/tips_notifications_egtest.mm
@@ -5,14 +5,14 @@ #import "base/strings/stringprintf.h" #import "base/test/ios/wait_util.h" #import "base/threading/platform_thread.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/push_notification/ui_bundled/scoped_notification_auth_swizzler.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/tips_notifications/model/utils.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/browser/ui/content_suggestions/new_tab_page_app_interface.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/constants.h" #import "ios/chrome/common/ui/confirmation_alert/constants.h"
diff --git a/ios/chrome/browser/tips_notifications/model/BUILD.gn b/ios/chrome/browser/tips_notifications/model/BUILD.gn index 5c4a5fa3..a477aca 100644 --- a/ios/chrome/browser/tips_notifications/model/BUILD.gn +++ b/ios/chrome/browser/tips_notifications/model/BUILD.gn
@@ -13,6 +13,7 @@ "//components/feature_engagement/public", "//components/safe_browsing/core/common:safe_browsing_prefs", "//components/search", + "//ios/chrome/browser/authentication/ui_bundled:signin_presenter", "//ios/chrome/browser/default_browser/model", "//ios/chrome/browser/default_browser/model:utils", "//ios/chrome/browser/feature_engagement/model", @@ -34,7 +35,6 @@ "//ios/chrome/browser/signin/model", "//ios/chrome/browser/signin/model:authentication_service", "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/ui/authentication:signin_presenter", "//ios/chrome/browser/ui/content_suggestions:commands", "//ios/chrome/browser/ui/content_suggestions/set_up_list:utils", "//ios/public/provider/chrome/browser/lens:lens_api",
diff --git a/ios/chrome/browser/tips_notifications/model/DEPS b/ios/chrome/browser/tips_notifications/model/DEPS index d0c4d3f3..839e1af 100644 --- a/ios/chrome/browser/tips_notifications/model/DEPS +++ b/ios/chrome/browser/tips_notifications/model/DEPS
@@ -5,7 +5,7 @@ "+ios/chrome/browser/push_notification/model", "+ios/chrome/browser/search_engines/model", "+ios/chrome/browser/signin/model", - "+ios/chrome/browser/ui/authentication", + "+ios/chrome/browser/authentication/ui_bundled", "+ios/chrome/browser/ui/content_suggestions", "+ios/chrome/browser/lens/ui_bundled", "+ios/chrome/browser/signin/model",
diff --git a/ios/chrome/browser/tips_notifications/model/tips_notification_client.mm b/ios/chrome/browser/tips_notifications/model/tips_notification_client.mm index 12b298fb..eae14e0 100644 --- a/ios/chrome/browser/tips_notifications/model/tips_notification_client.mm +++ b/ios/chrome/browser/tips_notifications/model/tips_notification_client.mm
@@ -16,6 +16,7 @@ #import "components/safe_browsing/core/common/safe_browsing_prefs.h" #import "components/search/search.h" #import "components/signin/public/identity_manager/identity_manager.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_presenter.h" #import "ios/chrome/browser/default_browser/model/promo_source.h" #import "ios/chrome/browser/default_browser/model/utils.h" #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" @@ -48,7 +49,6 @@ #import "ios/chrome/browser/signin/model/chrome_account_manager_service_factory.h" #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/tips_notifications/model/utils.h" -#import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_commands.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/utils.h" #import "ios/public/provider/chrome/browser/lens/lens_api.h"
diff --git a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/coordinator/tab_group_indicator_coordinator.mm b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/coordinator/tab_group_indicator_coordinator.mm index 115f7392..2de9e7b 100644 --- a/ios/chrome/browser/toolbar/ui_bundled/tab_groups/coordinator/tab_group_indicator_coordinator.mm +++ b/ios/chrome/browser/toolbar/ui_bundled/tab_groups/coordinator/tab_group_indicator_coordinator.mm
@@ -14,7 +14,6 @@ #import "ios/chrome/browser/bubble/ui_bundled/bubble_view_controller_presenter.h" #import "ios/chrome/browser/collaboration/model/collaboration_service_factory.h" #import "ios/chrome/browser/collaboration/model/ios_collaboration_controller_delegate.h" -#import "ios/chrome/browser/collaboration/model/ios_collaboration_flow_configuration.h" #import "ios/chrome/browser/feature_engagement/model/tracker_factory.h" #import "ios/chrome/browser/saved_tab_groups/model/tab_group_sync_service_factory.h" #import "ios/chrome/browser/share_kit/model/share_kit_service_factory.h" @@ -227,10 +226,7 @@ std::unique_ptr<collaboration::CollaborationControllerDelegate> delegate = std::make_unique<collaboration::IOSCollaborationControllerDelegate>( - browser, self.baseViewController, - std::make_unique< - collaboration::CollaborationFlowConfigurationShareOrManage>( - tabGroup->GetWeakPtr())); + browser, self.baseViewController); collaborationService->StartShareOrManageFlow(std::move(delegate), tabGroup->tab_group_id()); }
diff --git a/ios/chrome/browser/ui/DEPS b/ios/chrome/browser/ui/DEPS index 0cb074c..fa65a1d 100644 --- a/ios/chrome/browser/ui/DEPS +++ b/ios/chrome/browser/ui/DEPS
@@ -1,8 +1,8 @@ include_rules = [ "+ios/chrome/browser", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # Subfolders have to explicitly declare their dependences. # Avoid adding top-level deps, prefer to use ios/c/b/shared if needed.
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn deleted file mode 100644 index 2e2c711..0000000 --- a/ios/chrome/browser/ui/authentication/BUILD.gn +++ /dev/null
@@ -1,258 +0,0 @@ -# Copyright 2016 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/chrome_build.gni") - -source_set("authentication") { - sources = [ - "authentication_ui_util.h", - "authentication_ui_util.mm", - "re_signin_infobar_delegate.h", - "re_signin_infobar_delegate.mm", - "signin_notification_infobar_delegate.h", - "signin_notification_infobar_delegate.mm", - "signin_promo_view_mediator.h", - "signin_promo_view_mediator.mm", - ] - deps = [ - ":account_settings_presenter", - ":authentication_constants", - ":signin_presenter", - "//components/bookmarks/common", - "//components/consent_auditor", - "//components/infobars/core", - "//components/policy/core/common", - "//components/prefs", - "//components/reading_list/features:flags", - "//components/signin/ios/browser", - "//components/signin/public/base", - "//components/signin/public/base:signin_switches", - "//components/signin/public/identity_manager", - "//components/signin/public/identity_manager/objc", - "//components/strings", - "//components/unified_consent", - "//google_apis", - "//ios/chrome/app:change_profile_commands", - "//ios/chrome/app/application_delegate:app_state", - "//ios/chrome/app/profile", - "//ios/chrome/app/strings", - "//ios/chrome/browser/flags", - "//ios/chrome/browser/infobars/model", - "//ios/chrome/browser/ntp/ui_bundled:feature_flags", - "//ios/chrome/browser/policy/model", - "//ios/chrome/browser/settings/ui_bundled:settings_root", - "//ios/chrome/browser/shared/coordinator/alert", - "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", - "//ios/chrome/browser/shared/model/application_context", - "//ios/chrome/browser/shared/model/browser", - "//ios/chrome/browser/shared/model/prefs:pref_names", - "//ios/chrome/browser/shared/model/profile", - "//ios/chrome/browser/shared/model/web_state_list", - "//ios/chrome/browser/shared/public/commands", - "//ios/chrome/browser/shared/public/features", - "//ios/chrome/browser/shared/public/features:system_flags", - "//ios/chrome/browser/shared/ui/symbols", - "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/shared/ui/util:snackbar_util", - "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/signin/model:authentication_service", - "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/signin/model:capabilities_types", - "//ios/chrome/browser/signin/model:constants", - "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/signin/model:system_identity_manager", - "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation", - "//ios/chrome/browser/ui/authentication/history_sync:capabilities_fetcher", - "//ios/chrome/browser/ui/authentication/resources", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/unified_consent/model", - "//ios/chrome/common", - "//ios/chrome/common/ui/colors", - "//ios/chrome/common/ui/util", - "//ios/public/provider/chrome/browser/signin:signin_error_api", - "//ios/public/provider/chrome/browser/signin:signin_resources_api", - "//ios/web/public", - "//services/network/public/cpp", - "//ui/base", - "//ui/gfx", - ] - public_deps = [ - "//base", - "//ios/chrome/browser/ui/authentication/signin:constants", - ] - frameworks = [ - "CoreGraphics.framework", - "QuartzCore.framework", - "UIKit.framework", - ] -} - -source_set("authentication_constants") { - sources = [ - "authentication_constants.h", - "authentication_constants.mm", - ] - frameworks = [ "UIKit.framework" ] -} - -source_set("signin_presenter") { - sources = [ "signin_presenter.h" ] -} - -source_set("account_settings_presenter") { - sources = [ "account_settings_presenter.h" ] -} - -source_set("unit_tests") { - testonly = true - sources = [ - "authentication_ui_util_unittest.mm", - "re_signin_infobar_delegate_unittest.mm", - "signin_promo_view_mediator_unittest.mm", - ] - deps = [ - ":account_settings_presenter", - ":authentication", - ":signin_presenter", - "//base", - "//base/test:test_support", - "//build:branding_buildflags", - "//components/consent_auditor", - "//components/consent_auditor:test_support", - "//components/policy/core/common", - "//components/policy/core/common:test_support", - "//components/pref_registry", - "//components/prefs", - "//components/signin/public/base", - "//components/signin/public/identity_manager", - "//components/signin/public/identity_manager:test_support", - "//components/sync:test_support", - "//components/sync/base:features", - "//components/sync_preferences", - "//components/sync_preferences:test_support", - "//components/variations", - "//components/variations:test_support", - "//components/version_info", - "//ios/chrome/app/strings", - "//ios/chrome/browser/infobars/model", - "//ios/chrome/browser/ntp/ui_bundled:feature_flags", - "//ios/chrome/browser/policy/model", - "//ios/chrome/browser/policy/model:constants", - "//ios/chrome/browser/policy/model:policy_util", - "//ios/chrome/browser/policy/model:test_support", - "//ios/chrome/browser/shared/model/application_context", - "//ios/chrome/browser/shared/model/browser/test:test_support", - "//ios/chrome/browser/shared/model/prefs:browser_prefs", - "//ios/chrome/browser/shared/model/prefs:pref_names", - "//ios/chrome/browser/shared/model/profile/test", - "//ios/chrome/browser/shared/model/web_state_list", - "//ios/chrome/browser/shared/public/commands", - "//ios/chrome/browser/shared/public/features", - "//ios/chrome/browser/shared/ui/symbols", - "//ios/chrome/browser/shared/ui/table_view:styler", - "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/signin/model:authentication_service", - "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/signin/model:fake_system_identity_manager", - "//ios/chrome/browser/signin/model:test_support", - "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/sync/model:test_support", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/unified_consent/model", - "//ios/chrome/test:test_support", - "//ios/testing:protocol_fake", - "//ios/web/public/test", - "//testing/gtest", - "//third_party/ocmock", - "//ui/base", - "//ui/strings:ui_strings_grit", - ] -} - -source_set("eg_app_support+eg2") { - configs += [ "//build/config/ios:xctest_config" ] - testonly = true - sources = [ - "signin_earl_grey_app_interface.h", - "signin_earl_grey_app_interface.mm", - ] - visibility = [ - "//ios/chrome/test/earl_grey:eg_app_support+eg2", - "//ios/chrome/test/earl_grey:hooks", - ] - deps = [ - ":account_settings_presenter", - ":authentication", - ":signin_presenter", - "//components/bookmarks/browser", - "//components/prefs", - "//components/signin/public/identity_manager", - "//components/signin/public/identity_manager:test_support", - "//components/supervised_user/core/browser", - "//components/sync", - "//ios/chrome/browser/bookmarks/model", - "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", - "//ios/chrome/browser/shared/model/application_context", - "//ios/chrome/browser/shared/model/prefs:pref_names", - "//ios/chrome/browser/shared/model/profile", - "//ios/chrome/browser/shared/public/commands", - "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/signin/model:authentication_service", - "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/signin/model:capabilities_types", - "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/signin/model:fake_system_identity_manager", - "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt", - "//ios/chrome/test/app:test_support", - "//ios/testing/earl_grey:eg_app_support+eg2", - "//ios/third_party/earl_grey2:app_framework+link", - ] -} - -source_set("eg_test_support+eg2") { - configs += [ "//build/config/ios:xctest_config" ] - testonly = true - sources = [ - "signin_earl_grey.h", - "signin_earl_grey.mm", - "signin_earl_grey_app_interface.h", - "signin_earl_grey_app_interface_stub.mm", - "signin_earl_grey_ui_test_util.h", - "signin_earl_grey_ui_test_util.mm", - "signin_matchers.h", - "signin_matchers.mm", - ] - deps = [ - ":account_settings_presenter", - ":signin_presenter", - "//base", - "//base/test:test_support", - "//components/signin/public/base", - "//components/sync/base", - "//ios/chrome/app/strings", - "//ios/chrome/browser/first_run/ui_bundled:constants", - "//ios/chrome/browser/recent_tabs/ui_bundled:ui_constants", - "//ios/chrome/browser/settings/ui_bundled:constants", - "//ios/chrome/browser/settings/ui_bundled/google_services:constants", - "//ios/chrome/browser/settings/ui_bundled/google_services/manage_accounts:constants", - "//ios/chrome/browser/shared/ui/table_view:constants", - "//ios/chrome/browser/signin/model:capabilities_types", - "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication/cells:constants", - "//ios/chrome/browser/ui/authentication/signin:constants", - "//ios/chrome/browser/ui/authentication/views:views_constants", - "//ios/chrome/common/ui/promo_style:constants", - "//ios/chrome/test:eg_test_support+eg2", - "//ios/chrome/test/earl_grey:eg_test_support+eg2", - "//ios/testing/earl_grey:eg_test_support+eg2", - "//ui/base", - ] -}
diff --git a/ios/chrome/browser/ui/authentication/DEPS b/ios/chrome/browser/ui/authentication/DEPS deleted file mode 100644 index ac4a0e9..0000000 --- a/ios/chrome/browser/ui/authentication/DEPS +++ /dev/null
@@ -1,22 +0,0 @@ -include_rules = [ - "+ios/chrome/browser/keyboard/ui_bundled/UIKeyCommand+Chrome.h", - "+components/consent_auditor", - "+ios/chrome/browser/settings/ui_bundled", - "+ios/chrome/browser/screen/ui_bundled", - "+ios/chrome/browser/first_run/ui_bundled", - "+ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_constants.h", - "+ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h", - "+ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h", - - # TODO(crbug.com/40269518): Remove this deps. - "+ios/chrome/browser/scoped_ui_blocker/ui_bundled", -] - -specific_include_rules = { - "signin_earl_grey_app_interface\.mm": [ - "+ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", - ], - ".*_egtest\.mm": [ - "+components/signin/internal/identity_manager/account_capabilities_constants.h", - ], -}
diff --git a/ios/chrome/browser/ui/authentication/account_settings_presenter.h b/ios/chrome/browser/ui/authentication/account_settings_presenter.h deleted file mode 100644 index dbc780c5..0000000 --- a/ios/chrome/browser/ui/authentication/account_settings_presenter.h +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_SETTINGS_PRESENTER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_SETTINGS_PRESENTER_H_ - -// Protocol used to display the account settings UI of the signed in account. -@protocol AccountSettingsPresenter - -// Asks the presenter to display account settings. -- (void)showAccountSettings; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ACCOUNT_SETTINGS_PRESENTER_H_
diff --git a/ios/chrome/browser/ui/authentication/change_profile/change_profile_continuation.h b/ios/chrome/browser/ui/authentication/change_profile/change_profile_continuation.h deleted file mode 100644 index 2b04a01a..0000000 --- a/ios/chrome/browser/ui/authentication/change_profile/change_profile_continuation.h +++ /dev/null
@@ -1,21 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_ - -#import <UIKit/UIKit.h> - -#import "base/ios/block_types.h" - -@class SceneState; - -@protocol ChangeProfileContinuation <NSObject> - -- (void)executeWithSceneState:(SceneState*)sceneState - completion:(ProceduralBlock)completion; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h b/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h deleted file mode 100644 index f561d27e6..0000000 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_view_controller.h +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_VIEW_CONTROLLER_H_ - -#import "ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt/enterprise_prompt_type.h" -#import "ios/chrome/common/ui/confirmation_alert/confirmation_alert_view_controller.h" - -// ViewController that contains enterprise prompt information. -@interface EnterprisePromptViewController : ConfirmationAlertViewController - -// Initializes this alert with its `promptType`. -- (instancetype)initWithpromptType:(EnterprisePromptType)promptType; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_PROMPT_ENTERPRISE_PROMPT_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h b/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h deleted file mode 100644 index 38f8284..0000000 --- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.h +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_UTILS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_UTILS_H_ - -#import <UIKit/UIKit.h> - -// Returns YES if some account restrictions are set. -bool IsRestrictAccountsToPatternsEnabled(); - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_ENTERPRISE_UTILS_H_
diff --git a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_consumer.h b/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_consumer.h deleted file mode 100644 index 444f62f3..0000000 --- a/ios/chrome/browser/ui/authentication/enterprise/managed_profile_creation/managed_profile_creation_consumer.h +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_CONSUMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_CONSUMER_H_ - -#import <UIKit/UIKit.h> - -// Handles managed profile creation screen UI updates. -@protocol ManagedProfileCreationConsumer <NSObject> - -@property(nonatomic, assign) BOOL canShowBrowsingDataMigration; - -- (void)setKeepBrowsingDataSeparate:(BOOL)keepSeparate; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_ENTERPRISE_MANAGED_PROFILE_CREATION_MANAGED_PROFILE_CREATION_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.h b/ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.h deleted file mode 100644 index c7cbbd1..0000000 --- a/ios/chrome/browser/ui/authentication/history_sync/history_sync_view_controller.h +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_VIEW_CONTROLLER_H_ - -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_consumer.h" -#import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" - -// View controller for history sync. -@interface HistorySyncViewController - : PromoStyleViewController <HistorySyncConsumer> - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_HISTORY_SYNC_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/history_sync/pref_names.h b/ios/chrome/browser/ui/authentication/history_sync/pref_names.h deleted file mode 100644 index b93e595..0000000 --- a/ios/chrome/browser/ui/authentication/history_sync/pref_names.h +++ /dev/null
@@ -1,15 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_PREF_NAMES_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_PREF_NAMES_H_ - -namespace history_sync_prefs { - -extern const char kHistorySyncSuccessiveDeclineCount[]; -extern const char kHistorySyncLastDeclinedTimestamp[]; - -} // namespace history_sync_prefs - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_HISTORY_SYNC_PREF_NAMES_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.h b/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.h deleted file mode 100644 index 7ceb463f..0000000 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_add_account_item.h +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ADD_ACCOUNT_ITEM_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ADD_ACCOUNT_ITEM_H_ - -#import <UIKit/UIKit.h> - -#import "ios/chrome/browser/shared/ui/table_view/cells/table_view_item.h" - -// IdentityChooserAddAccountItem holds the model data for "Add Account…" cell. -@interface IdentityChooserAddAccountItem : TableViewItem -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_ADD_ACCOUNT_ITEM_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.h b/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.h deleted file mode 100644 index 11aadc9..0000000 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_header_item.h +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_HEADER_ITEM_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_HEADER_ITEM_H_ - -#import <UIKit/UIKit.h> - -#import "ios/chrome/browser/shared/ui/table_view/cells/table_view_header_footer_item.h" - -// IdentityChooserHeaderItem holds the model data for "Choose an Account" header -// cell. -@interface IdentityChooserHeaderItem : TableViewHeaderFooterItem -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_HEADER_ITEM_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.h b/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.h deleted file mode 100644 index 8251906..0000000 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.h +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_PRESENTATION_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_PRESENTATION_CONTROLLER_H_ - -#import <UIKit/UIKit.h> - -// Presentation controller for presenting the IdentityChooser. It is presenting -// it as a Modal. -@interface IdentityChooserPresentationController : UIPresentationController - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_PRESENTATION_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.h b/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.h deleted file mode 100644 index 7372433..0000000 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.h +++ /dev/null
@@ -1,19 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_TRANSITION_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_TRANSITION_DELEGATE_H_ - -#import <UIKit/UIKit.h> - -// Transition Delegate for the IdentityChooser. It is presenting it as a modal. -@interface IdentityChooserTransitionDelegate - : NSObject<UIViewControllerTransitioningDelegate> - -// Origin of the animation. Must be in the window coordinates. -@property(nonatomic, assign) CGPoint origin; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_IDENTITY_CHOOSER_IDENTITY_CHOOSER_TRANSITION_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.mm b/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.mm deleted file mode 100644 index c951047f..0000000 --- a/ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.mm +++ /dev/null
@@ -1,42 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_transition_delegate.h" - -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_animator.h" -#import "ios/chrome/browser/ui/authentication/identity_chooser/identity_chooser_presentation_controller.h" - -@implementation IdentityChooserTransitionDelegate - -@synthesize origin = _origin; - -#pragma mark - UIViewControllerTransitioningDelegate - -- (UIPresentationController*) -presentationControllerForPresentedViewController:(UIViewController*)presented - presentingViewController:(UIViewController*)presenting - sourceViewController:(UIViewController*)source { - return [[IdentityChooserPresentationController alloc] - initWithPresentedViewController:presented - presentingViewController:presenting]; -} - -- (id<UIViewControllerAnimatedTransitioning>) -animationControllerForPresentedController:(UIViewController*)presented - presentingController:(UIViewController*)presenting - sourceController:(UIViewController*)source { - IdentityChooserAnimator* animator = [[IdentityChooserAnimator alloc] init]; - animator.appearing = YES; - animator.origin = self.origin; - return animator; -} - -- (id<UIViewControllerAnimatedTransitioning>) -animationControllerForDismissedController:(UIViewController*)dismissed { - IdentityChooserAnimator* animator = [[IdentityChooserAnimator alloc] init]; - animator.appearing = NO; - return animator; -} - -@end
diff --git a/ios/chrome/browser/ui/authentication/signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/BUILD.gn deleted file mode 100644 index 2ef0ca69..0000000 --- a/ios/chrome/browser/ui/authentication/signin/BUILD.gn +++ /dev/null
@@ -1,205 +0,0 @@ -# Copyright 2020 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/chrome_build.gni") - -# Public target. -group("signin") { - public_deps = [ ":signin_headers" ] - deps = [ ":signin_impl" ] -} - -# Contains public headers. -source_set("signin_headers") { - sources = [ - "signin_coordinator.h", - "signin_utils.h", - ] - public_deps = [ - ":constants", - "//base", - "//components/signin/public/base", - "//components/signin/public/identity_manager", - "//ios/chrome/browser/shared/coordinator/chrome_coordinator", - "//ios/chrome/browser/shared/model/profile", - "//ios/chrome/browser/signin/model:capabilities_types", - "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator", - ] -} - -source_set("interruptible_chrome_coordinator") { - sources = [ - "interruptible_chrome_coordinator.h", - "interruptible_chrome_coordinator.mm", - ] - deps = [ - "//base", - "//ios/chrome/browser/shared/coordinator/chrome_coordinator", - "//ios/chrome/browser/ui/authentication/signin:constants", - ] - frameworks = [ "UIKit.framework" ] -} - -source_set("signin_protected") { - sources = [ "signin_coordinator+protected.h" ] - deps = [ ":signin_headers" ] -} - -# Contains sign-in implementation. -source_set("signin_impl") { - sources = [ - "signin_coordinator.mm", - "signin_utils.mm", - ] - public_deps = [ ":constants" ] - deps = [ - ":signin_headers", - ":signin_protected", - ":signin_screen_provider", - "//components/policy:generated", - "//components/policy/core/common:common_constants", - "//components/pref_registry", - "//components/prefs", - "//components/signin/ios/browser", - "//components/sync/base:features", - "//components/sync/service", - "//ios/chrome/app:change_profile_commands", - "//ios/chrome/app:tests_hook", - "//ios/chrome/app/application_delegate:app_state", - "//ios/chrome/app/profile", - "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", - "//ios/chrome/browser/shared/model/application_context", - "//ios/chrome/browser/shared/model/browser", - "//ios/chrome/browser/shared/model/prefs:pref_names", - "//ios/chrome/browser/shared/public/features", - "//ios/chrome/browser/shared/public/features:system_flags", - "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/signin/model:authentication_service", - "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/signin/model:signin_util", - "//ios/chrome/browser/signin/model:system_identity", - "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/account_menu", - "//ios/chrome/browser/ui/authentication/change_profile", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin:interruptible_chrome_coordinator", - "//ios/chrome/browser/ui/authentication/signin/add_account_signin", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin", - "//ios/chrome/browser/ui/authentication/signin/forced_signin", - "//ios/chrome/browser/ui/authentication/signin/history_sync", - "//ios/chrome/browser/ui/authentication/signin/instant_signin", - "//ios/chrome/browser/ui/authentication/signin/logging", - "//ios/chrome/browser/ui/authentication/signin/signin_history_sync", - "//ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication", - "//ios/chrome/browser/ui/authentication/signin/two_screens_signin", - ] -} - -source_set("signin_screen_provider") { - sources = [ - "signin_screen_provider.h", - "signin_screen_provider.mm", - "uno_signin_screen_provider.h", - "uno_signin_screen_provider.mm", - ] - deps = [ - "//base", - "//components/sync/base:features", - "//ios/chrome/browser/first_run/ui_bundled:field_trial", - "//ios/chrome/browser/screen/ui_bundled:screen_provider", - "//ios/chrome/browser/screen/ui_bundled:screen_provider_protected", - "//ios/chrome/browser/screen/ui_bundled:screen_type", - ] -} - -source_set("unit_tests") { - testonly = true - sources = [ "signin_utils_unittest.mm" ] - deps = [ - ":signin_impl", - "//base", - "//base/test:test_support", - "//components/pref_registry", - "//components/sync/base", - "//components/sync/service", - "//components/sync_preferences", - "//components/sync_preferences:test_support", - "//ios/chrome/browser/policy/model:policy_util", - "//ios/chrome/browser/shared/model/application_context", - "//ios/chrome/browser/shared/model/browser/test:test_support", - "//ios/chrome/browser/shared/model/prefs:browser_prefs", - "//ios/chrome/browser/shared/model/prefs:pref_names", - "//ios/chrome/browser/shared/model/profile/test", - "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/signin/model:authentication_service", - "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/signin/model:fake_system_identity_manager", - "//ios/chrome/browser/signin/model:signin_util", - "//ios/chrome/browser/signin/model:test_support", - "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/test:test_support", - "//ios/web/public/test", - "//net", - "//testing/gtest", - "//third_party/ocmock", - ] -} - -source_set("constants") { - sources = [ - "signin_constants.h", - "signin_constants.mm", - ] - deps = [ "//base" ] - frameworks = [ "Foundation.framework" ] -} - -source_set("eg2_tests") { - configs += [ "//build/config/ios:xctest_config" ] - testonly = true - sources = [ "signin_coordinator_egtest.mm" ] - deps = [ - ":constants", - "//base", - "//base/test:test_support", - "//components/policy:generated", - "//components/signin/internal/identity_manager", - "//components/signin/ios/browser:features", - "//components/signin/public/base", - "//components/signin/public/identity_manager", - "//components/strings", - "//components/sync/base", - "//components/sync/base:features", - "//ios/chrome/app/strings", - "//ios/chrome/browser/bookmarks/model:bookmark_storage_type", - "//ios/chrome/browser/bookmarks/ui_bundled:eg_test_support+eg2", - "//ios/chrome/browser/metrics/model:eg_test_support+eg2", - "//ios/chrome/browser/ntp/ui_bundled:constants", - "//ios/chrome/browser/ntp/ui_bundled:feature_flags", - "//ios/chrome/browser/policy/model:eg_test_support+eg2", - "//ios/chrome/browser/policy/model:policy_util", - "//ios/chrome/browser/recent_tabs/ui_bundled:ui_constants", - "//ios/chrome/browser/settings/ui_bundled:constants", - "//ios/chrome/browser/settings/ui_bundled:eg_test_support+eg2", - "//ios/chrome/browser/settings/ui_bundled/google_services:constants", - "//ios/chrome/browser/shared/model/prefs:pref_names", - "//ios/chrome/browser/shared/public/features", - "//ios/chrome/browser/shared/ui/elements:constants", - "//ios/chrome/browser/signin/model:capabilities_types", - "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/signin/model:system_identity_manager", - "//ios/chrome/browser/signin/model:test_constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/views:views_constants", - "//ios/chrome/test/earl_grey:eg_test_support+eg2", - "//ios/testing/earl_grey:eg_test_support+eg2", - "//ios/testing/earl_grey:launch_configuration", - "//net:test_support", - "//ui/base", - ] - frameworks = [ "UIKit.framework" ] -}
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h deleted file mode 100644 index c77ed21..0000000 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h +++ /dev/null
@@ -1,23 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_CONSUMER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_CONSUMER_H_ - -#import <Foundation/Foundation.h> - -@class IdentityItemConfigurator; - -// Consumer for consistency default account. -@protocol ConsistencyAccountChooserConsumer <NSObject> - -// Invoked when all identities have to be reloaded. -- (void)reloadAllIdentities; -// Invoked when an identity has to be updated. -- (void)reloadIdentityForIdentityItemConfigurator: - (IdentityItemConfigurator*)configurator; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h deleted file mode 100644 index e3212b60..0000000 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller.h +++ /dev/null
@@ -1,29 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_H_ - -#import <UIKit/UIKit.h> - -#import "ios/chrome/browser/shared/ui/table_view/legacy_chrome_table_view_controller.h" -#import "ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_consumer.h" - -@protocol ConsistencyAccountChooserTableViewControllerActionDelegate; -@protocol ConsistencyAccountChooserTableViewControllerModelDelegate; - -// View controller for ConsistencyAccountChooserCoordinator. -@interface ConsistencyAccountChooserTableViewController - : LegacyChromeTableViewController <ConsistencyAccountChooserConsumer> - -@property(nonatomic, weak) - id<ConsistencyAccountChooserTableViewControllerActionDelegate> - actionDelegate; -@property(nonatomic, weak) - id<ConsistencyAccountChooserTableViewControllerModelDelegate> - modelDelegate; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h deleted file mode 100644 index e40b07c..0000000 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/consistency_account_chooser_table_view_controller_model_delegate.h +++ /dev/null
@@ -1,20 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_ - -#import <Foundation/Foundation.h> - -@class ConsistencyAccountChooserViewController; - -// Protocol to get the model. -@protocol ConsistencyAccountChooserTableViewControllerModelDelegate <NSObject> - -// Returns all the configurators to generate model items. -@property(nonatomic, strong, readonly) NSArray* sortedIdentityItemConfigurators; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_CONSISTENCY_ACCOUNT_CHOOSER_TABLE_VIEW_CONTROLLER_MODEL_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h deleted file mode 100644 index 7f86bdf..0000000 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_account_chooser/identity_item_configurator.h +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_IDENTITY_ITEM_CONFIGURATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_IDENTITY_ITEM_CONFIGURATOR_H_ - -#import <UIKit/UIKit.h> - -@class TableViewIdentityItem; - -// This class configures TableViewIdentityItem instances. -@interface IdentityItemConfigurator : NSObject - -@property(nonatomic, strong) NSString* gaiaID; -@property(nonatomic, strong) NSString* name; -@property(nonatomic, strong) NSString* email; -@property(nonatomic, strong) UIImage* avatar; -@property(nonatomic, assign) BOOL selected; - -- (void)configureIdentityChooser:(TableViewIdentityItem*)item; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_ACCOUNT_CHOOSER_IDENTITY_ITEM_CONFIGURATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h deleted file mode 100644 index c4819db7..0000000 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.h +++ /dev/null
@@ -1,25 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_ - -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" - -namespace signin_metrics { -enum class AccessPoint : int; -} - -// Coordinates various Identity options in Chrome including signing in -// using accounts on the device, opening Incognito, and adding an account. -@interface ConsistencyPromoSigninCoordinator : SigninCoordinator - -+ (instancetype) - coordinatorWithBaseViewController:(UIViewController*)viewController - browser:(Browser*)browser - accessPoint:(signin_metrics::AccessPoint)accessPoint; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_PROMO_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h deleted file mode 100644 index 06ed701..0000000 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/child_consistency_sheet_view_controller.h +++ /dev/null
@@ -1,20 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CHILD_CONSISTENCY_SHEET_VIEW_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CHILD_CONSISTENCY_SHEET_VIEW_CONTROLLER_H_ - -#import <UIKit/UIKit.h> - -// Protocol to implement for view controller pushed to -// ConsistencySheetNavigationController. -@protocol ChildConsistencySheetViewController <NSObject> - -// Returns the desired height for `viewController` to fit. The height needs to -// include safe area insets. -- (CGFloat)layoutFittingHeightForWidth:(CGFloat)width; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CHILD_CONSISTENCY_SHEET_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h deleted file mode 100644 index 8f378f19..0000000 --- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_sheet/consistency_sheet_constants.h +++ /dev/null
@@ -1,13 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_CONSTANTS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_CONSTANTS_H_ - -#import <UIKit/UIKit.h> - -// Maximum height ratio for the bottom sheet container view. -extern const CGFloat kMaxBottomSheetHeightRatioWithWindow; - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_CONSISTENCY_PROMO_SIGNIN_CONSISTENCY_SHEET_CONSISTENCY_SHEET_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.h b/ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.h deleted file mode 100644 index de43c24..0000000 --- a/ios/chrome/browser/ui/authentication/signin/history_sync/history_sync_signin_coordinator.h +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_HISTORY_SYNC_HISTORY_SYNC_SIGNIN_COORDINATOR_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_HISTORY_SYNC_HISTORY_SYNC_SIGNIN_COORDINATOR_H_ - -#import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h" - -// Coordinator to present the History Sync Opt-In screen. -// This requires the user to be signed in already. -@interface HistorySyncSigninCoordinator : SigninCoordinator - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_HISTORY_SYNC_HISTORY_SYNC_SIGNIN_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.h b/ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.h deleted file mode 100644 index 790b0ed6..0000000 --- a/ios/chrome/browser/ui/authentication/signin/logging/first_run_signin_logger.h +++ /dev/null
@@ -1,15 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_FIRST_RUN_SIGNIN_LOGGER_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_FIRST_RUN_SIGNIN_LOGGER_H_ - -#import "ios/chrome/browser/ui/authentication/signin/logging/user_signin_logger.h" - -// Logs metrics for Chrome first-run operations. -@interface FirstRunSigninLogger : UserSigninLogger - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_LOGGING_FIRST_RUN_SIGNIN_LOGGER_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_constants.h b/ios/chrome/browser/ui/authentication/signin/signin_constants.h deleted file mode 100644 index 401bbf25..0000000 --- a/ios/chrome/browser/ui/authentication/signin/signin_constants.h +++ /dev/null
@@ -1,156 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_CONSTANTS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_CONSTANTS_H_ - -#import <Foundation/Foundation.h> - -#import "base/time/time.h" - -@protocol SystemIdentity; - -// Sign-in result returned Sign-in result. -typedef NS_ENUM(NSUInteger, SigninCoordinatorResult) { - // Sign-in has been canceled by the user or by another reason. - SigninCoordinatorResultCanceledByUser, - // The flow was interrupted, e.g. because the user opened a new URL or the app - // was terminated. - // Sign-in might have finished or not. - SigninCoordinatorResultInterrupted, - // Sign-in has been done, the user has explicitly accepted sign-in. - SigninCoordinatorResultSuccess, - // Sign-in did not complete because it is disabled. This can happen if - // enterprise policies are updated after sign-in is started. - SigninCoordinatorResultDisabled, - // Sign-in cannot start as the UI is not available. In this case, no - // SigninCoordinator object is created. - // Only triggered by `SceneController` when processing a ShowSigninCommand - // and when the UI is not ready to present any signin coordinator. - SigninCoordinatorUINotAvailable, -}; - -// Called when the sign-in dialog is closed. -// `result` is the sign-in result state. -// `signinCompletionIdentity` the identity that was used if any. -using SigninCoordinatorCompletionCallback = - void (^)(SigninCoordinatorResult result, id<SystemIdentity> identity); - -// User's signed-in state as defined by AuthenticationService. -// TODO(crbug.com/40066949): Revisit after phase 3 migration of syncing users. -typedef NS_ENUM(NSUInteger, IdentitySigninState) { - IdentitySigninStateSignedOut, - IdentitySigninStateSignedInWithSyncDisabled, - IdentitySigninStateSignedInWithSyncEnabled, -}; - -// Action to do when the sign-in dialog needs to be interrupted. -enum class SigninCoordinatorInterrupt { - // Stops the sign-in coordinator without dismissing the view. The sign-in - // completion block and the interrupt completion block will be called - // synchronously. - // This should be only used when UI shutdown. - // See crbug.com/1455216. - UIShutdownNoDismiss, - // Stops the sign-in coordinator and dismisses the view without animation. - DismissWithoutAnimation, - // Stops the sign-in coordinator and dismisses the view with animation. - DismissWithAnimation, -}; - -// Name of accessibility identifier for the skip sign-in button. -extern NSString* const kSkipSigninAccessibilityIdentifier; -// Name of accessibility identifier for the add account button in the sign-in -// flow. -extern NSString* const kAddAccountAccessibilityIdentifier; -// Name of accessibility identifier for the confirmation "Yes I'm In" sign-in -// button. -extern NSString* const kConfirmationAccessibilityIdentifier; -// Name of the accessibility identifier for the History Sync view. -extern NSString* const kHistorySyncViewAccessibilityIdentifier; -// Name of accessibility identifier for the more button in the sign-in flow. -extern NSString* const kMoreAccessibilityIdentifier; -// Name of accessibility identifier for the web sign-in consistency sheet. -extern NSString* const kWebSigninAccessibilityIdentifier; -// Name of accessibility identifier for the primary button that signs in -// the user for the web sign-in consistency sheet. -extern NSString* const kWebSigninPrimaryButtonAccessibilityIdentifier; -// Name of accessibility identifier for "Skip" button in the web sign-in -// consistency sheet. -extern NSString* const kWebSigninSkipButtonAccessibilityIdentifier; -// Name of the accessibility identifier for the Tangible Sync view. -extern NSString* const kTangibleSyncViewAccessibilityIdentifier; -// Name of the accessibility identifier for the "add account" button in the -// consistency account chooser. -extern NSString* const kConsistencyAccountChooserAddAccountIdentifier; - -// Name of the accessibility identifier for the managed profile creation screen. -extern NSString* const kManagedProfileCreationScreenAccessibilityIdentifier; - -// Name of the accessibility identifier for the keep browsing data separate -// cell. -extern NSString* const kKeepBrowsingDataSeparateCellId; - -// Name of the accessibility identifier for the merge browsing data cell. -extern NSString* const kMergeBrowsingDataCellId; - -// Intent for TrustedVaultReauthenticationCoordinator to display either -// the reauthentication or degraded recoverability dialog. -typedef NS_ENUM(NSUInteger, SigninTrustedVaultDialogIntent) { - // Show reauthentication dialog for fetch keys. - SigninTrustedVaultDialogIntentFetchKeys, - // Show reauthentication degraded recoverability dialog (to enroll additional - // recovery factors). - SigninTrustedVaultDialogIntentDegradedRecoverability, -}; - -// Max dismissal count for web sign-in consistency dialog (the dismissal value -// is reset as soon as the user shows sign-in intent). -extern const int kDefaultWebSignInDismissalCount; - -// Values of the UMA SSORecallPromo.PromoAction histogram. -// These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. When you add a new entry or when you -// deprecate an existing one, also update SSOPromoUserAction in enums.xml and -// SyncDataType suffix in histograms.xml. -typedef NS_ENUM(NSUInteger, UserSigninPromoAction) { - PromoActionDismissed = 0, - PromoActionEnabledSSOAccount = 1, - PromoActionAddedAnotherAccount = 2, - PromoActionCount = 3, -}; - -// Key in the UserDefaults to record the version of the application when the -// sign-in promo has been displayed. The value is set on the first cold start to -// make sure the sign-in promo is not triggered right after the FRE. -// Exposed for testing. -extern NSString* const kDisplayedSSORecallForMajorVersionKey; -// Key in the UserDefaults to record the GAIA id list when the sign-in promo -// was shown. -// Exposed for testing. -extern NSString* const kLastShownAccountGaiaIdVersionKey; -// Key in the UserDefaults to record the number of times the sign-in promo has -// been shown. -// TODO(crbug.com/40831586): Need to merge with -// kDisplayedSSORecallPromoCountKey. Exposed for testing. -extern NSString* const kSigninPromoViewDisplayCountKey; -// Key in the UserDefaults to track how many times the SSO Recall promo has been -// displayed. -// TODO(crbug.com/40831586): Need to merge with kSigninPromoViewDisplayCountKey. -// Exposed for testing. -extern NSString* const kDisplayedSSORecallPromoCountKey; -// Name of the UMA SSO Recall histogram. -extern const char* const kUMASSORecallPromoAction; -// Name of the histogram recording how many accounts were available on the -// device when the promo was shown. -extern const char* const kUMASSORecallAccountsAvailable; -// Name of the histogram recording how many times the promo has been shown. -extern const char* const kUMASSORecallPromoSeenCount; - -// Default timeout to wait for fetching account capabilities, which determine -// minor mode restrictions status. -inline constexpr base::TimeDelta kMinorModeRestrictionsFetchDeadline = - base::Milliseconds(500); - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_SIGNIN_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_history_sync/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/signin_history_sync/BUILD.gn deleted file mode 100644 index 2f2acc8d..0000000 --- a/ios/chrome/browser/ui/authentication/signin/signin_history_sync/BUILD.gn +++ /dev/null
@@ -1,28 +0,0 @@ -# Copyright 2023 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/chrome_build.gni") - -source_set("signin_history_sync") { - sources = [ - "signin_and_history_sync_coordinator.h", - "signin_and_history_sync_coordinator.mm", - ] - deps = [ - "//components/sync/service", - "//ios/chrome/browser/shared/model/browser", - "//ios/chrome/browser/shared/public/features", - "//ios/chrome/browser/signin/model", - "//ios/chrome/browser/signin/model:authentication_service", - "//ios/chrome/browser/signin/model:authentication_service_factory", - "//ios/chrome/browser/sync/model", - "//ios/chrome/browser/ui/authentication/history_sync", - "//ios/chrome/browser/ui/authentication/signin:signin_headers", - "//ios/chrome/browser/ui/authentication/signin:signin_protected", - "//ios/chrome/browser/ui/authentication/signin:signin_screen_provider", - "//ios/chrome/browser/ui/authentication/signin/add_account_signin", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin", - "//ios/chrome/browser/ui/authentication/signin/instant_signin", - ] -}
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey.h b/ios/chrome/browser/ui/authentication/signin_earl_grey.h deleted file mode 100644 index 8214928..0000000 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey.h +++ /dev/null
@@ -1,131 +0,0 @@ -// Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_H_ - -#import <Foundation/Foundation.h> - -#import "components/sync/base/user_selectable_type.h" -#import "ios/testing/earl_grey/base_eg_test_helper_impl.h" - -@protocol GREYMatcher; -@class FakeSystemIdentity; - -namespace signin { -enum class ConsentLevel; -} - -class GURL; - -#define SigninEarlGrey \ - [SigninEarlGreyImpl invokedFromFile:@"" __FILE__ lineNumber:__LINE__] - -// Methods used for the EarlGrey tests. -// TODO(crbug.com/41465348): Consider moving these into ChromeEarlGrey. -@interface SigninEarlGreyImpl : BaseEGTestHelperImpl - -// Calls -[SigninEarlGreyImpl addFakeIdentity:withUnknownCapabilities:NO]. -- (void)addFakeIdentity:(FakeSystemIdentity*)fakeIdentity; - -// Adds `fakeIdentity` to the fake identity service with capabilities set or -// unset. Does nothing if the identity is already added. -- (void)addFakeIdentity:(FakeSystemIdentity*)fakeIdentity - withUnknownCapabilities:(BOOL)usingUnknownCapabilities; - -// Adds `fakeIdentity` and set the capabilities before firing the list changed -// notification. -- (void)addFakeIdentity:(FakeSystemIdentity*)fakeIdentity - withCapabilities:(NSDictionary<NSString*, NSNumber*>*)capabilities; - -// Calls -[SigninEarlGreyImpl -// addFakeIdentityForSSOAuthAddAccountFlow:withUnknownCapabilities:NO]. -- (void)addFakeIdentityForSSOAuthAddAccountFlow: - (FakeSystemIdentity*)fakeIdentity; - -// Adds `fakeIdentity` to the fake system identity interaction manager with -// capabilities set or unset. This is used to simulate adding the `fakeIdentity` -// through the fake SSO Auth flow done by -// `FakeSystemIdentityInteractionManager`. See -// `kFakeAuthAddAccountButtonIdentifier` to trigger the add account flow. -- (void)addFakeIdentityForSSOAuthAddAccountFlow: - (FakeSystemIdentity*)fakeIdentity - withUnknownCapabilities:(BOOL)usingUnknownCapabilities; - -// Removes `fakeIdentity` from the fake identity service asynchronously to -// simulate identity removal from the device. -- (void)forgetFakeIdentity:(FakeSystemIdentity*)fakeIdentity; - -// Returns YES if the identity was added to the fake identity service. -- (BOOL)isIdentityAdded:(FakeSystemIdentity*)fakeIdentity; - -// Returns the gaia ID of the signed-in account. -// If there is no signed-in account returns an empty string. -- (NSString*)primaryAccountGaiaID; - -// Checks that no identity is signed in. -- (BOOL)isSignedOut; - -// Signs the user out of the primary account. Induces a GREYAssert if the -// app fails to sign out. -- (void)signOut; - -// Signs in with the fake identity and access point Settings. -// Adds the fake-identity to the identity manager if necessary. -// Only intended for tests requiring sign-in but not covering the sign-in UI -// behavior to speed up and simplify those tests. -// Will bypass the usual verifications before signin and other -// entry-point-implemented behavior (e.g. history & tabs sync will be disabled, -// no check for management status, sign-in related -// metrics will not be sent) -// Note that, when sync-the-feature is enabled, this function differs from -// `[SigninEarlGreyUI signinWithFakeIdentity:identity]`. The -// UI function enable sync too. -// TODO(crbug.com/40067025): Remove this last remark when sync is disabled. -- (void)signinWithFakeIdentity:(FakeSystemIdentity*)identity; - -// TODO(crbug.com/40066949): Remove all tests invoking this when deleting the -// MaybeMigrateSyncingUserToSignedIn() call on //ios (not right after launching -// kMigrateSyncingUserToSignedIn). -- (void)signinAndEnableLegacySyncFeature:(FakeSystemIdentity*)identity; - -// Signs in with `identity` without history sync consent. -- (void)signInWithoutHistorySyncWithFakeIdentity:(FakeSystemIdentity*)identity; - -// Triggers the web sign-in consistency dialog. This is done by calling -// directly the current SceneController. -// `url` that triggered the web sign-in/consistency dialog. -- (void)triggerConsistencyPromoSigninDialogWithURL:(GURL)url; - -// Triggers the reauth dialog. This is done by sending ShowSigninCommand to -// SceneController, without any UI interaction to open the dialog. -// TODO(crbug.com/40916763): To be consistent, this method should be renamed to -// `triggerSigninAndSyncReauthWithFakeIdentity:`. -- (void)triggerReauthDialogWithFakeIdentity:(FakeSystemIdentity*)identity; - -// Induces a GREYAssert if `fakeIdentity` is not signed in to the active -// profile. -- (void)verifySignedInWithFakeIdentity:(FakeSystemIdentity*)fakeIdentity; - -// Induces a GREYAssert if the user is not signed in with `expectedEmail`. -- (void)verifyPrimaryAccountWithEmail:(NSString*)expectedEmail - consent:(signin::ConsentLevel)consent; - -// Induces a GREYAssert if an identity is signed in. -- (void)verifySignedOut; - -// Induces a GREYAssert if the Sync state does not match `enabled`. -- (void)verifySyncUIEnabled:(BOOL)enabled; - -// Induces a GREYAssert if the Sync cell is not hidden. -- (void)verifySyncUIIsHidden; - -- (void)setSelectedType:(syncer::UserSelectableType)type enabled:(BOOL)enabled; - -// Returns if the data type is enabled for the sync service. -- (BOOL)isSelectedTypeEnabled:(syncer::UserSelectableType)type; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h deleted file mode 100644 index 46440e2..0000000 --- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h +++ /dev/null
@@ -1,81 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_UI_TEST_UTIL_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_UI_TEST_UTIL_H_ - -#import <Foundation/Foundation.h> - -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" - -@class FakeSystemIdentity; - -typedef NS_ENUM(NSInteger, SignOutConfirmationChoice) { - SignOutConfirmationChoiceClearData, - SignOutConfirmationChoiceKeepData, - SignOutConfirmationChoiceNotSyncing -}; - -// Test methods that perform sign in actions on Chrome UI. -@interface SigninEarlGreyUI : NSObject - -// Calls -// +[SigninEarlGreyUI signinWithFakeIdentity:fakeIdentity enableHistorySync:NO]. -// `fakeIdentity` is added if it was not added yet. -+ (void)signinWithFakeIdentity:(FakeSystemIdentity*)fakeIdentity; - -// Signs the account for `fakeIdentity` into Chrome through the Settings screen, -// with history/tab sync enabled or not according to `enableHistorySync` (most -// tests should not require it). -// There will be a GREYAssert if the tools menus is open when calling this -// method or if the account is not successfully signed in. -// `fakeIdentity` is added if it was not added yet. -+ (void)signinWithFakeIdentity:(FakeSystemIdentity*)fakeIdentity - enableHistorySync:(BOOL)enableHistorySync; - -// Signs the primary account out of Chrome through the accounts list screen. -// Taps the "Sign Out" button and dismisses the confirmation snackbar. -+ (void)signOut; - -// dismisses the confirmation snackbar on sign-out. -+ (void)dismissSignoutSnackbar; - -// Opens the confirmation dialog to remove an account from the device, without -// confirming it. -+ (void)openRemoveAccountConfirmationDialogWithFakeIdentity: - (FakeSystemIdentity*)fakeIdentity; - -// Taps "Remove from this device" button and follow-up confirmation. -// Assumes the user is on the Settings screen. -+ (void)tapRemoveAccountFromDeviceWithFakeIdentity: - (FakeSystemIdentity*)fakeIdentity; - -// Opens the recent tabs and tap in the primary sign-in button. -+ (void)tapPrimarySignInButtonInRecentTabs; - -// Opens the tab switcher and tap in the primary sign-in button. -+ (void)tapPrimarySignInButtonInTabSwitcher; - -// Checks that the sign-in promo view (with a close button) is visible using the -// right mode. -+ (void)verifySigninPromoVisibleWithMode:(SigninPromoViewMode)mode; - -// Checks that the sign-in promo view is visible using the right mode. If -// `closeButton` is set to YES, the close button in the sign-in promo has to be -// visible. -+ (void)verifySigninPromoVisibleWithMode:(SigninPromoViewMode)mode - closeButton:(BOOL)closeButton; - -// Checks that the sign-in promo view is not visible. -+ (void)verifySigninPromoNotVisible; - -// Checks that the web sign-in consistency sheet visibility matches `isVisible`. -+ (void)verifyWebSigninIsVisible:(BOOL)isVisible; - -// Submits encryption passphrase, if the user is on the Encryption page. -+ (void)submitSyncPassphrase:(NSString*)passphrase; - -@end - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_EARL_GREY_UI_TEST_UTIL_H_
diff --git a/ios/chrome/browser/ui/authentication/signin_matchers.h b/ios/chrome/browser/ui/authentication/signin_matchers.h deleted file mode 100644 index a87e378..0000000 --- a/ios/chrome/browser/ui/authentication/signin_matchers.h +++ /dev/null
@@ -1,53 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_MATCHERS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_MATCHERS_H_ - -#import <Foundation/Foundation.h> - -@protocol GREYAction; -@protocol GREYMatcher; - -namespace chrome_test_util { - -// Returns a matcher for a TableViewIdentityCell based on the `email`. -id<GREYMatcher> IdentityCellMatcherForEmail(NSString* email); - -// Returns a matcher for the skip button in the web sign-in consistency dialog. -id<GREYMatcher> WebSigninSkipButtonMatcher(); - -// Returns a matcher for the primary button in the web sign-in consistency -// dialog. -id<GREYMatcher> WebSigninPrimaryButtonMatcher(); - -// Returns matcher for the Sync Settings button on the main Settings screen. -// For users who are signed-in but not syncing, this button leads to the sync -// consent dialog instead. -id<GREYMatcher> GoogleSyncSettingsButton(); - -// Matcher for the sign-in screens (like history sync opt-in, upgrade promo…). -id<GREYMatcher> SigninScreenPromoMatcher(); - -// Matcher for the primary button ("Yes, I'm In") in sign-in screens (like -// history sync opt-in, upgrade promo…). -id<GREYMatcher> SigninScreenPromoPrimaryButtonMatcher(); - -// Matcher for the secondary button ("No Thanks") in sign-in screens (like -// history sync opt-in, upgrade promo…). -id<GREYMatcher> SigninScreenPromoSecondaryButtonMatcher(); - -// Matcher for the Settings row which, upon tap, leads the user to sign-in. The -// row is only shown to signed-out users. -id<GREYMatcher> SettingsSignInRowMatcher(); - -// Matcher for the history opt-in screen. -id<GREYMatcher> HistoryOptInPromoMatcher(); - -// Action for searching an UI element in the history opt-in screen.. -id<GREYAction> HistoryOptInScrollDown(); - -} // namespace chrome_test_util - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_SIGNIN_MATCHERS_H_
diff --git a/ios/chrome/browser/ui/authentication/views/BUILD.gn b/ios/chrome/browser/ui/authentication/views/BUILD.gn deleted file mode 100644 index 4b290d8..0000000 --- a/ios/chrome/browser/ui/authentication/views/BUILD.gn +++ /dev/null
@@ -1,32 +0,0 @@ -# Copyright 2021 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -import("//build/config/chrome_build.gni") - -source_set("views") { - sources = [ - "identity_button_control.h", - "identity_button_control.mm", - "identity_view.h", - "identity_view.mm", - ] - deps = [ - ":views_constants", - "//base", - "//ios/chrome/app/strings", - "//ios/chrome/browser/shared/ui/util", - "//ios/chrome/browser/ui/authentication:authentication_constants", - "//ios/chrome/browser/ui/authentication/views/resources", - "//ios/chrome/common/ui/colors", - "//ios/chrome/common/ui/util", - "//ui/base", - ] -} - -source_set("views_constants") { - sources = [ - "views_constants.h", - "views_constants.mm", - ] -}
diff --git a/ios/chrome/browser/ui/authentication/views/views_constants.h b/ios/chrome/browser/ui/authentication/views/views_constants.h deleted file mode 100644 index 60e1791c..0000000 --- a/ios/chrome/browser/ui/authentication/views/views_constants.h +++ /dev/null
@@ -1,27 +0,0 @@ -// Copyright 2021 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_VIEWS_CONSTANTS_H_ -#define IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_VIEWS_CONSTANTS_H_ - -#import <Foundation/Foundation.h> - -// Accessibility identifier for the identity picker view. -extern NSString* const kIdentityButtonControlIdentifier; -// Accessibility identifier for "Add Account" button in the identity picker -// view. -extern NSString* const kIdentityPickerAddAccountIdentifier; - -// Style for the identity view (modify the avatar size, font sizes and some -// margins). -typedef NS_ENUM(NSInteger, IdentityViewStyle) { - // Default style. - IdentityViewStyleDefault, - // Style for the identity chooser from the signin view. - IdentityViewStyleIdentityChooser, - // Style for the consistency view. - IdentityViewStyleConsistency, -}; - -#endif // IOS_CHROME_BROWSER_UI_AUTHENTICATION_VIEWS_VIEWS_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn index a89c2dd..02b998df 100644 --- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -42,6 +42,7 @@ "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/bookmarks/model:model", "//ios/chrome/browser/commerce/model:shopping_service", "//ios/chrome/browser/commerce/model/push_notification:push_notification", @@ -105,7 +106,6 @@ "//ios/chrome/browser/sync/model", "//ios/chrome/browser/tips_manager/model:factory", "//ios/chrome/browser/tips_manager/model:tips_manager", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/browser/ui/content_suggestions/cells", "//ios/chrome/browser/ui/content_suggestions/cells:most_visited_tiles", "//ios/chrome/browser/ui/content_suggestions/cells:shortcuts", @@ -428,6 +428,9 @@ "//components/supervised_user/core/common:features", "//components/sync/base:features", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/cells:constants", + "//ios/chrome/browser/authentication/ui_bundled/signin:constants", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/flags:system_flags", "//ios/chrome/browser/home_customization/utils", @@ -447,9 +450,6 @@ "//ios/chrome/browser/signin/model:test_constants", "//ios/chrome/browser/start_surface/ui_bundled:feature_flags", "//ios/chrome/browser/toolbar/ui_bundled/public:constants", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", - "//ios/chrome/browser/ui/authentication/cells:constants", - "//ios/chrome/browser/ui/authentication/signin:constants", "//ios/chrome/browser/ui/content_suggestions/cells:constants", "//ios/chrome/browser/ui/content_suggestions/magic_stack:constants", "//ios/chrome/browser/ui/content_suggestions/set_up_list:constants",
diff --git a/ios/chrome/browser/ui/content_suggestions/DEPS b/ios/chrome/browser/ui/content_suggestions/DEPS index 2a6f878..ae9e31de 100644 --- a/ios/chrome/browser/ui/content_suggestions/DEPS +++ b/ios/chrome/browser/ui/content_suggestions/DEPS
@@ -1,6 +1,6 @@ include_rules = [ "+components/page_image_service", - "+ios/chrome/browser/ui/authentication/signin/signin_constants.h", + "+ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h", "+ios/chrome/browser/credential_provider_promo/ui_bundled", "+ios/chrome/browser/first_run/ui_bundled/first_run_util.h", "+ios/chrome/browser/ntp/ui_bundled",
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm index 59eefd4..2f5be51 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
@@ -36,6 +36,7 @@ #import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/app/profile/profile_state.h" #import "ios/chrome/app/tests_hook.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/bookmarks/model/bookmark_model_factory.h" #import "ios/chrome/browser/commerce/model/push_notification/push_notification_feature.h" #import "ios/chrome/browser/commerce/model/shopping_service_factory.h" @@ -115,7 +116,6 @@ #import "ios/chrome/browser/signin/model/identity_manager_factory.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" #import "ios/chrome/browser/tips_manager/model/tips_manager_ios_factory.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.h" #import "ios/chrome/browser/ui/content_suggestions/cells/most_visited_tiles_mediator.h" #import "ios/chrome/browser/ui/content_suggestions/cells/shortcuts_mediator.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm index c15eeca..becef4c 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm
@@ -14,6 +14,8 @@ #import "components/segmentation_platform/public/constants.h" #import "components/segmentation_platform/public/features.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/home_customization/utils/home_customization_constants.h" #import "ios/chrome/browser/home_customization/utils/home_customization_helper.h" @@ -24,8 +26,6 @@ #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/signin/model/test_constants.h" -#import "ios/chrome/browser/ui/authentication/signin/signin_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h" #import "ios/chrome/browser/ui/content_suggestions/magic_stack/magic_stack_constants.h" #import "ios/chrome/browser/ui/content_suggestions/new_tab_page_app_interface.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm index 9ace7fb..d49a4ba8 100644 --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
@@ -16,6 +16,9 @@ #import "components/signin/internal/identity_manager/account_capabilities_constants.h" #import "components/strings/grit/components_strings.h" #import "components/supervised_user/core/common/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/flags/chrome_switches.h" #import "ios/chrome/browser/home_customization/utils/home_customization_constants.h" #import "ios/chrome/browser/home_customization/utils/home_customization_helper.h" @@ -31,9 +34,6 @@ #import "ios/chrome/browser/signin/model/fake_system_identity.h" #import "ios/chrome/browser/start_surface/ui_bundled/start_surface_features.h" #import "ios/chrome/browser/toolbar/ui_bundled/public/toolbar_constants.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_cells_constants.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h" #import "ios/chrome/browser/ui/content_suggestions/new_tab_page_app_interface.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn index a264d2f19..6a47038c 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/BUILD.gn
@@ -220,11 +220,11 @@ deps = [ ":constants", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/first_run/ui_bundled:constants", "//ios/chrome/browser/ntp/model:features", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/content_suggestions:eg_test_support+eg2", "//ios/chrome/common/ui/promo_style:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_default_browser_egtest.mm b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_default_browser_egtest.mm index bc8dd00..f3cbc4e 100644 --- a/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_default_browser_egtest.mm +++ b/ios/chrome/browser/ui/content_suggestions/set_up_list/set_up_list_default_browser_egtest.mm
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" #import "ios/chrome/browser/first_run/ui_bundled/first_run_constants.h" #import "ios/chrome/browser/ntp/model/features.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" #import "ios/chrome/browser/ui/content_suggestions/new_tab_page_app_interface.h" #import "ios/chrome/browser/ui/content_suggestions/set_up_list/constants.h" #import "ios/chrome/common/ui/promo_style/constants.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/tab_resumption/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/tab_resumption/BUILD.gn index c490a13..69bf6d97 100644 --- a/ios/chrome/browser/ui/content_suggestions/tab_resumption/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/tab_resumption/BUILD.gn
@@ -101,6 +101,7 @@ "//components/url_formatter", "//components/visited_url_ranking/public", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/ntp_tiles/model/tab_resumption:tab_resumption_prefs", "//ios/chrome/browser/recent_tabs/ui_bundled:ui_constants", "//ios/chrome/browser/shared/public/features", @@ -108,7 +109,6 @@ "//ios/chrome/browser/start_surface/ui_bundled:feature_flags", "//ios/chrome/browser/tabs/ui_bundled/tests:eg_test_support+eg2", "//ios/chrome/browser/tabs/ui_bundled/tests:fake_distant_tab", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/content_suggestions:constants", "//ios/chrome/browser/ui/content_suggestions:eg_test_support+eg2", "//ios/chrome/browser/ui/content_suggestions/magic_stack:constants",
diff --git a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_egtest.mm b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_egtest.mm index 6ac8e0ec..4da158df 100644 --- a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_egtest.mm +++ b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_egtest.mm
@@ -8,6 +8,8 @@ #import "components/sync/base/features.h" #import "components/url_formatter/elide_url.h" #import "components/visited_url_ranking/public/features.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ntp_tiles/model/tab_resumption/tab_resumption_prefs.h" #import "ios/chrome/browser/recent_tabs/ui_bundled/recent_tabs_constants.h" #import "ios/chrome/browser/shared/public/features/features.h" @@ -15,8 +17,6 @@ #import "ios/chrome/browser/start_surface/ui_bundled/start_surface_features.h" #import "ios/chrome/browser/tabs/ui_bundled/tests/distant_tabs_app_interface.h" #import "ios/chrome/browser/tabs/ui_bundled/tests/fake_distant_tab.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h" #import "ios/chrome/browser/ui/content_suggestions/magic_stack/magic_stack_constants.h" #import "ios/chrome/browser/ui/content_suggestions/new_tab_page_app_interface.h"
diff --git a/ios/chrome/browser/ui/fullscreen/BUILD.gn b/ios/chrome/browser/ui/fullscreen/BUILD.gn index 7735d57..b8b08843 100644 --- a/ios/chrome/browser/ui/fullscreen/BUILD.gn +++ b/ios/chrome/browser/ui/fullscreen/BUILD.gn
@@ -157,6 +157,7 @@ "//ios/testing/earl_grey:eg_test_support+eg2", "//ios/web/common", "//ios/web/public/test/http_server", + "//net:test_support", "//url", ] frameworks = [ "UIKit.framework" ]
diff --git a/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm b/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm index 9cb5f91..0339f55 100644 --- a/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm +++ b/ios/chrome/browser/ui/fullscreen/fullscreen_egtest.mm
@@ -24,6 +24,7 @@ #import "ios/web/public/test/http_server/error_page_response_provider.h" #import "ios/web/public/test/http_server/http_server.h" #import "ios/web/public/test/http_server/http_server_util.h" +#import "net/test/embedded_test_server/embedded_test_server.h" #import "url/gurl.h" using base::test::ios::kWaitForPageLoadTimeout; @@ -78,6 +79,16 @@ errorMessage); } +// Helper function to create HTML responses. +std::unique_ptr<net::test_server::HttpResponse> CreateHttpResponse( + const std::string& content) { + auto response = std::make_unique<net::test_server::BasicHttpResponse>(); + response->set_code(net::HTTP_OK); + response->set_content_type("text/html"); + response->set_content(content); + return response; +} + } // namespace #pragma mark - Tests @@ -208,13 +219,18 @@ // Tests hiding and showing of the header with a user scroll on a long page. - (void)testHideHeaderUserScrollLongPage { - std::map<GURL, std::string> responses; - const GURL URL = web::test::HttpServer::MakeUrl("http://tallpage"); - // A page long enough to ensure that the toolbar goes away on scrolling. - responses[URL] = - base::StringPrintf("<p style='height:%dem'>a</p><p>b</p>", kPageHeightEM); - web::test::SetUpSimpleHttpServer(responses); + self.testServer->RegisterRequestHandler(base::BindRepeating( + [](const net::test_server::HttpRequest& request) + -> std::unique_ptr<net::test_server::HttpResponse> { + if (request.relative_url == "/tallpage") { + return CreateHttpResponse(base::StringPrintf( + "<p style='height:%dem'>a</p><p>b</p>", kPageHeightEM)); + } + return nullptr; + })); + GREYAssertTrue(self.testServer->Start(), @"The server has not started"); + GURL URL = self.testServer->GetURL("/tallpage"); [ChromeEarlGrey loadURL:URL]; [ChromeEarlGreyUI waitForToolbarVisible:YES]; // Simulate a user scroll down. @@ -229,16 +245,20 @@ // Tests that reloading of a page shows the header even if it was not shown // previously. - (void)testShowHeaderOnReload { - std::map<GURL, std::string> responses; - const GURL URL = web::test::HttpServer::MakeUrl("http://origin"); - // This is a tall page -- necessary to make sure scrolling can hide away the - // toolbar safely-- and with a link to reload itself. - responses[URL] = base::StringPrintf( - "<p style='height:%dem'>Tall page</p>" - "<a onclick='window.location.reload();' id='link'>link</a>", - kPageHeightEM); - web::test::SetUpSimpleHttpServer(responses); + self.testServer->RegisterRequestHandler(base::BindRepeating( + [](const net::test_server::HttpRequest& request) + -> std::unique_ptr<net::test_server::HttpResponse> { + if (request.relative_url == "/origin") { + return CreateHttpResponse(base::StringPrintf( + "<p style='height:%dem'>Tall page</p>" + "<a onclick='window.location.reload();' id='link'>link</a>", + kPageHeightEM)); + } + return nullptr; + })); + GREYAssertTrue(self.testServer->Start(), @"The server has not started"); + GURL URL = self.testServer->GetURL("/origin"); [ChromeEarlGrey loadURL:URL]; [ChromeEarlGrey waitForWebStateContainingText:"Tall page"]; @@ -312,24 +332,26 @@ // loaded from a page where the header was not see before. // Also tests that auto-hide works correctly on new page loads. - (void)testShowHeaderOnRegularPageLoad { - std::map<GURL, std::string> responses; - const GURL originURL = web::test::HttpServer::MakeUrl("http://origin"); - const GURL destinationURL = - web::test::HttpServer::MakeUrl("http://destination"); + self.testServer->RegisterRequestHandler(base::BindRepeating( + [](const net::test_server::HttpRequest& request) + -> std::unique_ptr<net::test_server::HttpResponse> { + const std::string manyLines = base::StringPrintf( + "<p style='height:%dem'>a</p><p>End of lines</p>", kPageHeightEM); - const std::string manyLines = base::StringPrintf( - "<p style='height:%dem'>a</p><p>End of lines</p>", kPageHeightEM); + if (request.relative_url == "/origin") { + return CreateHttpResponse( + manyLines + "<a href='/destination' id='link1'>link1</a>"); + } else if (request.relative_url == "/destination") { + return CreateHttpResponse(manyLines + + "<a href='javascript:void(0)' " + "onclick='window.history.back()' " + "id='link2'>link2</a>"); + } + return nullptr; + })); - // A long page representing many lines and a link to the destination URL page. - responses[originURL] = manyLines + "<a href='" + destinationURL.spec() + - "' id='link1'>link1</a>"; - // A long page representing many lines and a link to go back. - responses[destinationURL] = manyLines + - "<a href='javascript:void(0)' " - "onclick='window.history.back()' " - "id='link2'>link2</a>"; - web::test::SetUpSimpleHttpServer(responses); - + GREYAssertTrue(self.testServer->Start(), @"The server has not started"); + GURL originURL = self.testServer->GetURL("/origin"); [ChromeEarlGrey loadURL:originURL]; [ChromeEarlGrey waitForWebStateContainingText:"link1"]; @@ -358,16 +380,20 @@ // Tests that the header is shown when a native page is loaded from a page where // the header was not seen before. - (void)testShowHeaderOnNativePageLoad { - std::map<GURL, std::string> responses; - const GURL URL = web::test::HttpServer::MakeUrl("http://origin"); + self.testServer->RegisterRequestHandler(base::BindRepeating( + [](const net::test_server::HttpRequest& request) + -> std::unique_ptr<net::test_server::HttpResponse> { + if (request.relative_url == "/origin") { + return CreateHttpResponse(base::StringPrintf( + "<p style='height:%dem'>a</p>" + "<a onclick='window.history.back()' id='link'>link</a>", + kPageHeightEM)); + } + return nullptr; + })); - // A long page representing many lines and a link to go back. - std::string manyLines = base::StringPrintf( - "<p style='height:%dem'>a</p>" - "<a onclick='window.history.back()' id='link'>link</a>", - kPageHeightEM); - responses[URL] = manyLines; - web::test::SetUpSimpleHttpServer(responses); + GREYAssertTrue(self.testServer->Start(), @"The server has not started"); + GURL URL = self.testServer->GetURL("/origin"); [ChromeEarlGrey loadURL:URL]; [ChromeEarlGrey waitForWebStateContainingText:"link"]; @@ -386,19 +412,24 @@ // Tests that the header is shown when loading an error page in a native view // even if fullscreen was enabled previously. - (void)testShowHeaderOnErrorPage { - std::map<GURL, std::string> responses; - const GURL URL = web::test::HttpServer::MakeUrl("http://origin"); - // A long page with some simple text -- a long page is necessary so that - // enough content is present to ensure that the toolbar can be hidden safely. - responses[URL] = base::StringPrintf( - "<p style='height:%dem'>a</p>" - "<a href=\"%s\" id=\"link\">bad link</a>", - kPageHeightEM, - ErrorPageResponseProvider::GetDnsFailureUrl().spec().c_str()); - std::unique_ptr<web::DataResponseProvider> provider( - new ErrorPageResponseProvider(responses)); - web::test::SetUpHttpServer(std::move(provider)); + GURL errorURL = ErrorPageResponseProvider::GetDnsFailureUrl(); + self.testServer->RegisterRequestHandler(base::BindRepeating( + [](const std::string& errorURLSpec, + const net::test_server::HttpRequest& request) + -> std::unique_ptr<net::test_server::HttpResponse> { + if (request.relative_url == "/origin") { + return CreateHttpResponse( + base::StringPrintf("<p style='height:%dem'>a</p>" + "<a href=\"%s\" id=\"link\">bad link</a>", + kPageHeightEM, errorURLSpec.c_str())); + } + return nullptr; + }, + errorURL.spec())); + + GREYAssertTrue(self.testServer->Start(), @"The server has not started"); + GURL URL = self.testServer->GetURL("/origin"); [ChromeEarlGrey loadURL:URL]; HideToolbarUsingUI(); [ChromeEarlGreyUI waitForToolbarVisible:NO]; @@ -410,12 +441,18 @@ // Tests collapsing of toolbar when a user scroll on a long page and rotate. - (void)testCollapseToolbarOnScrollAndRotate { - std::map<GURL, std::string> responses; - const GURL URL = web::test::HttpServer::MakeUrl("http://tallpage"); - // A page long enough to ensure that the toolbar goes away on scrolling. - responses[URL] = - base::StringPrintf("<p style='height:%dem'>a</p><p>b</p>", kPageHeightEM); - web::test::SetUpSimpleHttpServer(responses); + self.testServer->RegisterRequestHandler(base::BindRepeating( + [](const net::test_server::HttpRequest& request) + -> std::unique_ptr<net::test_server::HttpResponse> { + if (request.relative_url == "/tallpage") { + return CreateHttpResponse(base::StringPrintf( + "<p style='height:%dem'>a</p><p>b</p>", kPageHeightEM)); + } + return nullptr; + })); + + GREYAssertTrue(self.testServer->Start(), @"The server has not started"); + GURL URL = self.testServer->GetURL("/tallpage"); [ChromeEarlGrey loadURL:URL]; [ChromeEarlGreyUI waitForToolbarVisible:YES];
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn b/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn index b53586d..10b342f 100644 --- a/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn +++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn
@@ -259,12 +259,12 @@ "//components/signin/internal/identity_manager:capabilities", "//components/sync/base", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_test_support+eg2", "//ios/chrome/browser/metrics/model:eg_test_support+eg2", "//ios/chrome/browser/settings/ui_bundled/google_services:constants", "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/signin/model:fake_system_identity", - "//ios/chrome/browser/ui/authentication:eg_test_support+eg2", "//ios/chrome/browser/ui/popup_menu:constants", "//ios/chrome/browser/ui/whats_new:constants", "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm index 26053e5..f884859d 100644 --- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm +++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_carousel_egtest.mm
@@ -4,13 +4,13 @@ #import "components/feature_engagement/public/feature_constants.h" #import "components/signin/internal/identity_manager/account_capabilities_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h" +#import "ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/manage_sync_settings_constants.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/public/features/features.h" #import "ios/chrome/browser/signin/model/fake_system_identity.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey.h" -#import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h" #import "ios/chrome/browser/ui/popup_menu/overflow_menu/feature_flags.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h" #import "ios/chrome/browser/ui/whats_new/constants.h"
diff --git a/ios/chrome/browser/webui/ui_bundled/user_actions_ui.mm b/ios/chrome/browser/webui/ui_bundled/user_actions_ui.mm index 5b62d75..7fa5db6 100644 --- a/ios/chrome/browser/webui/ui_bundled/user_actions_ui.mm +++ b/ios/chrome/browser/webui/ui_bundled/user_actions_ui.mm
@@ -4,7 +4,8 @@ #import "ios/chrome/browser/webui/ui_bundled/user_actions_ui.h" -#import "components/grit/dev_ui_components_resources.h" +#import "components/grit/user_actions_ui_resources.h" +#import "components/grit/user_actions_ui_resources_map.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" #import "ios/chrome/browser/shared/model/url/chrome_url_constants.h" #import "ios/chrome/browser/webui/ui_bundled/user_actions_handler.h" @@ -18,9 +19,8 @@ // Set up the chrome://user-actions/ source. web::WebUIIOSDataSource* html_source = web::WebUIIOSDataSource::Create(kChromeUIUserActionsHost); - html_source->SetDefaultResource(IDR_USER_ACTIONS_HTML); - html_source->AddResourcePath("user_actions.css", IDR_USER_ACTIONS_CSS); - html_source->AddResourcePath("user_actions.js", IDR_USER_ACTIONS_JS); + html_source->AddResourcePaths(kUserActionsUiResources); + html_source->AddResourcePath("", IDR_USER_ACTIONS_UI_USER_ACTIONS_HTML); web::WebUIIOSDataSource::Add(ProfileIOS::FromWebUIIOS(web_ui), html_source); }
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn index 5e815f7d..3bb9d33e 100644 --- a/ios/chrome/test/BUILD.gn +++ b/ios/chrome/test/BUILD.gn
@@ -204,6 +204,17 @@ "//ios/chrome/browser/alert_view/ui_bundled:unit_tests", "//ios/chrome/browser/app_launcher/model:unit_tests", "//ios/chrome/browser/app_store_rating/ui_bundled:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/account_menu:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/cells:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/history_sync:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/identity_chooser:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin/trusted_vault_reauthentication:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin:unit_tests", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet:unit_tests", "//ios/chrome/browser/autofill/model:unit_tests", "//ios/chrome/browser/autofill/model/authentication:unit_tests", "//ios/chrome/browser/autofill/model/bottom_sheet:unit_tests", @@ -466,17 +477,6 @@ "//ios/chrome/browser/toolbar/ui_bundled/buttons:unit_tests", "//ios/chrome/browser/toolbar/ui_bundled/fullscreen:unit_tests", "//ios/chrome/browser/translate/model:unit_tests", - "//ios/chrome/browser/ui/authentication:unit_tests", - "//ios/chrome/browser/ui/authentication/account_menu:unit_tests", - "//ios/chrome/browser/ui/authentication/cells:unit_tests", - "//ios/chrome/browser/ui/authentication/history_sync:unit_tests", - "//ios/chrome/browser/ui/authentication/identity_chooser:unit_tests", - "//ios/chrome/browser/ui/authentication/signin:unit_tests", - "//ios/chrome/browser/ui/authentication/signin/add_account_signin:unit_tests", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin:unit_tests", - "//ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication:unit_tests", - "//ios/chrome/browser/ui/authentication/signin/two_screens_signin:unit_tests", - "//ios/chrome/browser/ui/authentication/signout_action_sheet:unit_tests", "//ios/chrome/browser/ui/content_suggestions:unit_tests", "//ios/chrome/browser/ui/content_suggestions/cells:unit_tests", "//ios/chrome/browser/ui/content_suggestions/magic_stack:unit_tests",
diff --git a/ios/chrome/test/DEPS b/ios/chrome/test/DEPS index 63585b3..0da2abb 100644 --- a/ios/chrome/test/DEPS +++ b/ios/chrome/test/DEPS
@@ -42,8 +42,8 @@ "+components/strings/grit", "+ios/chrome/grit", - # Use ios/chrome/browser/ui/authentication/signin_earl_grey.h instead - "-ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h", + # Use ios/chrome/browser/authentication/ui_bundled/signin_earl_grey.h instead + "-ios/chrome/browser/authentication/ui_bundled/signin_earl_grey_app_interface.h", # use ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey.h instead "-ios/chrome/browser/bookmarks/ui_bundled/bookmark_earl_grey_app_interface.h", ]
diff --git a/ios/chrome/test/app/BUILD.gn b/ios/chrome/test/app/BUILD.gn index 7283beb..6a43545 100644 --- a/ios/chrome/test/app/BUILD.gn +++ b/ios/chrome/test/app/BUILD.gn
@@ -58,6 +58,10 @@ "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/application_delegate:metrics_mediator", "//ios/chrome/app/application_delegate:test_support", + "//ios/chrome/browser/authentication/ui_bundled", + "//ios/chrome/browser/authentication/ui_bundled/authentication_flow", + "//ios/chrome/browser/authentication/ui_bundled/cells", + "//ios/chrome/browser/authentication/ui_bundled/history_sync", "//ios/chrome/browser/autofill/model", "//ios/chrome/browser/autofill/ui_bundled/form_input_accessory:common", "//ios/chrome/browser/bookmarks/model", @@ -99,9 +103,6 @@ "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid", "//ios/chrome/browser/tabs/model", "//ios/chrome/browser/tabs/ui_bundled", - "//ios/chrome/browser/ui/authentication/authentication_flow", - "//ios/chrome/browser/ui/authentication/cells", - "//ios/chrome/browser/ui/authentication/history_sync", "//ios/chrome/browser/url_loading/model", "//ios/chrome/browser/web_state_list/model/web_usage_enabler", "//ios/chrome/common/crash_report",
diff --git a/ios/chrome/test/app/signin_test_util.mm b/ios/chrome/test/app/signin_test_util.mm index 0b90efa..ab22b48 100644 --- a/ios/chrome/test/app/signin_test_util.mm +++ b/ios/chrome/test/app/signin_test_util.mm
@@ -15,6 +15,9 @@ #import "components/sync/service/sync_service.h" #import "components/sync/service/sync_user_settings.h" #import "google_apis/gaia/gaia_constants.h" +#import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view.h" +#import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" #import "ios/chrome/browser/shared/model/application_context/application_context.h" #import "ios/chrome/browser/shared/model/prefs/pref_names.h" #import "ios/chrome/browser/shared/model/profile/profile_ios.h" @@ -27,9 +30,6 @@ #import "ios/chrome/browser/signin/model/gaia_auth_fetcher_ios.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/sync/model/sync_service_factory.h" -#import "ios/chrome/browser/ui/authentication/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view.h" -#import "ios/chrome/browser/ui/authentication/history_sync/history_sync_utils.h" #import "ios/chrome/test/app/chrome_test_util.h" namespace chrome_test_util {
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn index daac3d66..a2d7ce7f 100644 --- a/ios/chrome/test/earl_grey/BUILD.gn +++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -39,6 +39,7 @@ "//components/signin/internal/identity_manager:test_support", "//components/sync_device_info", "//ios/chrome/app:tests_hook", + "//ios/chrome/browser/authentication/ui_bundled:eg_app_support+eg2", "//ios/chrome/browser/drive/model:test_support", "//ios/chrome/browser/flags:system_flags", "//ios/chrome/browser/optimization_guide/model", @@ -56,7 +57,6 @@ "//ios/chrome/browser/sync/model:data_type_store_service_factory", "//ios/chrome/browser/sync/model:device_info_sync_service_factory", "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_groups:eg_app_support+eg2", - "//ios/chrome/browser/ui/authentication:eg_app_support+eg2", "//ios/chrome/test/app:test_support", "//ios/chrome/test/providers/signin:trusted_vault", ] @@ -102,6 +102,8 @@ "//ios/chrome/app:app_internal", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/strings", + "//ios/chrome/browser/authentication/ui_bundled:eg_app_support+eg2", + "//ios/chrome/browser/authentication/ui_bundled/cells", "//ios/chrome/browser/autofill/model", "//ios/chrome/browser/autofill/model/automation:eg_app_support+eg2", "//ios/chrome/browser/autofill/ui_bundled:eg_app_support+eg2", @@ -215,8 +217,6 @@ "//ios/chrome/browser/toolbar/ui_bundled:ui", "//ios/chrome/browser/toolbar/ui_bundled/public:constants", "//ios/chrome/browser/translate/model:eg_app_support+eg2", - "//ios/chrome/browser/ui/authentication:eg_app_support+eg2", - "//ios/chrome/browser/ui/authentication/cells", "//ios/chrome/browser/ui/content_suggestions:constants", "//ios/chrome/browser/ui/content_suggestions:content_suggestions_constant", "//ios/chrome/browser/ui/content_suggestions:content_suggestions_ui",
diff --git a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm index 13cb1242..51c4bc4 100644 --- a/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm +++ b/ios/chrome/test/earl_grey/chrome_matchers_app_interface.mm
@@ -9,6 +9,7 @@ #import "base/strings/sys_string_conversions.h" #import "components/safe_browsing/core/common/features.h" #import "components/strings/grit/components_strings.h" +#import "ios/chrome/browser/authentication/ui_bundled/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/autofill/model/form_suggestion_constants.h" #import "ios/chrome/browser/bookmarks/ui_bundled/bookmark_ui_constants.h" #import "ios/chrome/browser/download/ui_bundled/download_manager_constants.h" @@ -56,7 +57,6 @@ #import "ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/ui/swift_constants_for_objective_c.h" #import "ios/chrome/browser/toolbar/ui_bundled/primary_toolbar_view.h" #import "ios/chrome/browser/toolbar/ui_bundled/public/toolbar_constants.h" -#import "ios/chrome/browser/ui/authentication/cells/signin_promo_view_constants.h" #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h" #import "ios/chrome/browser/ui/content_suggestions/ntp_home_constant.h" #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
diff --git a/ios/chrome/test/earl_grey2/BUILD.gn b/ios/chrome/test/earl_grey2/BUILD.gn index 0ce7bc35..70ca976 100644 --- a/ios/chrome/test/earl_grey2/BUILD.gn +++ b/ios/chrome/test/earl_grey2/BUILD.gn
@@ -169,13 +169,13 @@ xcode_test_application_name = "ios_chrome_eg2tests" deps = [ + "//ios/chrome/browser/authentication/ui_bundled/account_menu:eg2_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin:eg2_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin/consistency_promo_signin:eg2_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin/forced_signin:eg2_tests", + "//ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin:eg2_tests", + "//ios/chrome/browser/authentication/ui_bundled/signout_action_sheet:eg2_tests", "//ios/chrome/browser/signin/model:eg2_tests", - "//ios/chrome/browser/ui/authentication/account_menu:eg2_tests", - "//ios/chrome/browser/ui/authentication/signin:eg2_tests", - "//ios/chrome/browser/ui/authentication/signin/consistency_promo_signin:eg2_tests", - "//ios/chrome/browser/ui/authentication/signin/forced_signin:eg2_tests", - "//ios/chrome/browser/ui/authentication/signin/two_screens_signin:eg2_tests", - "//ios/chrome/browser/ui/authentication/signout_action_sheet:eg2_tests", ] data_deps = [ ":ios_chrome_eg2tests" ] }
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 index d5bf9ad2..85bbc8f 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -6cf20e2b097e1fffa107916323882db29bf13fef \ No newline at end of file +2fff3e552abbfa57144adfb6fe72dd7c9536ce40 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 index dd11c3e..d8ff023 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -4236ec62fce44f91e9269854ae136fc1af17ed91 \ No newline at end of file +cc4ece4b9d505dd59073f10d2cb87e485fee96f6 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 index a97d41a..daae991e 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -4381d6dda23dbed13d615c417539795b55c8f22b \ No newline at end of file +74a974f6c719e01cad522aef395170dd5366e8f8 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 index ee4d255..7288a1f 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -4dbc24b8bfbf1ac7b0ceb14853a8fb36790716e3 \ No newline at end of file +9a4f996c73061dc5ce4b050d6dd234d449a738d5 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 index b673377..bf298a6 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -77b9e4616229994f7c5a3f5efda8e25b532e344c \ No newline at end of file +86fa8ee8aebf8cc1a4fd9cc8ef89a37dc7755bf5 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 index 09059d5..a85f4679 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -c75bcc15eb16de086731e181a4508e8c8172e3a9 \ No newline at end of file +3dbb7f0be4837aaa0e063d7d093d5a9070bed7ab \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 index a1a5ddbc..6aa93e70 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -a287b4f2e48c02f77faaabb89d86311ebebf3983 \ No newline at end of file +1e8d1ef94696b75d4a25e7104f7978a7690c6a7c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 index 97c357f..a88d3a0 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -e647f8a989ec640809f06840402f57035f959f7f \ No newline at end of file +410dcff642f852232598e67ac101689e9f84670b \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 index b0376223..ab02fdc 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -386f79e4851ac9b382933501076202adafe4dc66 \ No newline at end of file +0f78f0df2af36e92866716d5b79d736a77b13c92 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 index ffa8a8c..e7fc6330 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -4c246de7674fea6ba1a61c113c85e5639323282c \ No newline at end of file +536ebbb9b0987c6292c68973e42316d4ec41db6c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index f24fdd0..253d7f3 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -7ee2776d49c86da5990cfe8883add10100fb880a \ No newline at end of file +f120dfc6cce95327f6b7314ddad12c920ccaa376 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 index 0f4085d..7ccfd50 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -791c72ba745a64b6f5e5dcd1bcef53d076bba728 \ No newline at end of file +8834dc502a1ec85284bbdb6c19281446ada58d2a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index e72f9ab5..8d15cdd9 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -6368817145aa0fac6f26b216d8be9b659c9a9c08 \ No newline at end of file +7ea6100d192c10ad341f786a8ae90b61d2433226 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 1b100d2..78ea3ef 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -8037442ca3983bf781260cdd55b1ca3041d53660 \ No newline at end of file +0bd6019fa34d0e36769e19d94423506617ce5cc6 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index 375164c..00101b68 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -61348ee751a8462d0f6a102b668c891e0623afa1 \ No newline at end of file +cd7177c87b176d30a898895539b38a5d2a08e6f9 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 index 70039529..52491e47 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -8571dca4db074394aa59303b86e01f6a90b90d78 \ No newline at end of file +76585b06517b047aefa34a94f1f7b47dc15ac5cd \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index 5dd9259..504246a 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -bed26f85dd1f811f8e0a40f6030cf463ab3718d1 \ No newline at end of file +1c6e328334815b65cb0334f4e86e1a80f63e0df3 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 338ca4f..0d63089 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -f83c77f32ada6021c4a70598aa54e43f45eebea7 \ No newline at end of file +292dedd02810f29cfb6435a97c4ec78635574854 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 index 5819385..646e7bb 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -9d25c82d060e30c14f5a888d61ed86903d636aae \ No newline at end of file +e15d2af18e39c525700890a3a2f25b48691663ae \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 index 57209193..5e51b541 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -5658532e7e8f3c7e730446729cd4456d69e5e95c \ No newline at end of file +7e85b06e33507d6e94c9deb644badfdaba895a63 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index c9e1d417..020de863 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -cdf73e4c6df8bb940455ed7af7fc8c430252df4a \ No newline at end of file +af9b7198e026fb7da4ae1d4b590fb08b1bfb9cc3 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 index bde2cd5..d69d560 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -489f67e66350e76809e67bced38182d31e46bd2e \ No newline at end of file +83f3d93a206d60314a87e7fcbfd306d163d33b5b \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index 35966d7..044143a 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -3a222e62e08682ce5ae500b20d2c60eaa9da71c4 \ No newline at end of file +3e5c24e183e380fca7a66483299e544f49f0ae5d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 0fbc5bc..b839639 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -ececeda1d51bf727f245750aead14de1b6942527 \ No newline at end of file +54319e38c800d0776385124f9c698bb5185436a3 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index 85ac844..7679c02 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -ee34413f54b70667ee25e0bc93285d934e8f7290 \ No newline at end of file +a0571b07cab4f81a3b3e29ec6ab6718f59c25189 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 index 50e45dc6..7c8ca02 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -5eccd8c32c115c8442bdda6967049ad3fd54a25c \ No newline at end of file +590234608e423d23b027bbfd686cd563cea33b7c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index aa64103d..8d201e40 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -14be22457767eb568ecf42e10910f777d1c2f7d2 \ No newline at end of file +9b958c7909347b9d8e734f1356b9cff883dfe478 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 0f76675..6d06075 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -7024b814ba6857cb13f6118f7813fb555534a3c9 \ No newline at end of file +76d2c3fd5a4f1da366aefe9e8fa5518a84e13e6b \ No newline at end of file
diff --git a/ios/public/provider/chrome/browser/lens/lens_api.h b/ios/public/provider/chrome/browser/lens/lens_api.h index d58aa75f..b43a9626 100644 --- a/ios/public/provider/chrome/browser/lens/lens_api.h +++ b/ios/public/provider/chrome/browser/lens/lens_api.h
@@ -87,6 +87,9 @@ // Sets the delegate for LVF. - (void)setLensViewFinderDelegate:(id<ChromeLensViewFinderDelegate>)delegate; +// Tears down the live camera preview and destroys the UI. +- (void)tearDownCaptureInfrastructure; + @end namespace ios {
diff --git a/ios_internal b/ios_internal index f821f39..6102267 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit f821f395d9f28b7b73559bc6556630ecc1f3af06 +Subproject commit 61022675d8772a34fc6bcc1c3b60908fc0ee6623
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index a7268707..6fa87b1 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -1006,12 +1006,6 @@ kHardwareSecureDecryptionFallbackOnHardwareContextReset{ &kHardwareSecureDecryptionFallback, "on_hardware_context_reset", true}; -// If active, enable HiDPI mode that increases the display scale factor -// while capturing a low-resolution tab. -BASE_FEATURE(kWebContentsCaptureHiDpi, - "WebContentsCaptureHiDPI", - base::FEATURE_ENABLED_BY_DEFAULT); - // Enables handling of hardware media keys for controlling media. BASE_FEATURE(kHardwareMediaKeyHandling, "HardwareMediaKeyHandling",
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index 91bf0e2..a659f74 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -377,7 +377,6 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kWebCodecsVideoEncoderFrameDrop); MEDIA_EXPORT BASE_DECLARE_FEATURE(kWebRTCHardwareVideoEncoderFrameDrop); MEDIA_EXPORT BASE_DECLARE_FEATURE(kWebRTCColorAccuracy); -MEDIA_EXPORT BASE_DECLARE_FEATURE(kWebContentsCaptureHiDpi); MEDIA_EXPORT BASE_DECLARE_FEATURE(kWebrtcMediaCapabilitiesParameters); MEDIA_EXPORT BASE_DECLARE_FEATURE(kResolutionBasedDecoderPriority);
diff --git a/media/renderers/paint_canvas_video_renderer.cc b/media/renderers/paint_canvas_video_renderer.cc index 7f0ec56..65399ee5 100644 --- a/media/renderers/paint_canvas_video_renderer.cc +++ b/media/renderers/paint_canvas_video_renderer.cc
@@ -1527,67 +1527,68 @@ CHECK(!video_frame->HasSharedImage()); - auto* sii = raster_context_provider->SharedImageInterface(); - gpu::raster::RasterInterface* source_ri = - raster_context_provider->RasterInterface(); + // We copy the contents of the source VideoFrame into the intermediate SI + // over the raster interface and read out the contents of the intermediate + // SI into the destination GL texture via the GLES2 interface. + gpu::SharedImageUsageSet src_usage = + gpu::SHARED_IMAGE_USAGE_RASTER_WRITE | gpu::SHARED_IMAGE_USAGE_GLES2_READ; + if (raster_context_provider->ContextCapabilities().gpu_rasterization) { + src_usage |= gpu::SHARED_IMAGE_USAGE_OOP_RASTERIZATION; + } else { + src_usage |= gpu::SHARED_IMAGE_USAGE_GLES2_WRITE; + } + + // Recreate both the caches if not set. + if (!yuv_cache_.rgb_shared_image_cache && + !yuv_cache_.yuv_shared_image_cache) { + yuv_cache_.rgb_shared_image_cache = + std::make_unique<VideoFrameSharedImageCache>(); + yuv_cache_.yuv_shared_image_cache = + std::make_unique<VideoFrameSharedImageCache>(); + } + + DCHECK(yuv_cache_.rgb_shared_image_cache && + yuv_cache_.yuv_shared_image_cache); // We need a shared image to receive the intermediate RGB result. Try to reuse // one if compatible, otherwise create a new one. - gpu::SyncToken token; - if (yuv_cache_.rgb_shared_image && - yuv_cache_.size == video_frame->coded_size() && - yuv_cache_.raster_context_provider == raster_context_provider) { - token = yuv_cache_.sync_token; - } else { - yuv_cache_.Reset(); - yuv_cache_.raster_context_provider = raster_context_provider; - yuv_cache_.size = video_frame->coded_size(); - - // We copy the contents of the source VideoFrame into the intermediate SI - // over the raster interface and read out the contents of the intermediate - // SI into the destination GL texture via the GLES2 interface. - gpu::SharedImageUsageSet usage = gpu::SHARED_IMAGE_USAGE_RASTER_WRITE | - gpu::SHARED_IMAGE_USAGE_GLES2_READ; - if (raster_context_provider->ContextCapabilities().gpu_rasterization) { - usage |= gpu::SHARED_IMAGE_USAGE_OOP_RASTERIZATION; - } else { - usage |= gpu::SHARED_IMAGE_USAGE_GLES2_WRITE; - } - - yuv_cache_.rgb_shared_image = sii->CreateSharedImage( - {SHARED_IMAGE_FORMAT, video_frame->coded_size(), - video_frame->CompatRGBColorSpace(), usage, "PaintCanvasVideoRenderer"}, - gpu::kNullSurfaceHandle); - CHECK(yuv_cache_.rgb_shared_image); - token = sii->GenUnverifiedSyncToken(); - } + auto [rgb_shared_image, rgb_sync_token, status] = + yuv_cache_.rgb_shared_image_cache->GetOrCreateSharedImage( + video_frame.get(), raster_context_provider, src_usage, + SHARED_IMAGE_FORMAT, video_frame->CompatRGBColorSpace()); + yuv_cache_.raster_context_provider = raster_context_provider; + CHECK(rgb_shared_image); // On the source Raster context, do the YUV->RGB conversion. gpu::MailboxHolder dest_holder; - dest_holder.mailbox = yuv_cache_.rgb_shared_image->mailbox(); + dest_holder.mailbox = rgb_shared_image->mailbox(); dest_holder.texture_target = GL_TEXTURE_2D; - dest_holder.sync_token = token; + // Pass the rgb sync token here to be waited upon before performing raster + // tasks. + dest_holder.sync_token = rgb_sync_token; internals::ConvertYuvVideoFrameToRgbSharedImage( video_frame.get(), raster_context_provider, dest_holder, - /*use_visible_rect=*/false, yuv_cache_.yuv_shared_image.get()); + /*use_visible_rect=*/false, yuv_cache_.yuv_shared_image_cache.get()); gpu::SyncToken post_conversion_sync_token; - source_ri->GenUnverifiedSyncTokenCHROMIUM( + raster_context_provider->RasterInterface()->GenUnverifiedSyncTokenCHROMIUM( post_conversion_sync_token.GetData()); // On the destination GL context, do a copy (with cropping) into the // destination texture. - yuv_cache_.sync_token = CopySharedImageToTexture( + rgb_sync_token = CopySharedImageToTexture( destination_gl, video_frame->coded_size(), video_frame->visible_rect(), - yuv_cache_.rgb_shared_image.get(), post_conversion_sync_token, target, - texture, internal_format, format, type, level, premultiply_alpha, flip_y); + rgb_shared_image.get(), post_conversion_sync_token, target, texture, + internal_format, format, type, level, premultiply_alpha, flip_y); + + // Update the rgb sync token to be waited upon based on gles tasks performed + // earlier. + yuv_cache_.rgb_shared_image_cache->UpdateSyncToken(rgb_sync_token); // video_frame->UpdateReleaseSyncToken is not necessary since the video frame // data we used was CPU-side (IsMappable) to begin with. If there were any // textures, we didn't use them. - // The temporary SkImages should be automatically cleaned up here. - // Kick off a timer to release the cache. cache_deleting_timer_.Reset(); return true; @@ -1874,30 +1875,23 @@ return sync_token; } -PaintCanvasVideoRenderer::YUVTextureCache::YUVTextureCache() - : yuv_shared_image(std::make_unique<VideoFrameSharedImageCache>()) {} +PaintCanvasVideoRenderer::YUVTextureCache::YUVTextureCache() = default; PaintCanvasVideoRenderer::YUVTextureCache::~YUVTextureCache() { Reset(); } void PaintCanvasVideoRenderer::YUVTextureCache::Reset() { - if (!rgb_shared_image) { + if (!rgb_shared_image_cache && !yuv_shared_image_cache) { return; } DCHECK(raster_context_provider); + rgb_shared_image_cache.reset(); + yuv_shared_image_cache.reset(); - gpu::raster::RasterInterface* ri = raster_context_provider->RasterInterface(); - ri->WaitSyncTokenCHROMIUM(sync_token.GetConstData()); - ri->OrderingBarrierCHROMIUM(); - - auto* sii = raster_context_provider->SharedImageInterface(); - sii->DestroySharedImage(sync_token, std::move(rgb_shared_image)); - - yuv_shared_image.reset(); - - // Kick off the GL work up to the OrderingBarrierCHROMIUM above as well as the - // SharedImageInterface work, to ensure the shared image memory is released in - // a timely fashion. + // Kick off the GL work as well as the SharedImageInterface work, to ensure + // the shared image memory is released in a timely fashion. + // TODO(crbug.com/343011436): Replace the FlushPendingWork with + // SharedImageInterface::Flush. raster_context_provider->ContextSupport()->FlushPendingWork(); raster_context_provider.reset(); }
diff --git a/media/renderers/paint_canvas_video_renderer.h b/media/renderers/paint_canvas_video_renderer.h index be96f84..1389a2c 100644 --- a/media/renderers/paint_canvas_video_renderer.h +++ b/media/renderers/paint_canvas_video_renderer.h
@@ -31,7 +31,6 @@ namespace gpu { struct Capabilities; -class ClientSharedImage; namespace gles2 { class GLES2Interface; @@ -290,19 +289,12 @@ // The ContextProvider that holds the texture. scoped_refptr<viz::RasterContextProvider> raster_context_provider; - // The size of the texture. - gfx::Size size; - - // The RGB shared image backing the texture. - scoped_refptr<gpu::ClientSharedImage> rgb_shared_image; + // The RGB shared image cache backing the texture. + std::unique_ptr<VideoFrameSharedImageCache> rgb_shared_image_cache; // Cache of YUV shared images that are created to upload CPU video frame // data to the GPU. - std::unique_ptr<VideoFrameSharedImageCache> yuv_shared_image; - - // A SyncToken after last usage, used for reusing or destroying texture and - // shared image. - gpu::SyncToken sync_token; + std::unique_ptr<VideoFrameSharedImageCache> yuv_shared_image_cache; }; YUVTextureCache yuv_cache_; };
diff --git a/media/renderers/video_frame_shared_image_cache.cc b/media/renderers/video_frame_shared_image_cache.cc index c1a348d1..729980ff 100644 --- a/media/renderers/video_frame_shared_image_cache.cc +++ b/media/renderers/video_frame_shared_image_cache.cc
@@ -65,14 +65,24 @@ } VideoFrameSharedImageCache::CachedData -VideoFrameSharedImageCache::GetSharedImage( +VideoFrameSharedImageCache::GetOrCreateSharedImage( const VideoFrame* video_frame, viz::RasterContextProvider* raster_context_provider, - gpu::SharedImageUsageSet usage) { + const gpu::SharedImageUsageSet& usage) { viz::SharedImageFormat format = VideoPixelFormatToSharedImageFormat(video_frame->format()); CHECK(format.is_multi_plane()); + return GetOrCreateSharedImage(video_frame, raster_context_provider, usage, + format, video_frame->ColorSpace()); +} +VideoFrameSharedImageCache::CachedData +VideoFrameSharedImageCache::GetOrCreateSharedImage( + const VideoFrame* video_frame, + viz::RasterContextProvider* raster_context_provider, + const gpu::SharedImageUsageSet& usage, + const viz::SharedImageFormat& format, + const gfx::ColorSpace& color_space) { if (shared_image_ && provider_ == raster_context_provider) { // Return the cached shared image if it is the same video frame. if (video_frame_id_ == video_frame->unique_id()) { @@ -81,7 +91,7 @@ // Return the cached shared image if the video frame data matches the shared // image data. if (video_frame->coded_size() == shared_image_->size() && - video_frame->ColorSpace() == shared_image_->color_space() && + color_space == shared_image_->color_space() && format == shared_image_->format() && usage == shared_image_->usage()) { return {shared_image_, sync_token_, Status::kMatchedSharedImageMetaData}; } @@ -97,8 +107,8 @@ // Create a multiplanar shared image to upload the data to. shared_image_ = sii->CreateSharedImage( - {format, video_frame->coded_size(), video_frame->ColorSpace(), - kTopLeft_GrSurfaceOrigin, kUnpremul_SkAlphaType, usage, "VideoFrameYUV"}, + {format, video_frame->coded_size(), color_space, kTopLeft_GrSurfaceOrigin, + kUnpremul_SkAlphaType, usage, "VideoFrameYUV"}, gpu::kNullSurfaceHandle); CHECK(shared_image_); video_frame_id_ = video_frame->unique_id();
diff --git a/media/renderers/video_frame_shared_image_cache.h b/media/renderers/video_frame_shared_image_cache.h index 55febc5..81d041a 100644 --- a/media/renderers/video_frame_shared_image_cache.h +++ b/media/renderers/video_frame_shared_image_cache.h
@@ -54,9 +54,19 @@ // `shared_image_` in the case of CPU backed VideoFrames. Returns the // `shared_image_` along with Status on whether the shared image was created // or reused. - CachedData GetSharedImage(const VideoFrame* video_frame, - viz::RasterContextProvider* raster_context_provider, - gpu::SharedImageUsageSet usage); + CachedData GetOrCreateSharedImage( + const VideoFrame* video_frame, + viz::RasterContextProvider* raster_context_provider, + const gpu::SharedImageUsageSet& usage, + const viz::SharedImageFormat& format, + const gfx::ColorSpace& color_space); + + // Calls the above method but passes in video frame color space and YUV format + // derived from video frame format. + CachedData GetOrCreateSharedImage( + const VideoFrame* video_frame, + viz::RasterContextProvider* raster_context_provider, + const gpu::SharedImageUsageSet& usage); // Update the `sync_token_` to wait for after performing raster/gles tasks. void UpdateSyncToken(const gpu::SyncToken& sync_token);
diff --git a/media/renderers/video_frame_yuv_converter.cc b/media/renderers/video_frame_yuv_converter.cc index cfe0e8a..f4a5f346 100644 --- a/media/renderers/video_frame_yuv_converter.cc +++ b/media/renderers/video_frame_yuv_converter.cc
@@ -129,8 +129,8 @@ // For pure software pixel upload path with video frame that does not have // textures. auto [src_shared_image, si_sync_token, status] = - shared_image_cache->GetSharedImage(video_frame, raster_context_provider, - src_usage); + shared_image_cache->GetOrCreateSharedImage( + video_frame, raster_context_provider, src_usage); CHECK(src_shared_image); if (status == VideoFrameSharedImageCache::Status::kMatchedVideoFrameId) { // Since the video frame id matches, no need to upload pixels or copy shared
diff --git a/mojo/core/channel_win.cc b/mojo/core/channel_win.cc index 4bff973..57bc3e0 100644 --- a/mojo/core/channel_win.cc +++ b/mojo/core/channel_win.cc
@@ -306,7 +306,7 @@ BOOL ok = ::ReadFile(handle_.get(), buffer, static_cast<DWORD>(buffer_capacity), - NULL, &read_context_.overlapped); + NULL, read_context_.GetOverlapped()); if (ok || GetLastError() == ERROR_IO_PENDING) { is_read_pending_ = true; AddRef(); @@ -336,7 +336,7 @@ DCHECK(handle_.is_valid()); BOOL ok = WriteFile(handle_.get(), message->data(), static_cast<DWORD>(message->data_num_bytes()), NULL, - &write_context_.overlapped); + write_context_.GetOverlapped()); if (ok || GetLastError() == ERROR_IO_PENDING) { is_write_pending_ = true; AddRef();
diff --git a/net/base/file_stream_context.cc b/net/base/file_stream_context.cc index aa9ea19..e134da88 100644 --- a/net/base/file_stream_context.cc +++ b/net/base/file_stream_context.cc
@@ -20,6 +20,10 @@ #include "net/base/apple/guarded_fd.h" #endif // BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_WIN) +#include <windows.h> +#endif + namespace net { namespace {
diff --git a/net/base/file_stream_context_win.cc b/net/base/file_stream_context_win.cc index 83af6c7..f576847 100644 --- a/net/base/file_stream_context_win.cc +++ b/net/base/file_stream_context_win.cc
@@ -72,7 +72,7 @@ FROM_HERE, base::BindOnce(&FileStream::Context::ReadAsync, base::Unretained(this), file_.GetPlatformFile(), base::WrapRefCounted(buf), - buf_len, &io_context_.overlapped, + buf_len, io_context_.GetOverlapped(), base::SingleThreadTaskRunner::GetCurrentDefault())); return ERR_IO_PENDING; } @@ -85,8 +85,8 @@ result_ = 0; DWORD bytes_written = 0; - if (!WriteFile(file_.GetPlatformFile(), buf->data(), buf_len, - &bytes_written, &io_context_.overlapped)) { + if (!WriteFile(file_.GetPlatformFile(), buf->data(), buf_len, &bytes_written, + io_context_.GetOverlapped())) { IOResult error = IOResult::FromOSError(GetLastError()); if (error.os_error == ERROR_IO_PENDING) { IOCompletionIsPending(std::move(callback), buf); @@ -105,7 +105,7 @@ result_ = 0; // Always returns zero when making an asynchronous call. - ::ConnectNamedPipe(file_.GetPlatformFile(), &io_context_.overlapped); + ::ConnectNamedPipe(file_.GetPlatformFile(), io_context_.GetOverlapped()); const auto error = ::GetLastError(); if (error == ERROR_PIPE_CONNECTED) { return OK; // The client has already connected; operation complete. @@ -124,7 +124,7 @@ int64_t offset) { LARGE_INTEGER result; result.QuadPart = offset; - SetOffset(&io_context_.overlapped, result); + SetOffset(io_context_.GetOverlapped(), result); return IOResult(result.QuadPart, 0); } @@ -173,7 +173,7 @@ if (result_) DCHECK_EQ(result_, static_cast<int>(bytes_read)); result_ = bytes_read; - IncrementOffset(&io_context_.overlapped, bytes_read); + IncrementOffset(io_context_.GetOverlapped(), bytes_read); } if (async_read_initiated_)
diff --git a/net/base/file_stream_unittest.cc b/net/base/file_stream_unittest.cc index d16db22..430a6360 100644 --- a/net/base/file_stream_unittest.cc +++ b/net/base/file_stream_unittest.cc
@@ -47,6 +47,10 @@ #if BUILDFLAG(IS_ANDROID) #include "base/test/test_file_util.h" +#elif BUILDFLAG(IS_WIN) +#include <windows.h> + +#include <namedpipeapi.h> #endif namespace net {
diff --git a/net/base/registry_controlled_domains/registry_controlled_domain.cc b/net/base/registry_controlled_domains/registry_controlled_domain.cc index 32b6c1d..2506e03 100644 --- a/net/base/registry_controlled_domains/registry_controlled_domain.cc +++ b/net/base/registry_controlled_domains/registry_controlled_domain.cc
@@ -57,7 +57,7 @@ #include "base/numerics/safe_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" -#include "base/threading/thread_local.h" +#include "base/synchronization/lock.h" #include "net/base/lookup_string_in_fixed_set.h" #include "net/base/net_module.h" #include "net/base/url_util.h" @@ -87,11 +87,11 @@ bool is_canonical; }; -// A thread-local cache of the last `kMaxCacheSize` registry lookups. Call -// GetCacheForThread to retrieve a thread-local instance. Implemented with a -// circular array but could just as easily be a std::list if you want LRU, with -// the additional overhead of the doubly-linked list pointers and seemingly -// negligible hit rate win. See crbug.com/383728878 for more information. +// A thread-safe cache of the last `kMaxCacheSize` registry lookups. Implemented +// with a circular array but could just as easily be a base::LRUCache if you +// want LRU, with the additional overhead of the doubly-linked list pointers and +// seemingly negligible hit rate win. See crbug.com/383728878 for more +// information. class RegistryLookupCache { public: constexpr static uint8_t kMaxCacheSize = 5; @@ -100,30 +100,20 @@ RegistryLookupCache(const RegistryLookupCache&) = delete; RegistryLookupCache& operator=(const RegistryLookupCache&) = delete; - // Retrieve a thread-local cache. - static RegistryLookupCache* GetCacheForThread(bool reset_cache = false) { - static base::NoDestructor< - base::ThreadLocalOwnedPointer<RegistryLookupCache>> - thread_local_cache; - RegistryLookupCache* cache = thread_local_cache->Get(); - if (!cache || reset_cache) { - thread_local_cache->Set(std::make_unique<RegistryLookupCache>()); - return thread_local_cache->Get(); - } - return cache; - } - // The returned string_view is a reference to the incoming `host` and // therefore has the same lifetime. std::optional<std::string_view> Get(std::string_view host, PrivateRegistryFilter private_filter) { std::optional<std::string_view> result; - for (const CachedRegistryLookup& cached_result : cache_) { - if (cached_result.host == host && - cached_result.private_filter == private_filter) { - result = host.substr(cached_result.offset); - break; + { + base::AutoLock scoped_lock(lock_); + for (const CachedRegistryLookup& cached_result : cache_) { + if (cached_result.host == host && + cached_result.private_filter == private_filter) { + result = host.substr(cached_result.offset); + break; + } } } UMA_HISTOGRAM_BOOLEAN( @@ -137,8 +127,8 @@ void Set(std::string_view host, PrivateRegistryFilter private_filter, size_t offset) { - CHECK_LE(0u, write_index_); - CHECK_GT(kMaxCacheSize, write_index_); + base::AutoLock scoped_lock(lock_); + DCHECK_GT(kMaxCacheSize, write_index_); cache_[write_index_] = CachedRegistryLookup(host, private_filter, offset); write_index_ = (write_index_ + 1) % kMaxCacheSize; } @@ -161,12 +151,9 @@ uint32_t offset; }; - // Note that there is no ThreadChecker for this class because - // CalledOnValidThread will return false when called from tasks posted to - // SingleThreadTaskRunners bound to different sequences. - - std::array<CachedRegistryLookup, kMaxCacheSize> cache_ = {}; - uint8_t write_index_ = 0u; + base::Lock lock_; + std::array<CachedRegistryLookup, kMaxCacheSize> cache_ GUARDED_BY(lock_) = {}; + uint8_t write_index_ GUARDED_BY(lock_) = 0u; }; // Used as the output of functions that calculate the registry length in a @@ -299,9 +286,10 @@ CHECK(!host.empty()); // Because this function is called frequently, and is quite expensive, we - // 'memoize' previous instantiations of this function by using a thread-local - // cache. - RegistryLookupCache* cache = RegistryLookupCache::GetCacheForThread(); + // 'memoize' previous instantiations of this function by using a cache. Since + // this method can be called on dozens of sequences and threads, we make it + // thread-safe. + static base::NoDestructor<RegistryLookupCache> cache; // Check for the origin in the cache. std::optional<std::string_view> cached_result = @@ -648,8 +636,4 @@ g_graph = domains; } -void ResetGetDomainAndRegistryCacheForTesting() { - RegistryLookupCache::GetCacheForThread(/*reset_cache =*/true); -} - } // namespace net::registry_controlled_domains
diff --git a/net/base/registry_controlled_domains/registry_controlled_domain.h b/net/base/registry_controlled_domains/registry_controlled_domain.h index e59b22f..de370a6 100644 --- a/net/base/registry_controlled_domains/registry_controlled_domain.h +++ b/net/base/registry_controlled_domains/registry_controlled_domain.h
@@ -319,9 +319,6 @@ NET_EXPORT_PRIVATE void SetFindDomainGraphForTesting( base::span<const uint8_t> domains); -// Used for unit tests, so that each test has its own cache instance. -NET_EXPORT_PRIVATE void ResetGetDomainAndRegistryCacheForTesting(); - } // namespace net::registry_controlled_domains #endif // NET_BASE_REGISTRY_CONTROLLED_DOMAINS_REGISTRY_CONTROLLED_DOMAIN_H_
diff --git a/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc b/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc index 444d7a8a..aed3b0c 100644 --- a/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc +++ b/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc
@@ -86,8 +86,6 @@ class RegistryControlledDomainTest : public testing::Test { protected: - void SetUp() override { ResetGetDomainAndRegistryCacheForTesting(); } - void UseDomainData(base::span<const uint8_t> graph) { // This is undone in TearDown. SetFindDomainGraphForTesting(graph);
diff --git a/net/cookies/cookie_inclusion_status.h b/net/cookies/cookie_inclusion_status.h index 9309e8e..4f2633e 100644 --- a/net/cookies/cookie_inclusion_status.h +++ b/net/cookies/cookie_inclusion_status.h
@@ -296,9 +296,8 @@ kMaxValue = kScheme }; - using ExclusionReasonBitset = - std::bitset<ExclusionReason::NUM_EXCLUSION_REASONS>; - using WarningReasonBitset = std::bitset<WarningReason::NUM_WARNING_REASONS>; + using ExclusionReasonBitset = std::bitset<32>; + using WarningReasonBitset = std::bitset<32>; // Makes a status that says include and should not warn. CookieInclusionStatus();
diff --git a/net/disk_cache/blockfile/file_win.cc b/net/disk_cache/blockfile/file_win.cc index 844e483..1698359 100644 --- a/net/disk_cache/blockfile/file_win.cc +++ b/net/disk_cache/blockfile/file_win.cc
@@ -4,6 +4,8 @@ #include "net/disk_cache/blockfile/file.h" +#include <windows.h> + #include <limits.h> #include <utility> @@ -29,10 +31,8 @@ struct MyOverlapped { MyOverlapped(disk_cache::File* file, size_t offset, disk_cache::FileIOCallback* callback); - ~MyOverlapped() {} - OVERLAPPED* overlapped() { - return &context_.overlapped; - } + ~MyOverlapped() = default; + OVERLAPPED* overlapped() { return context_.GetOverlapped(); } base::MessagePumpForIO::IOContext context_; scoped_refptr<disk_cache::File> file_; @@ -90,7 +90,7 @@ MyOverlapped::MyOverlapped(disk_cache::File* file, size_t offset, disk_cache::FileIOCallback* callback) { - context_.overlapped.Offset = static_cast<DWORD>(offset); + context_.GetOverlapped()->Offset = static_cast<DWORD>(offset); file_ = file; callback_ = callback; completion_handler_ = CompletionHandler::Get();
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index 463e5c1..0a1958dc 100644 --- a/net/http/transport_security_state_static.pins +++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@ # hash function for preloaded entries again (we have already done so once). # -# Last updated: 2024-12-30 12:55 UTC +# Last updated: 2025-01-02 12:54 UTC PinsListTimestamp -1735563316 +1735822475 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/http/transport_security_state_static_pins.json b/net/http/transport_security_state_static_pins.json index 19b5ffb..cc51b7c 100644 --- a/net/http/transport_security_state_static_pins.json +++ b/net/http/transport_security_state_static_pins.json
@@ -31,7 +31,7 @@ // the 'static_spki_hashes' and 'bad_static_spki_hashes' fields in 'pinsets' // refer to, and the timestamp at which the pins list was last updated. // -// Last updated: 2024-12-30 12:55 UTC +// Last updated: 2025-01-02 12:54 UTC // { "pinsets": [
diff --git a/net/socket/tcp_socket_io_completion_port_win.cc b/net/socket/tcp_socket_io_completion_port_win.cc index d012a33..6f168995 100644 --- a/net/socket/tcp_socket_io_completion_port_win.cc +++ b/net/socket/tcp_socket_io_completion_port_win.cc
@@ -298,7 +298,7 @@ const int rv = ::WSASend(socket_, &write_buffer, /*dwBufferCount=*/1, &bytes_sent, - /*dwFlags=*/0, &context->overlapped, + /*dwFlags=*/0, context->GetOverlapped(), /*lpCompletionRoutine=*/nullptr); // "Citations" below are from @@ -508,7 +508,7 @@ // whether zero-byte overlapped reads are allowed (for ReadIfReady). auto rv = ::WSARecv( socket_, &read_buffer, /*dwBufferCount=*/1, &bytes_read, &flags, - allow_zero_byte_overlapped_read ? nullptr : &context->overlapped, + allow_zero_byte_overlapped_read ? nullptr : context->GetOverlapped(), nullptr); // "Citations" below are from @@ -532,7 +532,7 @@ // value from WSARecv here in that case will be WSA_IO_PENDING. read_buffer = {}; rv = ::WSARecv(socket_, &read_buffer, /*dwBufferCount=*/1, &bytes_read, - &flags, &context->overlapped, nullptr); + &flags, context->GetOverlapped(), nullptr); if (rv == 0) { // Immediate completion for zero-byte read. The contract for ReadIfReady // explicitly states that on synchronous completion we need to return
diff --git a/remoting/host/desktop_process.cc b/remoting/host/desktop_process.cc index 62cfb07b..179b5eb9 100644 --- a/remoting/host/desktop_process.cc +++ b/remoting/host/desktop_process.cc
@@ -26,6 +26,8 @@ #include "remoting/host/desktop_session_agent.h" #if BUILDFLAG(IS_WIN) +#include <windows.h> + #include "base/win/windows_version.h" #endif // BUILDFLAG(IS_WIN)
diff --git a/services/device/serial/serial_io_handler_win.cc b/services/device/serial/serial_io_handler_win.cc index cf509aa..52e71303 100644 --- a/services/device/serial/serial_io_handler_win.cc +++ b/services/device/serial/serial_io_handler_win.cc
@@ -194,7 +194,7 @@ if (!ReadFile(file().GetPlatformFile(), pending_read_buffer().data(), pending_read_buffer().size(), nullptr, - &read_context_->overlapped) && + read_context_->GetOverlapped()) && GetLastError() != ERROR_IO_PENDING) { OnIOCompleted(read_context_.get(), 0, GetLastError()); } @@ -206,7 +206,7 @@ if (!WriteFile(file().GetPlatformFile(), pending_write_buffer().data(), pending_write_buffer().size(), nullptr, - &write_context_->overlapped) && + write_context_->GetOverlapped()) && GetLastError() != ERROR_IO_PENDING) { OnIOCompleted(write_context_.get(), 0, GetLastError()); }
diff --git a/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc b/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc index c013a42b..d35b1680 100644 --- a/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc +++ b/services/tracing/public/cpp/perfetto/traced_value_proto_writer.cc
@@ -28,22 +28,6 @@ namespace tracing { -PerfettoProtoAppender::PerfettoProtoAppender(DebugAnnotation* proto) - : annotation_proto_(proto) {} - -PerfettoProtoAppender::~PerfettoProtoAppender() = default; - -void PerfettoProtoAppender::AddBuffer(uint8_t* begin, uint8_t* end) { - ranges_.emplace_back(); - ranges_.back().begin = begin; - ranges_.back().end = end; -} - -size_t PerfettoProtoAppender::Finalize(uint32_t field_id) { - return annotation_proto_->AppendScatteredBytes(field_id, ranges_.data(), - ranges_.size()); -} - namespace { constexpr size_t kDefaultSliceSize = 128;
diff --git a/services/tracing/public/cpp/perfetto/traced_value_proto_writer.h b/services/tracing/public/cpp/perfetto/traced_value_proto_writer.h index 5ecc0dcc..a81760c 100644 --- a/services/tracing/public/cpp/perfetto/traced_value_proto_writer.h +++ b/services/tracing/public/cpp/perfetto/traced_value_proto_writer.h
@@ -6,36 +6,9 @@ #define SERVICES_TRACING_PUBLIC_CPP_PERFETTO_TRACED_VALUE_PROTO_WRITER_H_ #include "base/component_export.h" -#include "base/memory/raw_ptr.h" -#include "base/trace_event/trace_event_impl.h" -#include "third_party/perfetto/include/perfetto/protozero/contiguous_memory_range.h" - -namespace perfetto { -namespace protos { -namespace pbzero { -class DebugAnnotation; -} // namespace pbzero -} // namespace protos -} // namespace perfetto namespace tracing { -class COMPONENT_EXPORT(TRACING_CPP) PerfettoProtoAppender - : public base::trace_event::ConvertableToTraceFormat::ProtoAppender { - public: - explicit PerfettoProtoAppender( - perfetto::protos::pbzero::DebugAnnotation* proto); - ~PerfettoProtoAppender() override; - - // ProtoAppender implementation - void AddBuffer(uint8_t* begin, uint8_t* end) override; - size_t Finalize(uint32_t field_id) override; - - private: - std::vector<protozero::ContiguousMemoryRange> ranges_; - raw_ptr<perfetto::protos::pbzero::DebugAnnotation> annotation_proto_; -}; - void COMPONENT_EXPORT(TRACING_CPP) RegisterTracedValueProtoWriter(); } // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/traced_value_proto_writer_unittest.cc b/services/tracing/public/cpp/perfetto/traced_value_proto_writer_unittest.cc index 21e68f5..25f48f81 100644 --- a/services/tracing/public/cpp/perfetto/traced_value_proto_writer_unittest.cc +++ b/services/tracing/public/cpp/perfetto/traced_value_proto_writer_unittest.cc
@@ -13,6 +13,8 @@ #include <string> #include "base/memory/raw_ptr.h" +#include "base/notreached.h" +#include "base/trace_event/perfetto_proto_appender.h" #include "base/trace_event/traced_value.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/perfetto/include/perfetto/protozero/scattered_heap_buffer.h" @@ -107,7 +109,7 @@ NestedValue GetProtoFromTracedValue(TracedValue* traced_value) { protozero::HeapBuffered<perfetto::protos::pbzero::DebugAnnotation> proto; - PerfettoProtoAppender proto_appender(proto.get()); + base::trace_event::PerfettoProtoAppender proto_appender(proto.get()); EXPECT_TRUE(traced_value->AppendToProto(&proto_appender)); DebugAnnotation full_proto;
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index da5eaf8..758119d 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -12155,6 +12155,24 @@ ] } ], + "IOSUpdateFirstRunSequence": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "EnabledWithDBPromoFirstAndSignInRemoved", + "params": { + "updated-first-run-sequence-param": "3" + }, + "enable_features": [ + "UpdatedFirstRunSequence" + ] + } + ] + } + ], "IOSUseUserDefaultsForExitedCleanlyBeacon": [ { "platforms": [ @@ -24650,24 +24668,6 @@ ] } ], - "WebContentsCaptureHiDPI": [ - { - "platforms": [ - "chromeos", - "linux", - "mac", - "windows" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "WebContentsCaptureHiDPI" - ] - } - ] - } - ], "WebContentsDiscard": [ { "platforms": [
diff --git a/third_party/angle b/third_party/angle index 5e515f7..b225419 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 5e515f779d6674c7dfc32c5088895aebd4d2cdd0 +Subproject commit b225419fd2270f75a096a8c638857fb8ddcc1f29
diff --git a/third_party/blink/common/interest_group/auction_config_mojom_traits.cc b/third_party/blink/common/interest_group/auction_config_mojom_traits.cc index fefedaf3..34f00c5 100644 --- a/third_party/blink/common/interest_group/auction_config_mojom_traits.cc +++ b/third_party/blink/common/interest_group/auction_config_mojom_traits.cc
@@ -11,11 +11,13 @@ #include "base/containers/contains.h" #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" +#include "base/feature_list.h" #include "base/strings/escape.h" #include "base/strings/string_util.h" #include "base/time/time.h" #include "base/uuid.h" #include "third_party/abseil-cpp/absl/types/variant.h" +#include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/interest_group/auction_config.h" #include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom-shared.h" #include "third_party/blink/public/mojom/interest_group/interest_group_types.mojom.h" @@ -450,6 +452,13 @@ return false; } + out->send_creative_scanning_metadata = data.send_creative_scanning_metadata(); + if (out->send_creative_scanning_metadata.has_value() && + !base::FeatureList::IsEnabled( + blink::features::kFledgeTrustedSignalsKVv1CreativeScanning)) { + return false; + } + return true; }
diff --git a/third_party/blink/common/interest_group/auction_config_mojom_traits_test.cc b/third_party/blink/common/interest_group/auction_config_mojom_traits_test.cc index e079d22..8a3cdb2 100644 --- a/third_party/blink/common/interest_group/auction_config_mojom_traits_test.cc +++ b/third_party/blink/common/interest_group/auction_config_mojom_traits_test.cc
@@ -11,6 +11,7 @@ #include <vector> #include "base/containers/flat_map.h" +#include "base/test/scoped_feature_list.h" #include "base/time/time.h" #include "base/unguessable_token.h" #include "base/uuid.h" @@ -118,23 +119,34 @@ return success; } -TEST(AuctionConfigMojomTraitsTest, Empty) { +class AuctionConfigMojomTraitsTest : public ::testing::Test { + public: + AuctionConfigMojomTraitsTest() { + scoped_feature_list_.InitAndEnableFeature( + blink::features::kFledgeTrustedSignalsKVv1CreativeScanning); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +TEST_F(AuctionConfigMojomTraitsTest, Empty) { AuctionConfig auction_config; EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, Basic) { +TEST_F(AuctionConfigMojomTraitsTest, Basic) { AuctionConfig auction_config = CreateBasicAuctionConfig(); EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, SellerNotHttps) { +TEST_F(AuctionConfigMojomTraitsTest, SellerNotHttps) { AuctionConfig auction_config = CreateBasicAuctionConfig(GURL("http://seller.test")); EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, SellerDecisionUrlMismatch) { +TEST_F(AuctionConfigMojomTraitsTest, SellerDecisionUrlMismatch) { AuctionConfig auction_config = CreateBasicAuctionConfig(GURL("http://seller.test")); // Different origin than seller, but same scheme. @@ -153,7 +165,8 @@ // Tests that decision logic and trusted scoring signals GURLs exceeding max // length can be passed through Mojo and will be converted into invalid, empty // GURLs, and passing in invalid URLs works as well. -TEST(AuctionConfigMojomTraitsTest, SellerDecisionAndTrustedSignalsUrlsTooLong) { +TEST_F(AuctionConfigMojomTraitsTest, + SellerDecisionAndTrustedSignalsUrlsTooLong) { GURL too_long_url = GURL("https://seller.test/" + std::string(url::kMaxURLChars, '1')); AuctionConfig auction_config = CreateBasicAuctionConfig(too_long_url); @@ -171,7 +184,7 @@ EXPECT_TRUE(SerializeAndDeserialize(auction_config_clone)); } -TEST(AuctionConfigMojomTraitsTest, TrustedScoringSignalsUrl) { +TEST_F(AuctionConfigMojomTraitsTest, TrustedScoringSignalsUrl) { AuctionConfig auction_config = CreateBasicAuctionConfig(GURL("https://seller.test")); @@ -203,13 +216,13 @@ } } -TEST(AuctionConfigMojomTraitsTest, FullConfig) { +TEST_F(AuctionConfigMojomTraitsTest, FullConfig) { AuctionConfig auction_config = CreateFullAuctionConfig(); EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, - perBuyerPrioritySignalsCannotOverrideBrowserSignals) { +TEST_F(AuctionConfigMojomTraitsTest, + perBuyerPrioritySignalsCannotOverrideBrowserSignals) { const url::Origin kBuyer = url::Origin::Create(GURL("https://buyer.test")); AuctionConfig auction_config = CreateBasicAuctionConfig(); @@ -222,15 +235,15 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, - allBuyersPrioritySignalsCannotOverrideBrowserSignals) { +TEST_F(AuctionConfigMojomTraitsTest, + allBuyersPrioritySignalsCannotOverrideBrowserSignals) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.all_buyers_priority_signals = { {"browserSignals.goats", 2}}; EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, SerializeAndDeserializeNonFinite) { +TEST_F(AuctionConfigMojomTraitsTest, SerializeAndDeserializeNonFinite) { double test_cases[] = { std::numeric_limits<double>::quiet_NaN(), std::numeric_limits<double>::signaling_NaN(), @@ -274,7 +287,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, BuyerNotHttps) { +TEST_F(AuctionConfigMojomTraitsTest, BuyerNotHttps) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.interest_group_buyers.emplace(); auction_config.non_shared_params.interest_group_buyers->push_back( @@ -282,7 +295,7 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, BuyerNotHttpsMultipleBuyers) { +TEST_F(AuctionConfigMojomTraitsTest, BuyerNotHttpsMultipleBuyers) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.interest_group_buyers.emplace(); auction_config.non_shared_params.interest_group_buyers->push_back( @@ -292,14 +305,14 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, ComponentAuctionUrlHttps) { +TEST_F(AuctionConfigMojomTraitsTest, ComponentAuctionUrlHttps) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.component_auctions.emplace_back( CreateBasicAuctionConfig(GURL("http://seller.test"))); EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, ComponentAuctionTooDeep) { +TEST_F(AuctionConfigMojomTraitsTest, ComponentAuctionTooDeep) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.component_auctions.emplace_back( CreateBasicAuctionConfig()); @@ -309,7 +322,7 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, ComponentAuctionWithNonce) { +TEST_F(AuctionConfigMojomTraitsTest, ComponentAuctionWithNonce) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.component_auctions.emplace_back( CreateBasicAuctionConfig()); @@ -318,8 +331,8 @@ EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, - TopLevelAuctionHasBuyersAndComponentAuction) { +TEST_F(AuctionConfigMojomTraitsTest, + TopLevelAuctionHasBuyersAndComponentAuction) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.component_auctions.emplace_back( CreateBasicAuctionConfig()); @@ -329,14 +342,14 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, ComponentAuctionSuccessSingleBasic) { +TEST_F(AuctionConfigMojomTraitsTest, ComponentAuctionSuccessSingleBasic) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.component_auctions.emplace_back( CreateBasicAuctionConfig()); EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, ComponentAuctionSuccessMultipleFull) { +TEST_F(AuctionConfigMojomTraitsTest, ComponentAuctionSuccessMultipleFull) { AuctionConfig auction_config = CreateFullAuctionConfig(); // The top-level auction cannot have buyers in a component auction. auction_config.non_shared_params.interest_group_buyers = {}; @@ -358,7 +371,7 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, DuplicateAllSlotsRequestedSizes) { +TEST_F(AuctionConfigMojomTraitsTest, DuplicateAllSlotsRequestedSizes) { const AdSize kSize1 = AdSize(70.5, AdSize::LengthUnit::kScreenWidth, 70.6, AdSize::LengthUnit::kScreenHeight); const AdSize kSize2 = AdSize(100, AdSize::LengthUnit::kPixels, 110, @@ -405,7 +418,7 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, MaxTrustedScoringSignalsUrlLength) { +TEST_F(AuctionConfigMojomTraitsTest, MaxTrustedScoringSignalsUrlLength) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.max_trusted_scoring_signals_url_length = 8000; @@ -418,7 +431,7 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, TrustedScoringSignalsCoordinator) { +TEST_F(AuctionConfigMojomTraitsTest, TrustedScoringSignalsCoordinator) { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.trusted_scoring_signals_coordinator = url::Origin::Create(GURL("https://example.test")); @@ -433,15 +446,15 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, - DirectFromSellerSignalsPrefixWithQueryString) { +TEST_F(AuctionConfigMojomTraitsTest, + DirectFromSellerSignalsPrefixWithQueryString) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.direct_from_seller_signals.mutable_value_for_testing() ->prefix = GURL("https://seller.test/json?queryPart"); EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsBuyerNotPresent) { +TEST_F(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsBuyerNotPresent) { AuctionConfig auction_config = CreateFullAuctionConfig(); DirectFromSellerSignalsSubresource& buyer2_subresource = auction_config.direct_from_seller_signals.mutable_value_for_testing() @@ -451,8 +464,8 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, - DirectFromSellerSignalsNoDirectFromSellerSignals) { +TEST_F(AuctionConfigMojomTraitsTest, + DirectFromSellerSignalsNoDirectFromSellerSignals) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.direct_from_seller_signals = AuctionConfig::MaybePromiseDirectFromSellerSignals::FromValue( @@ -460,28 +473,28 @@ EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsNoPerBuyerSignals) { +TEST_F(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsNoPerBuyerSignals) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.direct_from_seller_signals.mutable_value_for_testing() ->per_buyer_signals.clear(); EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsNoSellerSignals) { +TEST_F(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsNoSellerSignals) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.direct_from_seller_signals.mutable_value_for_testing() ->seller_signals = std::nullopt; EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsNoAuctionSignals) { +TEST_F(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsNoAuctionSignals) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.direct_from_seller_signals.mutable_value_for_testing() ->auction_signals = std::nullopt; EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsHeaderAdSlot) { +TEST_F(AuctionConfigMojomTraitsTest, DirectFromSellerSignalsHeaderAdSlot) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.direct_from_seller_signals = AuctionConfig::MaybePromiseDirectFromSellerSignals::FromValue( @@ -490,15 +503,15 @@ EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, - DirectFromSellerSignalsCantHaveBothBundlesAndHeaderAdSlot) { +TEST_F(AuctionConfigMojomTraitsTest, + DirectFromSellerSignalsCantHaveBothBundlesAndHeaderAdSlot) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.expects_direct_from_seller_signals_header_ad_slot = true; EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, - DirectFromSellerSignalsCantHaveBothBundlesAndHeaderAdSlotPromise) { +TEST_F(AuctionConfigMojomTraitsTest, + DirectFromSellerSignalsCantHaveBothBundlesAndHeaderAdSlotPromise) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.direct_from_seller_signals = AuctionConfig::MaybePromiseDirectFromSellerSignals::FromPromise(); @@ -506,7 +519,7 @@ EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, MaybePromiseJson) { +TEST_F(AuctionConfigMojomTraitsTest, MaybePromiseJson) { { AuctionConfig::MaybePromiseJson json = AuctionConfig::MaybePromiseJson::FromValue("{A: 42}"); @@ -532,7 +545,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, MaybePromisePerBuyerSignals) { +TEST_F(AuctionConfigMojomTraitsTest, MaybePromisePerBuyerSignals) { { std::optional<base::flat_map<url::Origin, std::string>> value; value.emplace(); @@ -553,8 +566,8 @@ } } -TEST(AuctionConfigMojomTraitsTest, - MaybePromiseDeprecatedRenderURLReplacements) { +TEST_F(AuctionConfigMojomTraitsTest, + MaybePromiseDeprecatedRenderURLReplacements) { { std::vector<blink::AuctionConfig::AdKeywordReplacement> value; value.push_back(blink::AuctionConfig::AdKeywordReplacement( @@ -579,7 +592,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, DeprecatedRenderURLReplacements) { +TEST_F(AuctionConfigMojomTraitsTest, DeprecatedRenderURLReplacements) { { AuctionConfig::AdKeywordReplacement value; value.match = "${INTEREST_GROUP_NAME}"; @@ -595,8 +608,8 @@ } } -TEST(AuctionConfigMojomTraitsTest, - DeprecatedRenderURLReplacementsBadFormatting) { +TEST_F(AuctionConfigMojomTraitsTest, + DeprecatedRenderURLReplacementsBadFormatting) { { AuctionConfig::AdKeywordReplacement value; value.match = "${NO_END_BRACKET"; @@ -625,7 +638,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, SellerTimeout) { +TEST_F(AuctionConfigMojomTraitsTest, SellerTimeout) { { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.seller_timeout = base::Milliseconds(50); @@ -643,7 +656,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, BuyerTimeouts) { +TEST_F(AuctionConfigMojomTraitsTest, BuyerTimeouts) { { AuctionConfig::BuyerTimeouts value; value.all_buyers_timeout.emplace(base::Milliseconds(10)); @@ -675,7 +688,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, MaybePromiseBuyerTimeouts) { +TEST_F(AuctionConfigMojomTraitsTest, MaybePromiseBuyerTimeouts) { { AuctionConfig::BuyerTimeouts value; value.all_buyers_timeout.emplace(base::Milliseconds(10)); @@ -722,7 +735,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, ReportingTimeout) { +TEST_F(AuctionConfigMojomTraitsTest, ReportingTimeout) { { AuctionConfig auction_config = CreateBasicAuctionConfig(); auction_config.non_shared_params.reporting_timeout = base::Milliseconds(50); @@ -741,7 +754,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, BuyerCurrencies) { +TEST_F(AuctionConfigMojomTraitsTest, BuyerCurrencies) { { AuctionConfig::BuyerCurrencies value; value.all_buyers_currency = blink::AdCurrency::From("EUR"); @@ -760,7 +773,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, AdCurrency) { +TEST_F(AuctionConfigMojomTraitsTest, AdCurrency) { { AdCurrency value = AdCurrency::From("EUR"); EXPECT_TRUE(SerializeAndDeserialize(value)); @@ -777,7 +790,7 @@ } } -TEST(AuctionConfigMojomTraitsTest, MaybePromiseDirectFromSellerSignals) { +TEST_F(AuctionConfigMojomTraitsTest, MaybePromiseDirectFromSellerSignals) { { AuctionConfig::MaybePromiseDirectFromSellerSignals signals = CreateFullAuctionConfig().direct_from_seller_signals; @@ -797,14 +810,14 @@ } } -TEST(AuctionConfigMojomTraitsTest, AggregationCoordinatorNotHttps) { +TEST_F(AuctionConfigMojomTraitsTest, AggregationCoordinatorNotHttps) { AuctionConfig auction_config = CreateFullAuctionConfig(); auction_config.aggregation_coordinator_origin = url::Origin::Create(GURL("http://example.com")); EXPECT_FALSE(SerializeAndDeserialize(auction_config)); } -TEST(AuctionConfigMojomTraitsTest, ServerResponseConfig) { +TEST_F(AuctionConfigMojomTraitsTest, ServerResponseConfig) { { AuctionConfig::ServerResponseConfig config; config.request_id = base::Uuid::GenerateRandomV4(); @@ -813,7 +826,7 @@ } // Can't have `expects_additional_bids` without a nonce. -TEST(AuctionConfigMojomTraitsTest, AdditionalBidsNoNonce) { +TEST_F(AuctionConfigMojomTraitsTest, AdditionalBidsNoNonce) { AuctionConfig auction_config = CreateFullAuctionConfig(); ASSERT_TRUE(auction_config.expects_additional_bids); auction_config.non_shared_params.auction_nonce.reset(); @@ -824,7 +837,7 @@ } // Can't have `expects_additional_bids` with no interestGroupBuyers. -TEST(AuctionConfigMojomTraitsTest, AdditionalBidsNoInterestGroupBuyers) { +TEST_F(AuctionConfigMojomTraitsTest, AdditionalBidsNoInterestGroupBuyers) { AuctionConfig auction_config = CreateFullAuctionConfig(); // These rely on interestGroupBuyers, so we have to clear these for this test. auction_config.direct_from_seller_signals.mutable_value_for_testing().reset(); @@ -837,8 +850,20 @@ EXPECT_TRUE(SerializeAndDeserialize(auction_config)); } +TEST_F(AuctionConfigMojomTraitsTest, CreativeScanningDisabled) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndDisableFeature( + blink::features::kFledgeTrustedSignalsKVv1CreativeScanning); + + AuctionConfig auction_config = CreateFullAuctionConfig(); + EXPECT_FALSE(SerializeAndDeserialize(auction_config)); + + auction_config.send_creative_scanning_metadata = std::nullopt; + EXPECT_TRUE(SerializeAndDeserialize(auction_config)); +} + // Can't have `expects_additional_bids` with empty interestGroupBuyers. -TEST(AuctionConfigMojomTraitsTest, AdditionalBidsEmptyInterestGroupBuyers) { +TEST_F(AuctionConfigMojomTraitsTest, AdditionalBidsEmptyInterestGroupBuyers) { AuctionConfig auction_config = CreateFullAuctionConfig(); // These rely on interestGroupBuyers, so we have to clear these for this test. auction_config.direct_from_seller_signals.mutable_value_for_testing().reset(); @@ -852,7 +877,9 @@ } class AuctionConfigMojomTraitsDirectFromSellerSignalsTest - : public ::testing::TestWithParam<std::tuple<const char*, const char*>> { + : public AuctionConfigMojomTraitsTest, + public ::testing::WithParamInterface< + std::tuple<const char*, const char*>> { public: GURL& GetMutableURL(AuctionConfig& auction_config) const { const std::string which_path = WhichPath();
diff --git a/third_party/blink/common/interest_group/auction_config_test_util.cc b/third_party/blink/common/interest_group/auction_config_test_util.cc index 1e3758d..ca82ac5b 100644 --- a/third_party/blink/common/interest_group/auction_config_test_util.cc +++ b/third_party/blink/common/interest_group/auction_config_test_util.cc
@@ -165,6 +165,8 @@ auction_config.aggregation_coordinator_origin = url::Origin::Create(GURL("https://example.com")); + auction_config.send_creative_scanning_metadata = true; + return auction_config; }
diff --git a/third_party/blink/common/interest_group/devtools_serialization.cc b/third_party/blink/common/interest_group/devtools_serialization.cc index 928f3bb..12d51f6f 100644 --- a/third_party/blink/common/interest_group/devtools_serialization.cc +++ b/third_party/blink/common/interest_group/devtools_serialization.cc
@@ -302,6 +302,8 @@ SerializeIntoDict("adRenderId", ad.ad_render_id, result); SerializeIntoDict("allowedReportingOrigins", ad.allowed_reporting_origins, result); + SerializeIntoDict("creativeScanningMetadata", ad.creative_scanning_metadata, + result); return base::Value(std::move(result)); } @@ -422,6 +424,9 @@ conf.non_shared_params.per_buyer_real_time_reporting_types, result); + SerializeIntoDict("sendCreativeScanningMetadata", + conf.send_creative_scanning_metadata, result); + // For component auctions, we only serialize the seller names to give a // quick overview, since they'll get their own events. if (!conf.non_shared_params.component_auctions.empty()) {
diff --git a/third_party/blink/common/interest_group/devtools_serialization_unittest.cc b/third_party/blink/common/interest_group/devtools_serialization_unittest.cc index 23f4fd61..f58206b5 100644 --- a/third_party/blink/common/interest_group/devtools_serialization_unittest.cc +++ b/third_party/blink/common/interest_group/devtools_serialization_unittest.cc
@@ -197,7 +197,8 @@ "sellerRealTimeReportingType": "default-local-reporting", "perBuyerRealTimeReportingTypes": { "https://buyer.test": "default-local-reporting" - } + }, + "sendCreativeScanningMetadata": true } )"; @@ -270,7 +271,8 @@ GURL("https://example.com/train"), "metadata", "sizegroup", "bid", "bsid", std::vector<std::string>{"selectable_id1", "selectable_id2"}, "ad_render_id", - {{url::Origin::Create(GURL("https://reporting.example.org"))}}), + {{url::Origin::Create(GURL("https://reporting.example.org"))}}, + "please scan creative for bad stuff"), blink::InterestGroup::Ad(GURL("https://example.com/plane"), "meta2")}}; ig.ad_components = {{ {GURL("https://example.com/locomotive"), "meta3"}, @@ -315,7 +317,8 @@ "selectableBuyerAndSellerReportingIds": [ "selectable_id1", "selectable_id2" ], "buyerReportingId": "bid", "metadata": "metadata", - "renderURL": "https://example.com/train" + "renderURL": "https://example.com/train", + "creativeScanningMetadata": "please scan creative for bad stuff" }, { "metadata": "meta2", "renderURL": "https://example.com/plane"
diff --git a/third_party/blink/common/interest_group/interest_group.cc b/third_party/blink/common/interest_group/interest_group.cc index fccc409..59bf0300 100644 --- a/third_party/blink/common/interest_group/interest_group.cc +++ b/third_party/blink/common/interest_group/interest_group.cc
@@ -166,7 +166,8 @@ std::optional<std::vector<std::string>> selectable_buyer_and_seller_reporting_ids, std::optional<std::string> ad_render_id, - std::optional<std::vector<url::Origin>> allowed_reporting_origins) + std::optional<std::vector<url::Origin>> allowed_reporting_origins, + std::optional<std::string> creative_scanning_metadata) : size_group(std::move(size_group)), metadata(std::move(metadata)), buyer_reporting_id(std::move(buyer_reporting_id)), @@ -174,7 +175,8 @@ selectable_buyer_and_seller_reporting_ids( std::move(selectable_buyer_and_seller_reporting_ids)), ad_render_id(std::move(ad_render_id)), - allowed_reporting_origins(std::move(allowed_reporting_origins)) { + allowed_reporting_origins(std::move(allowed_reporting_origins)), + creative_scanning_metadata(std::move(creative_scanning_metadata)) { if (render_gurl.is_valid()) { render_url_ = render_gurl.spec(); } @@ -210,19 +212,13 @@ size += origin.Serialize().size(); } } + if (creative_scanning_metadata) { + size += creative_scanning_metadata->size(); + } return size; } -bool InterestGroup::Ad::operator==(const Ad& other) const { - return std::tie(render_url_, size_group, metadata, buyer_reporting_id, - buyer_and_seller_reporting_id, - selectable_buyer_and_seller_reporting_ids, ad_render_id, - allowed_reporting_origins) == - std::tie(other.render_url_, other.size_group, other.metadata, - other.buyer_reporting_id, other.buyer_and_seller_reporting_id, - other.selectable_buyer_and_seller_reporting_ids, - other.ad_render_id, other.allowed_reporting_origins); -} +bool InterestGroup::Ad::operator==(const Ad& other) const = default; InterestGroup::InterestGroup() = default; InterestGroup::~InterestGroup() = default; @@ -423,6 +419,7 @@ return EstimateSize() < blink::mojom::kMaxInterestGroupSize; } +// If this is changed, also change blink::EstimateBlinkInterestGroupSize(). size_t InterestGroup::EstimateSize() const { size_t size = 0u; size += owner.Serialize().size();
diff --git a/third_party/blink/common/interest_group/interest_group_mojom_traits.cc b/third_party/blink/common/interest_group/interest_group_mojom_traits.cc index d256932..b2344ca 100644 --- a/third_party/blink/common/interest_group/interest_group_mojom_traits.cc +++ b/third_party/blink/common/interest_group/interest_group_mojom_traits.cc
@@ -22,7 +22,8 @@ &out->selectable_buyer_and_seller_reporting_ids) || !data.ReadMetadata(&out->metadata) || !data.ReadAdRenderId(&out->ad_render_id) || - !data.ReadAllowedReportingOrigins(&out->allowed_reporting_origins)) { + !data.ReadAllowedReportingOrigins(&out->allowed_reporting_origins) || + !data.ReadCreativeScanningMetadata(&out->creative_scanning_metadata)) { return false; } return true;
diff --git a/third_party/blink/common/interest_group/interest_group_mojom_traits_test.cc b/third_party/blink/common/interest_group/interest_group_mojom_traits_test.cc index 754fd03..f79ebf44 100644 --- a/third_party/blink/common/interest_group/interest_group_mojom_traits_test.cc +++ b/third_party/blink/common/interest_group/interest_group_mojom_traits_test.cc
@@ -447,6 +447,22 @@ SerializeAndDeserializeAndCompare(interest_group); } +TEST(InterestGroupMojomTraitsTest, + SerializeAndDeserializeAdsWithCreativeScanningMetadata) { + InterestGroup interest_group = CreateInterestGroup(); + interest_group.ads.emplace(); + interest_group.ads->emplace_back(GURL(kUrl1), + /*metadata=*/std::nullopt); + interest_group.ads->emplace_back(GURL(kUrl2), + /*metadata=*/"[]"); + interest_group.ads->emplace_back(GURL("https://example.org/"), + /*metadata=*/"[]"); + interest_group.ads.value()[0].creative_scanning_metadata = "hi"; + interest_group.ads.value()[1].creative_scanning_metadata = "there"; + interest_group.ads.value()[2].creative_scanning_metadata = std::nullopt; + SerializeAndDeserializeAndCompare(interest_group); +} + TEST(InterestGroupMojomTraitsTest, SerializeAndDeserializeAdComponents) { InterestGroup interest_group = CreateInterestGroup(); interest_group.ad_components.emplace();
diff --git a/third_party/blink/common/interest_group/test/interest_group_test_utils.cc b/third_party/blink/common/interest_group/test/interest_group_test_utils.cc index 948aee4..4b3f47e 100644 --- a/third_party/blink/common/interest_group/test/interest_group_test_utils.cc +++ b/third_party/blink/common/interest_group/test/interest_group_test_utils.cc
@@ -224,6 +224,8 @@ }; IG_COMPARE_VEC(actual.allowed_reporting_origins, expected.allowed_reporting_origins, compare_origins); + IG_COMPARE(actual.creative_scanning_metadata, + expected.creative_scanning_metadata); }; IG_COMPARE_VEC(actual.ads, expected.ads, compare_ads); IG_COMPARE_VEC(actual.ad_components, expected.ad_components, compare_ads);
diff --git a/third_party/blink/public/common/interest_group/auction_config.h b/third_party/blink/public/common/interest_group/auction_config.h index 3e4427e..15c0d83c 100644 --- a/third_party/blink/public/common/interest_group/auction_config.h +++ b/third_party/blink/public/common/interest_group/auction_config.h
@@ -467,7 +467,11 @@ // Origin for the Coordinator to be used for Private Aggregation. std::optional<url::Origin> aggregation_coordinator_origin; - static_assert(__LINE__ == 470, R"( + // If true, data from creative_scanning_metadata field of interest groups + // will be sent to V1 trusted seller signals server. + std::optional<bool> send_creative_scanning_metadata; + + static_assert(__LINE__ == 474, R"( If modifying AuctionConfig fields, please make sure to also modify: * third_party/blink/public/mojom/interest_group/interest_group_types.mojom
diff --git a/third_party/blink/public/common/interest_group/auction_config_mojom_traits.h b/third_party/blink/public/common/interest_group/auction_config_mojom_traits.h index 17f2aca68..2fbc9fa 100644 --- a/third_party/blink/public/common/interest_group/auction_config_mojom_traits.h +++ b/third_party/blink/public/common/interest_group/auction_config_mojom_traits.h
@@ -512,6 +512,11 @@ return config.aggregation_coordinator_origin; } + static std::optional<bool> send_creative_scanning_metadata( + const blink::AuctionConfig& config) { + return config.send_creative_scanning_metadata; + } + static bool Read(blink::mojom::AuctionAdConfigDataView data, blink::AuctionConfig* out); };
diff --git a/third_party/blink/public/common/interest_group/interest_group.h b/third_party/blink/public/common/interest_group/interest_group.h index 8c4fc42..c7e1be1 100644 --- a/third_party/blink/public/common/interest_group/interest_group.h +++ b/third_party/blink/public/common/interest_group/interest_group.h
@@ -66,7 +66,8 @@ selectable_buyer_and_seller_reporting_ids = std::nullopt, std::optional<std::string> ad_render_id = std::nullopt, std::optional<std::vector<url::Origin>> allowed_reporting_origins = - std::nullopt); + std::nullopt, + std::optional<std::string> creative_scanning_metadata = std::nullopt); ~Ad(); // Returns the approximate size of the contents of this InterestGroup::Ad, @@ -94,6 +95,9 @@ // Optional origins that can receive macro expanded reports. std::optional<std::vector<url::Origin>> allowed_reporting_origins; + // Optional metadata to provide v1 trusted seller signals server. + std::optional<std::string> creative_scanning_metadata; + // TODO(crbug.com/355010821): Remove once all callers have been migrated. bool operator==(const Ad& other) const; @@ -173,7 +177,7 @@ std::optional<AdditionalBidKey> additional_bid_key; std::optional<url::Origin> aggregation_coordinator_origin; - static_assert(__LINE__ == 176, R"( + static_assert(__LINE__ == 180, R"( If modifying InterestGroup fields, make sure to also modify: * IsValid(), EstimateSize(), and in this class @@ -183,11 +187,12 @@ * auction_ad_interest_group.idl * navigator_auction.cc * interest_group_types.mojom -* validate_blink_interest_group.cc +* validate_blink_interest_group.cc (includes blink version of EstimateSize) * validate_blink_interest_group_test.cc + (at least CreateFullyPopulatedInterestGroup) * test_interest_group_builder[.h/.cc] * interest_group_mojom_traits[.h/.cc/.test] -* bidder_worklet.cc (to pass the InterestGroup to generateBid()) +* bidder_lazy_filler.cc (to pass the InterestGroup to generateBid()) * shared_storage_worklet_global_scope.cc (interestGroups()) * shared_storage_worklet_unittest.cc (SharedStorageWorkletTest.InterestGroups) @@ -200,12 +205,12 @@ these: * Add field to content::InterestGroupUpdate -* InterestGroupStorage::DoStoreInterestGroupUpdate() +* DoUpdateInterestGroup in interest_group_storage.cc * ParseUpdateJson in interest_group_update_manager.cc * Update AdAuctionServiceImplTest.UpdateAllUpdatableFields If the new field is a required Mojo field, set a value for it in all the -texprotos in the ad_auction_service_mojolpm_fuzzer/ directory. +textprotos in the ad_auction_service_mojolpm_fuzzer/ directory. See crrev.com/c/3517534 for an example (adding the priority field), and also remember to update bidder_worklet.cc too.
diff --git a/third_party/blink/public/common/interest_group/interest_group_mojom_traits.h b/third_party/blink/public/common/interest_group/interest_group_mojom_traits.h index 64ffd55..70d0fff 100644 --- a/third_party/blink/public/common/interest_group/interest_group_mojom_traits.h +++ b/third_party/blink/public/common/interest_group/interest_group_mojom_traits.h
@@ -64,6 +64,11 @@ return ad.allowed_reporting_origins; } + static const std::optional<std::string>& creative_scanning_metadata( + const blink::InterestGroup::Ad& ad) { + return ad.creative_scanning_metadata; + } + static bool Read(blink::mojom::InterestGroupAdDataView data, blink::InterestGroup::Ad* out); };
diff --git a/third_party/blink/public/mojom/interest_group/interest_group_types.mojom b/third_party/blink/public/mojom/interest_group/interest_group_types.mojom index 0a02bc6a..9efa48f 100644 --- a/third_party/blink/public/mojom/interest_group/interest_group_types.mojom +++ b/third_party/blink/public/mojom/interest_group/interest_group_types.mojom
@@ -41,6 +41,12 @@ // receive reports with macros. All origins must be HTTPS. Only meaningful in // `InterestGroup.ads`, but ignored in `InterestGroup.ad_components`. array<url.mojom.Origin>? allowed_reporting_origins; + + // Optional metadata sent to trusted seller signals server in V1 protocol, + // ostensively to help do things like scan creatives against malware. + // This is opaque to Chrome, and will be passed to the server URL verbatim + // (modulo escaping required by being a query param). + string? creative_scanning_metadata; }; // The maximum size of a valid interest group in bytes. @@ -656,6 +662,10 @@ // Origin for the Coordinator to be used for the seller's Private Aggregation // requests. url.mojom.Origin? aggregation_coordinator_origin; + + // If true, data from creative_scanning_metadata field of interest groups + // will be sent to V1 trusted seller signals server. + bool? send_creative_scanning_metadata; }; // Per-buyer config for GetInterestGroupAdAuctionData().
diff --git a/third_party/blink/renderer/core/css/style_element.cc b/third_party/blink/renderer/core/css/style_element.cc index 033ceea..92e146d3 100644 --- a/third_party/blink/renderer/core/css/style_element.cc +++ b/third_party/blink/renderer/core/css/style_element.cc
@@ -40,10 +40,8 @@ namespace blink { -static bool IsCSS(const Element& element, const AtomicString& type) { - return type.empty() || - (element.IsHTMLElement() ? EqualIgnoringASCIICase(type, "text/css") - : (type == "text/css")); +static bool IsCSS(const AtomicString& type) { + return type.empty() || EqualIgnoringASCIICase(type, "text/css"); } StyleElement::StyleElement(Document* document, bool created_by_parser) @@ -169,7 +167,7 @@ // If type is empty or CSS, this is a CSS style sheet. const AtomicString& type = this->type(); - if (IsCSS(element, type) && passes_content_security_policy_checks) { + if (IsCSS(type) && passes_content_security_policy_checks) { MediaQuerySet* media_queries = nullptr; const AtomicString& media_string = media(); bool media_query_matches = true;
diff --git a/third_party/blink/renderer/modules/ad_auction/auction_ad.idl b/third_party/blink/renderer/modules/ad_auction/auction_ad.idl index 23f4384a..036d625 100644 --- a/third_party/blink/renderer/modules/ad_auction/auction_ad.idl +++ b/third_party/blink/renderer/modules/ad_auction/auction_ad.idl
@@ -18,4 +18,6 @@ any metadata; DOMString adRenderId; sequence<USVString> allowedReportingOrigins; + [RuntimeEnabled=FledgeTrustedSignalsKVv1CreativeScanning] + USVString creativeScanningMetadata; };
diff --git a/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl b/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl index 358de20..2593d18 100644 --- a/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl +++ b/third_party/blink/renderer/modules/ad_auction/auction_ad_config.idl
@@ -51,6 +51,8 @@ long maxTrustedScoringSignalsURLLength; [RuntimeEnabled=FledgeTrustedSignalsKVv2Support] USVString trustedScoringSignalsCoordinator; + [RuntimeEnabled=FledgeTrustedSignalsKVv1CreativeScanning] + boolean sendCreativeScanningMetadata; sequence<USVString> interestGroupBuyers; Promise<any> auctionSignals; Promise<any> sellerSignals;
diff --git a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc index 9a61d18..611598f3 100644 --- a/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc +++ b/third_party/blink/renderer/modules/ad_auction/navigator_auction.cc
@@ -988,6 +988,9 @@ } } } + if (ad->hasCreativeScanningMetadata()) { + mojo_ad->creative_scanning_metadata = ad->creativeScanningMetadata(); + } output.ads->push_back(std::move(mojo_ad)); } return true; @@ -1025,6 +1028,9 @@ if (ad->hasAdRenderId()) { mojo_ad->ad_render_id = ad->adRenderId(); } + if (ad->hasCreativeScanningMetadata()) { + mojo_ad->creative_scanning_metadata = ad->creativeScanningMetadata(); + } output.ad_components->push_back(std::move(mojo_ad)); } return true; @@ -2650,6 +2656,11 @@ base::Milliseconds(config.reportingTimeout()); } + if (config.hasSendCreativeScanningMetadata()) { + mojo_config->send_creative_scanning_metadata = + config.sendCreativeScanningMetadata(); + } + if (config.hasSellerCurrency()) { std::string seller_currency_str = config.sellerCurrency().Ascii(); if (!IsValidAdCurrencyCode(seller_currency_str)) {
diff --git a/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group.cc b/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group.cc index 892b97c..76d3b93e 100644 --- a/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group.cc +++ b/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group.cc
@@ -143,6 +143,7 @@ size += origin->ToString().length(); } } + size += ad->creative_scanning_metadata.length(); } } @@ -152,6 +153,7 @@ size += ad->size_group.length(); size += ad->metadata.length(); size += ad->ad_render_id.length(); + size += ad->creative_scanning_metadata.length(); } }
diff --git a/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group_test.cc b/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group_test.cc index fd323fc9..712ea6e 100644 --- a/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group_test.cc +++ b/third_party/blink/renderer/modules/ad_auction/validate_blink_interest_group_test.cc
@@ -39,7 +39,8 @@ /*buyer_and_seller_reporting_id=*/String(), /*selectable_buyer_and_seller_reporting_ids=*/std::nullopt, /*metadata=*/String(), /*ad_render_id=*/String(), - /*allowed_reporting_origins=*/std::nullopt); + /*allowed_reporting_origins=*/std::nullopt, + /*creative_scanning_metadata=*/String()); } } // namespace @@ -146,6 +147,7 @@ mojo_ad1->ad_render_id = String::FromUTF8("\"NotTooLong\""); mojo_ad1->allowed_reporting_origins.emplace(); mojo_ad1->allowed_reporting_origins->emplace_back(kOrigin); + mojo_ad1->creative_scanning_metadata = String::FromUTF8("scan me"); blink_interest_group->ads->push_back(std::move(mojo_ad1)); auto mojo_ad2 = mojom::blink::InterestGroupAd::New(); mojo_ad2->render_url = @@ -165,6 +167,8 @@ auto mojo_ad_component2 = mojom::blink::InterestGroupAd::New(); mojo_ad_component2->render_url = KURL(String::FromUTF8("https://origin.test/foo?component#baz2")); + mojo_ad_component2->creative_scanning_metadata = + String::FromUTF8("scan this"); blink_interest_group->ad_components->push_back( std::move(mojo_ad_component2)); @@ -1031,7 +1035,8 @@ /*buyer_and_seller_reporting_id=*/String(), /*selectable_buyer_and_seller_reporting_ids=*/std::nullopt, /*metadata=*/String(), /*ad_render_id=*/String(), - /*allowed_reporting_origins=*/std::nullopt)); + /*allowed_reporting_origins=*/std::nullopt, + /*creative_scanning_metadata=*/String())); blink_interest_group->ad_sizes.emplace(); blink_interest_group->ad_sizes->insert( "size_name", blink::mojom::blink::AdSize::New( @@ -1074,7 +1079,8 @@ /*buyer_and_seller_reporting_id=*/String(), /*selectable_buyer_and_seller_reporting_id=*/std::nullopt, /*metadata=*/String(), /*ad_render_id=*/String(), - /*allowed_reporting_origins=*/std::nullopt)); + /*allowed_reporting_origins=*/std::nullopt, + /*creative_scanning_metadata=*/String())); blink_interest_group->ad_sizes.emplace(); blink_interest_group->ad_sizes->insert( "size_name", blink::mojom::blink::AdSize::New(
diff --git a/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_global_scope.cc b/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_global_scope.cc index 7b12c69e..bd6ba7f 100644 --- a/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_global_scope.cc +++ b/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_global_scope.cc
@@ -142,6 +142,9 @@ } ad->setAllowedReportingOrigins(std::move(allowed_reporting_origins)); } + if (mojom_ad->creative_scanning_metadata) { + ad->setCreativeScanningMetadata(mojom_ad->creative_scanning_metadata); + } return ad; }
diff --git a/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_unittest.cc b/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_unittest.cc index de53326e..35e6e01b4 100644 --- a/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_unittest.cc +++ b/third_party/blink/renderer/modules/shared_storage/shared_storage_worklet_unittest.cc
@@ -1950,6 +1950,8 @@ {{url::Origin::Create(GURL("https://reporting.example.org"))}}), blink::InterestGroup::Ad(GURL("https://example.com/plane"), "\"meta2\"")}}; + ig.ads.value()[0].creative_scanning_metadata = "scan"; + ig.ads.value()[1].creative_scanning_metadata = "me please"; ig.ad_components = {{ {GURL("https://example.com/locomotive"), "\"meta3\""}, {GURL("https://example.com/turbojet"), "\"meta4\""}, @@ -2102,6 +2104,7 @@ ], "buyerAndSellerReportingId": "bsid", "buyerReportingId": "bid", + "creativeScanningMetadata": "scan", "metadata": "metadata", "renderURL": "https://example.com/train", "renderUrl": "https://example.com/train", @@ -2112,9 +2115,10 @@ "sizeGroup": "sizegroup" }, { + "creativeScanningMetadata": "me please", "metadata": "meta2", "renderURL": "https://example.com/plane", - "renderUrl": "https://example.com/plane" + "renderUrl": "https://example.com/plane", } ], "auctionServerRequestFlags": [
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc index a2ccb55..446d6b6e 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc
@@ -805,6 +805,25 @@ EXPECT_EQ(provider->GetSkImageInfo(), kInfo); } +TEST_F( + CanvasResourceProviderTest, + CanvasResourceProviderSwapChain_NonDefaultColorSpaceIsPropagatedToResource) { + const gfx::Size kSize(10, 10); + const SkImageInfo kInfo = SkImageInfo::MakeN32( + 10, 10, kPremul_SkAlphaType, SkColorSpace::MakeSRGBLinear()); + + auto provider = CanvasResourceProvider::CreateSwapChainProvider( + kSize, kInfo.colorType(), kInfo.alphaType(), kInfo.refColorSpace(), + CanvasResourceProvider::ShouldInitialize::kCallClear, + context_provider_wrapper_); + + ASSERT_TRUE(provider); + ASSERT_EQ(provider->GetSkImageInfo(), kInfo); + + auto resource = provider->ProduceCanvasResource(FlushReason::kTesting); + EXPECT_EQ(resource->CreateSkImageInfo(), kInfo); +} + TEST_F(CanvasResourceProviderTest, FlushForImage) { auto src_provider = CanvasResourceProvider::CreateSharedImageProvider( gfx::Size(10, 10), kN32_SkColorType, kPremul_SkAlphaType,
diff --git a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc index 978bb73..3e2f938 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
@@ -845,7 +845,8 @@ // returns true CHECK(client_si); return ExternalCanvasResource::Create( - client_si, out_resource.sync_token(), out_resource.resource_source, + client_si, out_resource.sync_token(), + viz::TransferableResource::ResourceSource::kDrawingBuffer, out_resource.hdr_metadata, std::move(out_release_callback), context_provider_->GetWeakPtr(), /*resource_provider=*/nullptr);
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 17c9d01a..46d2097 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -2077,6 +2077,10 @@ status: "test", }, { + name: "FledgeTrustedSignalsKVv1CreativeScanning", + status: "test", + }, + { name: "FledgeTrustedSignalsKVv2Support", status: "test", },
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index e662ea52..e32e9dc 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -1719,6 +1719,13 @@ {} ] ], + "chrome-bug-385317081-crash.html": [ + "6134a636824373c036777c67f7830b0ba0ba9928", + [ + null, + {} + ] + ], "chrome-custom-highlight-crash.html": [ "61e5075ed4e1b485019d96b402bbf17926bd1098", [ @@ -291431,7 +291438,7 @@ ] ], "select-appearance-custom-button.tentative.html": [ - "89683d29f6ec0d73727208a5c144d5a89248feac", + "408e96abbe5facae60a1cd027618a1a80883a2b8", [ null, [ @@ -291441,12 +291448,27 @@ ] ], { + "fuzzy": [ + [ + null, + [ + [ + 0, + 3 + ], + [ + 0, + 1 + ] + ] + ] + ], "testdriver": true } ] ], "select-appearance-dark-mode.tentative.html": [ - "57622ad7feed88085d3e2484d2d22a83b9e4e851", + "45934f06336d54e46fc20032c1c3acd1caae5371", [ null, [ @@ -291462,7 +291484,7 @@ [ [ 0, - 1 + 2 ], [ 0, @@ -291476,7 +291498,7 @@ ] ], "select-appearance-default-button.tentative.html": [ - "f0e17ff349b2f456320dc4388ca7a89309e0bbaa", + "03e9b8eaeceedb59e206374da77766ca0d4a4589", [ null, [ @@ -291492,7 +291514,7 @@ [ [ 0, - 1 + 3 ], [ 0, @@ -291656,7 +291678,7 @@ ] ], "select-appearance-font-inheriting.tentative.html": [ - "972b6d5dac047e02643679f0eb09c743ce5530d1", + "1fced67d47146643b1fbbb73d248753b1cd0771c", [ null, [ @@ -291731,7 +291753,7 @@ ] ], "select-appearance-optgroup-legend.tentative.html": [ - "6b973bc84ec7e9c4f249c8cf3002370f9336e016", + "371def29412368f161716f2c1f7da96e65593ead", [ null, [ @@ -291747,7 +291769,7 @@ [ [ 0, - 1 + 3 ], [ 0, @@ -291761,7 +291783,7 @@ ] ], "select-appearance-optgroup-rendering.tentative.html": [ - "fd48e61731d329d34a08e2587988cbb5f201421b", + "feddf6813d9e65a08cc9e08524fd42bbc47b935d", [ null, [ @@ -291777,7 +291799,7 @@ [ [ 0, - 1 + 3 ], [ 0, @@ -291791,7 +291813,7 @@ ] ], "select-appearance-option-with-label.tentative.html": [ - "c5abc14c3860e860b64e9ac652f9e1d55d3e9c4d", + "accc2f9edf8ce6b200b5ac1436618667668bd4e2", [ null, [ @@ -291807,7 +291829,7 @@ [ [ 0, - 1 + 3 ], [ 0, @@ -292024,7 +292046,7 @@ ] ], "select-open-invalidation.tentative.html": [ - "9fe59fb1f664e903ff21fc885b9cc6d62a7dd6fe", + "c696e517186947a8a3d805f7134af0a1070ee1da", [ null, [ @@ -414017,10 +414039,6 @@ "e8b125f638c5685227fe6d75dc03632c4a929ee4", [] ], - "SpeechRecognition-basics.https-expected.txt": [ - "07bdbbfb0be49fdb7ca2e6538eb89521b0f2aeaf", - [] - ], "WEB_FEATURES.yml": [ "7a24460e1bfe11d5136571729eded320e2f8e97f", [] @@ -518275,6 +518293,13 @@ {} ] ], + "mutation-observer.html": [ + "a2bf4c4246f4fe1732e60df536d69916d80066fb", + [ + null, + {} + ] + ], "nonce.html": [ "50bbdca2ecd510720cba09ade9f8f14a0d06c952", [ @@ -557286,7 +557311,7 @@ ] ], "auction-config.https.window.js": [ - "1b2eba36169271d84a9238631fea1d3511930cdf", + "50b9cb9e9e6b071604522268fc1113a7f1a8a662", [ "fledge/tentative/auction-config.https.window.html?1-5", { @@ -557369,11 +557394,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -557461,11 +557482,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -557553,11 +557570,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -557645,11 +557658,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -557737,11 +557746,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -557829,11 +557834,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -557921,11 +557922,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -558013,11 +558010,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -558105,11 +558098,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -558197,11 +558186,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -558289,11 +558274,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -558381,11 +558362,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -558473,18 +558450,14 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" } ], [ - "fledge/tentative/auction-config.https.window.html?66-70", + "fledge/tentative/auction-config.https.window.html?66-last", { "script_metadata": [ [ @@ -558565,103 +558538,7 @@ ], [ "variant", - "?66-70" - ], - [ - "variant", - "?71-last" - ] - ], - "timeout": "long" - } - ], - [ - "fledge/tentative/auction-config.https.window.html?71-last", - { - "script_metadata": [ - [ - "script", - "/resources/testdriver.js" - ], - [ - "script", - "/resources/testdriver-vendor.js" - ], - [ - "script", - "/common/utils.js" - ], - [ - "script", - "resources/fledge-util.sub.js" - ], - [ - "script", - "/common/subset-tests.js" - ], - [ - "timeout", - "long" - ], - [ - "variant", - "?1-5" - ], - [ - "variant", - "?6-10" - ], - [ - "variant", - "?11-15" - ], - [ - "variant", - "?16-20" - ], - [ - "variant", - "?21-25" - ], - [ - "variant", - "?26-30" - ], - [ - "variant", - "?31-35" - ], - [ - "variant", - "?36-40" - ], - [ - "variant", - "?40-45" - ], - [ - "variant", - "?46-50" - ], - [ - "variant", - "?51-55" - ], - [ - "variant", - "?56-60" - ], - [ - "variant", - "?61-65" - ], - [ - "variant", - "?66-70" - ], - [ - "variant", - "?71-last" + "?66-last" ] ], "timeout": "long" @@ -560259,7 +560136,7 @@ ] ], "direct-from-seller-signals.https.window.js": [ - "7f9baa978c0750bf24078a24acfef3f18dff2bb1", + "3f58b2c8ad541da98b1345bc7db3994d8ed5340e", [ "fledge/tentative/direct-from-seller-signals.https.window.html?1-4", { @@ -622081,7 +621958,7 @@ ] ], "proxy-modifier-click-to-associated-element.tentative.html": [ - "fa50c080250699cf48d2661951ad73abc03655d4", + "a4fe0f7bc3208e034c891741ad81faf0d8b93667", [ null, { @@ -622385,7 +622262,7 @@ ] ], "select-keyboard-focus-change-for-hidden-options.tentative.html": [ - "0067d8d7e8f167e20205c7f99c56a9fa2a3d1ee8", + "b142680d2e912f87002556ce81bb8400886806e9", [ null, { @@ -685510,7 +685387,7 @@ }, "speech-api": { "SpeechRecognition-basics.https.html": [ - "dc5d3f5c1df6e254b05ba1decf353abc3ccbef13", + "d4dfc5edd093d5fc431341a54c66a2f0b7a0adec", [ null, {} @@ -703322,7 +703199,7 @@ ] ], "block-string-assignment-to-DOMParser-parseFromString.html": [ - "dd912e6b8dea596141630d7b9d18ab6bbe8c9925", + "6dbebd29a43486c7c9affe8f0962c97d34c062b7", [ null, {} @@ -703336,14 +703213,14 @@ ] ], "block-string-assignment-to-Document-parseHTMLUnsafe.html": [ - "405da5f1643eccc0a22b31ff91a044ac6237843d", + "22adc48a79242e51393931edd2c4f7cfa1d7d5c6", [ null, {} ] ], "block-string-assignment-to-Document-write.html": [ - "8fcdc8b2c6fb931bcd2aeb401da0254658900aba", + "350b3ba422a4aee60f991336010f8ac63453c99a", [ null, {} @@ -703357,7 +703234,7 @@ ] ], "block-string-assignment-to-Element-outerHTML.html": [ - "acf5a42622ca9d38b61e3c6b0d9cbd852dd73fc5", + "eec0dfc3bc9c1b155de995291d1d32a30d4d0094", [ null, {} @@ -703378,7 +703255,7 @@ ] ], "block-string-assignment-to-Element-setHTMLUnsafe.html": [ - "34975f9d6883eccb8763dc781b03bc9e70614a42", + "6bbf9d1572fbde602bac7b0b22da77a39929b383", [ null, {} @@ -703399,14 +703276,14 @@ ] ], "block-string-assignment-to-ShadowRoot-innerHTML.html": [ - "4b32db165810c3ecb99c505f7a5debfa7d86087a", + "ace679429043fe085c30b278d43814e7ba0c027b", [ null, {} ] ], "block-string-assignment-to-ShadowRoot-setHTMLUnsafe.html": [ - "f61de6891f3c2c7879165ec32d017085b80fcfe3", + "e42b39795ab5b9018c6f623a9a3335ad4e445e1c", [ null, {} @@ -746868,7 +746745,7 @@ ] ], "reduce_l1.https.any.js": [ - "3bbb85b32c4f66554936b5c2fabf6089ca924575", + "d2d39b3b67ae4cfbd5de92e1a7c666928ff26170", [ "webnn/conformance_tests/reduce_l1.https.any.html?cpu", { @@ -747087,7 +746964,7 @@ ] ], "reduce_l2.https.any.js": [ - "d579158921c2c7f4afc927d280a9a17ac9c4d6fb", + "d8b9acd1cd231256df74e745bc0a1918b72caa73", [ "webnn/conformance_tests/reduce_l2.https.any.html?cpu", { @@ -747306,7 +747183,7 @@ ] ], "reduce_log_sum.https.any.js": [ - "ab827e31452d3f61709239f0749e925a312344df", + "2afc4f698003ca021bdd1754e9151b6e3da63bf4", [ "webnn/conformance_tests/reduce_log_sum.https.any.html?cpu", { @@ -747525,7 +747402,7 @@ ] ], "reduce_log_sum_exp.https.any.js": [ - "eecdf56f15b99a4db8352fd3ffe52a06c2e85258", + "1a9934e88c5c6b64d11ac1917b9eaedfa8764384", [ "webnn/conformance_tests/reduce_log_sum_exp.https.any.html?cpu", { @@ -747744,7 +747621,7 @@ ] ], "reduce_max.https.any.js": [ - "3695d1d0db2aed63c853ee5de769f732b8614e99", + "9d7462140b4cb553beab8f6b5db5bc449a7a25ac", [ "webnn/conformance_tests/reduce_max.https.any.html?cpu", { @@ -747963,7 +747840,7 @@ ] ], "reduce_mean.https.any.js": [ - "01d2a548b639486519eb9509e55ad7c27e314e9f", + "834bfb22252c8bf00b1a271158d02f7d04473717", [ "webnn/conformance_tests/reduce_mean.https.any.html?cpu", { @@ -748182,7 +748059,7 @@ ] ], "reduce_min.https.any.js": [ - "b09fd5cf8a37461bb8f368b9b20b1bae253173fa", + "c618a92b397b60d060605bd815d6b805719eedf2", [ "webnn/conformance_tests/reduce_min.https.any.html?cpu", { @@ -748401,7 +748278,7 @@ ] ], "reduce_product.https.any.js": [ - "721c9a1e499bbd83abdcb71eb3ec4e215ec23562", + "0669c666cf089b9b1066ba2a28f2b884478e3d45", [ "webnn/conformance_tests/reduce_product.https.any.html?cpu", { @@ -748620,7 +748497,7 @@ ] ], "reduce_sum.https.any.js": [ - "48b65a77b00f07e54d5564d90a4f02e5702a1557", + "0f4fe4419de29e33974d405ce9eb1df88dfc3197", [ "webnn/conformance_tests/reduce_sum.https.any.html?cpu", { @@ -748839,7 +748716,7 @@ ] ], "reduce_sum_square.https.any.js": [ - "435e748f7b56a3f9aa80951a39781ef2a5c8f159", + "d2c494e9e52d13a3c04df876312b6cb972455de5", [ "webnn/conformance_tests/reduce_sum_square.https.any.html?cpu", { @@ -807086,7 +806963,7 @@ ] ], "navigation.py": [ - "e40c582b05f4e54f89def30b44688b51f9096143", + "dbf446966f43970224372cfab9bae271142eafa4", [ null, {} @@ -809493,7 +809370,7 @@ ] ], "navigation.py": [ - "530327c0dbba09f9e44dc357b448a1faf583bd58", + "db5b8241e02f01be11812db6f1fe2df3e1018ad6", [ null, {}
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/document-metadata/the-style-element/style_type_svg-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/document-metadata/the-style-element/style_type_svg-expected.txt deleted file mode 100644 index 647b76e..0000000 --- a/third_party/blink/web_tests/external/wpt/html/semantics/document-metadata/the-style-element/style_type_svg-expected.txt +++ /dev/null
@@ -1,5 +0,0 @@ -This is a testharness.js-based test. -[FAIL] With a mixed-case type attribute, the style should apply - assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-DOMParser-parseFromString.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-DOMParser-parseFromString.html index dd912e6b..6dbebd29 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-DOMParser-parseFromString.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-DOMParser-parseFromString.html
@@ -33,7 +33,13 @@ // After default policy creation string assignment implicitly calls createHTML. test(t => { - let p = window.trustedTypes.createPolicy("default", { createHTML: createHTMLJS }, true); + let p = window.trustedTypes.createPolicy("default", { + createHTML: (value, type, sink) => { + assert_equals(sink, "DOMParser parseFromString"); + return createHTMLJS(value); + } + }); + let parser = new DOMParser(); let doc = parser.parseFromString(INPUTS.HTML, "text/html"); assert_equals(doc.body.innerText, RESULTS.HTML);
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-parseHTMLUnsafe.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-parseHTMLUnsafe.html index 405da5f1..22adc48 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-parseHTMLUnsafe.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-parseHTMLUnsafe.html
@@ -7,6 +7,8 @@ <script src="support/helper.sub.js"></script> <meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script';"> + + <link rel="help" href="https://html.spec.whatwg.org/#dom-parsehtmlunsafe"> </head> <body> <script> @@ -33,7 +35,12 @@ // After default policy creation string assignment implicitly calls createHTML. test(t => { - let p = window.trustedTypes.createPolicy("default", { createHTML: createHTMLJS }, true); + let p = window.trustedTypes.createPolicy("default", { createHTML: + (value, _, sink) => { + assert_equals(sink, "Document parseHTMLUnsafe"); + return createHTMLJS(value); + } + }); let doc = Document.parseHTMLUnsafe(INPUTS.HTML); assert_equals(doc.body.innerText, RESULTS.HTML); }, "'Document.parseHTMLUnsafe(string)' assigned via default policy (successful HTML transformation).");
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-write.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-write.html index 8fcdc8b..350b3ba4 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-write.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Document-write.html
@@ -119,7 +119,13 @@ }, "`document.writeln(null)` throws"); let default_policy = trustedTypes.createPolicy('default', - { createHTML: (html) => { + { createHTML: (html, type, sink) => { + if (html === "assertSinkEqualsDocumentWrite") { + assert_equals(sink, "Document write"); + } else if (html === "assertSinkEqualsDocumentWriteLn") { + assert_equals(sink, "Document writeln"); + } + return html.replace("Hi", "Quack") .replace("transformed", "a duck") .replace("defghi", "zxcvbn") @@ -148,6 +154,11 @@ assert_equals(document.body.innerText, "abczxcvbnjkl"); }, "`document.write(string, TrustedHTML)` observes default policy"); + test(t => { + document.body.innerText = ''; + document.write("assertSinkEqualsDocumentWrite"); + }, "`document.write` passes the correct sink string to the default policy"); + // Default policy works. (Now for writeln.) test(t => { document.body.innerText = ''; @@ -170,4 +181,9 @@ document.writeln(a, b); assert_equals(document.body.innerText, "abczxcvbnjkl"); }, "`document.writeln(string, TrustedHTML)` observes default policy"); + + test(t => { + document.body.innerText = ''; + document.writeln("assertSinkEqualsDocumentWriteLn"); + }, "`document.writeln` passes the correct sink string to the default policy"); </script>
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-outerHTML.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-outerHTML.html index acf5a42..eec0dfc 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-outerHTML.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-outerHTML.html
@@ -65,7 +65,12 @@ // After default policy creation string assignment implicitly calls createHTML. test(t => { - let p = window.trustedTypes.createPolicy("default", { createHTML: createHTMLJS }, true); + let p = window.trustedTypes.createPolicy("default", { + createHTML: (value, type, sink) => { + assert_equals(sink, "Element outerHTML"); + return createHTMLJS(value); + } + }); var d = document.createElement('div'); document.querySelector('#container').appendChild(d);
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setHTMLUnsafe.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setHTMLUnsafe.html index 34975f9d..6bbf9d1 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setHTMLUnsafe.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setHTMLUnsafe.html
@@ -53,7 +53,12 @@ // After default policy creation string assignment implicitly calls createHTML. test(t => { - let p = window.trustedTypes.createPolicy("default", { createHTML: createHTMLJS }, true); + let p = window.trustedTypes.createPolicy("default", { + createHTML: (value, type, sink) => { + assert_equals(sink, "Element setHTMLUnsafe"); + return createHTMLJS(value); + } + }); var d = document.createElement('div'); document.querySelector('#container').appendChild(d);
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-innerHTML.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-innerHTML.html index 4b32db16..ace6794 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-innerHTML.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-innerHTML.html
@@ -55,7 +55,12 @@ // After default policy creation string assignment implicitly calls createHTML. test(t => { t.add_cleanup(cleanup); - let p = window.trustedTypes.createPolicy("default", { createHTML: createHTMLJS }); + let p = window.trustedTypes.createPolicy("default", { + createHTML: (value, type, sink) => { + assert_equals(sink, "ShadowRoot innerHTML"); + return createHTMLJS(value); + } + }); let d = document.createElement('div'); let s = d.attachShadow({mode: 'open'});
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-setHTMLUnsafe.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-setHTMLUnsafe.html index f61de68..e42b397 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-setHTMLUnsafe.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-ShadowRoot-setHTMLUnsafe.html
@@ -56,7 +56,12 @@ // After default policy creation string assignment implicitly calls createHTML. test(t => { t.add_cleanup(cleanup); - let p = window.trustedTypes.createPolicy("default", { createHTML: createHTMLJS }); + let p = window.trustedTypes.createPolicy("default", { createHTML: + (value, type, sink) => { + assert_equals(sink, "ShadowRoot setHTMLUnsafe"); + return createHTMLJS(value); + } + }); let d = document.createElement('div'); let s = d.attachShadow({mode: 'open'});
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/navigation.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/navigation.py index e40c582b..dbf4469 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/navigation.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/bidi/input/perform_actions/navigation.py
@@ -78,7 +78,7 @@ .pointer_down(button=0) .pointer_up(button=0) .pause(1000) - .pointer_move(x=200, y=200) + .pointer_move(x=300, y=200) ) await bidi_session.input.perform_actions( @@ -91,4 +91,8 @@ events = await get_events(bidi_session, top_context["context"]) assert len(events) == 1 - assert events[0] == [200, 200] + + assert events[0] == [ + pytest.approx(300, abs=1.0), + pytest.approx(200, abs=1.0) + ]
diff --git a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/perform_actions/navigation.py b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/perform_actions/navigation.py index 530327c..db5b824 100644 --- a/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/perform_actions/navigation.py +++ b/third_party/blink/web_tests/external/wpt/webdriver/tests/classic/perform_actions/navigation.py
@@ -1,3 +1,5 @@ +import pytest + from tests.classic.perform_actions.support.refine import get_events PAGE_CONTENT = """ @@ -55,11 +57,15 @@ .pointer_down(button=0) \ .pointer_up(button=0) \ .pause(1000) \ - .pointer_move(x=200, y=200) \ + .pointer_move(x=300, y=200) \ .perform() assert session.url == inline(PAGE_CONTENT) events = get_events(session) assert len(events) == 1 - assert events[0] == [200, 200] + + assert events[0] == [ + pytest.approx(300, abs=1.0), + pytest.approx(200, abs=1.0) + ]
diff --git a/third_party/dawn b/third_party/dawn index e5701af..a15bad5 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit e5701af2e856bc89ab766bad8539fca0f0e15322 +Subproject commit a15bad593af06a881fbbbfcebf2e58c18e1cf6f1
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index 6865bf1..586fb9d 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit 6865bf119d83444dbbc2a6a426612e20ea1e5ec6 +Subproject commit 586fb9db396c599ab5549f869429f886c724a827
diff --git a/third_party/freetype/OWNERS b/third_party/freetype/OWNERS index 0bdffb66..aad5148 100644 --- a/third_party/freetype/OWNERS +++ b/third_party/freetype/OWNERS
@@ -5,3 +5,4 @@ # To ease rolling. per-file README.chromium=file://skia/OWNERS per-file README.chromium=file://third_party/blink/renderer/platform/OWNERS +per-file README.chromium=chromium-autoroll@skia-public.iam.gserviceaccount.com
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index 1ce02d5..821608f1 100644 --- a/third_party/freetype/README.chromium +++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@ Name: FreeType URL: http://www.freetype.org/ -Version: VER-2-13-3-26-g38272bf85 -Revision: 38272bf85341348eb0a5162ba4e1c95d370f9bce +Version: VER-2-13-3-30-g10b3b14da +Revision: 10b3b14da2a60151dd9242364ad7a375d0d7590a CPEPrefix: cpe:/a:freetype:freetype:2.13.3 License: FTL License File: src/docs/FTL.TXT
diff --git a/third_party/freetype/src b/third_party/freetype/src index 38272bf..10b3b14 160000 --- a/third_party/freetype/src +++ b/third_party/freetype/src
@@ -1 +1 @@ -Subproject commit 38272bf85341348eb0a5162ba4e1c95d370f9bce +Subproject commit 10b3b14da2a60151dd9242364ad7a375d0d7590a
diff --git a/third_party/libc++/src b/third_party/libc++/src index 9ba1d49..b451193 160000 --- a/third_party/libc++/src +++ b/third_party/libc++/src
@@ -1 +1 @@ -Subproject commit 9ba1d4922ab23234f7a2af4c8cd7699756959950 +Subproject commit b4511937e4e55617e26ba3912e0dc169443e0c00
diff --git a/third_party/llvm-libc/src b/third_party/llvm-libc/src index 5562ea7..b0de901 160000 --- a/third_party/llvm-libc/src +++ b/third_party/llvm-libc/src
@@ -1 +1 @@ -Subproject commit 5562ea781ed152fec2f5c6b86dc1b8e446e21f6a +Subproject commit b0de9011b9f34818da12b1448f40e212f611afa3
diff --git a/third_party/perfetto b/third_party/perfetto index 79e2dcd..fe572aa 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit 79e2dcdef714a3d7f6e09a115cd9fba0c04c7689 +Subproject commit fe572aaa214487007138ea9a546692771bd6e25b
diff --git a/third_party/private-join-and-compute/README.chromium b/third_party/private-join-and-compute/README.chromium index d89e0024..ff3020c 100644 --- a/third_party/private-join-and-compute/README.chromium +++ b/third_party/private-join-and-compute/README.chromium
@@ -10,7 +10,7 @@ Shipped: yes Description: -The package contains a communicative cipher. It's used to communicate with the leak detection Google server. +The package contains a communicative cipher. It's used to communicate with the leak detection Google server. The package is used from ip_protection component to re-randomize elgamal ciphers. Local Modifications: Stripped all the dependencies except for BoringSSL. chromium_patch.h is the only new file. Other modifications are removing the includes, fixing the macroses to those used in Chrome and removing unused functions and classes. The diff files are in order of modifications:
diff --git a/third_party/private-join-and-compute/patches/files.diff b/third_party/private-join-and-compute/patches/files.diff index 4bdfa60..71c07708 100644 --- a/third_party/private-join-and-compute/patches/files.diff +++ b/third_party/private-join-and-compute/patches/files.diff
@@ -13,8 +13,8 @@ Files /tmp/private-join-and-compute.original/crypto/ec_commutative_cipher.h and third_party/private-join-and-compute/crypto/ec_commutative_cipher.h differ Files /tmp/private-join-and-compute.original/crypto/ec_group.cc and third_party/private-join-and-compute/crypto/ec_group.cc differ Files /tmp/private-join-and-compute.original/crypto/ec_point.cc and third_party/private-join-and-compute/crypto/ec_point.cc differ -Only in /tmp/private-join-and-compute.original/crypto: elgamal.cc -Only in /tmp/private-join-and-compute.original/crypto: elgamal.h +Files /tmp/private-join-and-compute.original/crypto/elgamal.cc and third_party/private-join-and-compute/crypto/elgamal.cc differ +Files /tmp/private-join-and-compute.original/crypto/elgamal.h and third_party/private-join-and-compute/crypto/elgamal.h differ Only in /tmp/private-join-and-compute.original/crypto: fixed_base_exp.cc Only in /tmp/private-join-and-compute.original/crypto: fixed_base_exp.h Only in /tmp/private-join-and-compute.original/crypto: mont_mul.cc
diff --git a/third_party/private-join-and-compute/src/BUILD.gn b/third_party/private-join-and-compute/src/BUILD.gn index 2f12f7a..e7de95bb 100644 --- a/third_party/private-join-and-compute/src/BUILD.gn +++ b/third_party/private-join-and-compute/src/BUILD.gn
@@ -26,19 +26,21 @@ component("ec_commutative_cipher") { public = [ "//third_party/private-join-and-compute/base/private_join_and_compute_export.h", + "crypto/big_num.h", "crypto/context.h", "crypto/ec_commutative_cipher.h", "crypto/ec_group.h", "crypto/ec_point.h", + "crypto/elgamal.h", ] sources = [ "chromium_patch.h", "crypto/big_num.cc", - "crypto/big_num.h", "crypto/context.cc", "crypto/ec_commutative_cipher.cc", "crypto/ec_group.cc", "crypto/ec_point.cc", + "crypto/elgamal.cc", "crypto/openssl.inc", "util/canonical_errors.cc", "util/canonical_errors.h",
diff --git a/third_party/private-join-and-compute/src/crypto/big_num.h b/third_party/private-join-and-compute/src/crypto/big_num.h index aa13244..9dc92cd 100644 --- a/third_party/private-join-and-compute/src/crypto/big_num.h +++ b/third_party/private-join-and-compute/src/crypto/big_num.h
@@ -21,6 +21,7 @@ #include <memory> #include <string> +#include "third_party/private-join-and-compute/base/private_join_and_compute_export.h" #include "third_party/private-join-and-compute/src/crypto/openssl.inc" #include "third_party/private-join-and-compute/src/util/status.inc" @@ -31,7 +32,7 @@ // Makes use of a BN_CTX structure that holds temporary BIGNUMs needed for // arithmetic operations as dynamic memory allocation to create BIGNUMs is // expensive. -class BigNum { +class PRIVATE_COMPUTE_EXPORT BigNum { public: // Deletes a BIGNUM. class BnDeleter {
diff --git a/third_party/private-join-and-compute/src/crypto/elgamal.cc b/third_party/private-join-and-compute/src/crypto/elgamal.cc new file mode 100644 index 0000000..a326bc1 --- /dev/null +++ b/third_party/private-join-and-compute/src/crypto/elgamal.cc
@@ -0,0 +1,121 @@ +/* + * Copyright 2019 Google Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "third_party/private-join-and-compute/src/crypto/elgamal.h" + +#include <vector> + +#include "third_party/private-join-and-compute/src/crypto/big_num.h" +#include "third_party/private-join-and-compute/src/crypto/ec_group.h" +#include "third_party/private-join-and-compute/src/crypto/ec_point.h" +#include "third_party/private-join-and-compute/src/util/status.inc" + +namespace private_join_and_compute { + +namespace elgamal { + +StatusOr<std::pair<std::unique_ptr<PublicKey>, std::unique_ptr<PrivateKey>>> +GenerateKeyPair(const ECGroup& ec_group) { + ASSIGN_OR_RETURN(ECPoint g, ec_group.GetFixedGenerator()); + BigNum x = ec_group.GeneratePrivateKey(); + ASSIGN_OR_RETURN(ECPoint y, g.Mul(x)); + + std::unique_ptr<PublicKey> public_key( + new PublicKey({std::move(g), std::move(y)})); + std::unique_ptr<PrivateKey> private_key(new PrivateKey({std::move(x)})); + + return {{std::move(public_key), std::move(private_key)}}; +} + +StatusOr<elgamal::Ciphertext> Mul(const elgamal::Ciphertext& ciphertext1, + const elgamal::Ciphertext& ciphertext2) { + ASSIGN_OR_RETURN(ECPoint u, ciphertext1.u.Add(ciphertext2.u)); + ASSIGN_OR_RETURN(ECPoint e, ciphertext1.e.Add(ciphertext2.e)); + return {{std::move(u), std::move(e)}}; +} + +StatusOr<elgamal::Ciphertext> Exp(const elgamal::Ciphertext& ciphertext, + const BigNum& scalar) { + ASSIGN_OR_RETURN(ECPoint u, ciphertext.u.Mul(scalar)); + ASSIGN_OR_RETURN(ECPoint e, ciphertext.e.Mul(scalar)); + return {{std::move(u), std::move(e)}}; +} + +StatusOr<Ciphertext> GetZero(const ECGroup* group) { + ASSIGN_OR_RETURN(ECPoint u, group->GetPointAtInfinity()); + ASSIGN_OR_RETURN(ECPoint e, group->GetPointAtInfinity()); + return {{std::move(u), std::move(e)}}; +} + +StatusOr<Ciphertext> CloneCiphertext(const Ciphertext& ciphertext) { + ASSIGN_OR_RETURN(ECPoint clone_u, ciphertext.u.Clone()); + ASSIGN_OR_RETURN(ECPoint clone_e, ciphertext.e.Clone()); + return {{std::move(clone_u), std::move(clone_e)}}; +} + +bool IsCiphertextZero(const Ciphertext& ciphertext) { + return ciphertext.u.IsPointAtInfinity() && ciphertext.e.IsPointAtInfinity(); +} + +} // namespace elgamal + +//////////////////////////////////////////////////////////////////////////////// +// PUBLIC ELGAMAL +//////////////////////////////////////////////////////////////////////////////// + +ElGamalEncrypter::ElGamalEncrypter( + const ECGroup* ec_group, + std::unique_ptr<elgamal::PublicKey> elgamal_public_key) + : ec_group_(ec_group), public_key_(std::move(elgamal_public_key)) {} + +// Encrypts a message m, that has already been mapped onto the curve. +StatusOr<elgamal::Ciphertext> ElGamalEncrypter::Encrypt( + const ECPoint& message) const { + BigNum r = ec_group_->GeneratePrivateKey(); // generate a random exponent + // u = g^r , e = m * y^r . + ASSIGN_OR_RETURN(ECPoint u, public_key_->g.Mul(r)); + ASSIGN_OR_RETURN(ECPoint y_to_r, public_key_->y.Mul(r)); + ASSIGN_OR_RETURN(ECPoint e, message.Add(y_to_r)); + return {{std::move(u), std::move(e)}}; +} + +StatusOr<elgamal::Ciphertext> ElGamalEncrypter::ReRandomize( + const elgamal::Ciphertext& elgamal_ciphertext) const { + BigNum r = ec_group_->GeneratePrivateKey(); // generate a random exponent + // u = old_u * g^r , e = old_e * y^r . + ASSIGN_OR_RETURN(ECPoint g_to_r, public_key_->g.Mul(r)); + ASSIGN_OR_RETURN(ECPoint u, elgamal_ciphertext.u.Add(g_to_r)); + ASSIGN_OR_RETURN(ECPoint y_to_r, public_key_->y.Mul(r)); + ASSIGN_OR_RETURN(ECPoint e, elgamal_ciphertext.e.Add(y_to_r)); + return {{std::move(u), std::move(e)}}; +} + +//////////////////////////////////////////////////////////////////////////////// +// PRIVATE ELGAMAL +//////////////////////////////////////////////////////////////////////////////// + +ElGamalDecrypter::ElGamalDecrypter( + std::unique_ptr<elgamal::PrivateKey> elgamal_private_key) + : private_key_(std::move(elgamal_private_key)) {} + +StatusOr<ECPoint> ElGamalDecrypter::Decrypt( + const elgamal::Ciphertext& ciphertext) const { + ASSIGN_OR_RETURN(ECPoint u_to_x, ciphertext.u.Mul(private_key_->x)); + ASSIGN_OR_RETURN(ECPoint u_to_x_inverse, u_to_x.Inverse()); + ASSIGN_OR_RETURN(ECPoint message, ciphertext.e.Add(u_to_x_inverse)); + return {std::move(message)}; +} + +} // namespace private_join_and_compute
diff --git a/third_party/private-join-and-compute/src/crypto/elgamal.h b/third_party/private-join-and-compute/src/crypto/elgamal.h new file mode 100644 index 0000000..d0a3a980 --- /dev/null +++ b/third_party/private-join-and-compute/src/crypto/elgamal.h
@@ -0,0 +1,147 @@ +/* + * Copyright 2019 Google Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Implementation of the ElGamal encryption scheme, over an Elliptic Curve. +// +// ElGamal is a multiplicatively homomorphic encryption scheme. See [1] for +// more information. +// +// The function elgamal::GenerateKeyPair generates a fresh public-private key +// pair for the scheme. Using these keys, one can instantiate ElGamalEncrypter +// and ElGamalDecrypter objects, which allow encrypting and decrypting +// messages that lie on the elliptic curve. +// +// The function elgamal::Mul allows homomorphic multiplication of two +// ciphertexts. The function elgamal::Exp allows homomorphic exponentiation of +// a ciphertext by a scalar. +// (Note: these operations actually correspond to addition and multiplication +// in the underlying EC group, but we refer to them as multiplication and +// exponentiation to match the standard description of ElGamal as +// multiplicatively homomorphic.) +// +// [1] https://en.wikipedia.org/wiki/ElGamal_encryption + +#ifndef CRYPTO_ELGAMAL_H_ +#define CRYPTO_ELGAMAL_H_ + +#include "third_party/private-join-and-compute/src/crypto/ec_group.h" +#include "third_party/private-join-and-compute/src/crypto/ec_point.h" +#include "third_party/private-join-and-compute/src/util/status.inc" + +namespace private_join_and_compute { + +class BigNum; +class ECPoint; +class ECGroup; + +// Containers and utility functions +namespace elgamal { + +struct Ciphertext { + // Encryption of an ECPoint m using randomness r, under public key (g,y). + ECPoint u; // = g^r + ECPoint e; // = m * y^r +}; + +struct PublicKey { + ECPoint g; + ECPoint y; // = g^x, where x is the secret key. +}; + +struct PrivateKey { + BigNum x; +}; + +// Generates a new ElGamal public-private key pair. +StatusOr<std::pair<std::unique_ptr<PublicKey>, std::unique_ptr<PrivateKey>>> +GenerateKeyPair(const ECGroup& ec_group); + +// Homomorphically multiply two ciphertexts. +// (Note: this corresponds to addition in the EC group.) +StatusOr<elgamal::Ciphertext> Mul(const elgamal::Ciphertext& ciphertext1, + const elgamal::Ciphertext& ciphertext2); + +// Homomorphically exponentiate a ciphertext by a scalar. +// (Note: this corresponds to multiplication in the EC group.) +StatusOr<elgamal::Ciphertext> Exp(const elgamal::Ciphertext& ciphertext, + const BigNum& scalar); + +StatusOr<Ciphertext> GetZero(const ECGroup* group); + +StatusOr<Ciphertext> CloneCiphertext(const Ciphertext& ciphertext); + +bool IsCiphertextZero(const Ciphertext& ciphertext); + +} // namespace elgamal + +// Implements ElGamal encryption with a public key. +class PRIVATE_COMPUTE_EXPORT ElGamalEncrypter { + public: + // Creates a ElGamalEncrypter object from a given public key. + // Takes ownership of the public key. + ElGamalEncrypter(const ECGroup* ec_group, + std::unique_ptr<elgamal::PublicKey> elgamal_public_key); + + // ElGamalEncrypter cannot be copied or assigned + ElGamalEncrypter(const ElGamalEncrypter&) = delete; + ElGamalEncrypter operator=(const ElGamalEncrypter&) = delete; + + ~ElGamalEncrypter() = default; + + // Encrypts a message m, that has already been mapped onto the curve. + StatusOr<elgamal::Ciphertext> Encrypt(const ECPoint& message) const; + + // Re-randomizes a ciphertext. After the re-randomization, the new ciphertext + // is an encryption of the same message as before. + StatusOr<elgamal::Ciphertext> ReRandomize( + const elgamal::Ciphertext& elgamal_ciphertext) const; + + // Returns a pointer to the owned ElGamal public key + const elgamal::PublicKey* getPublicKey() const { return public_key_.get(); } + + private: + const ECGroup* ec_group_; // not owned + std::unique_ptr<elgamal::PublicKey> public_key_; +}; + +// Implements ElGamal decryption using the private key. +class PRIVATE_COMPUTE_EXPORT ElGamalDecrypter { + public: + // Creates a ElGamalDecrypter object from a given private key. + // Takes ownership of the private key. + explicit ElGamalDecrypter( + std::unique_ptr<elgamal::PrivateKey> elgamal_private_key); + + // ElGamalDecrypter cannot be copied or assigned + ElGamalDecrypter(const ElGamalDecrypter&) = delete; + ElGamalDecrypter operator=(const ElGamalDecrypter&) = delete; + + ~ElGamalDecrypter() = default; + + // Decrypts a given ElGamal ciphertext. + StatusOr<ECPoint> Decrypt(const elgamal::Ciphertext& ciphertext) const; + + // Returns a pointer to the owned ElGamal private key + const elgamal::PrivateKey* getPrivateKey() const { + return private_key_.get(); + } + + private: + std::unique_ptr<elgamal::PrivateKey> private_key_; +}; + +} // namespace private_join_and_compute + +#endif // CRYPTO_ELGAMAL_H_
diff --git a/third_party/skia b/third_party/skia index 09f8ab0..65d7bff 160000 --- a/third_party/skia +++ b/third_party/skia
@@ -1 +1 @@ -Subproject commit 09f8ab0c9b712ccbae5817b7eac61ba22a70e7b5 +Subproject commit 65d7bff9d16aaec9c731c16cccfbca8303e60992
diff --git a/third_party/webrtc b/third_party/webrtc index bee2c5d0..14e46ed6 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit bee2c5d019c6af2657a6a4c07e98ed505ce380ea +Subproject commit 14e46ed65c828d39d438d925a21b080a5a0a6190
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index eee582f..7209535 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -36,7 +36,7 @@ # https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang.md # Reverting problematic clang rolls is safe, though. # This is the output of `git describe` and is usable as a commit-ish. -CLANG_REVISION = 'llvmorg-20-init-13894-g8cb44859' +CLANG_REVISION = 'llvmorg-20-init-16062-g091448e3' CLANG_SUB_REVISION = 1 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index fc42146..0bd0a5f 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -1043,6 +1043,10 @@ "META": {"sizes": {"includes": [5]}}, "includes": [7440], }, + "<(SHARED_INTERMEDIATE_DIR)/components/user_actions_ui/resources/resources.grd": { + "META": {"sizes": {"includes": [5]}}, + "includes": [7450], + }, "<(SHARED_INTERMEDIATE_DIR)/components/version_ui/resources/resources.grd": { "META": {"sizes": {"includes": [5]}}, "includes": [7460],
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index 25bd4ef..866ba8b 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -20413,15 +20413,6 @@ </description> </action> -<action name="ManualFallback_PlusAddress_SelectPlusAddress"> - <owner>vidhanj@google.com</owner> - <owner>jkeitel@google.com</owner> - <description> - The user tapped on the plus address in the Address/Password manual fill - view. - </description> -</action> - <action name="ManualFallback_Profiles_Address1"> <owner>djean@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> @@ -38761,6 +38752,15 @@ </description> </action> +<action name="Signin_Signin_FromCollaborationTabGroup"> + <owner>gambard@chromium.org</owner> + <owner>chrome-signin-team@google.com</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_COLLABORATION_TAB_GROUP. + </description> +</action> + <action name="Signin_Signin_FromContentArea"> <obsolete>Removed in M116.</obsolete> <owner>gogerald@chromium.org</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 338b853..fcd6a2f 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -15218,7 +15218,6 @@ <int value="-2072877761" label="WaylandUiScale:disabled"/> <int value="-2072754800" label="HelpAppAppsList:disabled"/> <int value="-2072471036" label="OobeHidDetectionRevamp:disabled"/> - <int value="-2072181147" label="WebContentsCaptureHiDPI:enabled"/> <int value="-2071515296" label="allow-sync-xhr-in-page-dismissal"/> <int value="-2071202821" label="CopyLinkToText:enabled"/> <int value="-2069855464" @@ -22872,7 +22871,6 @@ <int value="982032277" label="NTPOfflineBadge:disabled"/> <int value="982511393" label="NTPArticleSuggestions:disabled"/> <int value="982805190" label="PageInfoAboutThisSiteMoreLangs:enabled"/> - <int value="982932009" label="WebContentsCaptureHiDPI:disabled"/> <int value="982983280" label="LauncherSearchControl:enabled"/> <int value="983084316" label="SyncUSSNigori:disabled"/> <int value="983236654" label="TrackingProtection3pcd:enabled"/> @@ -32945,6 +32943,14 @@ <int value="0" label="Attempted"/> </enum> +<enum name="SuspendJourneyResult"> + <int value="0" label="Resume"/> + <int value="1" label="Shutdown"/> + <int value="2" label="ShutdownAfterX"/> + <int value="3" label="LowPowerShutdown"/> + <int value="4" label="Reboot"/> +</enum> + <enum name="SuspendResult"> <int value="0" label="Succeeded"/> <int value="1" label="Failed"/>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index 65dba789..2a41c0f1 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -290,17 +290,6 @@ </summary> </histogram> -<histogram name="Apps.AppInstallParentWindowFound" enum="Boolean" - expires_after="2025-01-19"> - <owner>ovn@google.com</owner> - <owner>cros-web-apps-team@google.com</owner> - <summary> - Records the result of attempting to find a parent window for the spawned - AppInstallDialog when attempting to install an app from an almanac:// URL in - Lacros. - </summary> -</histogram> - <histogram name="Apps.AppInstallService.AppInstallResult{AppInstallSurface}" enum="AppInstallResult" expires_after="2025-11-01"> <owner>tsergeant@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index b97230c..593760b 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -1422,7 +1422,7 @@ </histogram> <histogram name="Blink.FedCm.ClosedSheetType.Desktop" enum="FedCmSheetType" - expires_after="2025-02-12"> + expires_after="2025-08-12"> <owner>npm@chromium.org</owner> <owner>web-identity-eng@google.com</owner> <summary> @@ -1476,7 +1476,7 @@ </histogram> <histogram name="Blink.FedCm.Disconnect.FrameType" - enum="FedCmRequesterFrameType" expires_after="2025-02-12"> + enum="FedCmRequesterFrameType" expires_after="2025-08-12"> <owner>npm@chromium.org</owner> <owner>web-identity-eng@google.com</owner> <summary> @@ -1851,7 +1851,7 @@ </histogram> <histogram name="Blink.FedCm.Status.Disconnect" enum="FedCmDisconnectStatus" - expires_after="2025-02-12"> + expires_after="2025-08-12"> <owner>npm@chromium.org</owner> <owner>web-identity-eng@google.com</owner> <summary> @@ -1969,7 +1969,7 @@ </histogram> <histogram name="Blink.FedCm.Timing.Disconnect" units="ms" - expires_after="2025-02-12"> + expires_after="2025-08-12"> <owner>npm@chromium.org</owner> <owner>web-identity-eng@google.com</owner> <summary> @@ -2118,7 +2118,7 @@ </histogram> <histogram name="Blink.FedCm.UserInfo.Status" enum="FedCmUserInfoStatus" - expires_after="2025-02-12"> + expires_after="2025-08-12"> <owner>npm@chromium.org</owner> <owner>web-identity-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ios/OWNERS b/tools/metrics/histograms/metadata/ios/OWNERS index f399cfcf..f1b7e52a 100644 --- a/tools/metrics/histograms/metadata/ios/OWNERS +++ b/tools/metrics/histograms/metadata/ios/OWNERS
@@ -3,7 +3,5 @@ # Prefer sending CLs to the owners listed below. # Use chromium-metrics-reviews@google.com as a backup. ginnyhuang@chromium.org -ajuma@chromium.org -guiperez@google.com olivierrobin@chromium.org sebsg@chromium.org \ No newline at end of file
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml index 331e7f0..8d215e8 100644 --- a/tools/metrics/histograms/metadata/ios/histograms.xml +++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -4266,7 +4266,7 @@ </histogram> <histogram name="IOS.SandboxMetrics.WebKitCacheSize" units="MB" - expires_after="2025-01-05"> + expires_after="2025-05-01"> <owner>michaeldo@chromium.org</owner> <owner>rohitrao@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/kiosk/histograms.xml b/tools/metrics/histograms/metadata/kiosk/histograms.xml index 0a713996..6dfc995 100644 --- a/tools/metrics/histograms/metadata/kiosk/histograms.xml +++ b/tools/metrics/histograms/metadata/kiosk/histograms.xml
@@ -207,6 +207,7 @@ <summary>Records the total duration it takes to launch a kiosk app.</summary> <token key="KioskType"> <variant name="ChromeApp"/> + <variant name="IsolatedWebApp"/> <variant name="Web"/> </token> </histogram>
diff --git a/tools/metrics/histograms/metadata/notifications/histograms.xml b/tools/metrics/histograms/metadata/notifications/histograms.xml index 18f91e49..1eaca597 100644 --- a/tools/metrics/histograms/metadata/notifications/histograms.xml +++ b/tools/metrics/histograms/metadata/notifications/histograms.xml
@@ -593,6 +593,33 @@ </summary> </histogram> +<histogram name="Notifications.Engagement.{Type}.Volume{Volume}" + units="site-engagement-score*2" expires_after="2025-05-01"> + <owner>antoniosartori@chromium.org</owner> + <owner>feuunk@chromium.org</owner> + <summary> + Records site engagement of sites when notifications are shown or clicked. A + metric is recorded for every displayed or clicked notification, reporting + the site engagement of the corresponding site multiplied by 2 (we multiply + by 2 in order to distinguish engagement values >=0.5 from 0 - note that + the smallest possible nonnull engagement value is 0.5). The average daily + volume of displayed notifications for that particular site over the past + week is encoded in the histogram name. + </summary> + <token key="Type"> + <variant name="Clicked"/> + <variant name="Displayed"/> + </token> + <token key="Volume"> + <variant name="0"/> + <variant name="1"/> + <variant name="5"/> + <variant name="10"/> + <variant name="20"/> + <variant name="Above20"/> + </token> +</histogram> + <histogram name="Notifications.LoadProfileResult" enum="BooleanSuccess" expires_after="2022-04-17"> <owner>knollr@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index f3aee22..7bc9151 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -830,15 +830,15 @@ </token> </histogram> -<histogram name="Ads.InterestGroup.Auction.HttpCachedTrustedBiddingSignalsAge" +<histogram name="Ads.InterestGroup.Auction.HttpCachedTrustedBiddingSignalsAge2" units="ms" expires_after="2025-06-01"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> The age of the cached response for a trusted bidding signals request in the - HTTP cache, even if the cached entry is too stale to use. Recorded on each - trusted bidding signals request if there is a cached response in the HTTP - cache. + HTTP cache, even if the cached entry needed to be validated. Recorded on + each trusted bidding signals request if it used a cached response in the + HTTP cache. Not recorded if the cached value was updated. See https://github.com/WICG/turtledove/blob/main/FLEDGE.md for the latest version of the FLEDGE explainer.
diff --git a/tools/metrics/histograms/metadata/password/enums.xml b/tools/metrics/histograms/metadata/password/enums.xml index c5b28470..094d532 100644 --- a/tools/metrics/histograms/metadata/password/enums.xml +++ b/tools/metrics/histograms/metadata/password/enums.xml
@@ -1584,6 +1584,14 @@ <int value="14" label="Passkey edit button clicked"/> </enum> +<enum name="PasswordVsOtpFormType"> + <int value="0" + label="Form without password and OTP fields (e.g. single username form)"/> + <int value="1" label="Password form"/> + <int value="2" label="OTP form"/> + <int value="3" label="Password + OTP form"/> +</enum> + <enum name="PasswordWeaknessScore"> <int value="0" label="Too guessable password"/> <int value="1" label="Very guessable password"/>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index 670b1f1..57a4682 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -2448,6 +2448,17 @@ </summary> </histogram> +<histogram name="PasswordManager.ParsedFormIsOtpForm" + enum="PasswordVsOtpFormType" expires_after="2025-06-25"> + <owner>kazinova@google.com</owner> + <owner>vasilii@chromium.org</owner> + <summary> + For a successfully parsed form, records whether a form is an OTP form, a + normal multi-use password form, or a combination of both. Recorded when the + form is parsed for filling. + </summary> +</histogram> + <histogram name="PasswordManager.ParserDetectedOtpFieldWithRegex" enum="Boolean" expires_after="2025-06-08"> <owner>kazinova@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml index 710de5b..c917e80 100644 --- a/tools/metrics/histograms/metadata/power/histograms.xml +++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -1780,6 +1780,16 @@ </summary> </histogram> +<histogram name="Power.SuspendJourneyResult" enum="SuspendJourneyResult" + expires_after="2025-12-31"> + <owner>eizan@chromium.org</owner> + <owner>chromeos-power-team@google.com</owner> + <summary> + The results of suspend journeys on Chrome OS which might comprise multiple + suspend attempts. Samples are reported after each journey. + </summary> +</histogram> + <histogram name="Power.SuspendResult" enum="SuspendResult" expires_after="2025-06-22"> <owner>puthik@chromium.org</owner>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index 6261540..e2d7754 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -7475,18 +7475,18 @@ </metric> </event> -<event name="DIPS.SuspectedTrackerFlowEntrypoint"> +<event name="DIPS.SuspectedTrackerFlowEntrypointV2" singular="True"> <owner>svend@google.com</owner> <owner>dc-komics@google.com</owner> <summary> - When: - a tab's primary main frame is navigated to three consecutive URLs - A->B->C, - B accesses cookies or storage, - the eTLD+1 for B is - different from the eTLD+1s of A and C, - at least A and C commit (become the - primary main page), - the navigation A->B is content-initiated but not - user-initiated, and - either: - both B did not commit and the navigation - B->C was a server redirect; or - both B did commit (become the primary - main page) and the navigation B->C was content-initiated but not - user-initiated, then this event is recorded for URL B. + For this event to be emitted for a URL B, all of the following must be true: + a tab's primary main frame was navigated to three consecutive URLs + A->B->C; B accessed cookies or storage; the eTLD+1 for B was different + from the eTLD+1s of A and C; at least A and C committed (became the primary + main page); and the navigation A->B was content-initiated but not + user-initiated. One of the following must also be true: a) B did not commit + and the navigation B->C was a server redirect; or b) B did commit and the + navigation B->C was content-initiated but not user-initiated. </summary> <metric name="ExitRedirectType" enum="DIPSRedirectType"> <summary> @@ -7502,18 +7502,18 @@ </metric> </event> -<event name="DIPS.SuspectedTrackerFlowReferrer"> +<event name="DIPS.SuspectedTrackerFlowReferrerV2" singular="True"> <owner>svend@google.com</owner> <owner>dc-komics@google.com</owner> <summary> - When: - a tab's primary main frame is navigated to three consecutive URLs - A->B->C, - B accesses cookies or storage, - the eTLD+1 for B is - different from the eTLD+1s of A and C, - at least A and C commit (become the - primary main page), - the navigation A->B is content-initiated but not - user-initiated, and - either: - both B did not commit and the navigation - B->C was a server redirect; or - both B did commit (become the primary - main page) and the navigation B->C was content-initiated but not - user-initiated, then this event is recorded for URL A. + For this event to be emitted for a URL A, all of the following must be true: + a tab's primary main frame was navigated to three consecutive URLs + A->B->C; B accessed cookies or storage; the eTLD+1 for B was different + from the eTLD+1s of A and C; at least A and C committed (became the primary + main page); and the navigation A->B was content-initiated but not + user-initiated. One of the following must also be true: a) B did not commit + and the navigation B->C was a server redirect; or b) B did commit and the + navigation B->C was content-initiated but not user-initiated. </summary> <metric name="FlowId"> <summary> @@ -7555,7 +7555,7 @@ </metric> </event> -<event name="DIPS.TrustIndicator.DirectNavigation"> +<event name="DIPS.TrustIndicator.DirectNavigationV2" singular="True"> <owner>svend@google.com</owner> <owner>dc-komics@google.com</owner> <summary> @@ -7572,16 +7572,16 @@ </metric> </event> -<event name="DIPS.TrustIndicator.InFlowInteraction"> +<event name="DIPS.TrustIndicator.InFlowInteractionV2" singular="True"> <owner>svend@google.com</owner> <owner>dc-komics@google.com</owner> <summary> - When a tab's primary main frame is navigated to three consecutive URLs - A->B->C, B accesses cookies or storage, the eTLD+1 for B is different - from the eTLD+1s of A and C, A, B, and C commit (become the primary main - page), the navigations A->B and B->C were content-initiated but not - user-initiated, and B receives user activation (click, scroll, etc.), then - this event is recorded for URL B. + For this event to be emitted for a URL B, all of the following must be true: + a tab's primary main frame was navigated to three consecutive URLs + A->B->C; B accessed cookies or storage; the eTLD+1 for B was different + from the eTLD+1s of A and C; A, B, and C committed (became the primary main + page); the navigations A->B and B->C were content-initiated but not + user-initiated; and B received user activation (click, scroll, etc.). </summary> <metric name="FlowId"> <summary> @@ -7595,20 +7595,25 @@ <owner>svend@google.com</owner> <owner>dc-komics@google.com</owner> <summary> - For this event to be emitted, a tab's primary main frame must be navigated - to at least four consecutive URLs A->B->C->D(->E…), A must - commit, the eTLD+1s for A and B must be different, and the navigation from - A->B must be content-initiated and not user-initiated. There must also be - a URL C or later (the "successor"), where all navigations in the - subchain B->…->successor are either server redirects or both - content-initiated and not user-initiated, all subchain URLs [B, …, - successor] have the same eTLD+1, the successor commits, and the successor - receives user interaction. There must also be another URL after the sucessor - in the navigation chain (the "flow end") that commits, where all - navigations in the subchain successor->…->flow end are - content-initiated or server redirects, all subchain URLs [successor, …, flow - end) (exclusive of flow end itself) have the same eTLD+1, and successor and - flow end have different eTLD+1s. + For this event to be emitted for a URL B, all of the following must be true: + a tab's primary main frame must be navigated to at least four consecutive + URLs A->B->C->D(->E…); A must commit; the eTLD+1s for A and B + must be different; and the navigation from A->B must be content-initiated + and not user-initiated. There must also be a URL C or later (the + "successor"), for which all of the following are true: all + navigations in the subchain B->…->successor are either server + redirects or both content-initiated and not user-initiated; all subchain + URLs [B, …, successor] have the same eTLD+1; the successor commits; and the + successor receives user activation. There must also be another URL after the + successor in the navigation chain (the "flow end") for which all + of the following are true: the flow end commits; all navigations in the + subchain successor->…->flow end are content-initiated or server + redirects; all subchain URLs [successor, …, flow end) (exclusive of flow end + itself) have the same eTLD+1; and successor and flow end have different + eTLD+1s. This event will be emitted once for each qualifying successor, but + this event is not singular because it is emitted with a source of URL B, + rather than the successor, and can therefore have multiple emissions for the + same source. </summary> <metric name="DidEntrypointAccessStorage"> <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 96e8e4a..e844e96 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -1,28 +1,28 @@ { "trace_processor_shell": { "linux_arm64": { - "hash": "1839ff51215f9b27b4e4524dd2075e512e30a27a", - "full_remote_path": "perfetto-luci-artifacts/5bf4e2a65d76d5a603ff175222d1513f71d28a0b/linux-arm64/trace_processor_shell" + "hash": "47a61090ce7cf012e52d8850bddeea68162bbb3b", + "full_remote_path": "perfetto-luci-artifacts/79e2dcdef714a3d7f6e09a115cd9fba0c04c7689/linux-arm64/trace_processor_shell" }, "win": { "hash": "d29819bf4ecb76e4dad3b025ab0cf8325007664b", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/79e2dcdef714a3d7f6e09a115cd9fba0c04c7689/trace_processor_shell.exe" + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/a65d8d50d22863987cda7bb4d23d5effdceb4418/trace_processor_shell.exe" }, "linux_arm": { - "hash": "e250187786aa190a66288bc9443a5e1f5888f8d7", - "full_remote_path": "perfetto-luci-artifacts/5bf4e2a65d76d5a603ff175222d1513f71d28a0b/linux-arm/trace_processor_shell" + "hash": "f92983e30310bbb0af7a96b2e23484a0e561de42", + "full_remote_path": "perfetto-luci-artifacts/79e2dcdef714a3d7f6e09a115cd9fba0c04c7689/linux-arm/trace_processor_shell" }, "mac": { "hash": "f5d83eca972747f7c3db9f35c07ed57902418e8c", "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/881ad50c05049ca13d4b34e4f92f4167de5ac52a/trace_processor_shell" }, "mac_arm64": { - "hash": "cf5cd094ca2e4424fb59f6e9c872130feb1e3462", - "full_remote_path": "perfetto-luci-artifacts/5bf4e2a65d76d5a603ff175222d1513f71d28a0b/mac-arm64/trace_processor_shell" + "hash": "cf2f8bfcbf9accef95e800881a62e64224e5df6e", + "full_remote_path": "perfetto-luci-artifacts/79e2dcdef714a3d7f6e09a115cd9fba0c04c7689/mac-arm64/trace_processor_shell" }, "linux": { - "hash": "991dd9cb3ce7b5910324616d83c09facb3d8228d", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/79e2dcdef714a3d7f6e09a115cd9fba0c04c7689/trace_processor_shell" + "hash": "818bc29ee85739bb044c16f7463d4b974c014f68", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/82992fff76e4b8a6efd8b19469b297d627724a92/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/rust/update_rust.py b/tools/rust/update_rust.py index a02cc06..d1068679 100755 --- a/tools/rust/update_rust.py +++ b/tools/rust/update_rust.py
@@ -31,7 +31,7 @@ # These fields are written by //tools/clang/scripts/upload_revision.py, and # should not be changed manually. -RUST_REVISION = 'a522d78598415cdd614ccc6d961160f192f64b5c' +RUST_REVISION = '8a1f8039a7ded79d3d4fe97b110016d89f2b11e2' RUST_SUB_REVISION = 1 # The revision of Crubit to use from https://github.com/google/crubit
diff --git a/ui/accessibility/platform/atk_util_auralinux_unittest.cc b/ui/accessibility/platform/atk_util_auralinux_unittest.cc index 1c179c6d..287c40e 100644 --- a/ui/accessibility/platform/atk_util_auralinux_unittest.cc +++ b/ui/accessibility/platform/atk_util_auralinux_unittest.cc
@@ -58,10 +58,11 @@ }; TEST_F(AtkUtilAuraLinuxTest, KeySnooping) { - AtkKeySnoopFunc key_snoop_func = reinterpret_cast<AtkKeySnoopFunc>( - +[](AtkKeyEventStruct* key_event, int* keyval_seen) { - *keyval_seen = key_event->keyval; - }); + AtkKeySnoopFunc key_snoop_func = [](AtkKeyEventStruct* key_event, + void* keyval_seen) -> int { + *static_cast<int*>(keyval_seen) = key_event->keyval; + return FALSE; + }; int keyval_seen = 0; guint listener_id = atk_add_key_event_listener(key_snoop_func, &keyval_seen); @@ -111,8 +112,8 @@ // In a normal browser execution, when a key event listener is added it means // the AT-SPI bridge has done it as part of its initialization, so it is set // as enabled. - AtkKeySnoopFunc key_snoop_func = - reinterpret_cast<AtkKeySnoopFunc>(+[](AtkKeyEventStruct* key_event) {}); + AtkKeySnoopFunc key_snoop_func = [](AtkKeyEventStruct* key_event, + void* user_data) -> int { return FALSE; }; atk_add_key_event_listener(key_snoop_func, nullptr); EXPECT_TRUE(atk_util->IsAtSpiReady());
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb index 311e793f..0599fa1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -68,7 +68,7 @@ <translation id="1547964879613821194">ಕೆನೆಡಿಯನ್ ಇಂಗ್ಲಿಷ್</translation> <translation id="1556189134700913550">ಎಲ್ಲಕ್ಕೂ ಅನ್ವಯಿಸು</translation> <translation id="1561842594491319104">Chrome ಸಾಧನಗಳು</translation> -<translation id="1572585716423026576">ವಾಲ್ಪೇಪರ್ ಆಗಿ ಹೊಂದಿಸಿ</translation> +<translation id="1572585716423026576">ವಾಲ್ಪೇಪರ್ ಆಗಿ ಸೆಟ್ ಮಾಡಿ</translation> <translation id="1576937952766665062">ಬಾಂಗ್ಲಾ ಲಿಪ್ಯಂತರಣ</translation> <translation id="1577977504532381335">ನಿರ್ವಾಹಕರ ನೀತಿಯನ್ನು ಪರಿಶೀಲಿಸಿ</translation> <translation id="158849752021629804">ಹೋಮ್ ನೆಟ್ವರ್ಕ್ ಅಗತ್ಯವಿದೆ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb index 694ee1a8..22174a3 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -329,7 +329,7 @@ <translation id="3603385196401704894">kanadska francuska</translation> <translation id="3606220979431771195">turska F</translation> <translation id="3616113530831147358">Audio</translation> -<translation id="3619115746895587757">Kapučino</translation> +<translation id="3619115746895587757">Kapućino</translation> <translation id="3619593063686672873">Nema nedavnih videa</translation> <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />. mreža od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, upravlja administrator, detalji</translation> <translation id="36451918667380448">Usluga ovog mobilnog provajdera je zaključana. Zatražite podršku od njega.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb index 743a632..c6b485d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -329,7 +329,7 @@ <translation id="3603385196401704894">канадска француска</translation> <translation id="3606220979431771195">турска F</translation> <translation id="3616113530831147358">Аудио</translation> -<translation id="3619115746895587757">Капучино</translation> +<translation id="3619115746895587757">Капућино</translation> <translation id="3619593063686672873">Нема недавних видеа</translation> <translation id="3634507049637220048"><ph name="NETWORK_INDEX" />. мрежа од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="CONNECTION_STATUS" />, управља администратор, детаљи</translation> <translation id="36451918667380448">Услуга овог мобилног провајдера је закључана. Затражите подршку од њега.</translation>
diff --git a/ui/views/controls/button/label_button.h b/ui/views/controls/button/label_button.h index 4a6ec63..fdfc7cc 100644 --- a/ui/views/controls/button/label_button.h +++ b/ui/views/controls/button/label_button.h
@@ -188,6 +188,10 @@ // widget, and the parent of the containing widget. ButtonState GetVisualState() const; + bool has_paint_as_active_subscription_for_testing() { + return !!paint_as_active_subscription_; + } + protected: LabelButtonImageContainer* image_container() { return image_container_.get();
diff --git a/v8 b/v8 index 3d61ee5..8d90bc0 160000 --- a/v8 +++ b/v8
@@ -1 +1 @@ -Subproject commit 3d61ee54508da90257a11fca00f5542d84c5ba96 +Subproject commit 8d90bc07afaf3d2a0b8fabb44ebc6dcec67e02ad